mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-07-24 00:53:13 +00:00
fix: remove hardcoded ports in tests
This commit is contained in:
parent
fc15430e52
commit
59fe98ceb3
@ -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))
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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,
|
||||
)
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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())
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user