From 319ca5123e5d4fea1f61688dc620b8afd4d11a65 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Wed, 22 Jul 2015 11:34:38 +0100 Subject: [PATCH] Return device key list in a stable order, add a check for the list in the tests --- lib/client.js | 25 ++++++++++++++++--------- spec/integ/matrix-client-crypto.spec.js | 9 ++++++++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/client.js b/lib/client.js index 25ba7a99b..d9ff2425b 100644 --- a/lib/client.js +++ b/lib/client.js @@ -267,16 +267,23 @@ MatrixClient.prototype.listDeviceKeys = function(userId) { var devices = this.sessionStore.getEndToEndDevicesForUser(userId); var result = []; if (devices) { - for (var deviceId in devices) { + var deviceId; + var deviceIds = []; + for (deviceId in devices) { if (devices.hasOwnProperty(deviceId)) { - var device = devices[deviceId]; - var ed25519Key = device.keys["ed25519:" + deviceId]; - if (ed25519Key) { - result.push({ - id: deviceId, - key: ed25519Key - }); - } + deviceIds.push(deviceId); + } + } + deviceIds.sort(); + for (var i = 0; i < deviceIds.length; ++i) { + deviceId = deviceIds[i]; + var device = devices[deviceId]; + var ed25519Key = device.keys["ed25519:" + deviceId]; + if (ed25519Key) { + result.push({ + id: deviceId, + key: ed25519Key + }); } } } diff --git a/spec/integ/matrix-client-crypto.spec.js b/spec/integ/matrix-client-crypto.spec.js index 4d34eb7a6..27d5914e0 100644 --- a/spec/integ/matrix-client-crypto.spec.js +++ b/spec/integ/matrix-client-crypto.spec.js @@ -32,6 +32,7 @@ describe("MatrixClient crypto", function() { var bobOneTimeKeys; var bobDeviceKeys; var bobDeviceCurve25519Key; + var bobDeviceEd25519Key; var aliLocalStore; var aliStorage; var bobStorage; @@ -101,6 +102,7 @@ describe("MatrixClient crypto", function() { expect(bobDeviceKeys).toBeDefined(); expect(bobOneTimeKeys).toBeDefined(); bobDeviceCurve25519Key = bobDeviceKeys.keys["curve25519:bvcxz"]; + bobDeviceEd25519Key = bobDeviceKeys.keys["ed25519:bvcxz"]; done(); }); } @@ -116,7 +118,12 @@ describe("MatrixClient crypto", function() { result[bobUserId] = bobKeys; return {device_keys: result}; }); - aliClient.downloadKeys([bobUserId]); + aliClient.downloadKeys([bobUserId]).then(function() { + expect(aliClient.listDeviceKeys(bobUserId)).toEqual([{ + id: "bvcxz", + key: bobDeviceEd25519Key + }]); + }); httpBackend.flush().done(function() { var devices = aliStorage.getEndToEndDevicesForUser(bobUserId); expect(devices).toEqual(bobKeys);