signal-desktop/libtextsecure/test/account_manager_test.js

189 lines
4.6 KiB
JavaScript
Raw Normal View History

2020-10-30 20:34:04 +00:00
// Copyright 2017-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
/* global libsignal */
2018-07-21 21:51:20 +00:00
describe('AccountManager', () => {
let accountManager;
2018-07-21 21:51:20 +00:00
beforeEach(() => {
accountManager = new window.textsecure.AccountManager();
});
2018-07-21 21:51:20 +00:00
describe('#cleanSignedPreKeys', () => {
let originalProtocolStorage;
let signedPreKeys;
const DAY = 1000 * 60 * 60 * 24;
beforeEach(async () => {
const identityKey = await libsignal.KeyHelper.generateIdentityKeyPair();
originalProtocolStorage = window.textsecure.storage.protocol;
window.textsecure.storage.protocol = {
getIdentityKeyPair() {
return identityKey;
},
2018-07-21 21:51:20 +00:00
loadSignedPreKeys() {
return Promise.resolve(signedPreKeys);
},
};
});
2018-07-21 21:51:20 +00:00
afterEach(() => {
window.textsecure.storage.protocol = originalProtocolStorage;
});
describe('encrypted device name', () => {
it('roundtrips', async () => {
const deviceName = 'v2.5.0 on Ubunto 20.04';
const encrypted = await accountManager.encryptDeviceName(deviceName);
assert.strictEqual(typeof encrypted, 'string');
const decrypted = await accountManager.decryptDeviceName(encrypted);
assert.strictEqual(decrypted, deviceName);
});
it('handles null deviceName', async () => {
const encrypted = await accountManager.encryptDeviceName(null);
assert.strictEqual(encrypted, null);
});
});
it('keeps three confirmed keys even if over a month old', () => {
const now = Date.now();
2018-05-02 16:51:22 +00:00
signedPreKeys = [
{
keyId: 1,
created_at: now - DAY * 32,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 2,
created_at: now - DAY * 34,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 3,
created_at: now - DAY * 38,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
];
// should be no calls to store.removeSignedPreKey, would cause crash
return accountManager.cleanSignedPreKeys();
});
it('eliminates confirmed keys over a month old, if more than three', async () => {
const now = Date.now();
2018-05-02 16:51:22 +00:00
signedPreKeys = [
{
keyId: 1,
created_at: now - DAY * 32,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 2,
created_at: now - DAY * 31,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 3,
created_at: now - DAY * 24,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 4,
created_at: now - DAY * 38,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 5,
created_at: now - DAY,
confirmed: true,
},
];
let count = 0;
2018-11-02 18:02:53 +00:00
window.textsecure.storage.protocol.removeSignedPreKey = keyId => {
if (keyId !== 1 && keyId !== 4) {
2018-07-21 21:51:20 +00:00
throw new Error(`Wrong keys were eliminated! ${keyId}`);
}
2018-11-02 18:02:53 +00:00
count += 1;
};
2018-11-02 18:02:53 +00:00
await accountManager.cleanSignedPreKeys();
assert.strictEqual(count, 2);
});
2018-11-02 18:02:53 +00:00
it('keeps at least three unconfirmed keys if no confirmed', async () => {
const now = Date.now();
2018-05-02 16:51:22 +00:00
signedPreKeys = [
{
keyId: 1,
created_at: now - DAY * 32,
2018-05-02 16:51:22 +00:00
},
{
keyId: 2,
created_at: now - DAY * 44,
2018-05-02 16:51:22 +00:00
},
{
keyId: 3,
created_at: now - DAY * 36,
2018-05-02 16:51:22 +00:00
},
{
keyId: 4,
created_at: now - DAY * 20,
2018-05-02 16:51:22 +00:00
},
];
let count = 0;
2018-11-02 18:02:53 +00:00
window.textsecure.storage.protocol.removeSignedPreKey = keyId => {
if (keyId !== 2) {
2018-07-21 21:51:20 +00:00
throw new Error(`Wrong keys were eliminated! ${keyId}`);
}
2018-11-02 18:02:53 +00:00
count += 1;
};
2018-11-02 18:02:53 +00:00
await accountManager.cleanSignedPreKeys();
assert.strictEqual(count, 1);
});
2018-11-02 18:02:53 +00:00
it('if some confirmed keys, keeps unconfirmed to addd up to three total', async () => {
const now = Date.now();
2018-05-02 16:51:22 +00:00
signedPreKeys = [
{
keyId: 1,
created_at: now - DAY * 32,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 2,
created_at: now - DAY * 44,
2018-05-02 16:51:22 +00:00
confirmed: true,
},
{
keyId: 3,
created_at: now - DAY * 36,
2018-05-02 16:51:22 +00:00
},
{
keyId: 4,
created_at: now - DAY * 20,
2018-05-02 16:51:22 +00:00
},
];
let count = 0;
2018-11-02 18:02:53 +00:00
window.textsecure.storage.protocol.removeSignedPreKey = keyId => {
if (keyId !== 3) {
2018-07-21 21:51:20 +00:00
throw new Error(`Wrong keys were eliminated! ${keyId}`);
}
2018-11-02 18:02:53 +00:00
count += 1;
};
2018-11-02 18:02:53 +00:00
await accountManager.cleanSignedPreKeys();
assert.strictEqual(count, 1);
});
});
});