2021-04-07 11:04:30 +10:00
|
|
|
import { expect } from 'chai';
|
2021-07-12 13:13:00 +10:00
|
|
|
import debug from 'debug';
|
2021-04-07 11:04:30 +10:00
|
|
|
|
2021-07-12 13:13:00 +10:00
|
|
|
import {
|
|
|
|
|
makeLogFileName,
|
|
|
|
|
NimWaku,
|
|
|
|
|
NOISE_KEY_1,
|
|
|
|
|
NOISE_KEY_2,
|
|
|
|
|
} from '../../test_utils';
|
|
|
|
|
import { delay } from '../delay';
|
2021-05-10 15:26:14 +10:00
|
|
|
import { Waku } from '../waku';
|
2022-01-17 14:11:05 +11:00
|
|
|
import { DecryptionMethod, WakuMessage } from '../waku_message';
|
2021-08-30 20:41:18 +10:00
|
|
|
import {
|
|
|
|
|
generatePrivateKey,
|
|
|
|
|
generateSymmetricKey,
|
|
|
|
|
getPublicKey,
|
|
|
|
|
} from '../waku_message/version_1';
|
2021-04-07 11:04:30 +10:00
|
|
|
|
2021-10-04 12:21:13 +11:00
|
|
|
import { PageDirection } from './history_rpc';
|
2021-05-17 16:11:01 +10:00
|
|
|
|
2022-01-19 15:43:45 +11:00
|
|
|
import { StoreCodec } from './index';
|
|
|
|
|
|
2021-07-12 13:13:00 +10:00
|
|
|
const dbg = debug('waku:test:store');
|
|
|
|
|
|
2021-07-28 11:19:24 +10:00
|
|
|
const TestContentTopic = '/test/1/waku-store/utf8';
|
|
|
|
|
|
2021-04-07 11:04:30 +10:00
|
|
|
describe('Waku Store', () => {
|
|
|
|
|
let waku: Waku;
|
|
|
|
|
let nimWaku: NimWaku;
|
|
|
|
|
|
|
|
|
|
afterEach(async function () {
|
|
|
|
|
nimWaku ? nimWaku.stop() : null;
|
|
|
|
|
waku ? await waku.stop() : null;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('Retrieves history', async function () {
|
2021-04-13 11:47:15 +10:00
|
|
|
this.timeout(5_000);
|
|
|
|
|
|
2021-04-15 14:28:18 +10:00
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
2021-05-06 10:37:12 +10:00
|
|
|
await nimWaku.start({ persistMessages: true });
|
2021-04-15 14:28:18 +10:00
|
|
|
|
2021-04-13 11:47:15 +10:00
|
|
|
for (let i = 0; i < 2; i++) {
|
2021-05-06 10:36:36 +10:00
|
|
|
expect(
|
2021-07-07 11:23:56 +10:00
|
|
|
await nimWaku.sendMessage(
|
2021-07-28 11:19:24 +10:00
|
|
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
2021-07-07 11:23:56 +10:00
|
|
|
)
|
2021-05-06 10:36:36 +10:00
|
|
|
).to.be.true;
|
2021-04-13 11:47:15 +10:00
|
|
|
}
|
|
|
|
|
|
2021-04-15 11:19:26 +10:00
|
|
|
waku = await Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
});
|
2021-04-13 11:47:15 +10:00
|
|
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
2022-01-19 15:43:45 +11:00
|
|
|
await waku.waitForConnectedPeer([[StoreCodec]]);
|
2021-08-04 11:59:53 +10:00
|
|
|
const messages = await waku.store.queryHistory([]);
|
2021-04-07 11:04:30 +10:00
|
|
|
|
2021-04-13 10:36:22 +10:00
|
|
|
expect(messages?.length).eq(2);
|
2021-04-13 12:51:04 +10:00
|
|
|
const result = messages?.findIndex((msg) => {
|
2021-05-03 16:26:02 +10:00
|
|
|
return msg.payloadAsUtf8 === 'Message 0';
|
2021-04-13 12:51:04 +10:00
|
|
|
});
|
2021-04-07 11:04:30 +10:00
|
|
|
expect(result).to.not.eq(-1);
|
|
|
|
|
});
|
2021-04-13 11:47:15 +10:00
|
|
|
|
2021-10-07 15:33:00 +11:00
|
|
|
it('Retrieves history using callback', async function () {
|
|
|
|
|
this.timeout(5_000);
|
|
|
|
|
|
|
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
|
|
|
|
await nimWaku.start({ persistMessages: true });
|
|
|
|
|
|
|
|
|
|
const totalMsgs = 20;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < totalMsgs; i++) {
|
|
|
|
|
expect(
|
|
|
|
|
await nimWaku.sendMessage(
|
|
|
|
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
|
|
|
|
)
|
|
|
|
|
).to.be.true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waku = await Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
});
|
|
|
|
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
2022-01-19 15:43:45 +11:00
|
|
|
await waku.waitForConnectedPeer([[StoreCodec]]);
|
2021-10-07 15:33:00 +11:00
|
|
|
|
|
|
|
|
let messages: WakuMessage[] = [];
|
|
|
|
|
|
|
|
|
|
await waku.store.queryHistory([], {
|
|
|
|
|
callback: (_msgs) => {
|
|
|
|
|
messages = messages.concat(_msgs);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(messages?.length).eq(totalMsgs);
|
|
|
|
|
const result = messages?.findIndex((msg) => {
|
|
|
|
|
return msg.payloadAsUtf8 === 'Message 0';
|
|
|
|
|
});
|
|
|
|
|
expect(result).to.not.eq(-1);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('Retrieval aborts when callback returns true', async function () {
|
|
|
|
|
this.timeout(5_000);
|
|
|
|
|
|
|
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
|
|
|
|
await nimWaku.start({ persistMessages: true });
|
|
|
|
|
|
|
|
|
|
const availMsgs = 20;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < availMsgs; i++) {
|
|
|
|
|
expect(
|
|
|
|
|
await nimWaku.sendMessage(
|
|
|
|
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
|
|
|
|
)
|
|
|
|
|
).to.be.true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waku = await Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
});
|
|
|
|
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
2022-01-19 15:43:45 +11:00
|
|
|
await waku.waitForConnectedPeer([[StoreCodec]]);
|
2021-10-07 15:33:00 +11:00
|
|
|
|
|
|
|
|
let messages: WakuMessage[] = [];
|
|
|
|
|
const desiredMsgs = 14;
|
|
|
|
|
|
|
|
|
|
await waku.store.queryHistory([], {
|
|
|
|
|
pageSize: 7,
|
|
|
|
|
callback: (_msgs) => {
|
|
|
|
|
messages = messages.concat(_msgs);
|
|
|
|
|
return messages.length >= desiredMsgs;
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(messages?.length).eq(desiredMsgs);
|
|
|
|
|
});
|
|
|
|
|
|
2021-04-13 14:58:21 +10:00
|
|
|
it('Retrieves all historical elements in chronological order through paging', async function () {
|
2021-04-13 11:47:15 +10:00
|
|
|
this.timeout(5_000);
|
|
|
|
|
|
2021-04-15 14:28:18 +10:00
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
2021-05-06 10:37:12 +10:00
|
|
|
await nimWaku.start({ persistMessages: true });
|
2021-04-15 14:28:18 +10:00
|
|
|
|
2021-04-13 14:48:05 +10:00
|
|
|
for (let i = 0; i < 15; i++) {
|
2021-05-06 10:36:36 +10:00
|
|
|
expect(
|
2021-07-07 11:23:56 +10:00
|
|
|
await nimWaku.sendMessage(
|
2021-07-28 11:19:24 +10:00
|
|
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
2021-07-07 11:23:56 +10:00
|
|
|
)
|
2021-05-06 10:36:36 +10:00
|
|
|
).to.be.true;
|
2021-04-13 11:47:15 +10:00
|
|
|
}
|
|
|
|
|
|
2021-04-15 11:19:26 +10:00
|
|
|
waku = await Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
});
|
2021-04-13 11:47:15 +10:00
|
|
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
2022-01-19 15:43:45 +11:00
|
|
|
await waku.waitForConnectedPeer([[StoreCodec]]);
|
2021-04-15 14:28:18 +10:00
|
|
|
|
2021-08-04 11:59:53 +10:00
|
|
|
const messages = await waku.store.queryHistory([], {
|
2021-10-04 12:21:13 +11:00
|
|
|
pageDirection: PageDirection.FORWARD,
|
2021-05-07 16:10:58 +10:00
|
|
|
});
|
2021-04-13 11:47:15 +10:00
|
|
|
|
2021-04-13 14:48:05 +10:00
|
|
|
expect(messages?.length).eq(15);
|
2021-04-13 14:58:21 +10:00
|
|
|
for (let index = 0; index < 2; index++) {
|
|
|
|
|
expect(
|
|
|
|
|
messages?.findIndex((msg) => {
|
2021-05-03 16:26:02 +10:00
|
|
|
return msg.payloadAsUtf8 === `Message ${index}`;
|
2021-04-13 14:58:21 +10:00
|
|
|
})
|
|
|
|
|
).to.eq(index);
|
|
|
|
|
}
|
2021-04-13 11:47:15 +10:00
|
|
|
});
|
2021-06-09 12:25:56 +10:00
|
|
|
|
|
|
|
|
it('Retrieves history using custom pubsub topic', async function () {
|
|
|
|
|
this.timeout(5_000);
|
|
|
|
|
|
|
|
|
|
const customPubSubTopic = '/waku/2/custom-dapp/proto';
|
|
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
|
|
|
|
await nimWaku.start({ persistMessages: true, topics: customPubSubTopic });
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < 2; i++) {
|
|
|
|
|
expect(
|
|
|
|
|
await nimWaku.sendMessage(
|
2021-07-28 11:19:24 +10:00
|
|
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic),
|
2021-06-09 12:25:56 +10:00
|
|
|
customPubSubTopic
|
|
|
|
|
)
|
|
|
|
|
).to.be.true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waku = await Waku.create({
|
2021-08-20 10:12:19 +10:00
|
|
|
pubSubTopic: customPubSubTopic,
|
2021-06-09 12:25:56 +10:00
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
});
|
|
|
|
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
2022-01-19 15:43:45 +11:00
|
|
|
await waku.waitForConnectedPeer([[StoreCodec]]);
|
2021-06-09 12:25:56 +10:00
|
|
|
|
|
|
|
|
const nimPeerId = await nimWaku.getPeerId();
|
|
|
|
|
|
2021-08-04 11:59:53 +10:00
|
|
|
const messages = await waku.store.queryHistory([], {
|
2021-06-09 12:25:56 +10:00
|
|
|
peerId: nimPeerId,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(messages?.length).eq(2);
|
|
|
|
|
const result = messages?.findIndex((msg) => {
|
|
|
|
|
return msg.payloadAsUtf8 === 'Message 0';
|
|
|
|
|
});
|
|
|
|
|
expect(result).to.not.eq(-1);
|
|
|
|
|
});
|
2021-07-12 13:13:00 +10:00
|
|
|
|
2021-07-15 12:26:05 +10:00
|
|
|
it('Retrieves history with asymmetric & symmetric encrypted messages', async function () {
|
2021-07-12 13:13:00 +10:00
|
|
|
this.timeout(10_000);
|
|
|
|
|
|
|
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
|
|
|
|
await nimWaku.start({ persistMessages: true, lightpush: true });
|
|
|
|
|
|
2021-07-15 12:26:05 +10:00
|
|
|
const encryptedAsymmetricMessageText =
|
|
|
|
|
'This message is encrypted for me using asymmetric';
|
|
|
|
|
const encryptedSymmetricMessageText =
|
|
|
|
|
'This message is encrypted for me using symmetric encryption';
|
2021-07-12 13:13:00 +10:00
|
|
|
const clearMessageText =
|
|
|
|
|
'This is a clear text message for everyone to read';
|
|
|
|
|
const otherEncMessageText =
|
|
|
|
|
'This message is not for and I must not be able to read it';
|
|
|
|
|
|
|
|
|
|
const privateKey = generatePrivateKey();
|
2021-08-30 20:41:18 +10:00
|
|
|
const symKey = generateSymmetricKey();
|
2021-07-12 13:13:00 +10:00
|
|
|
const publicKey = getPublicKey(privateKey);
|
|
|
|
|
|
2021-07-15 12:26:05 +10:00
|
|
|
const [
|
|
|
|
|
encryptedAsymmetricMessage,
|
|
|
|
|
encryptedSymmetricMessage,
|
|
|
|
|
clearMessage,
|
|
|
|
|
otherEncMessage,
|
|
|
|
|
] = await Promise.all([
|
2021-07-28 11:19:24 +10:00
|
|
|
WakuMessage.fromUtf8String(
|
|
|
|
|
encryptedAsymmetricMessageText,
|
|
|
|
|
TestContentTopic,
|
|
|
|
|
{
|
|
|
|
|
encPublicKey: publicKey,
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
WakuMessage.fromUtf8String(
|
|
|
|
|
encryptedSymmetricMessageText,
|
|
|
|
|
TestContentTopic,
|
|
|
|
|
{
|
|
|
|
|
symKey: symKey,
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
WakuMessage.fromUtf8String(clearMessageText, TestContentTopic),
|
|
|
|
|
WakuMessage.fromUtf8String(otherEncMessageText, TestContentTopic, {
|
2021-07-15 12:26:05 +10:00
|
|
|
encPublicKey: getPublicKey(generatePrivateKey()),
|
|
|
|
|
}),
|
|
|
|
|
]);
|
2021-07-12 13:13:00 +10:00
|
|
|
|
|
|
|
|
dbg('Messages have been encrypted');
|
|
|
|
|
|
|
|
|
|
const [waku1, waku2, nimWakuMultiaddr] = await Promise.all([
|
|
|
|
|
Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
}),
|
|
|
|
|
Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_2,
|
|
|
|
|
}),
|
|
|
|
|
nimWaku.getMultiaddrWithId(),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
dbg('Waku nodes created');
|
|
|
|
|
|
|
|
|
|
await Promise.all([
|
|
|
|
|
waku1.dial(nimWakuMultiaddr),
|
|
|
|
|
waku2.dial(nimWakuMultiaddr),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
dbg('Waku nodes connected to nim Waku');
|
|
|
|
|
|
|
|
|
|
let lightPushPeers = waku1.lightPush.peers;
|
|
|
|
|
while (lightPushPeers.length == 0) {
|
|
|
|
|
await delay(100);
|
|
|
|
|
lightPushPeers = waku1.lightPush.peers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dbg('Sending messages using light push');
|
|
|
|
|
await Promise.all([
|
2021-07-15 12:26:05 +10:00
|
|
|
waku1.lightPush.push(encryptedAsymmetricMessage),
|
|
|
|
|
waku1.lightPush.push(encryptedSymmetricMessage),
|
2021-07-12 13:13:00 +10:00
|
|
|
waku1.lightPush.push(otherEncMessage),
|
|
|
|
|
waku1.lightPush.push(clearMessage),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
let storePeers = waku2.store.peers;
|
|
|
|
|
while (storePeers.length == 0) {
|
|
|
|
|
await delay(100);
|
|
|
|
|
storePeers = waku2.store.peers;
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-01 13:55:46 +10:00
|
|
|
waku2.store.addDecryptionKey(symKey);
|
|
|
|
|
|
2021-07-12 13:13:00 +10:00
|
|
|
dbg('Retrieve messages from store');
|
2021-08-04 11:59:53 +10:00
|
|
|
const messages = await waku2.store.queryHistory([], {
|
2021-09-01 13:55:46 +10:00
|
|
|
decryptionKeys: [privateKey],
|
2021-07-12 13:13:00 +10:00
|
|
|
});
|
|
|
|
|
|
2021-07-15 12:26:05 +10:00
|
|
|
expect(messages?.length).eq(3);
|
2021-07-12 13:13:00 +10:00
|
|
|
if (!messages) throw 'Length was tested';
|
|
|
|
|
expect(messages[0].payloadAsUtf8).to.eq(clearMessageText);
|
2022-01-17 14:11:05 +11:00
|
|
|
expect(messages[1].payloadAsUtf8).to.eq(encryptedSymmetricMessageText);
|
|
|
|
|
expect(messages[2].payloadAsUtf8).to.eq(encryptedAsymmetricMessageText);
|
|
|
|
|
|
|
|
|
|
await Promise.all([waku1.stop(), waku2.stop()]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('Retrieves history with asymmetric & symmetric encrypted messages on different content topics', async function () {
|
|
|
|
|
this.timeout(10_000);
|
|
|
|
|
|
|
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
|
|
|
|
await nimWaku.start({ persistMessages: true, lightpush: true });
|
|
|
|
|
|
|
|
|
|
const encryptedAsymmetricMessageText =
|
|
|
|
|
'This message is encrypted for me using asymmetric';
|
|
|
|
|
const encryptedAsymmetricContentTopic = '/test/1/asymmetric/proto';
|
|
|
|
|
const encryptedSymmetricMessageText =
|
|
|
|
|
'This message is encrypted for me using symmetric encryption';
|
|
|
|
|
const encryptedSymmetricContentTopic = '/test/1/symmetric/proto';
|
|
|
|
|
const clearMessageText =
|
|
|
|
|
'This is a clear text message for everyone to read';
|
|
|
|
|
const otherEncMessageText =
|
|
|
|
|
'This message is not for and I must not be able to read it';
|
|
|
|
|
|
|
|
|
|
const privateKey = generatePrivateKey();
|
|
|
|
|
const symKey = generateSymmetricKey();
|
|
|
|
|
const publicKey = getPublicKey(privateKey);
|
|
|
|
|
|
|
|
|
|
const [
|
|
|
|
|
encryptedAsymmetricMessage,
|
|
|
|
|
encryptedSymmetricMessage,
|
|
|
|
|
clearMessage,
|
|
|
|
|
otherEncMessage,
|
|
|
|
|
] = await Promise.all([
|
|
|
|
|
WakuMessage.fromUtf8String(
|
|
|
|
|
encryptedAsymmetricMessageText,
|
|
|
|
|
encryptedAsymmetricContentTopic,
|
|
|
|
|
{
|
|
|
|
|
encPublicKey: publicKey,
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
WakuMessage.fromUtf8String(
|
|
|
|
|
encryptedSymmetricMessageText,
|
|
|
|
|
encryptedSymmetricContentTopic,
|
|
|
|
|
{
|
|
|
|
|
symKey: symKey,
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
WakuMessage.fromUtf8String(
|
|
|
|
|
clearMessageText,
|
|
|
|
|
encryptedAsymmetricContentTopic
|
|
|
|
|
),
|
|
|
|
|
WakuMessage.fromUtf8String(
|
|
|
|
|
otherEncMessageText,
|
|
|
|
|
encryptedSymmetricContentTopic,
|
|
|
|
|
{
|
|
|
|
|
encPublicKey: getPublicKey(generatePrivateKey()),
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
dbg('Messages have been encrypted');
|
|
|
|
|
|
|
|
|
|
const [waku1, waku2, nimWakuMultiaddr] = await Promise.all([
|
|
|
|
|
Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
}),
|
|
|
|
|
Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_2,
|
|
|
|
|
}),
|
|
|
|
|
nimWaku.getMultiaddrWithId(),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
dbg('Waku nodes created');
|
|
|
|
|
|
|
|
|
|
await Promise.all([
|
|
|
|
|
waku1.dial(nimWakuMultiaddr),
|
|
|
|
|
waku2.dial(nimWakuMultiaddr),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
dbg('Waku nodes connected to nim Waku');
|
|
|
|
|
|
|
|
|
|
let lightPushPeers = waku1.lightPush.peers;
|
|
|
|
|
while (lightPushPeers.length == 0) {
|
|
|
|
|
await delay(100);
|
|
|
|
|
lightPushPeers = waku1.lightPush.peers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dbg('Sending messages using light push');
|
|
|
|
|
await Promise.all([
|
|
|
|
|
waku1.lightPush.push(encryptedAsymmetricMessage),
|
|
|
|
|
waku1.lightPush.push(encryptedSymmetricMessage),
|
|
|
|
|
waku1.lightPush.push(otherEncMessage),
|
|
|
|
|
waku1.lightPush.push(clearMessage),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
let storePeers = waku2.store.peers;
|
|
|
|
|
while (storePeers.length == 0) {
|
|
|
|
|
await delay(100);
|
|
|
|
|
storePeers = waku2.store.peers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waku2.addDecryptionKey(symKey, {
|
|
|
|
|
contentTopics: [encryptedSymmetricContentTopic],
|
|
|
|
|
method: DecryptionMethod.Symmetric,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
dbg('Retrieve messages from store');
|
|
|
|
|
const messages = await waku2.store.queryHistory([], {
|
|
|
|
|
decryptionKeys: [privateKey],
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(messages?.length).eq(3);
|
|
|
|
|
if (!messages) throw 'Length was tested';
|
|
|
|
|
expect(messages[0].payloadAsUtf8).to.eq(clearMessageText);
|
2021-07-15 12:26:05 +10:00
|
|
|
expect(messages[1].payloadAsUtf8).to.eq(encryptedSymmetricMessageText);
|
|
|
|
|
expect(messages[2].payloadAsUtf8).to.eq(encryptedAsymmetricMessageText);
|
2021-07-12 13:13:00 +10:00
|
|
|
|
|
|
|
|
await Promise.all([waku1.stop(), waku2.stop()]);
|
|
|
|
|
});
|
2021-08-19 15:49:43 +10:00
|
|
|
|
|
|
|
|
it('Retrieves history using start and end time', async function () {
|
|
|
|
|
this.timeout(5_000);
|
|
|
|
|
|
|
|
|
|
nimWaku = new NimWaku(makeLogFileName(this));
|
|
|
|
|
await nimWaku.start({ persistMessages: true });
|
|
|
|
|
|
|
|
|
|
const startTime = new Date();
|
|
|
|
|
|
|
|
|
|
const message1Timestamp = new Date();
|
|
|
|
|
message1Timestamp.setTime(startTime.getTime() + 60 * 1000);
|
|
|
|
|
const message2Timestamp = new Date();
|
|
|
|
|
message2Timestamp.setTime(startTime.getTime() + 2 * 60 * 1000);
|
|
|
|
|
const messageTimestamps = [message1Timestamp, message2Timestamp];
|
|
|
|
|
|
|
|
|
|
const endTime = new Date();
|
|
|
|
|
endTime.setTime(startTime.getTime() + 3 * 60 * 1000);
|
|
|
|
|
|
|
|
|
|
let firstMessageTime;
|
|
|
|
|
for (let i = 0; i < 2; i++) {
|
|
|
|
|
expect(
|
|
|
|
|
await nimWaku.sendMessage(
|
|
|
|
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic, {
|
|
|
|
|
timestamp: messageTimestamps[i],
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
).to.be.true;
|
|
|
|
|
if (!firstMessageTime) firstMessageTime = Date.now() / 1000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waku = await Waku.create({
|
|
|
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
|
|
|
});
|
|
|
|
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
2022-01-19 15:43:45 +11:00
|
|
|
await waku.waitForConnectedPeer([[StoreCodec]]);
|
2021-08-19 15:49:43 +10:00
|
|
|
|
|
|
|
|
const nimPeerId = await nimWaku.getPeerId();
|
|
|
|
|
|
|
|
|
|
const firstMessage = await waku.store.queryHistory([], {
|
|
|
|
|
peerId: nimPeerId,
|
2021-08-25 12:14:53 +10:00
|
|
|
timeFilter: { startTime, endTime: message1Timestamp },
|
2021-08-19 15:49:43 +10:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const bothMessages = await waku.store.queryHistory([], {
|
|
|
|
|
peerId: nimPeerId,
|
2021-08-25 12:14:53 +10:00
|
|
|
timeFilter: {
|
|
|
|
|
startTime,
|
|
|
|
|
endTime,
|
|
|
|
|
},
|
2021-08-19 15:49:43 +10:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(firstMessage?.length).eq(1);
|
|
|
|
|
|
|
|
|
|
expect(firstMessage[0]?.payloadAsUtf8).eq('Message 0');
|
|
|
|
|
|
|
|
|
|
expect(bothMessages?.length).eq(2);
|
|
|
|
|
});
|
2021-04-07 11:04:30 +10:00
|
|
|
});
|