1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-12-04 05:02:41 +03:00

matrix-client-crypto-spec: reorder

Separate the helper functions from the tests, and order them by functionality
rather than by test order.

I've been struggling to find the tests among the helpers, and struggling to
find the helpers among the other helpers. Hopefully this will help.
This commit is contained in:
Richard van der Hoff
2016-06-21 10:11:02 +01:00
parent 573a9140d3
commit cb6566a198

View File

@@ -18,12 +18,6 @@ MockStorageApi.prototype = {
} }
}; };
describe("MatrixClient crypto", function() {
if (!sdk.CRYPTO_ENABLED) {
return;
}
var baseUrl = "http://localhost.or.something";
var aliHttpBackend; var aliHttpBackend;
var bobHttpBackend; var bobHttpBackend;
var aliClient; var aliClient;
@@ -46,49 +40,21 @@ describe("MatrixClient crypto", function() {
var aliMessages; var aliMessages;
var bobMessages; var bobMessages;
beforeEach(function() {
aliLocalStore = new MockStorageApi();
aliStorage = new sdk.WebStorageSessionStore(aliLocalStore);
bobStorage = new sdk.WebStorageSessionStore(new MockStorageApi());
utils.beforeEach(this);
aliHttpBackend = new HttpBackend(); function aliUploadsKeys() {
aliClient = sdk.createClient({ var uploadPath = "/keys/upload/" + aliDeviceId;
baseUrl: baseUrl, aliHttpBackend.when("POST", uploadPath).respond(200, function(path, content) {
userId: aliUserId, expect(content.one_time_keys).toEqual({});
accessToken: aliAccessToken, aliDeviceKeys = content.device_keys;
deviceId: aliDeviceId, return {one_time_key_counts: {curve25519: 0}};
sessionStore: aliStorage,
request: aliHttpBackend.requestFn,
});
bobHttpBackend = new HttpBackend();
bobClient = sdk.createClient({
baseUrl: baseUrl,
userId: bobUserId,
accessToken: bobAccessToken,
deviceId: bobDeviceId,
sessionStore: bobStorage,
request: bobHttpBackend.requestFn,
});
aliMessages = [];
bobMessages = [];
});
afterEach(function() {
aliClient.stopClient();
bobClient.stopClient();
});
describe("Ali account setup", function() {
it("should have device keys", function(done) {
expect(aliClient.deviceKeys).toBeDefined();
expect(aliClient.deviceKeys.user_id).toEqual(aliUserId);
expect(aliClient.deviceKeys.device_id).toEqual(aliDeviceId);
done();
}); });
return q.all([
aliClient.uploadKeys(0),
aliHttpBackend.flush(uploadPath, 1),
]).then(function() {
console.log("ali uploaded keys");
}); });
}
function bobUploadsKeys() { function bobUploadsKeys() {
var uploadPath = "/keys/upload/bvcxz"; var uploadPath = "/keys/upload/bvcxz";
@@ -118,12 +84,6 @@ describe("MatrixClient crypto", function() {
}); });
} }
it("Bob uploads without one-time keys and with one-time keys", function(done) {
q()
.then(bobUploadsKeys)
.catch(utils.failTest).done(done);
});
function aliDownloadsKeys() { function aliDownloadsKeys() {
var bobKeys = {}; var bobKeys = {};
bobKeys[bobDeviceId] = bobDeviceKeys; bobKeys[bobDeviceId] = bobDeviceKeys;
@@ -149,12 +109,20 @@ describe("MatrixClient crypto", function() {
}); });
} }
it("Ali downloads Bobs keys", function(done) { function bobDownloadsKeys() {
q() var aliKeys = {};
.then(bobUploadsKeys) aliKeys[aliDeviceId] = aliDeviceKeys;
.then(aliDownloadsKeys) bobHttpBackend.when("POST", "/keys/query").respond(200, function(path, content) {
.catch(utils.failTest).done(done); expect(content.device_keys[aliUserId]).toEqual({});
var result = {};
result[aliUserId] = aliKeys;
return {device_keys: result};
}); });
return q.all([
bobClient.downloadKeys([aliUserId]),
bobHttpBackend.flush(),
]);
}
function aliEnablesEncryption() { function aliEnablesEncryption() {
aliHttpBackend.when("POST", "/keys/claim").respond(200, function(path, content) { aliHttpBackend.when("POST", "/keys/claim").respond(200, function(path, content) {
@@ -184,13 +152,36 @@ describe("MatrixClient crypto", function() {
return p; return p;
} }
it("Ali enables encryption", function(done) { function bobEnablesEncryption() {
q() return bobClient.setRoomEncryption(roomId, {
.then(bobUploadsKeys) algorithm: "m.olm.v1.curve25519-aes-sha2",
.then(aliDownloadsKeys) members: [aliUserId, bobUserId]
.then(aliEnablesEncryption) }).then(function(res) {
.catch(utils.failTest).done(done); console.log("bob enabled encryption");
expect(res.missingUsers).toEqual([]);
expect(res.missingDevices).toEqual({});
expect(bobClient.isRoomEncrypted(roomId)).toBeTruthy();
}); });
}
function aliSendsMessage() {
return sendMessage(aliHttpBackend, aliClient).then(function(content) {
aliMessages.push(content);
var ciphertext = content.ciphertext[bobDeviceCurve25519Key];
expect(ciphertext).toBeDefined();
});
}
function bobSendsMessage() {
return sendMessage(bobHttpBackend, bobClient).then(function(content) {
bobMessages.push(content);
var aliKeyId = "curve25519:" + aliDeviceId;
var aliDeviceCurve25519Key = aliDeviceKeys.keys[aliKeyId];
var ciphertext = content.ciphertext[aliDeviceCurve25519Key];
expect(ciphertext).toBeDefined();
return ciphertext;
});
}
function sendMessage(httpBackend, client) { function sendMessage(httpBackend, client) {
var path = "/send/m.room.encrypted/"; var path = "/send/m.room.encrypted/";
@@ -210,27 +201,14 @@ describe("MatrixClient crypto", function() {
}); });
} }
function aliSendsMessage() { function aliRecvMessage() {
return sendMessage(aliHttpBackend, aliClient).then(function(content) { var message = bobMessages.shift();
aliMessages.push(content); return recvMessage(aliHttpBackend, aliClient, message);
var ciphertext = content.ciphertext[bobDeviceCurve25519Key];
expect(ciphertext).toBeDefined();
});
} }
it("Ali sends a message", function(done) { function bobRecvMessage() {
q() var message = aliMessages.shift();
.then(bobUploadsKeys) return recvMessage(bobHttpBackend, bobClient, message);
.then(aliDownloadsKeys)
.then(aliEnablesEncryption)
.then(aliSendsMessage)
.catch(utils.failTest).done(done);
});
function startClient(httpBackend, client) {
client.startClient();
httpBackend.when("GET", "/pushrules").respond(200, {});
httpBackend.when("POST", "/filter").respond(200, { filter_id: "fid" });
} }
function recvMessage(httpBackend, client, message) { function recvMessage(httpBackend, client, message) {
@@ -269,11 +247,92 @@ describe("MatrixClient crypto", function() {
return deferred.promise; return deferred.promise;
} }
function bobRecvMessage() { function startClient(httpBackend, client) {
var message = aliMessages.shift(); client.startClient();
return recvMessage(bobHttpBackend, bobClient, message); httpBackend.when("GET", "/pushrules").respond(200, {});
httpBackend.when("POST", "/filter").respond(200, { filter_id: "fid" });
} }
describe("MatrixClient crypto", function() {
if (!sdk.CRYPTO_ENABLED) {
return;
}
beforeEach(function() {
aliLocalStore = new MockStorageApi();
aliStorage = new sdk.WebStorageSessionStore(aliLocalStore);
bobStorage = new sdk.WebStorageSessionStore(new MockStorageApi());
utils.beforeEach(this);
aliHttpBackend = new HttpBackend();
aliClient = sdk.createClient({
baseUrl: "http://alis.server",
userId: aliUserId,
accessToken: aliAccessToken,
deviceId: aliDeviceId,
sessionStore: aliStorage,
request: aliHttpBackend.requestFn,
});
bobHttpBackend = new HttpBackend();
bobClient = sdk.createClient({
baseUrl: "http://bobs.server",
userId: bobUserId,
accessToken: bobAccessToken,
deviceId: bobDeviceId,
sessionStore: bobStorage,
request: bobHttpBackend.requestFn,
});
aliMessages = [];
bobMessages = [];
});
afterEach(function() {
aliClient.stopClient();
bobClient.stopClient();
});
describe("Ali account setup", function() {
it("should have device keys", function(done) {
expect(aliClient.deviceKeys).toBeDefined();
expect(aliClient.deviceKeys.user_id).toEqual(aliUserId);
expect(aliClient.deviceKeys.device_id).toEqual(aliDeviceId);
done();
});
});
it("Bob uploads without one-time keys and with one-time keys", function(done) {
q()
.then(bobUploadsKeys)
.catch(utils.failTest).done(done);
});
it("Ali downloads Bobs keys", function(done) {
q()
.then(bobUploadsKeys)
.then(aliDownloadsKeys)
.catch(utils.failTest).done(done);
});
it("Ali enables encryption", function(done) {
q()
.then(bobUploadsKeys)
.then(aliDownloadsKeys)
.then(aliEnablesEncryption)
.catch(utils.failTest).done(done);
});
it("Ali sends a message", function(done) {
q()
.then(bobUploadsKeys)
.then(aliDownloadsKeys)
.then(aliEnablesEncryption)
.then(aliSendsMessage)
.catch(utils.failTest).done(done);
});
it("Bob receives a message", function(done) { it("Bob receives a message", function(done) {
q() q()
.then(bobUploadsKeys) .then(bobUploadsKeys)
@@ -296,66 +355,6 @@ describe("MatrixClient crypto", function() {
.catch(utils.failTest).done(done); .catch(utils.failTest).done(done);
}); });
function aliUploadsKeys() {
var uploadPath = "/keys/upload/" + aliDeviceId;
aliHttpBackend.when("POST", uploadPath).respond(200, function(path, content) {
expect(content.one_time_keys).toEqual({});
aliDeviceKeys = content.device_keys;
return {one_time_key_counts: {curve25519: 0}};
});
return q.all([
aliClient.uploadKeys(0),
aliHttpBackend.flush(uploadPath, 1),
]).then(function() {
console.log("ali uploaded keys");
});
}
function bobDownloadsKeys() {
var aliKeys = {};
aliKeys[aliDeviceId] = aliDeviceKeys;
bobHttpBackend.when("POST", "/keys/query").respond(200, function(path, content) {
expect(content.device_keys[aliUserId]).toEqual({});
var result = {};
result[aliUserId] = aliKeys;
return {device_keys: result};
});
return q.all([
bobClient.downloadKeys([aliUserId]),
bobHttpBackend.flush(),
]);
}
function bobEnablesEncryption() {
return bobClient.setRoomEncryption(roomId, {
algorithm: "m.olm.v1.curve25519-aes-sha2",
members: [aliUserId, bobUserId]
}).then(function(res) {
console.log("bob enabled encryption");
expect(res.missingUsers).toEqual([]);
expect(res.missingDevices).toEqual({});
expect(bobClient.isRoomEncrypted(roomId)).toBeTruthy();
});
}
function bobSendsMessage() {
return sendMessage(bobHttpBackend, bobClient).then(function(content) {
bobMessages.push(content);
var aliKeyId = "curve25519:" + aliDeviceId;
var aliDeviceCurve25519Key = aliDeviceKeys.keys[aliKeyId];
var ciphertext = content.ciphertext[aliDeviceCurve25519Key];
expect(ciphertext).toBeDefined();
return ciphertext;
});
}
function aliRecvMessage() {
var message = bobMessages.shift();
return recvMessage(aliHttpBackend, aliClient, message);
}
it("Bob replies to the message", function(done) { it("Bob replies to the message", function(done) {
q() q()
.then(bobUploadsKeys) .then(bobUploadsKeys)