fix: remove hardcoded ports in tests

This commit is contained in:
Fabiana Cecin 2026-06-25 23:04:29 -03:00
parent fc15430e52
commit 59fe98ceb3
No known key found for this signature in database
GPG Key ID: BCAB8A55CB51B6C7
13 changed files with 225 additions and 270 deletions

View File

@ -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))

View File

@ -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

View File

@ -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),

View File

@ -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

View File

@ -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())

View File

@ -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,
)

View File

@ -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"

View File

@ -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:

View File

@ -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

View File

@ -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:

View File

@ -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())

View File

@ -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

View File

@ -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,