From 59fe98ceb3d20bad72d674625b9d255399291c01 Mon Sep 17 00:00:00 2001 From: Fabiana Cecin Date: Thu, 25 Jun 2026 23:04:29 -0300 Subject: [PATCH] fix: remove hardcoded ports in tests --- logos_delivery/waku/net/auto_port.nim | 2 +- logos_delivery/waku/net/net_config.nim | 3 + tests/node/test_wakunode_filter.nim | 28 ++-- tests/node/test_wakunode_peer_exchange.nim | 74 ++------- tests/node/test_wakunode_peer_manager.nim | 4 +- tests/test_peer_manager.nim | 33 ++-- tests/test_waku_dnsdisc.nim | 22 +-- tests/test_wakunode.nim | 31 ++-- tests/testlib/wakunode.nim | 7 + tests/waku_discv5/test_waku_discv5.nim | 175 ++++++++++----------- tests/waku_filter_v2/test_waku_client.nim | 6 +- tests/waku_peer_exchange/test_protocol.nim | 79 ++-------- tests/waku_peer_exchange/utils.nim | 31 +++- 13 files changed, 225 insertions(+), 270 deletions(-) diff --git a/logos_delivery/waku/net/auto_port.nim b/logos_delivery/waku/net/auto_port.nim index 38176d27d..3191b25a6 100644 --- a/logos_delivery/waku/net/auto_port.nim +++ b/logos_delivery/waku/net/auto_port.nim @@ -9,7 +9,7 @@ const AutoPortMax = 59000'u16 AutoPortAttemptTimeout = chronos.seconds(30) -proc getAutoPort*(): uint16 = +proc getAutoPort(): uint16 = var rng = initRand() uint16(rng.rand(AutoPortMin.int .. AutoPortMax.int)) diff --git a/logos_delivery/waku/net/net_config.nim b/logos_delivery/waku/net/net_config.nim index b5eda9d6c..8ece3a31a 100644 --- a/logos_delivery/waku/net/net_config.nim +++ b/logos_delivery/waku/net/net_config.nim @@ -74,6 +74,9 @@ proc isWsAddress*(ma: MultiAddress): bool = proc isQuicAddress*(ma: MultiAddress): bool = return ma.hasProtocol("quic-v1") +proc isP2pTcpAddress*(ma: MultiAddress): bool = + return ma.hasProtocol("tcp") and not ma.isWsAddress() + proc containsWsAddress(extMultiAddrs: seq[MultiAddress]): bool = return extMultiAddrs.filterIt(it.isWsAddress()).len > 0 diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 65c162c0a..58c5f3238 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -69,10 +69,10 @@ suite "Waku Filter - End to End": clientKey = generateSecp256k1Key() server = newTestWakuNode( - serverKey, parseIpAddress("0.0.0.0"), Port(23450), maxConnections = 300 + serverKey, parseIpAddress("0.0.0.0"), Port(0), maxConnections = 300 ) - client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) - clientClone = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) + clientClone = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) # Used for testing client restarts await allFutures(server.start(), client.start()) @@ -192,7 +192,7 @@ suite "Waku Filter - End to End": ## This line above causes the test to fail. I think ConnManager ## is not prepare for restarts and maybe we don't need that restart feature. - client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) await client.start() # Mimic restart by starting the clone # pushHandlerFuture = newFuture[(string, WakuMessage)]() @@ -587,9 +587,8 @@ suite "Waku Filter - End to End": var peers = newSeq[WakuNode](MaxFilterPeers) for index in 0 ..< MaxFilterPeers: - peers[index] = newTestWakuNode( - generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23551 + index) - ) + peers[index] = + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) await peers[index].start() await peers[index].mountFilterClient() @@ -740,15 +739,12 @@ suite "Waku Filter - End to End": peerManager = server.peerManager let - client1 = newTestWakuNode( - generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23552) - ) - client2 = newTestWakuNode( - generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23553) - ) - client3 = newTestWakuNode( - generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23554) - ) + client1 = + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + client2 = + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + client3 = + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) filterSubscribeRequest = createRequest( filterSubscribeType = FilterSubscribeType.SUBSCRIBE, pubsubTopic = some(DefaultPubsubTopic), diff --git a/tests/node/test_wakunode_peer_exchange.nim b/tests/node/test_wakunode_peer_exchange.nim index 47bd5b8af..e70abadc9 100644 --- a/tests/node/test_wakunode_peer_exchange.nim +++ b/tests/node/test_wakunode_peer_exchange.nim @@ -187,74 +187,28 @@ suite "Waku Peer Exchange with discv5": lightpush = false, filter = false, store = false, relay = true ) bindIp = parseIpAddress("0.0.0.0") - extIp = parseIpAddress("127.0.0.1") nodeKey1 = generateSecp256k1Key() - nodeTcpPort1 = Port(64010) - nodeUdpPort1 = Port(9000) - node1 = newTestWakuNode( - nodeKey1, - bindIp, - nodeTcpPort1, - some(extIp), - wakuFlags = some(flags), - discv5UdpPort = some(nodeUdpPort1), - ) + node1 = newTestWakuNode(nodeKey1, bindIp, Port(0), wakuFlags = some(flags)) nodeKey2 = generateSecp256k1Key() - nodeTcpPort2 = Port(64012) - nodeUdpPort2 = Port(9002) - node2 = newTestWakuNode( - nodeKey2, - bindIp, - nodeTcpPort2, - some(extIp), - wakuFlags = some(flags), - discv5UdpPort = some(nodeUdpPort2), - ) + node2 = newTestWakuNode(nodeKey2, bindIp, Port(0), wakuFlags = some(flags)) nodeKey3 = generateSecp256k1Key() - nodeTcpPort3 = Port(64014) - nodeUdpPort3 = Port(9004) - node3 = newTestWakuNode( - nodeKey3, - bindIp, - nodeTcpPort3, - some(extIp), - wakuFlags = some(flags), - discv5UdpPort = some(nodeUdpPort3), - ) - - # discv5 - let conf1 = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), - address: bindIp, - port: nodeUdpPort1, - privateKey: keys.PrivateKey(nodeKey1.skkey), - bootstrapRecords: @[], - autoupdateRecord: true, - ) - - let disc1 = - WakuDiscoveryV5.new(node1.rng, conf1, some(node1.enr), some(node1.peerManager)) - - let conf2 = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), - address: bindIp, - port: nodeUdpPort2, - privateKey: keys.PrivateKey(nodeKey2.skkey), - bootstrapRecords: @[disc1.protocol.getRecord()], - autoupdateRecord: true, - ) - - let disc2 = - WakuDiscoveryV5.new(node2.rng, conf2, some(node2.enr), some(node2.peerManager)) + node3 = newTestWakuNode(nodeKey3, bindIp, Port(0), wakuFlags = some(flags)) await allFutures(node1.start(), node2.start(), node3.start()) - let resultDisc1StartRes = await disc1.start() - assert resultDisc1StartRes.isOk(), resultDisc1StartRes.error - let resultDisc2StartRes = await disc2.start() - assert resultDisc2StartRes.isOk(), resultDisc2StartRes.error + + let disc1 = ( + await startDiscv5WithAutoPort(node1, keys.PrivateKey(nodeKey1.skkey), bindIp) + ).valueOr: + raiseAssert "disc1: " & error + let disc2 = ( + await startDiscv5WithAutoPort( + node2, keys.PrivateKey(nodeKey2.skkey), bindIp, @[disc1.protocol.getRecord()] + ) + ).valueOr: + raiseAssert "disc2: " & error ## When var attempts = 10 diff --git a/tests/node/test_wakunode_peer_manager.nim b/tests/node/test_wakunode_peer_manager.nim index a43f76d97..0f85d61fe 100644 --- a/tests/node/test_wakunode_peer_manager.nim +++ b/tests/node/test_wakunode_peer_manager.nim @@ -63,9 +63,9 @@ suite "Peer Manager": serverKey = generateSecp256k1Key() clientKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, listenIp, Port(3000)) + server = newTestWakuNode(serverKey, listenIp, Port(0)) serverPeerStore = server.peerManager.switch.peerStore - client = newTestWakuNode(clientKey, listenIp, Port(3001)) + client = newTestWakuNode(clientKey, listenIp, Port(0)) clientPeerStore = client.peerManager.switch.peerStore await allFutures(server.start(), client.start()) diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index d4c2af5b5..f537864ba 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -2,11 +2,13 @@ import std/[sequtils, times, sugar, net, options], + results, testutils/unittests, chronos, json_rpc/rpcserver, json_rpc/rpcclient, eth/keys, + eth/p2p/discoveryv5/enr, eth/common/eth_types, libp2p/[builders, switch, multiaddress], libp2p/protobuf/minprotobuf, @@ -34,6 +36,13 @@ import ./testlib/wakucore, ./testlib/wakunode +proc syncToBoundPort(node: WakuNode, key: keys.PrivateKey) = + let addrs = node.switch.peerInfo.listenAddrs + node.switch.peerInfo.addrs = addrs + node.announcedAddresses = addrs + node.enr.update(key, tcpPort = Opt.some(node.boundTcpPort())).isOkOr: + raiseAssert "failed to sync node ENR to bound tcp port: " & $error + procSuite "Peer Manager": asyncTest "connectPeer() works": # Create 2 nodes @@ -311,13 +320,13 @@ procSuite "Peer Manager": node1 = newTestWakuNode( generateSecp256k1Key(), getPrimaryIPAddr(), - Port(44048), + Port(0), peerStorage = storage, quicEnabled = false, ) - node2 = newTestWakuNode( - generateSecp256k1Key(), getPrimaryIPAddr(), Port(34023), quicEnabled = false - ) + node2Key = generateSecp256k1Key() + node2 = + newTestWakuNode(node2Key, getPrimaryIPAddr(), Port(0), quicEnabled = false) node1.mountMetadata(0, @[0'u16]).expect("Mounted Waku Metadata") node2.mountMetadata(0, @[0'u16]).expect("Mounted Waku Metadata") @@ -330,6 +339,8 @@ procSuite "Peer Manager": (await node2.mountRelay()).isOkOr: assert false, "Failed to mount relay" + node2.syncToBoundPort(keys.PrivateKey(node2Key.skkey)) + let peerInfo2 = node2.switch.peerInfo var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() remotePeerInfo2.enr = some(node2.enr) @@ -354,7 +365,7 @@ procSuite "Peer Manager": let node3 = newTestWakuNode( generateSecp256k1Key(), parseIpAddress("127.0.0.1"), - Port(56037), + Port(0), peerStorage = storage, quicEnabled = false, ) @@ -392,13 +403,13 @@ procSuite "Peer Manager": node1 = newTestWakuNode( generateSecp256k1Key(), getPrimaryIPAddr(), - Port(44048), + Port(0), peerStorage = storage, quicEnabled = false, ) - node2 = newTestWakuNode( - generateSecp256k1Key(), getPrimaryIPAddr(), Port(34023), quicEnabled = false - ) + node2Key = generateSecp256k1Key() + node2 = + newTestWakuNode(node2Key, getPrimaryIPAddr(), Port(0), quicEnabled = false) node1.mountMetadata(0, @[0'u16]).expect("Mounted Waku Metadata") node2.mountMetadata(0, @[0'u16]).expect("Mounted Waku Metadata") @@ -411,6 +422,8 @@ procSuite "Peer Manager": (await node2.mountRelay()).isOkOr: assert false, "Failed to mount relay" + node2.syncToBoundPort(keys.PrivateKey(node2Key.skkey)) + let peerInfo2 = node2.switch.peerInfo var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() remotePeerInfo2.enr = some(node2.enr) @@ -435,7 +448,7 @@ procSuite "Peer Manager": let node3 = newTestWakuNode( generateSecp256k1Key(), parseIpAddress("127.0.0.1"), - Port(56037), + Port(0), peerStorage = storage, quicEnabled = false, ) diff --git a/tests/test_waku_dnsdisc.nim b/tests/test_waku_dnsdisc.nim index d0430adb0..13b5ef6c8 100644 --- a/tests/test_waku_dnsdisc.nim +++ b/tests/test_waku_dnsdisc.nim @@ -17,25 +17,22 @@ import logos_delivery/waku/discovery/waku_dnsdisc, ./testlib/common, ./testlib/wakucore, - ./testlib/wakunode + ./testlib/wakunode, + ./waku_enr/utils suite "Waku DNS Discovery": asyncTest "Waku DNS Discovery end-to-end": ## Tests integrated DNS discovery, from building ## the tree to connecting to discovered nodes - # Create nodes and ENR. These will be added to the discoverable list let - bindIp = parseIpAddress("0.0.0.0") + bindIp = parseIpAddress("127.0.0.1") nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, bindIp, Port(63500)) - enr1 = node1.enr + node1 = newTestWakuNode(nodeKey1, bindIp, Port(0)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, bindIp, Port(63502)) - enr2 = node2.enr + node2 = newTestWakuNode(nodeKey2, bindIp, Port(0)) nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, bindIp, Port(63503)) - enr3 = node3.enr + node3 = newTestWakuNode(nodeKey3, bindIp, Port(0)) (await node1.mountRelay()).isOkOr: assert false, "Failed to mount relay" @@ -45,6 +42,11 @@ suite "Waku DNS Discovery": assert false, "Failed to mount relay" await allFutures([node1.start(), node2.start(), node3.start()]) + let + enr1 = newTestEnrRecord(nodeKey1, $bindIp, uint16(node1.boundTcpPort()), 0) + enr2 = newTestEnrRecord(nodeKey2, $bindIp, uint16(node2.boundTcpPort()), 0) + enr3 = newTestEnrRecord(nodeKey3, $bindIp, uint16(node3.boundTcpPort()), 0) + # Build and sign tree var tree = buildTree( 1, # Seq no @@ -76,7 +78,7 @@ suite "Waku DNS Discovery": let nodeKey4 = generateSecp256k1Key() - node4 = newTestWakuNode(nodeKey4, bindIp, Port(63504)) + node4 = newTestWakuNode(nodeKey4, bindIp, Port(0)) (await node4.mountRelay()).isOkOr: assert false, "Failed to mount relay" diff --git a/tests/test_wakunode.nim b/tests/test_wakunode.nim index 902ca7192..c05a15ad9 100644 --- a/tests/test_wakunode.nim +++ b/tests/test_wakunode.nim @@ -27,9 +27,9 @@ suite "WakuNode": asyncTest "Protocol matcher works as expected": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(61000)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61002)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) shard = DefaultRelayShard contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -95,15 +95,10 @@ suite "WakuNode": let nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode( - nodeKey1, parseIpAddress("0.0.0.0"), Port(61020), nameResolver = resolver + nodeKey1, parseIpAddress("0.0.0.0"), Port(0), nameResolver = resolver ) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61022)) - - # Construct DNS multiaddr for node2 - let - node2PeerId = $(node2.switch.peerInfo.peerId) - node2Dns4Addr = "/dns4/localhost/tcp/61022/p2p/" & node2PeerId + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) (await node1.mountRelay()).isOkOr: assert false, "Failed to mount relay" @@ -112,6 +107,12 @@ suite "WakuNode": await allFutures([node1.start(), node2.start()]) + # Construct DNS multiaddr for node2 + let + node2PeerId = $(node2.switch.peerInfo.peerId) + node2Dns4Addr = + "/dns4/localhost/tcp/" & $node2.boundTcpPort() & "/p2p/" & node2PeerId + await node1.connectToNodes(@[node2Dns4Addr]) check: @@ -172,7 +173,7 @@ suite "WakuNode": discard newTestWakuNode( nodeKey1, parseIpAddress("0.0.0.0"), - bindPort = Port(61004), + bindPort = Port(0), wsBindPort = Port(8000), wssEnabled = true, secureKey = "../../waku/node/key_dummy.txt", @@ -221,7 +222,7 @@ suite "WakuNode": let nodeKey = generateSecp256k1Key() bindIp = parseIpAddress("0.0.0.0") - bindPort = Port(61006) + bindPort = Port(0) extIp = some(getPrimaryIPAddr()) extPort = some(Port(61008)) node = @@ -377,13 +378,13 @@ suite "WakuNode": node1 = newTestWakuNode( nodeKey1, parseIpAddress("0.0.0.0"), - Port(61014), + Port(0), agentString = some(expectedAgentString1), ) # node with default agent string from libp2p nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61016)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) await node1.start() (await node1.mountRelay()).isOkOr: @@ -420,13 +421,13 @@ suite "WakuNode": node1 = newTestWakuNode( nodeKey1, parseIpAddress("0.0.0.0"), - Port(61018), + Port(0), extMultiAddrs = @[expectedMultiaddress1], ) # node with default multiaddress nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61020)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) await node1.start() (await node1.mountRelay()).isOkOr: diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 65b165a08..c0cbf3765 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -3,6 +3,7 @@ import results, chronos, libp2p/switch, + libp2p/wire, libp2p/builders, libp2p/nameresolving/nameresolver, libp2p/crypto/crypto as libp2p_keys, @@ -170,3 +171,9 @@ proc newTestWakuNode*( ) return builder.build().get() + +proc boundTcpPort*(node: WakuNode): Port = + for a in node.switch.peerInfo.listenAddrs: + if a.isP2pTcpAddress(): + return initTAddress(a).get().port + raiseAssert "no tcp listen address in " & $node.switch.peerInfo.listenAddrs diff --git a/tests/waku_discv5/test_waku_discv5.nim b/tests/waku_discv5/test_waku_discv5.nim index b794ec918..3ef54bbea 100644 --- a/tests/waku_discv5/test_waku_discv5.nim +++ b/tests/waku_discv5/test_waku_discv5.nim @@ -19,6 +19,7 @@ import waku_core/codecs, waku_enr, discovery/waku_discv5, + net/auto_port, waku_enr/capabilities, factory/conf_builder/conf_builder, waku, @@ -179,51 +180,57 @@ suite "Waku Discovery v5": suite "findRandomPeers": proc buildNode( tcpPort: uint16, - udpPort: uint16, bindIp: string = "0.0.0.0", extIp: string = "127.0.0.1", indices: seq[uint64] = @[], recordFlags: Option[CapabilitiesBitfield] = none(CapabilitiesBitfield), bootstrapRecords: seq[waku_enr.Record] = @[], - ): (WakuDiscoveryV5, Record) {.raises: [ValueError, LPError].} = - let - privKey = generateSecp256k1Key() - record = newTestEnrRecord( - privKey = privKey, - extIp = extIp, - tcpPort = tcpPort, - udpPort = udpPort, - indices = indices, - flags = recordFlags, - ) - node = discv5_utils.newTestDiscv5( - privKey = privKey, - bindIp = bindIp, - tcpPort = tcpPort, - udpPort = udpPort, - record = record, - bootstrapRecords = bootstrapRecords, - ) + ): Future[Result[(WakuDiscoveryV5, waku_enr.Record), string]] {.async.} = + let privKey = generateSecp256k1Key() + proc attempt( + p: Port + ): Future[Result[(WakuDiscoveryV5, waku_enr.Record), string]] {. + async: (raises: []) + .} = + let (node, record) = + try: + let record = newTestEnrRecord( + privKey = privKey, + extIp = extIp, + tcpPort = tcpPort, + udpPort = uint16(p), + indices = indices, + flags = recordFlags, + ) + ( + discv5_utils.newTestDiscv5( + privKey = privKey, + bindIp = bindIp, + tcpPort = tcpPort, + udpPort = uint16(p), + record = record, + bootstrapRecords = bootstrapRecords, + ), + record, + ) + except CatchableError as e: + return err("could not build discv5 node: " & e.msg) + (await node.start()).isOkOr: + return err(error) + ok((node, record)) - (node, record) + return await tryWithAutoPort[(WakuDiscoveryV5, waku_enr.Record)](Port(0), attempt) asyncTest "find random peers without predicate": # Given 3 nodes - let - (node1, record1) = buildNode(tcpPort = 61500u16, udpPort = 9000u16) - (node2, record2) = buildNode(tcpPort = 61502u16, udpPort = 9002u16) - (node3, record3) = buildNode( - tcpPort = 61504u16, udpPort = 9004u16, bootstrapRecords = @[record1, record2] - ) - - let res1 = await node1.start() - assertResultOk res1 - - let res2 = await node2.start() - assertResultOk res2 - - let res3 = await node3.start() - assertResultOk res3 + let (node1, record1) = (await buildNode(tcpPort = 61500u16)).valueOr: + raiseAssert "node1: " & error + let (node2, record2) = (await buildNode(tcpPort = 61502u16)).valueOr: + raiseAssert "node2: " & error + let (node3, record3) = ( + await buildNode(tcpPort = 61504u16, bootstrapRecords = @[record1, record2]) + ).valueOr: + raiseAssert "node3: " & error await sleepAsync(FUTURE_TIMEOUT) @@ -254,45 +261,39 @@ suite "Waku Discovery v5": return capabilities.get().supportsCapability(Capabilities.Store) # Given 4 nodes - let - (node3, record3) = buildNode( + let (node3, record3) = ( + await buildNode( tcpPort = 61504u16, - udpPort = 9004u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Filter)), ) - (node4, record4) = buildNode( + ).valueOr: + raiseAssert "node3: " & error + let (node4, record4) = ( + await buildNode( tcpPort = 61506u16, - udpPort = 9006u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), ) - (node2, record2) = buildNode( + ).valueOr: + raiseAssert "node4: " & error + let (node2, record2) = ( + await buildNode( tcpPort = 61502u16, - udpPort = 9002u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), bootstrapRecords = @[record3, record4], ) - (node1, record1) = buildNode( + ).valueOr: + raiseAssert "node2: " & error + let (node1, record1) = ( + await buildNode( tcpPort = 61500u16, - udpPort = 9000u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay)), bootstrapRecords = @[record2], ) - - # Start nodes' discoveryV5 protocols - let res1 = await node1.start() - assertResultOk res1 - - let res2 = await node2.start() - assertResultOk res2 - - let res3 = await node3.start() - assertResultOk res3 - - let res4 = await node4.start() - assertResultOk res4 + ).valueOr: + raiseAssert "node1: " & error await sleepAsync(FUTURE_TIMEOUT) @@ -312,46 +313,40 @@ suite "Waku Discovery v5": ## Setup # Records - let - (node3, record3) = buildNode( + let (node3, record3) = ( + await buildNode( tcpPort = 61504u16, - udpPort = 9004u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Filter)), ) - (node4, record4) = buildNode( + ).valueOr: + raiseAssert "node3: " & error + let (node4, record4) = ( + await buildNode( tcpPort = 61506u16, - udpPort = 9006u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), ) - (node2, record2) = buildNode( + ).valueOr: + raiseAssert "node4: " & error + let (node2, record2) = ( + await buildNode( tcpPort = 61502u16, - udpPort = 9002u16, recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay, Capabilities.Store)), bootstrapRecords = @[record3, record4], ) - let (node1, record1) = buildNode( - tcpPort = 61500u16, - udpPort = 9000u16, - recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay)), - indices = @[0u64, 0u64, 1u64, 0u64, 0u64], - bootstrapRecords = @[record2], - ) - - # Start nodes' discoveryV5 protocols - let res1 = await node1.start() - assertResultOk res1 - - let res2 = await node2.start() - assertResultOk res2 - - let res3 = await node3.start() - assertResultOk res3 - - let res4 = await node4.start() - assertResultOk res4 + ).valueOr: + raiseAssert "node2: " & error + let (node1, record1) = ( + await buildNode( + tcpPort = 61500u16, + recordFlags = some(CapabilitiesBitfield.init(Capabilities.Relay)), + indices = @[0u64, 0u64, 1u64, 0u64, 0u64], + bootstrapRecords = @[record2], + ) + ).valueOr: + raiseAssert "node1: " & error ## leave some time for discv5 to act await sleepAsync(chronos.seconds(10)) @@ -425,7 +420,7 @@ suite "Waku Discovery v5": confBuilder.withNodeKey(libp2p_keys.PrivateKey.random(Secp256k1, myRng)[]) confBuilder.discv5Conf.withEnabled(true) - confBuilder.discv5Conf.withUdpPort(9000.Port) + confBuilder.discv5Conf.withUdpPort(Port(0)) let conf = confBuilder.build().valueOr: raiseAssert error @@ -437,8 +432,8 @@ suite "Waku Discovery v5": confBuilder.withNodeKey(crypto.PrivateKey.random(Secp256k1, myRng)[]) confBuilder.discv5Conf.withBootstrapNodes(@[waku0.node.enr.toURI()]) confBuilder.discv5Conf.withEnabled(true) - confBuilder.discv5Conf.withUdpPort(9001.Port) - confBuilder.withP2pTcpPort(60001.Port) + confBuilder.discv5Conf.withUdpPort(Port(0)) + confBuilder.withP2pTcpPort(Port(0)) let conf1 = confBuilder.build().valueOr: raiseAssert error @@ -452,8 +447,8 @@ suite "Waku Discovery v5": await waku1.node.mountRendezvous(conf.clusterId) confBuilder.discv5Conf.withBootstrapNodes(@[waku1.node.enr.toURI()]) - confBuilder.withP2pTcpPort(60003.Port) - confBuilder.discv5Conf.withUdpPort(9003.Port) + confBuilder.withP2pTcpPort(Port(0)) + confBuilder.discv5Conf.withUdpPort(Port(0)) confBuilder.withNodeKey(crypto.PrivateKey.random(Secp256k1, myRng)[]) let conf2 = confBuilder.build().valueOr: diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index c5bd3c558..c3e39eebc 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -2258,11 +2258,11 @@ suite "Waku Filter - End to End": contentTopicSeq = @[contentTopic] client = - newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23450)) + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) server = - newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23451)) + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) client2nd = - newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(23452)) + newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) await allFutures(server.start(), client.start(), client2nd.start()) diff --git a/tests/waku_peer_exchange/test_protocol.nim b/tests/waku_peer_exchange/test_protocol.nim index 93c522c06..e3c5bf579 100644 --- a/tests/waku_peer_exchange/test_protocol.nim +++ b/tests/waku_peer_exchange/test_protocol.nim @@ -40,76 +40,31 @@ suite "Waku Peer Exchange": lightpush = false, filter = false, store = false, relay = true ) bindIp = parseIpAddress("0.0.0.0") - extIp = parseIpAddress("127.0.0.1") nodeKey1 = generateSecp256k1Key() - nodeTcpPort1 = Port(64010) - nodeUdpPort1 = Port(9000) - node1 = newTestWakuNode( - nodeKey1, - bindIp, - nodeTcpPort1, - some(extIp), - wakuFlags = some(flags), - discv5UdpPort = some(nodeUdpPort1), - ) + node1 = newTestWakuNode(nodeKey1, bindIp, Port(0), wakuFlags = some(flags)) nodeKey2 = generateSecp256k1Key() - nodeTcpPort2 = Port(64012) - nodeUdpPort2 = Port(9002) - node2 = newTestWakuNode( - nodeKey2, - bindIp, - nodeTcpPort2, - some(extIp), - wakuFlags = some(flags), - discv5UdpPort = some(nodeUdpPort2), - ) + node2 = newTestWakuNode(nodeKey2, bindIp, Port(0), wakuFlags = some(flags)) nodeKey3 = generateSecp256k1Key() - nodeTcpPort3 = Port(64014) - nodeUdpPort3 = Port(9004) - node3 = newTestWakuNode( - nodeKey3, - bindIp, - nodeTcpPort3, - some(extIp), - wakuFlags = some(flags), - discv5UdpPort = some(nodeUdpPort3), - ) - - # discv5 - let conf1 = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), - address: bindIp, - port: nodeUdpPort1, - privateKey: keys.PrivateKey(nodeKey1.skkey), - bootstrapRecords: @[], - autoupdateRecord: true, - ) - - let disc1 = WakuDiscoveryV5.new( - node1.rng, conf1, some(node1.enr), some(node1.peerManager) - ) - - let conf2 = WakuDiscoveryV5Config( - discv5Config: none(DiscoveryConfig), - address: bindIp, - port: nodeUdpPort2, - privateKey: keys.PrivateKey(nodeKey2.skkey), - bootstrapRecords: @[disc1.protocol.getRecord()], - autoupdateRecord: true, - ) - - let disc2 = WakuDiscoveryV5.new( - node2.rng, conf2, some(node2.enr), some(node2.peerManager) - ) + node3 = newTestWakuNode(nodeKey3, bindIp, Port(0), wakuFlags = some(flags)) await allFutures(node1.start(), node2.start(), node3.start()) - let resultDisc1StartRes = await disc1.start() - assert resultDisc1StartRes.isOk(), resultDisc1StartRes.error - let resultDisc2StartRes = await disc2.start() - assert resultDisc2StartRes.isOk(), resultDisc2StartRes.error + + let disc1 = ( + await startDiscv5WithAutoPort(node1, keys.PrivateKey(nodeKey1.skkey), bindIp) + ).valueOr: + raiseAssert "disc1: " & error + let disc2 = ( + await startDiscv5WithAutoPort( + node2, + keys.PrivateKey(nodeKey2.skkey), + bindIp, + @[disc1.protocol.getRecord()], + ) + ).valueOr: + raiseAssert "disc2: " & error ## When var attempts = 10 diff --git a/tests/waku_peer_exchange/utils.nim b/tests/waku_peer_exchange/utils.nim index c72405c51..f762541f8 100644 --- a/tests/waku_peer_exchange/utils.nim +++ b/tests/waku_peer_exchange/utils.nim @@ -1,7 +1,8 @@ {.used.} import - std/options, + std/[options, net], + results, testutils/unittests, chronos, libp2p/switch, @@ -14,6 +15,7 @@ import logos_delivery/waku/[ waku_node, discovery/waku_discv5, + net/auto_port, waku_peer_exchange, waku_peer_exchange/rpc, waku_peer_exchange/protocol, @@ -23,6 +25,33 @@ import ], ../testlib/[futures, wakucore, assertions] +proc startDiscv5WithAutoPort*( + node: WakuNode, + key: keys.PrivateKey, + bindIp: IpAddress, + bootstrapRecords: seq[enr.Record] = @[], +): Future[Result[WakuDiscoveryV5, string]] {.async.} = + proc attempt( + p: Port + ): Future[Result[WakuDiscoveryV5, string]] {.async: (raises: []).} = + var record = node.enr + record.update(key, udpPort = Opt.some(p)).isOkOr: + return err("could not set discv5 udp port in enr: " & $error) + let conf = WakuDiscoveryV5Config( + discv5Config: none(DiscoveryConfig), + address: bindIp, + port: p, + privateKey: key, + bootstrapRecords: bootstrapRecords, + autoupdateRecord: true, + ) + let wd = WakuDiscoveryV5.new(node.rng, conf, some(record), some(node.peerManager)) + (await wd.start()).isOkOr: + return err(error) + return ok(wd) + + return await tryWithAutoPort[WakuDiscoveryV5](Port(0), attempt) + proc dialForPeerExchange*( client: WakuNode, peerInfo: RemotePeerInfo,