mirror of https://github.com/waku-org/js-waku.git
Merge pull request #657 from status-im/nim-waku-v0.9
This commit is contained in:
commit
249d9bf1a4
|
@ -61,6 +61,7 @@
|
||||||
"muxer",
|
"muxer",
|
||||||
"mvps",
|
"mvps",
|
||||||
"nodekey",
|
"nodekey",
|
||||||
|
"nwaku",
|
||||||
"opendns",
|
"opendns",
|
||||||
"peerhave",
|
"peerhave",
|
||||||
"portfinder",
|
"portfinder",
|
||||||
|
|
|
@ -12,7 +12,7 @@ jobs:
|
||||||
build_and_test:
|
build_and_test:
|
||||||
env:
|
env:
|
||||||
BUF_VERSION: '0.56.0'
|
BUF_VERSION: '0.56.0'
|
||||||
NIM_WAKU_VERSION: 'v0.7'
|
NIM_WAKU_VERSION: 'v0.9'
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node: [16]
|
node: [16]
|
||||||
|
@ -37,7 +37,10 @@ jobs:
|
||||||
|
|
||||||
- name: Ensure wakunode2 is ready
|
- name: Ensure wakunode2 is ready
|
||||||
shell: bash
|
shell: bash
|
||||||
run: cd nim-waku && ./build/wakunode2 --help
|
run: |
|
||||||
|
uname -a
|
||||||
|
cd nim-waku/build
|
||||||
|
./wakunode2 --help
|
||||||
|
|
||||||
- name: Install bufbuild
|
- name: Install bufbuild
|
||||||
uses: mathematic-inc/setup-buf@v2beta
|
uses: mathematic-inc/setup-buf@v2beta
|
||||||
|
|
2
nim-waku
2
nim-waku
|
@ -1 +1 @@
|
||||||
Subproject commit dba82b6c9c9a8982608f52955356a2df8efcaf9e
|
Subproject commit 97f23cd5fa89220912819fc5868c5162d222e72e
|
|
@ -12,7 +12,7 @@ export enum Fleet {
|
||||||
/**
|
/**
|
||||||
* Return list of pre-defined (hardcoded) bootstrap nodes.
|
* Return list of pre-defined (hardcoded) bootstrap nodes.
|
||||||
*
|
*
|
||||||
* Default behavior is to return nodes of the nim-waku Status Prod fleet.
|
* Default behavior is to return nodes of the nwaku Status Prod fleet.
|
||||||
*
|
*
|
||||||
* @param fleet The fleet to be returned. Defaults to production fleet.
|
* @param fleet The fleet to be returned. Defaults to production fleet.
|
||||||
* @param wantedNumber The number of connections desired. Defaults to [[DefaultWantedNumber]].
|
* @param wantedNumber The number of connections desired. Defaults to [[DefaultWantedNumber]].
|
||||||
|
|
|
@ -4,9 +4,9 @@ import PeerId from "peer-id";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
makeLogFileName,
|
makeLogFileName,
|
||||||
NimWaku,
|
|
||||||
NOISE_KEY_1,
|
NOISE_KEY_1,
|
||||||
NOISE_KEY_2,
|
NOISE_KEY_2,
|
||||||
|
Nwaku,
|
||||||
} from "../test_utils/";
|
} from "../test_utils/";
|
||||||
|
|
||||||
import { Protocols, Waku } from "./waku";
|
import { Protocols, Waku } from "./waku";
|
||||||
|
@ -18,20 +18,20 @@ const dbg = debug("waku:test");
|
||||||
const TestContentTopic = "/test/1/waku/utf8";
|
const TestContentTopic = "/test/1/waku/utf8";
|
||||||
|
|
||||||
describe("Waku Dial [node only]", function () {
|
describe("Waku Dial [node only]", function () {
|
||||||
describe("Interop: Nim", function () {
|
describe("Interop: nwaku", function () {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("js connects to nim", async function () {
|
it("connects to nwaku", async function () {
|
||||||
this.timeout(20_000);
|
this.timeout(20_000);
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start();
|
await nwaku.start();
|
||||||
const multiAddrWithId = await nimWaku.getMultiaddrWithId();
|
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
|
@ -39,26 +39,26 @@ describe("Waku Dial [node only]", function () {
|
||||||
await waku.dial(multiAddrWithId);
|
await waku.dial(multiAddrWithId);
|
||||||
await waku.waitForRemotePeer([Protocols.Relay]);
|
await waku.waitForRemotePeer([Protocols.Relay]);
|
||||||
|
|
||||||
const nimPeerId = await nimWaku.getPeerId();
|
const nimPeerId = await nwaku.getPeerId();
|
||||||
expect(await waku.libp2p.peerStore.has(nimPeerId)).to.be.true;
|
expect(await waku.libp2p.peerStore.has(nimPeerId)).to.be.true;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Bootstrap", function () {
|
describe("Bootstrap", function () {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Passing an array", async function () {
|
it("Passing an array", async function () {
|
||||||
this.timeout(10_000);
|
this.timeout(10_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start();
|
await nwaku.start();
|
||||||
const multiAddrWithId = await nimWaku.getMultiaddrWithId();
|
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
|
@ -77,14 +77,14 @@ describe("Waku Dial [node only]", function () {
|
||||||
it("Passing a function", async function () {
|
it("Passing a function", async function () {
|
||||||
this.timeout(10_000);
|
this.timeout(10_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start();
|
await nwaku.start();
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
bootstrap: {
|
bootstrap: {
|
||||||
getPeers: async () => {
|
getPeers: async () => {
|
||||||
return [await nimWaku.getMultiaddrWithId()];
|
return [await nwaku.getMultiaddrWithId()];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -95,7 +95,7 @@ describe("Waku Dial [node only]", function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const multiAddrWithId = await nimWaku.getMultiaddrWithId();
|
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||||
expect(connectedPeerID.toB58String()).to.eq(multiAddrWithId.getPeerId());
|
expect(connectedPeerID.toB58String()).to.eq(multiAddrWithId.getPeerId());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -168,18 +168,18 @@ describe("Decryption Keys", () => {
|
||||||
|
|
||||||
describe("Wait for remote peer / get peers", function () {
|
describe("Wait for remote peer / get peers", function () {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Relay", async function () {
|
it("Relay", async function () {
|
||||||
this.timeout(20_000);
|
this.timeout(20_000);
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start();
|
await nwaku.start();
|
||||||
const multiAddrWithId = await nimWaku.getMultiaddrWithId();
|
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||||
|
|
||||||
dbg("Create");
|
dbg("Create");
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
|
@ -199,9 +199,9 @@ describe("Wait for remote peer / get peers", function () {
|
||||||
|
|
||||||
it("Store", async function () {
|
it("Store", async function () {
|
||||||
this.timeout(20_000);
|
this.timeout(20_000);
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nwaku.start({ persistMessages: true });
|
||||||
const multiAddrWithId = await nimWaku.getMultiaddrWithId();
|
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
|
@ -222,9 +222,9 @@ describe("Wait for remote peer / get peers", function () {
|
||||||
|
|
||||||
it("LightPush", async function () {
|
it("LightPush", async function () {
|
||||||
this.timeout(20_000);
|
this.timeout(20_000);
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ lightpush: true });
|
await nwaku.start({ lightpush: true });
|
||||||
const multiAddrWithId = await nimWaku.getMultiaddrWithId();
|
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import debug from "debug";
|
import debug from "debug";
|
||||||
|
|
||||||
import { makeLogFileName, NimWaku, NOISE_KEY_1 } from "../../test_utils";
|
import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils";
|
||||||
import { delay } from "../../test_utils/delay";
|
import { delay } from "../../test_utils/delay";
|
||||||
import { Protocols, Waku } from "../waku";
|
import { Protocols, Waku } from "../waku";
|
||||||
import { WakuMessage } from "../waku_message";
|
import { WakuMessage } from "../waku_message";
|
||||||
|
@ -12,23 +12,23 @@ const TestContentTopic = "/test/1/waku-light-push/utf8";
|
||||||
|
|
||||||
describe("Waku Light Push [node only]", () => {
|
describe("Waku Light Push [node only]", () => {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Push successfully", async function () {
|
it("Push successfully", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ lightpush: true });
|
await nwaku.start({ lightpush: true });
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.LightPush]);
|
await waku.waitForRemotePeer([Protocols.LightPush]);
|
||||||
|
|
||||||
const messageText = "Light Push works!";
|
const messageText = "Light Push works!";
|
||||||
|
@ -44,7 +44,7 @@ describe("Waku Light Push [node only]", () => {
|
||||||
|
|
||||||
while (msgs.length === 0) {
|
while (msgs.length === 0) {
|
||||||
await delay(200);
|
await delay(200);
|
||||||
msgs = await nimWaku.messages();
|
msgs = await nwaku.messages();
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
||||||
|
@ -53,21 +53,21 @@ describe("Waku Light Push [node only]", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Push on custom pubsub topic", async function () {
|
it("Push on custom pubsub topic", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
const customPubSubTopic = "/waku/2/custom-dapp/proto";
|
const customPubSubTopic = "/waku/2/custom-dapp/proto";
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ lightpush: true, topics: customPubSubTopic });
|
await nwaku.start({ lightpush: true, topics: customPubSubTopic });
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
pubSubTopic: customPubSubTopic,
|
pubSubTopic: customPubSubTopic,
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.LightPush]);
|
await waku.waitForRemotePeer([Protocols.LightPush]);
|
||||||
|
|
||||||
const nimPeerId = await nimWaku.getPeerId();
|
const nimPeerId = await nwaku.getPeerId();
|
||||||
|
|
||||||
const messageText = "Light Push works!";
|
const messageText = "Light Push works!";
|
||||||
const message = await WakuMessage.fromUtf8String(
|
const message = await WakuMessage.fromUtf8String(
|
||||||
|
@ -84,10 +84,10 @@ describe("Waku Light Push [node only]", () => {
|
||||||
|
|
||||||
let msgs: WakuMessage[] = [];
|
let msgs: WakuMessage[] = [];
|
||||||
|
|
||||||
dbg("Waiting for message to show on nim-waku side");
|
dbg("Waiting for message to show in nwaku");
|
||||||
while (msgs.length === 0) {
|
while (msgs.length === 0) {
|
||||||
await delay(200);
|
await delay(200);
|
||||||
msgs = await nimWaku.messages();
|
msgs = await nwaku.messages();
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
||||||
|
|
|
@ -3,8 +3,8 @@ import debug from "debug";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
makeLogFileName,
|
makeLogFileName,
|
||||||
NimWaku,
|
|
||||||
NOISE_KEY_1,
|
NOISE_KEY_1,
|
||||||
|
Nwaku,
|
||||||
WakuRelayMessage,
|
WakuRelayMessage,
|
||||||
} from "../../test_utils";
|
} from "../../test_utils";
|
||||||
import { delay } from "../../test_utils/delay";
|
import { delay } from "../../test_utils/delay";
|
||||||
|
@ -24,9 +24,9 @@ const dbg = debug("waku:test:message");
|
||||||
const TestContentTopic = "/test/1/waku-message/utf8";
|
const TestContentTopic = "/test/1/waku-message/utf8";
|
||||||
|
|
||||||
describe("Waku Message [node only]", function () {
|
describe("Waku Message [node only]", function () {
|
||||||
describe("Interop: Nim", function () {
|
describe("Interop: nwaku", function () {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
beforeEach(async function () {
|
beforeEach(async function () {
|
||||||
this.timeout(30_000);
|
this.timeout(30_000);
|
||||||
|
@ -34,27 +34,27 @@ describe("Waku Message [node only]", function () {
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
dbg("Starting nim-waku node");
|
dbg("Starting nwaku node");
|
||||||
await nimWaku.start({ rpcPrivate: true });
|
await nwaku.start({ rpcPrivate: true });
|
||||||
|
|
||||||
dbg("Dialing to nim-waku node");
|
dbg("Dialing to nwaku node");
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
dbg("Wait for remote peer");
|
dbg("Wait for remote peer");
|
||||||
await waku.waitForRemotePeer([Protocols.Relay]);
|
await waku.waitForRemotePeer([Protocols.Relay]);
|
||||||
dbg("Remote peer ready");
|
dbg("Remote peer ready");
|
||||||
// As this test uses the nim-waku RPC API, we somehow often face
|
// As this test uses the nwaku RPC API, we somehow often face
|
||||||
// Race conditions where the nim-waku node does not have the js-waku
|
// Race conditions where the nwaku node does not have the js-waku
|
||||||
// Node in its relay mesh just yet.
|
// Node in its relay mesh just yet.
|
||||||
await delay(500);
|
await delay(500);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("JS decrypts nim message [asymmetric, no signature]", async function () {
|
it("Decrypts nwaku message [asymmetric, no signature]", async function () {
|
||||||
this.timeout(5000);
|
this.timeout(5000);
|
||||||
|
|
||||||
const messageText = "Here is an encrypted message.";
|
const messageText = "Here is an encrypted message.";
|
||||||
|
@ -77,7 +77,7 @@ describe("Waku Message [node only]", function () {
|
||||||
|
|
||||||
const publicKey = getPublicKey(privateKey);
|
const publicKey = getPublicKey(privateKey);
|
||||||
dbg("Post message");
|
dbg("Post message");
|
||||||
const res = await nimWaku.postAsymmetricMessage(message, publicKey);
|
const res = await nwaku.postAsymmetricMessage(message, publicKey);
|
||||||
expect(res).to.be.true;
|
expect(res).to.be.true;
|
||||||
|
|
||||||
const receivedMsg = await receivedMsgPromise;
|
const receivedMsg = await receivedMsgPromise;
|
||||||
|
@ -87,11 +87,11 @@ describe("Waku Message [node only]", function () {
|
||||||
expect(receivedMsg.payloadAsUtf8).to.eq(messageText);
|
expect(receivedMsg.payloadAsUtf8).to.eq(messageText);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Js encrypts message for nim [asymmetric, no signature]", async function () {
|
it("Encrypts message for nwaku [asymmetric, no signature]", async function () {
|
||||||
this.timeout(5000);
|
this.timeout(5000);
|
||||||
|
|
||||||
dbg("Ask nim-waku to generate asymmetric key pair");
|
dbg("Ask nwaku to generate asymmetric key pair");
|
||||||
const keyPair = await nimWaku.getAsymmetricKeyPair();
|
const keyPair = await nwaku.getAsymmetricKeyPair();
|
||||||
const privateKey = hexToBytes(keyPair.privateKey);
|
const privateKey = hexToBytes(keyPair.privateKey);
|
||||||
const publicKey = hexToBytes(keyPair.publicKey);
|
const publicKey = hexToBytes(keyPair.publicKey);
|
||||||
|
|
||||||
|
@ -111,9 +111,9 @@ describe("Waku Message [node only]", function () {
|
||||||
let msgs: WakuRelayMessage[] = [];
|
let msgs: WakuRelayMessage[] = [];
|
||||||
|
|
||||||
while (msgs.length === 0) {
|
while (msgs.length === 0) {
|
||||||
dbg("Wait for message to be seen by nim-waku");
|
dbg("Wait for message to be seen by nwaku");
|
||||||
await delay(200);
|
await delay(200);
|
||||||
msgs = await nimWaku.getAsymmetricMessages(privateKey);
|
msgs = await nwaku.getAsymmetricMessages(privateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
dbg("Check message content");
|
dbg("Check message content");
|
||||||
|
@ -121,7 +121,7 @@ describe("Waku Message [node only]", function () {
|
||||||
expect(bytesToUtf8(hexToBytes(msgs[0].payload))).to.equal(messageText);
|
expect(bytesToUtf8(hexToBytes(msgs[0].payload))).to.equal(messageText);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("JS decrypts nim message [symmetric, no signature]", async function () {
|
it("Decrypts nwaku message [symmetric, no signature]", async function () {
|
||||||
this.timeout(5000);
|
this.timeout(5000);
|
||||||
|
|
||||||
const messageText = "Here is a message encrypted in a symmetric manner.";
|
const messageText = "Here is a message encrypted in a symmetric manner.";
|
||||||
|
@ -143,8 +143,8 @@ describe("Waku Message [node only]", function () {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
dbg("Post message using nim-waku");
|
dbg("Post message using nwaku");
|
||||||
await nimWaku.postSymmetricMessage(message, symKey);
|
await nwaku.postSymmetricMessage(message, symKey);
|
||||||
dbg("Wait for message to be received by js-waku");
|
dbg("Wait for message to be received by js-waku");
|
||||||
const receivedMsg = await receivedMsgPromise;
|
const receivedMsg = await receivedMsgPromise;
|
||||||
dbg("Message received by js-waku");
|
dbg("Message received by js-waku");
|
||||||
|
@ -154,11 +154,11 @@ describe("Waku Message [node only]", function () {
|
||||||
expect(receivedMsg.payloadAsUtf8).to.eq(messageText);
|
expect(receivedMsg.payloadAsUtf8).to.eq(messageText);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Js encrypts message for nim [symmetric, no signature]", async function () {
|
it("Encrypts message for nwaku [symmetric, no signature]", async function () {
|
||||||
this.timeout(5000);
|
this.timeout(5000);
|
||||||
|
|
||||||
dbg("Getting symmetric key from nim-waku");
|
dbg("Getting symmetric key from nwaku");
|
||||||
const symKey = await nimWaku.getSymmetricKey();
|
const symKey = await nwaku.getSymmetricKey();
|
||||||
dbg("Encrypting message with js-waku");
|
dbg("Encrypting message with js-waku");
|
||||||
const messageText =
|
const messageText =
|
||||||
"This is a message I am going to encrypt with a symmetric key";
|
"This is a message I am going to encrypt with a symmetric key";
|
||||||
|
@ -176,8 +176,8 @@ describe("Waku Message [node only]", function () {
|
||||||
|
|
||||||
while (msgs.length === 0) {
|
while (msgs.length === 0) {
|
||||||
await delay(200);
|
await delay(200);
|
||||||
dbg("Getting messages from nim-waku");
|
dbg("Getting messages from nwaku");
|
||||||
msgs = await nimWaku.getSymmetricMessages(symKey);
|
msgs = await nwaku.getSymmetricMessages(symKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
||||||
|
|
|
@ -3,9 +3,9 @@ import debug from "debug";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
makeLogFileName,
|
makeLogFileName,
|
||||||
NimWaku,
|
|
||||||
NOISE_KEY_1,
|
NOISE_KEY_1,
|
||||||
NOISE_KEY_2,
|
NOISE_KEY_2,
|
||||||
|
Nwaku,
|
||||||
} from "../../test_utils";
|
} from "../../test_utils";
|
||||||
import { delay } from "../../test_utils/delay";
|
import { delay } from "../../test_utils/delay";
|
||||||
import { DefaultPubSubTopic, Protocols, Waku } from "../waku";
|
import { DefaultPubSubTopic, Protocols, Waku } from "../waku";
|
||||||
|
@ -306,9 +306,9 @@ describe("Waku Relay [node only]", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Interop: Nim", function () {
|
describe("Interop: nwaku", function () {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
beforeEach(async function () {
|
beforeEach(async function () {
|
||||||
this.timeout(30_000);
|
this.timeout(30_000);
|
||||||
|
@ -316,19 +316,19 @@ describe("Waku Relay [node only]", () => {
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
|
|
||||||
nimWaku = new NimWaku(this.test?.ctx?.currentTest?.title + "");
|
nwaku = new Nwaku(this.test?.ctx?.currentTest?.title + "");
|
||||||
await nimWaku.start();
|
await nwaku.start();
|
||||||
|
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Relay]);
|
await waku.waitForRemotePeer([Protocols.Relay]);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("nim subscribes to js", async function () {
|
it("nwaku subscribes", async function () {
|
||||||
let subscribers: string[] = [];
|
let subscribers: string[] = [];
|
||||||
|
|
||||||
while (subscribers.length === 0) {
|
while (subscribers.length === 0) {
|
||||||
|
@ -336,11 +336,11 @@ describe("Waku Relay [node only]", () => {
|
||||||
subscribers = waku.libp2p.pubsub.getSubscribers(DefaultPubSubTopic);
|
subscribers = waku.libp2p.pubsub.getSubscribers(DefaultPubSubTopic);
|
||||||
}
|
}
|
||||||
|
|
||||||
const nimPeerId = await nimWaku.getPeerId();
|
const nimPeerId = await nwaku.getPeerId();
|
||||||
expect(subscribers).to.contain(nimPeerId.toB58String());
|
expect(subscribers).to.contain(nimPeerId.toB58String());
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Js publishes to nim", async function () {
|
it("Publishes to nwaku", async function () {
|
||||||
this.timeout(30000);
|
this.timeout(30000);
|
||||||
|
|
||||||
const messageText = "This is a message";
|
const messageText = "This is a message";
|
||||||
|
@ -356,7 +356,7 @@ describe("Waku Relay [node only]", () => {
|
||||||
while (msgs.length === 0) {
|
while (msgs.length === 0) {
|
||||||
console.log("Waiting for messages");
|
console.log("Waiting for messages");
|
||||||
await delay(200);
|
await delay(200);
|
||||||
msgs = await nimWaku.messages();
|
msgs = await nwaku.messages();
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
|
||||||
|
@ -364,7 +364,7 @@ describe("Waku Relay [node only]", () => {
|
||||||
expect(msgs[0].payloadAsUtf8).to.equal(messageText);
|
expect(msgs[0].payloadAsUtf8).to.equal(messageText);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Nim publishes to js", async function () {
|
it("Nwaku publishes", async function () {
|
||||||
await delay(200);
|
await delay(200);
|
||||||
|
|
||||||
const messageText = "Here is another message.";
|
const messageText = "Here is another message.";
|
||||||
|
@ -379,7 +379,7 @@ describe("Waku Relay [node only]", () => {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
await nimWaku.sendMessage(message);
|
await nwaku.sendMessage(Nwaku.toWakuRelayMessage(message));
|
||||||
|
|
||||||
const receivedMsg = await receivedMsgPromise;
|
const receivedMsg = await receivedMsgPromise;
|
||||||
|
|
||||||
|
@ -388,13 +388,13 @@ describe("Waku Relay [node only]", () => {
|
||||||
expect(receivedMsg.payloadAsUtf8).to.eq(messageText);
|
expect(receivedMsg.payloadAsUtf8).to.eq(messageText);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe.skip("js to nim to js", function () {
|
describe.skip("Two nodes connected to nwaku", function () {
|
||||||
let waku1: Waku;
|
let waku1: Waku;
|
||||||
let waku2: Waku;
|
let waku2: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku1 &&
|
!!waku1 &&
|
||||||
waku1.stop().catch((e) => console.log("Waku failed to stop", e));
|
waku1.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
!!waku2 &&
|
!!waku2 &&
|
||||||
|
@ -412,13 +412,13 @@ describe("Waku Relay [node only]", () => {
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start();
|
await nwaku.start();
|
||||||
|
|
||||||
const nimWakuMultiaddr = await nimWaku.getMultiaddrWithId();
|
const nwakuMultiaddr = await nwaku.getMultiaddrWithId();
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
waku1.dial(nimWakuMultiaddr),
|
waku1.dial(nwakuMultiaddr),
|
||||||
waku2.dial(nimWakuMultiaddr),
|
waku2.dial(nwakuMultiaddr),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Wait for identify protocol to finish
|
// Wait for identify protocol to finish
|
||||||
|
|
|
@ -3,9 +3,9 @@ import debug from "debug";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
makeLogFileName,
|
makeLogFileName,
|
||||||
NimWaku,
|
|
||||||
NOISE_KEY_1,
|
NOISE_KEY_1,
|
||||||
NOISE_KEY_2,
|
NOISE_KEY_2,
|
||||||
|
Nwaku,
|
||||||
} from "../../test_utils";
|
} from "../../test_utils";
|
||||||
import { delay } from "../../test_utils/delay";
|
import { delay } from "../../test_utils/delay";
|
||||||
import { Protocols, Waku } from "../waku";
|
import { Protocols, Waku } from "../waku";
|
||||||
|
@ -24,31 +24,33 @@ const TestContentTopic = "/test/1/waku-store/utf8";
|
||||||
|
|
||||||
describe("Waku Store", () => {
|
describe("Waku Store", () => {
|
||||||
let waku: Waku;
|
let waku: Waku;
|
||||||
let nimWaku: NimWaku;
|
let nwaku: Nwaku;
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
!!nimWaku && nimWaku.stop();
|
!!nwaku && nwaku.stop();
|
||||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves history", async function () {
|
it("Retrieves history", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nwaku.start({ persistMessages: true });
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
for (let i = 0; i < 2; i++) {
|
||||||
expect(
|
expect(
|
||||||
await nimWaku.sendMessage(
|
await nwaku.sendMessage(
|
||||||
|
Nwaku.toWakuRelayMessage(
|
||||||
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
).to.be.true;
|
).to.be.true;
|
||||||
}
|
}
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Store]);
|
await waku.waitForRemotePeer([Protocols.Store]);
|
||||||
const messages = await waku.store.queryHistory([]);
|
const messages = await waku.store.queryHistory([]);
|
||||||
|
|
||||||
|
@ -60,25 +62,27 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves history using callback", async function () {
|
it("Retrieves history using callback", async function () {
|
||||||
this.timeout(10_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nwaku.start({ persistMessages: true });
|
||||||
|
|
||||||
const totalMsgs = 20;
|
const totalMsgs = 20;
|
||||||
|
|
||||||
for (let i = 0; i < totalMsgs; i++) {
|
for (let i = 0; i < totalMsgs; i++) {
|
||||||
expect(
|
expect(
|
||||||
await nimWaku.sendMessage(
|
await nwaku.sendMessage(
|
||||||
|
Nwaku.toWakuRelayMessage(
|
||||||
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
).to.be.true;
|
).to.be.true;
|
||||||
}
|
}
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Store]);
|
await waku.waitForRemotePeer([Protocols.Store]);
|
||||||
|
|
||||||
let messages: WakuMessage[] = [];
|
let messages: WakuMessage[] = [];
|
||||||
|
@ -97,25 +101,27 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieval aborts when callback returns true", async function () {
|
it("Retrieval aborts when callback returns true", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nwaku.start({ persistMessages: true });
|
||||||
|
|
||||||
const availMsgs = 20;
|
const availMsgs = 20;
|
||||||
|
|
||||||
for (let i = 0; i < availMsgs; i++) {
|
for (let i = 0; i < availMsgs; i++) {
|
||||||
expect(
|
expect(
|
||||||
await nimWaku.sendMessage(
|
await nwaku.sendMessage(
|
||||||
|
Nwaku.toWakuRelayMessage(
|
||||||
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
).to.be.true;
|
).to.be.true;
|
||||||
}
|
}
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Store]);
|
await waku.waitForRemotePeer([Protocols.Store]);
|
||||||
|
|
||||||
let messages: WakuMessage[] = [];
|
let messages: WakuMessage[] = [];
|
||||||
|
@ -133,23 +139,25 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves all historical elements in chronological order through paging", async function () {
|
it("Retrieves all historical elements in chronological order through paging", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nwaku.start({ persistMessages: true });
|
||||||
|
|
||||||
for (let i = 0; i < 15; i++) {
|
for (let i = 0; i < 15; i++) {
|
||||||
expect(
|
expect(
|
||||||
await nimWaku.sendMessage(
|
await nwaku.sendMessage(
|
||||||
|
Nwaku.toWakuRelayMessage(
|
||||||
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
).to.be.true;
|
).to.be.true;
|
||||||
}
|
}
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Store]);
|
await waku.waitForRemotePeer([Protocols.Store]);
|
||||||
|
|
||||||
const messages = await waku.store.queryHistory([], {
|
const messages = await waku.store.queryHistory([], {
|
||||||
|
@ -167,16 +175,18 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves history using custom pubsub topic", async function () {
|
it("Retrieves history using custom pubsub topic", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
const customPubSubTopic = "/waku/2/custom-dapp/proto";
|
const customPubSubTopic = "/waku/2/custom-dapp/proto";
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true, topics: customPubSubTopic });
|
await nwaku.start({ persistMessages: true, topics: customPubSubTopic });
|
||||||
|
|
||||||
for (let i = 0; i < 2; i++) {
|
for (let i = 0; i < 2; i++) {
|
||||||
expect(
|
expect(
|
||||||
await nimWaku.sendMessage(
|
await nwaku.sendMessage(
|
||||||
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic),
|
Nwaku.toWakuRelayMessage(
|
||||||
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic)
|
||||||
|
),
|
||||||
customPubSubTopic
|
customPubSubTopic
|
||||||
)
|
)
|
||||||
).to.be.true;
|
).to.be.true;
|
||||||
|
@ -186,10 +196,10 @@ describe("Waku Store", () => {
|
||||||
pubSubTopic: customPubSubTopic,
|
pubSubTopic: customPubSubTopic,
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Store]);
|
await waku.waitForRemotePeer([Protocols.Store]);
|
||||||
|
|
||||||
const nimPeerId = await nimWaku.getPeerId();
|
const nimPeerId = await nwaku.getPeerId();
|
||||||
|
|
||||||
const messages = await waku.store.queryHistory([], {
|
const messages = await waku.store.queryHistory([], {
|
||||||
peerId: nimPeerId,
|
peerId: nimPeerId,
|
||||||
|
@ -203,10 +213,10 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves history with asymmetric & symmetric encrypted messages", async function () {
|
it("Retrieves history with asymmetric & symmetric encrypted messages", async function () {
|
||||||
this.timeout(10_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true, lightpush: true });
|
await nwaku.start({ persistMessages: true, lightpush: true });
|
||||||
|
|
||||||
const encryptedAsymmetricMessageText =
|
const encryptedAsymmetricMessageText =
|
||||||
"This message is encrypted for me using asymmetric";
|
"This message is encrypted for me using asymmetric";
|
||||||
|
@ -256,7 +266,7 @@ describe("Waku Store", () => {
|
||||||
Waku.create({
|
Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_2,
|
staticNoiseKey: NOISE_KEY_2,
|
||||||
}),
|
}),
|
||||||
nimWaku.getMultiaddrWithId(),
|
nwaku.getMultiaddrWithId(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
dbg("Waku nodes created");
|
dbg("Waku nodes created");
|
||||||
|
@ -266,7 +276,7 @@ describe("Waku Store", () => {
|
||||||
waku2.dial(nimWakuMultiaddr),
|
waku2.dial(nimWakuMultiaddr),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
dbg("Waku nodes connected to nim Waku");
|
dbg("Waku nodes connected to nwaku");
|
||||||
|
|
||||||
let lightPushPeerFound = false;
|
let lightPushPeerFound = false;
|
||||||
while (!lightPushPeerFound) {
|
while (!lightPushPeerFound) {
|
||||||
|
@ -312,10 +322,10 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves history with asymmetric & symmetric encrypted messages on different content topics", async function () {
|
it("Retrieves history with asymmetric & symmetric encrypted messages on different content topics", async function () {
|
||||||
this.timeout(10_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true, lightpush: true });
|
await nwaku.start({ persistMessages: true, lightpush: true });
|
||||||
|
|
||||||
const encryptedAsymmetricMessageText =
|
const encryptedAsymmetricMessageText =
|
||||||
"This message is encrypted for me using asymmetric";
|
"This message is encrypted for me using asymmetric";
|
||||||
|
@ -374,7 +384,7 @@ describe("Waku Store", () => {
|
||||||
Waku.create({
|
Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_2,
|
staticNoiseKey: NOISE_KEY_2,
|
||||||
}),
|
}),
|
||||||
nimWaku.getMultiaddrWithId(),
|
nwaku.getMultiaddrWithId(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
dbg("Waku nodes created");
|
dbg("Waku nodes created");
|
||||||
|
@ -384,7 +394,7 @@ describe("Waku Store", () => {
|
||||||
waku2.dial(nimWakuMultiaddr),
|
waku2.dial(nimWakuMultiaddr),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
dbg("Waku nodes connected to nim Waku");
|
dbg("Waku nodes connected to nwaku");
|
||||||
|
|
||||||
let lightPushPeerFound = false;
|
let lightPushPeerFound = false;
|
||||||
while (!lightPushPeerFound) {
|
while (!lightPushPeerFound) {
|
||||||
|
@ -433,49 +443,57 @@ describe("Waku Store", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Retrieves history using start and end time", async function () {
|
it("Retrieves history using start and end time", async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(15_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nwaku = new Nwaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nwaku.start({ persistMessages: true });
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
const startTime = new Date();
|
const startTime = new Date();
|
||||||
|
// Set start time 5 minutes in the past
|
||||||
|
startTime.setTime(now.getTime() - 5 * 60 * 1000);
|
||||||
|
|
||||||
const message1Timestamp = new Date();
|
const message1Timestamp = new Date();
|
||||||
message1Timestamp.setTime(startTime.getTime() + 60 * 1000);
|
// Set first message was 4 minutes in the past
|
||||||
|
message1Timestamp.setTime(now.getTime() - 4 * 60 * 1000);
|
||||||
|
|
||||||
const message2Timestamp = new Date();
|
const message2Timestamp = new Date();
|
||||||
message2Timestamp.setTime(startTime.getTime() + 2 * 60 * 1000);
|
// Set second message 2 minutes in the past
|
||||||
|
message2Timestamp.setTime(now.getTime() - 2 * 60 * 1000);
|
||||||
const messageTimestamps = [message1Timestamp, message2Timestamp];
|
const messageTimestamps = [message1Timestamp, message2Timestamp];
|
||||||
|
|
||||||
const endTime = new Date();
|
const endTime = new Date();
|
||||||
endTime.setTime(startTime.getTime() + 3 * 60 * 1000);
|
// Set end time 1 minute in the past
|
||||||
|
endTime.setTime(now.getTime() - 60 * 1000);
|
||||||
|
|
||||||
let firstMessageTime;
|
|
||||||
for (let i = 0; i < 2; i++) {
|
for (let i = 0; i < 2; i++) {
|
||||||
expect(
|
expect(
|
||||||
await nimWaku.sendMessage(
|
await nwaku.sendMessage(
|
||||||
|
Nwaku.toWakuRelayMessage(
|
||||||
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic, {
|
await WakuMessage.fromUtf8String(`Message ${i}`, TestContentTopic, {
|
||||||
timestamp: messageTimestamps[i],
|
timestamp: messageTimestamps[i],
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
)
|
||||||
).to.be.true;
|
).to.be.true;
|
||||||
if (!firstMessageTime) firstMessageTime = Date.now() / 1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
waku = await Waku.create({
|
waku = await Waku.create({
|
||||||
staticNoiseKey: NOISE_KEY_1,
|
staticNoiseKey: NOISE_KEY_1,
|
||||||
});
|
});
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nwaku.getMultiaddrWithId());
|
||||||
await waku.waitForRemotePeer([Protocols.Store]);
|
await waku.waitForRemotePeer([Protocols.Store]);
|
||||||
|
|
||||||
const nimPeerId = await nimWaku.getPeerId();
|
const nwakuPeerId = await nwaku.getPeerId();
|
||||||
|
|
||||||
const firstMessage = await waku.store.queryHistory([], {
|
const firstMessage = await waku.store.queryHistory([], {
|
||||||
peerId: nimPeerId,
|
peerId: nwakuPeerId,
|
||||||
timeFilter: { startTime, endTime: message1Timestamp },
|
timeFilter: { startTime, endTime: message1Timestamp },
|
||||||
});
|
});
|
||||||
|
|
||||||
const bothMessages = await waku.store.queryHistory([], {
|
const bothMessages = await waku.store.queryHistory([], {
|
||||||
peerId: nimPeerId,
|
peerId: nwakuPeerId,
|
||||||
timeFilter: {
|
timeFilter: {
|
||||||
startTime,
|
startTime,
|
||||||
endTime,
|
endTime,
|
||||||
|
|
|
@ -8,4 +8,4 @@
|
||||||
export * from "./async_fs";
|
export * from "./async_fs";
|
||||||
export * from "./constants";
|
export * from "./constants";
|
||||||
export * from "./log_file";
|
export * from "./log_file";
|
||||||
export * from "./nim_waku";
|
export * from "./nwaku";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* Utilities to make it help check nim-waku logs.
|
* Utilities to make it help check nwaku logs.
|
||||||
*
|
*
|
||||||
* @hidden
|
* @hidden
|
||||||
* @module
|
* @module
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
|
|
||||||
import { argsToArray, bytesToHex, defaultArgs, strToHex } from "./nim_waku";
|
import { argsToArray, bytesToHex, defaultArgs, strToHex } from "./nwaku";
|
||||||
|
|
||||||
describe("nim_waku", () => {
|
describe("nwaku", () => {
|
||||||
it("Correctly serialized arguments", function () {
|
it("Correctly serialized arguments", function () {
|
||||||
const args = defaultArgs();
|
const args = defaultArgs();
|
||||||
Object.assign(args, { portsShift: 42 });
|
Object.assign(args, { portsShift: 42 });
|
|
@ -19,7 +19,7 @@ import * as proto from "../proto/waku/v2/message";
|
||||||
import { existsAsync, mkdirAsync, openAsync } from "./async_fs";
|
import { existsAsync, mkdirAsync, openAsync } from "./async_fs";
|
||||||
import waitForLine from "./log_file";
|
import waitForLine from "./log_file";
|
||||||
|
|
||||||
const dbg = debug("waku:nim-waku");
|
const dbg = debug("waku:nwaku");
|
||||||
|
|
||||||
const NIM_WAKU_DIR = appRoot + "/nim-waku";
|
const NIM_WAKU_DIR = appRoot + "/nim-waku";
|
||||||
const NIM_WAKU_BIN = NIM_WAKU_DIR + "/build/wakunode2";
|
const NIM_WAKU_BIN = NIM_WAKU_DIR + "/build/wakunode2";
|
||||||
|
@ -62,12 +62,12 @@ export interface KeyPair {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WakuRelayMessage {
|
export interface WakuRelayMessage {
|
||||||
payload: string;
|
payload: string; // Hex encoded data string without `0x` prefix.
|
||||||
contentTopic?: string;
|
contentTopic?: string;
|
||||||
timestamp?: number; // Float in seconds
|
timestamp?: number; // Unix epoch time in nanoseconds as a 64-bits integer value.
|
||||||
}
|
}
|
||||||
|
|
||||||
export class NimWaku {
|
export class Nwaku {
|
||||||
private process?: ChildProcess;
|
private process?: ChildProcess;
|
||||||
private pid?: number;
|
private pid?: number;
|
||||||
private peerId?: PeerId;
|
private peerId?: PeerId;
|
||||||
|
@ -75,8 +75,29 @@ export class NimWaku {
|
||||||
private readonly logPath: string;
|
private readonly logPath: string;
|
||||||
private rpcPort?: number;
|
private rpcPort?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a [[WakuMessage]] to a [[WakuRelayMessage]]. The latter is used
|
||||||
|
* by the nwaku JSON-RPC API.
|
||||||
|
*/
|
||||||
|
static toWakuRelayMessage(message: WakuMessage): WakuRelayMessage {
|
||||||
|
if (!message.payload) {
|
||||||
|
throw "Attempting to convert empty message";
|
||||||
|
}
|
||||||
|
|
||||||
|
let timestamp;
|
||||||
|
if (message.proto.timestamp) {
|
||||||
|
timestamp = message.proto.timestamp.toNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
payload: bytesToHex(message.payload),
|
||||||
|
contentTopic: message.contentTopic,
|
||||||
|
timestamp,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
constructor(logName: string) {
|
constructor(logName: string) {
|
||||||
this.logPath = `${LOG_DIR}/nim-waku_${logName}.log`;
|
this.logPath = `${LOG_DIR}/nwaku_${logName}.log`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async start(args?: Args): Promise<void> {
|
async start(args?: Args): Promise<void> {
|
||||||
|
@ -117,7 +138,7 @@ export class NimWaku {
|
||||||
);
|
);
|
||||||
|
|
||||||
const argsArray = argsToArray(mergedArgs);
|
const argsArray = argsToArray(mergedArgs);
|
||||||
dbg(`nim-waku args: ${argsArray.join(" ")}`);
|
dbg(`nwaku args: ${argsArray.join(" ")}`);
|
||||||
this.process = spawn(NIM_WAKU_BIN, argsArray, {
|
this.process = spawn(NIM_WAKU_BIN, argsArray, {
|
||||||
cwd: NIM_WAKU_DIR,
|
cwd: NIM_WAKU_DIR,
|
||||||
stdio: [
|
stdio: [
|
||||||
|
@ -128,14 +149,12 @@ export class NimWaku {
|
||||||
});
|
});
|
||||||
this.pid = this.process.pid;
|
this.pid = this.process.pid;
|
||||||
dbg(
|
dbg(
|
||||||
`nim-waku ${
|
`nwaku ${this.process.pid} started at ${new Date().toLocaleTimeString()}`
|
||||||
this.process.pid
|
|
||||||
} started at ${new Date().toLocaleTimeString()}`
|
|
||||||
);
|
);
|
||||||
|
|
||||||
this.process.on("exit", (signal) => {
|
this.process.on("exit", (signal) => {
|
||||||
dbg(
|
dbg(
|
||||||
`nim-waku ${
|
`nwaku ${
|
||||||
this.process ? this.process.pid : this.pid
|
this.process ? this.process.pid : this.pid
|
||||||
} process exited with ${signal} at ${new Date().toLocaleTimeString()}`
|
} process exited with ${signal} at ${new Date().toLocaleTimeString()}`
|
||||||
);
|
);
|
||||||
|
@ -143,23 +162,23 @@ export class NimWaku {
|
||||||
|
|
||||||
this.process.on("error", (err) => {
|
this.process.on("error", (err) => {
|
||||||
console.log(
|
console.log(
|
||||||
`nim-waku ${
|
`nwaku ${
|
||||||
this.process ? this.process.pid : this.pid
|
this.process ? this.process.pid : this.pid
|
||||||
} process encountered an error: ${err} at ${new Date().toLocaleTimeString()}`
|
} process encountered an error: ${err} at ${new Date().toLocaleTimeString()}`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
dbg("Waiting to see 'Node setup complete' in nim-waku logs");
|
dbg("Waiting to see 'Node setup complete' in nwaku logs");
|
||||||
await this.waitForLog("Node setup complete", 9000);
|
await this.waitForLog("Node setup complete", 15000);
|
||||||
dbg("nim-waku node has been started");
|
dbg("nwaku node has been started");
|
||||||
}
|
}
|
||||||
|
|
||||||
public stop(): void {
|
public stop(): void {
|
||||||
const pid = this.process ? this.process.pid : this.pid;
|
const pid = this.process ? this.process.pid : this.pid;
|
||||||
dbg(`nim-waku ${pid} getting SIGINT at ${new Date().toLocaleTimeString()}`);
|
dbg(`nwaku ${pid} getting SIGINT at ${new Date().toLocaleTimeString()}`);
|
||||||
if (!this.process) throw "nim-waku process not set";
|
if (!this.process) throw "nwaku process not set";
|
||||||
const res = this.process.kill("SIGINT");
|
const res = this.process.kill("SIGINT");
|
||||||
dbg(`nim-waku ${pid} interrupted:`, res);
|
dbg(`nwaku ${pid} interrupted:`, res);
|
||||||
this.process = undefined;
|
this.process = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,9 +186,9 @@ export class NimWaku {
|
||||||
return waitForLine(this.logPath, msg, timeout);
|
return waitForLine(this.logPath, msg, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Calls nim-waku2 JSON-RPC API `get_waku_v2_admin_v1_peers` to check
|
/** Calls nwaku JSON-RPC API `get_waku_v2_admin_v1_peers` to check
|
||||||
* for known peers
|
* for known peers
|
||||||
* @throws if nim-waku2 isn't started.
|
* @throws if nwaku isn't started.
|
||||||
*/
|
*/
|
||||||
async peers(): Promise<string[]> {
|
async peers(): Promise<string[]> {
|
||||||
this.checkProcess();
|
this.checkProcess();
|
||||||
|
@ -184,33 +203,14 @@ export class NimWaku {
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendMessage(
|
async sendMessage(
|
||||||
message: WakuMessage,
|
message: WakuRelayMessage,
|
||||||
pubSubTopic?: string
|
pubSubTopic?: string
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
this.checkProcess();
|
this.checkProcess();
|
||||||
|
|
||||||
if (!message.payload) {
|
|
||||||
throw "Attempting to send empty message";
|
|
||||||
}
|
|
||||||
let timestamp;
|
|
||||||
if (message.timestamp) {
|
|
||||||
timestamp = message.timestamp.valueOf() / 1000;
|
|
||||||
if (Number.isInteger(timestamp)) {
|
|
||||||
// Add a millisecond to ensure it's not an integer
|
|
||||||
// Until https://github.com/status-im/nim-waku/issues/691 is done
|
|
||||||
timestamp += 0.001;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const rpcMessage = {
|
|
||||||
payload: bytesToHex(message.payload),
|
|
||||||
contentTopic: message.contentTopic,
|
|
||||||
timestamp,
|
|
||||||
};
|
|
||||||
|
|
||||||
return this.rpcCall<boolean>("post_waku_v2_relay_v1_message", [
|
return this.rpcCall<boolean>("post_waku_v2_relay_v1_message", [
|
||||||
pubSubTopic ? pubSubTopic : DefaultPubSubTopic,
|
pubSubTopic ? pubSubTopic : DefaultPubSubTopic,
|
||||||
rpcMessage,
|
message,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,9 +338,9 @@ export class NimWaku {
|
||||||
this.multiaddrWithId = res.listenAddresses
|
this.multiaddrWithId = res.listenAddresses
|
||||||
.map((ma) => multiaddr(ma))
|
.map((ma) => multiaddr(ma))
|
||||||
.find((ma) => ma.protoNames().includes("ws"));
|
.find((ma) => ma.protoNames().includes("ws"));
|
||||||
if (!this.multiaddrWithId) throw "Nim-waku did not return a ws multiaddr";
|
if (!this.multiaddrWithId) throw "Nwaku did not return a ws multiaddr";
|
||||||
const peerIdStr = this.multiaddrWithId.getPeerId();
|
const peerIdStr = this.multiaddrWithId.getPeerId();
|
||||||
if (!peerIdStr) throw "Nim-waku multiaddr does not contain peerId";
|
if (!peerIdStr) throw "Nwaku multiaddr does not contain peerId";
|
||||||
this.peerId = PeerId.createFromB58String(peerIdStr);
|
this.peerId = PeerId.createFromB58String(peerIdStr);
|
||||||
return { peerId: this.peerId, multiaddrWithId: this.multiaddrWithId };
|
return { peerId: this.peerId, multiaddrWithId: this.multiaddrWithId };
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@ export class NimWaku {
|
||||||
|
|
||||||
private checkProcess(): void {
|
private checkProcess(): void {
|
||||||
if (!this.process) {
|
if (!this.process) {
|
||||||
throw "Nim Waku isn't started";
|
throw "Nwaku hasn't started";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue