Skip to content

Commit 5b0c3c3

Browse files
feat: compliance test for peer-exchange discovery (#1186)
* skip fleet test for CI * add: compliance test * fix: check CI * fix: nwaku node name * remove: setTimeout * force typecasting instead of ts-ignore * rm: only for the test * increase readability
1 parent 3059a65 commit 5b0c3c3

File tree

2 files changed

+75
-11
lines changed

2 files changed

+75
-11
lines changed

packages/peer-exchange/src/waku_peer_exchange_discovery.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { symbol } from "@libp2p/interface-peer-discovery";
66
import type { PeerId } from "@libp2p/interface-peer-id";
77
import type { PeerInfo } from "@libp2p/interface-peer-info";
88
import type { PeerProtocolsChangeData } from "@libp2p/interface-peer-store";
9-
import { EventEmitter } from "@libp2p/interfaces/events";
9+
import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events";
1010
import debug from "debug";
1111

1212
import {

packages/tests/tests/peer_exchange.node.spec.ts

+74-10
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { bootstrap } from "@libp2p/bootstrap";
2+
import tests from "@libp2p/interface-peer-discovery-compliance-tests";
23
import {
34
Fleet,
45
getPredefinedBootstrapNodes,
56
} from "@waku/core/lib/predefined_bootstrap_nodes";
6-
import { createLightNode } from "@waku/create";
7-
import { PeerInfo } from "@waku/interfaces";
8-
import type { LightNode } from "@waku/interfaces";
7+
import { createLightNode, Libp2pComponents } from "@waku/create";
8+
import type { LightNode, PeerInfo } from "@waku/interfaces";
99
import {
1010
PeerExchangeCodec,
11+
PeerExchangeDiscovery,
1112
WakuPeerExchange,
1213
wakuPeerExchangeDiscovery,
1314
} from "@waku/peer-exchange";
@@ -108,13 +109,16 @@ describe("Peer Exchange", () => {
108109

109110
await nwaku2.waitForLog("Discovered px peers via discv5", 10);
110111

111-
// the ts-ignores are added ref: https://github.com/libp2p/js-libp2p-interfaces/issues/338#issuecomment-1431643645
112-
const peerExchange = new WakuPeerExchange({
113-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
114-
// @ts-ignore
115-
connectionManager: waku.libp2p.connectionManager,
116-
peerStore: waku.libp2p.peerStore,
117-
});
112+
// the forced type casting is done in ref to https://github.com/libp2p/js-libp2p-interfaces/issues/338#issuecomment-1431643645
113+
const { connectionManager, registrar, peerStore } =
114+
waku.libp2p as unknown as Libp2pComponents;
115+
const components = {
116+
connectionManager: connectionManager,
117+
registrar: registrar,
118+
peerStore: peerStore,
119+
};
120+
121+
const peerExchange = new WakuPeerExchange(components);
118122

119123
const numPeersToRequest = 1;
120124

@@ -138,4 +142,64 @@ describe("Peer Exchange", () => {
138142
expect(waku.libp2p.peerStore.has(await nwaku2.getPeerId())).to.be.true;
139143
});
140144
});
145+
146+
describe("compliance test", async function () {
147+
this.timeout(25_000);
148+
149+
let waku: LightNode;
150+
let nwaku1: Nwaku;
151+
let nwaku2: Nwaku;
152+
153+
beforeEach(async function () {
154+
nwaku1 = new Nwaku(makeLogFileName(this) + "1");
155+
nwaku2 = new Nwaku(makeLogFileName(this) + "2");
156+
});
157+
158+
tests({
159+
async setup() {
160+
await nwaku1.start({
161+
discv5Discovery: true,
162+
peerExchange: true,
163+
});
164+
165+
const enr = (await nwaku1.info()).enrUri;
166+
167+
await nwaku2.start({
168+
discv5Discovery: true,
169+
peerExchange: true,
170+
discv5BootstrapNode: enr,
171+
});
172+
173+
waku = await createLightNode();
174+
175+
await waku.start();
176+
const nwaku2Ma = await nwaku2.getMultiaddrWithId();
177+
178+
await waku.libp2p.dialProtocol(nwaku2Ma, PeerExchangeCodec);
179+
await new Promise<void>((resolve) => {
180+
waku.libp2p.peerStore.addEventListener("change:protocols", (evt) => {
181+
if (evt.detail.protocols.includes(PeerExchangeCodec)) {
182+
resolve();
183+
}
184+
});
185+
});
186+
187+
// the forced type casting is done in ref to https://github.com/libp2p/js-libp2p-interfaces/issues/338#issuecomment-1431643645
188+
const { connectionManager, registrar, peerStore } =
189+
waku.libp2p as unknown as Libp2pComponents;
190+
const components = {
191+
connectionManager: connectionManager,
192+
registrar: registrar,
193+
peerStore: peerStore,
194+
};
195+
196+
return new PeerExchangeDiscovery(components);
197+
},
198+
teardown: async () => {
199+
!!nwaku1 && nwaku1.stop();
200+
!!nwaku2 && nwaku2.stop();
201+
!!waku && (await waku.stop());
202+
},
203+
});
204+
});
141205
});

0 commit comments

Comments
 (0)