From 8d1acb747ad38d5c009a2a5a813a3178ee193364 Mon Sep 17 00:00:00 2001 From: spypsy Date: Wed, 24 Apr 2024 08:21:47 +0000 Subject: [PATCH 1/3] make discv5 wait deterministic --- .../p2p/src/service/discv5_service.test.ts | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/yarn-project/p2p/src/service/discv5_service.test.ts b/yarn-project/p2p/src/service/discv5_service.test.ts index 9878379ea73..8040b03e507 100644 --- a/yarn-project/p2p/src/service/discv5_service.test.ts +++ b/yarn-project/p2p/src/service/discv5_service.test.ts @@ -1,11 +1,24 @@ -import { sleep } from '@aztec/foundation/sleep'; - import type { PeerId } from '@libp2p/interface'; import { BootstrapNode } from '../bootstrap/bootstrap.js'; import { DiscV5Service, PeerDiscoveryState } from './discV5_service.js'; import { createLibP2PPeerId } from './libp2p_service.js'; +const waitForPeers = (node: DiscV5Service, expectedCount: number, timeout = 5000): Promise => { + return new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + reject(new Error(`Timeout: Failed to connect to ${expectedCount} peers within ${timeout} ms`)); + }, timeout); + + node.on('peer:discovered', () => { + if (node.getAllPeers().length >= expectedCount) { + clearTimeout(timeoutId); + resolve(); + } + }); + }); +}; + describe('Discv5Service', () => { let bootNode: BootstrapNode; let bootNodePeerId: PeerId; @@ -48,7 +61,8 @@ describe('Discv5Service', () => { const node2 = await createNode(port); await node1.start(); await node2.start(); - await sleep(200); + await waitForPeers(node2, 2, 4000); + const node1Peers = await Promise.all(node1.getAllPeers().map(async peer => (await peer.peerId()).toString())); const node2Peers = await Promise.all(node2.getAllPeers().map(async peer => (await peer.peerId()).toString())); @@ -68,16 +82,16 @@ describe('Discv5Service', () => { const node2 = await createNode(port); await node1.start(); await node2.start(); - await sleep(200); + await waitForPeers(node2, 2, 4000); await node2.stop(); await bootNode.stop(); await node2.start(); - await sleep(200); + await waitForPeers(node2, 1, 4000); const node2Peers = await Promise.all(node2.getAllPeers().map(async peer => (await peer.peerId()).toString())); - expect(node2Peers).toHaveLength(1); + expect(node2Peers).toHaveLength(1); // expect(node2Peers).toContain(node1.getPeerId().toString()); await node1.stop(); From 04420b69b85796328d32a46af93e4ea88c1d3878 Mon Sep 17 00:00:00 2001 From: spypsy Date: Wed, 24 Apr 2024 08:25:08 +0000 Subject: [PATCH 2/3] remove comment --- yarn-project/p2p/src/service/discv5_service.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/p2p/src/service/discv5_service.test.ts b/yarn-project/p2p/src/service/discv5_service.test.ts index 8040b03e507..9041f4b816c 100644 --- a/yarn-project/p2p/src/service/discv5_service.test.ts +++ b/yarn-project/p2p/src/service/discv5_service.test.ts @@ -91,7 +91,7 @@ describe('Discv5Service', () => { await waitForPeers(node2, 1, 4000); const node2Peers = await Promise.all(node2.getAllPeers().map(async peer => (await peer.peerId()).toString())); - expect(node2Peers).toHaveLength(1); // + expect(node2Peers).toHaveLength(1); expect(node2Peers).toContain(node1.getPeerId().toString()); await node1.stop(); From b99458faa7c981a25aeaa55094719b80bfae595b Mon Sep 17 00:00:00 2001 From: spypsy Date: Wed, 24 Apr 2024 14:07:07 +0100 Subject: [PATCH 3/3] just use default value --- yarn-project/p2p/src/service/discv5_service.test.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/yarn-project/p2p/src/service/discv5_service.test.ts b/yarn-project/p2p/src/service/discv5_service.test.ts index 9041f4b816c..9228e1b87d0 100644 --- a/yarn-project/p2p/src/service/discv5_service.test.ts +++ b/yarn-project/p2p/src/service/discv5_service.test.ts @@ -4,7 +4,8 @@ import { BootstrapNode } from '../bootstrap/bootstrap.js'; import { DiscV5Service, PeerDiscoveryState } from './discV5_service.js'; import { createLibP2PPeerId } from './libp2p_service.js'; -const waitForPeers = (node: DiscV5Service, expectedCount: number, timeout = 5000): Promise => { +const waitForPeers = (node: DiscV5Service, expectedCount: number): Promise => { + const timeout = 5_000; return new Promise((resolve, reject) => { const timeoutId = setTimeout(() => { reject(new Error(`Timeout: Failed to connect to ${expectedCount} peers within ${timeout} ms`)); @@ -61,7 +62,7 @@ describe('Discv5Service', () => { const node2 = await createNode(port); await node1.start(); await node2.start(); - await waitForPeers(node2, 2, 4000); + await waitForPeers(node2, 2); const node1Peers = await Promise.all(node1.getAllPeers().map(async peer => (await peer.peerId()).toString())); const node2Peers = await Promise.all(node2.getAllPeers().map(async peer => (await peer.peerId()).toString())); @@ -82,13 +83,13 @@ describe('Discv5Service', () => { const node2 = await createNode(port); await node1.start(); await node2.start(); - await waitForPeers(node2, 2, 4000); + await waitForPeers(node2, 2); await node2.stop(); await bootNode.stop(); await node2.start(); - await waitForPeers(node2, 1, 4000); + await waitForPeers(node2, 1); const node2Peers = await Promise.all(node2.getAllPeers().map(async peer => (await peer.peerId()).toString())); expect(node2Peers).toHaveLength(1);