You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/test/session/sending/MessageQueue_test.ts

162 lines
4.7 KiB
TypeScript

5 years ago
import { expect } from 'chai';
5 years ago
import * as sinon from 'sinon';
5 years ago
import * as _ from 'lodash';
5 years ago
import { GroupUtils, MessageUtils } from '../../../session/utils';
import { TestUtils, Stubs } from '../../../test/test-utils';
import { MessageQueue } from '../../../session/sending/MessageQueue';
import {
generateChatMessage,
generateFakePubkey,
generateMemberList,
generateOpenGroupMessage,
} from '../../test-utils/testUtils';
import { getGroupMembers } from '../../../session/utils/Groups';
import { OpenGroupMessage } from '../../../session/messages/outgoing';
import { RawMessage } from '../../../session/types';
import { UserUtil } from '../../../util';
import { MessageSender } from '../../../session/sending';
import { sendToOpenGroup } from '../../../session/sending/MessageSender';
5 years ago
// Equivalent to Data.StorageItem
interface StorageItem {
id: string;
value: any;
}
5 years ago
describe('MessageQueue', () => {
5 years ago
const sandbox = sinon.createSandbox();
const ourNumber = generateFakePubkey().key;
5 years ago
// Initialize new stubbed cache
let data: StorageItem;
let messageQueueStub: MessageQueue;
5 years ago
let sendStub: sinon.SinonStub<[RawMessage, (number | undefined)?]>;
let sendToOpenGroupStub: sinon.SinonStub<[OpenGroupMessage]>;
5 years ago
beforeEach(async () => {
5 years ago
sandbox.stub(UserUtil, 'getCurrentDevicePubKey').resolves(ourNumber);
// PendingMessageCache stubs
5 years ago
const storageID = 'pendingMessages';
data = {
id: storageID,
value: '[]',
};
TestUtils.stubData('getItemById')
.withArgs('pendingMessages')
.callsFake(async () => {
return data;
});
TestUtils.stubData('createOrUpdateItem').callsFake((item: StorageItem) => {
if (item.id === storageID) {
data = item;
}
});
5 years ago
TestUtils.stubData('getPairedDevicesFor').callsFake(async () => {
return generateMemberList(2);
});
TestUtils.stubWindow('libsignal', {
SignalProtocolAddress: sandbox.stub(),
SessionCipher: Stubs.SessionCipherStub,
} as any);
// Other stubs
sendStub = sandbox.stub(MessageSender, 'send').resolves(undefined);
sendToOpenGroupStub = sandbox.stub(MessageSender, 'sendToOpenGroup').resolves(true);
sandbox.stub(GroupUtils, 'getGroupMembers').callsFake(
async () =>
new Promise(r => {
r(generateMemberList(10));
})
);
5 years ago
messageQueueStub = new MessageQueue();
});
afterEach(() => {
TestUtils.restoreStubs();
5 years ago
sandbox.restore();
5 years ago
});
it('can send to many devices', async () => {
5 years ago
const devices = generateMemberList(10);
5 years ago
const message = generateChatMessage();
await messageQueueStub.sendMessageToDevices(devices, message);
5 years ago
// Failure will make an error; check messageQueueStub.events
5 years ago
});
it('can send using multidevice', async () => {
const device = generateFakePubkey();
const message = generateChatMessage();
await messageQueueStub.sendUsingMultiDevice(device, message);
5 years ago
// Failure will make an error; check messageQueueStub.events
5 years ago
});
5 years ago
it('can send to open group', async () => {
const message = generateOpenGroupMessage();
const success = await messageQueueStub.sendToGroup(message);
5 years ago
expect(success).to.equal(true, 'sending to group failed');
5 years ago
// Failure will make an error; check messageQueueStub.events
});
5 years ago
it('can send to closed group', async () => {
const message = generateOpenGroupMessage();
const success = await messageQueueStub.sendToGroup(message);
5 years ago
expect(success).to.equal(true, 'sending to group failed');
5 years ago
// Failure will make an error; check messageQueueStub.events
});
5 years ago
it('can send to open group', async () => {
const message = generateOpenGroupMessage();
5 years ago
5 years ago
await messageQueueStub.sendToGroup(message);
5 years ago
5 years ago
// Failure will make an error; check messageQueueStub.events
});
5 years ago
it('wont send wrong message type to group', async () => {
// Regular chat message should return false
const message = generateChatMessage();
const response = await messageQueueStub.sendToGroup(message);
expect(response).to.equal(
false,
'sendToGroup considered an invalid message type as valid'
);
// Failure will make an error; check messageQueueStub.events
5 years ago
});
it("won't process invalid message", async () => {
5 years ago
// SHOULD make an error; expect error
// EXAMPLE FROM MESSAGESENDER_TEST
// it('should not retry if an error occurred during encryption', async () => {
// encryptStub.throws(new Error('Failed to encrypt.'));
// const promise = MessageSender.send(rawMessage);
// await expect(promise).is.rejectedWith('Failed to encrypt.');
// expect(lokiMessageAPIStub.sendMessage.callCount).to.equal(0);
// });
5 years ago
});
5 years ago
it('can send sync message', async () => {
});
5 years ago
});