test: uses full nodes in tests

Ref:  https://github.com/status-im/nwaku/issues/1085
This commit is contained in:
fryorcraken.eth 2022-09-08 11:25:18 +10:00
parent 9fc16143fa
commit 91e4d1b435
No known key found for this signature in database
GPG Key ID: A82ED75A8DFC50A4
6 changed files with 69 additions and 23 deletions

View File

@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Simple connection management that selects the most recent connection for store, light push and filter requests.
- `createLightNode` to create a Waku node for resource restricted environment with Light Push, Filter and Relay.
- `createPrivacyNode` to create a Waku node for privacy preserving usage with Relay only.
- `createFullNode` to create a Waku node for with all protocols, for **testing purposes only**.
### Changed

View File

@ -6,7 +6,7 @@ import { all as filterAll } from "@libp2p/websockets/filters";
import { createLibp2p, Libp2pOptions } from "libp2p";
import type { Libp2p } from "libp2p";
import type { Waku, WakuLight, WakuPrivacy } from "./interfaces";
import type { Waku, WakuFull, WakuLight, WakuPrivacy } from "./interfaces";
import { PeerDiscoveryStaticPeers } from "./peer_discovery_static_list";
import { getPredefinedBootstrapNodes } from "./predefined_bootstrap_nodes";
import { WakuNode, WakuOptions } from "./waku";
@ -100,6 +100,44 @@ export async function createPrivacyNode(
return new WakuNode(options ?? {}, libp2p) as WakuPrivacy;
}
/**
* Create a Waku node that uses all Waku protocols.
*
* This helper is not recommended except if:
* - you are interfacing with nwaku v0.11 or below
* - you are doing some form of testing
*
* If you are building a full node, it is recommended to use
* [nwaku](github.com/status-im/nwaku) and its JSON RPC API or wip REST API.
*
* @see https://github.com/status-im/nwaku/issues/1085
* @internal
*/
export async function createFullNode(
options?: CreateOptions & WakuOptions
): Promise<WakuFull> {
const libp2pOptions = options?.libp2p ?? {};
const peerDiscovery = libp2pOptions.peerDiscovery ?? [];
if (options?.defaultBootstrap) {
peerDiscovery.push(defaultPeerDiscovery());
Object.assign(libp2pOptions, { peerDiscovery });
}
const libp2p = await defaultLibp2p(new WakuRelay(options), libp2pOptions);
const wakuStore = new WakuStore(libp2p, options);
const wakuLightPush = new WakuLightPush(libp2p, options);
const wakuFilter = new WakuFilter(libp2p, options);
return new WakuNode(
options ?? {},
libp2p,
wakuStore,
wakuLightPush,
wakuFilter
) as WakuFull;
}
/**
* @deprecated use { @link createLightNode } (only compatible with nwaku v0.12),
* { @link createPrivacyNode } or { @link Waku.constructor } instead;

View File

@ -51,3 +51,10 @@ export interface WakuPrivacy extends Waku {
filter: undefined;
lightPush: undefined;
}
export interface WakuFull extends Waku {
relay: WakuRelay;
store: WakuStore;
filter: WakuFilter;
lightPush: WakuLightPush;
}

View File

@ -3,8 +3,8 @@ import debug from "debug";
import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils";
import { delay } from "../../test_utils/delay";
import { createLightNode } from "../create_waku";
import type { WakuLight } from "../interfaces";
import { createFullNode } from "../create_waku";
import type { WakuFull } from "../interfaces";
import { waitForRemotePeer } from "../wait_for_remote_peer";
import { Protocols } from "../waku";
import { WakuMessage } from "../waku_message";
@ -14,7 +14,7 @@ const log = debug("waku:test");
const TestContentTopic = "/test/1/waku-filter";
describe("Waku Filter", () => {
let waku: WakuLight;
let waku: WakuFull;
let nwaku: Nwaku;
afterEach(async function () {
@ -26,7 +26,7 @@ describe("Waku Filter", () => {
this.timeout(15000);
nwaku = new Nwaku(makeLogFileName(this));
await nwaku.start({ filter: true, lightpush: true });
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } },
});

View File

@ -3,8 +3,8 @@ import debug from "debug";
import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils";
import { delay } from "../../test_utils/delay";
import { createLightNode } from "../create_waku";
import type { WakuLight } from "../interfaces";
import { createFullNode } from "../create_waku";
import type { WakuFull } from "../interfaces";
import { waitForRemotePeer } from "../wait_for_remote_peer";
import { Protocols } from "../waku";
import { WakuMessage } from "../waku_message";
@ -14,7 +14,7 @@ const log = debug("waku:test:lightpush");
const TestContentTopic = "/test/1/waku-light-push/utf8";
describe("Waku Light Push [node only]", () => {
let waku: WakuLight;
let waku: WakuFull;
let nwaku: Nwaku;
afterEach(async function () {
@ -28,7 +28,7 @@ describe("Waku Light Push [node only]", () => {
nwaku = new Nwaku(makeLogFileName(this));
await nwaku.start({ lightpush: true });
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
});
await waku.start();
@ -64,7 +64,7 @@ describe("Waku Light Push [node only]", () => {
nwaku = new Nwaku(makeLogFileName(this));
await nwaku.start({ lightpush: true, topics: customPubSubTopic });
waku = await createLightNode({
waku = await createFullNode({
pubSubTopic: customPubSubTopic,
staticNoiseKey: NOISE_KEY_1,
});

View File

@ -7,13 +7,13 @@ import {
NOISE_KEY_2,
Nwaku,
} from "../../test_utils";
import { createLightNode } from "../create_waku";
import { createFullNode } from "../create_waku";
import {
generatePrivateKey,
generateSymmetricKey,
getPublicKey,
} from "../crypto";
import type { WakuLight } from "../interfaces";
import type { WakuFull } from "../interfaces";
import { waitForRemotePeer } from "../wait_for_remote_peer";
import { Protocols } from "../waku";
import { DecryptionMethod, WakuMessage } from "../waku_message";
@ -25,7 +25,7 @@ const log = debug("waku:test:store");
const TestContentTopic = "/test/1/waku-store/utf8";
describe("Waku Store", () => {
let waku: WakuLight;
let waku: WakuFull;
let nwaku: Nwaku;
afterEach(async function () {
@ -49,7 +49,7 @@ describe("Waku Store", () => {
).to.be.true;
}
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
});
await waku.start();
@ -82,7 +82,7 @@ describe("Waku Store", () => {
).to.be.true;
}
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
});
await waku.start();
@ -122,7 +122,7 @@ describe("Waku Store", () => {
).to.be.true;
}
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
});
await waku.start();
@ -159,7 +159,7 @@ describe("Waku Store", () => {
).to.be.true;
}
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
});
await waku.start();
@ -202,7 +202,7 @@ describe("Waku Store", () => {
).to.be.true;
}
waku = await createLightNode({
waku = await createFullNode({
pubSubTopic: customPubSubTopic,
staticNoiseKey: NOISE_KEY_1,
});
@ -269,10 +269,10 @@ describe("Waku Store", () => {
log("Messages have been encrypted");
const [waku1, waku2, nimWakuMultiaddr] = await Promise.all([
createLightNode({
createFullNode({
staticNoiseKey: NOISE_KEY_1,
}).then((waku) => waku.start().then(() => waku)),
createLightNode({
createFullNode({
staticNoiseKey: NOISE_KEY_2,
}).then((waku) => waku.start().then(() => waku)),
nwaku.getMultiaddrWithId(),
@ -371,10 +371,10 @@ describe("Waku Store", () => {
log("Messages have been encrypted");
const [waku1, waku2, nimWakuMultiaddr] = await Promise.all([
createLightNode({
createFullNode({
staticNoiseKey: NOISE_KEY_1,
}).then((waku) => waku.start().then(() => waku)),
createLightNode({
createFullNode({
staticNoiseKey: NOISE_KEY_2,
}).then((waku) => waku.start().then(() => waku)),
nwaku.getMultiaddrWithId(),
@ -458,7 +458,7 @@ describe("Waku Store", () => {
).to.be.true;
}
waku = await createLightNode({
waku = await createFullNode({
staticNoiseKey: NOISE_KEY_1,
});
await waku.start();