feat(testlib): added global tests rng and waku2 sub-module

This commit is contained in:
Lorenzo Delgado 2023-02-13 11:43:49 +01:00 committed by GitHub
parent a7f0a7f704
commit 6782398989
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 497 additions and 574 deletions

View File

@ -43,6 +43,3 @@ proc getRng(): ref rand.HmacDrbgContext =
template rng*(): ref rand.HmacDrbgContext = template rng*(): ref rand.HmacDrbgContext =
getRng() getRng()
proc generateKey*(): crypto.PrivateKey =
return crypto.PrivateKey.random(Secp256k1, rng[])[]

View File

@ -1,16 +1,17 @@
{.used.} {.used.}
import import
std/[options,sequtils], std/[options, sequtils],
chronos, chronos,
stew/byteutils, stew/byteutils,
testutils/unittests, testutils/unittests
import
../../waku/v2/utils/wakuenr, ../../waku/v2/utils/wakuenr,
../test_helpers ./testlib/waku2
procSuite "ENR utils": procSuite "ENR utils":
asyncTest "Parse multiaddr field": test "Parse multiaddr field":
let let
reasonable = "0x000A047F0000010601BADD03".hexToSeqByte() reasonable = "0x000A047F0000010601BADD03".hexToSeqByte()
reasonableDns4 = ("0x002F36286E6F64652D30312E646F2D616D73332E77616B7576322E746" & reasonableDns4 = ("0x002F36286E6F64652D30312E646F2D616D73332E77616B7576322E746" &
@ -39,12 +40,12 @@ procSuite "ENR utils":
# Empty # Empty
empty.toMultiAddresses().len() == 0 empty.toMultiAddresses().len() == 0
asyncTest "Init ENR for Waku Usage": test "Init ENR for Waku Usage":
# Tests RFC31 encoding "happy path" # Tests RFC31 encoding "happy path"
let let
enrIp = ValidIpAddress.init("127.0.0.1") enrIp = ValidIpAddress.init("127.0.0.1")
enrTcpPort, enrUdpPort = Port(61101) enrTcpPort, enrUdpPort = Port(61101)
enrKey = wakuenr.crypto.PrivateKey.random(Secp256k1, rng[])[] enrKey = generateSecp256k1Key()
wakuFlags = initWakuFlags(false, true, false, true) wakuFlags = initWakuFlags(false, true, false, true)
multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[], multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[],
MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss")[]] MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss")[]]
@ -72,12 +73,12 @@ procSuite "ENR utils":
decodedAddrs.contains(MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[]) decodedAddrs.contains(MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[])
decodedAddrs.contains(MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss")[]) decodedAddrs.contains(MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss")[])
asyncTest "Strip multiaddr peerId": test "Strip multiaddr peerId":
# Tests that peerId is stripped of multiaddrs as per RFC31 # Tests that peerId is stripped of multiaddrs as per RFC31
let let
enrIp = ValidIpAddress.init("127.0.0.1") enrIp = ValidIpAddress.init("127.0.0.1")
enrTcpPort, enrUdpPort = Port(61102) enrTcpPort, enrUdpPort = Port(61102)
enrKey = wakuenr.crypto.PrivateKey.random(Secp256k1, rng[])[] enrKey = generateSecp256k1Key()
multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr31iDQpSN5Qa882BCjjwgrD")[]] multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr31iDQpSN5Qa882BCjjwgrD")[]]
let let
@ -92,7 +93,7 @@ procSuite "ENR utils":
check decodedAddrs.contains(MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss")[]) # Peer Id has been stripped check decodedAddrs.contains(MultiAddress.init("/ip4/127.0.0.1/tcp/443/wss")[]) # Peer Id has been stripped
asyncTest "Decode ENR with multiaddrs field": test "Decode ENR with multiaddrs field":
let let
# Known values correspond to shared test vectors with other Waku implementations # Known values correspond to shared test vectors with other Waku implementations
knownIp = ValidIpAddress.init("18.223.219.100") knownIp = ValidIpAddress.init("18.223.219.100")
@ -126,11 +127,11 @@ procSuite "ENR utils":
for knownMultiaddr in knownMultiaddrs: for knownMultiaddr in knownMultiaddrs:
check decodedAddrs.contains(knownMultiaddr) check decodedAddrs.contains(knownMultiaddr)
asyncTest "Supports specific capabilities encoded in the ENR": test "Supports specific capabilities encoded in the ENR":
let let
enrIp = ValidIpAddress.init("127.0.0.1") enrIp = ValidIpAddress.init("127.0.0.1")
enrTcpPort, enrUdpPort = Port(60000) enrTcpPort, enrUdpPort = Port(60000)
enrKey = wakuenr.crypto.PrivateKey.random(Secp256k1, rng[])[] enrKey = generateSecp256k1Key()
multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[]] multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[]]
# TODO: Refactor enr.Record.init, provide enums as inputs enr.Record.init(capabilites=[Store,Filter]) # TODO: Refactor enr.Record.init, provide enums as inputs enr.Record.init(capabilites=[Store,Filter])
@ -166,11 +167,11 @@ procSuite "ENR utils":
for j, capability in @[Lightpush, Filter, Store, Relay]: for j, capability in @[Lightpush, Filter, Store, Relay]:
check expectedCapabilities[i][j] == record.supportsCapability(capability) check expectedCapabilities[i][j] == record.supportsCapability(capability)
asyncTest "Get all supported capabilities encoded in the ENR": test "Get all supported capabilities encoded in the ENR":
let let
enrIp = ValidIpAddress.init("127.0.0.1") enrIp = ValidIpAddress.init("127.0.0.1")
enrTcpPort, enrUdpPort = Port(60000) enrTcpPort, enrUdpPort = Port(60000)
enrKey = wakuenr.crypto.PrivateKey.random(Secp256k1, rng[])[] enrKey = generateSecp256k1Key()
multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[]] multiaddrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/442/ws")[]]
records = @[0b0000_0000'u8, records = @[0b0000_0000'u8,
@ -196,7 +197,7 @@ procSuite "ENR utils":
for i, actualExpetedTuple in zip(records, expectedCapabilities): for i, actualExpetedTuple in zip(records, expectedCapabilities):
check actualExpetedTuple[0].getCapabilities() == actualExpetedTuple[1] check actualExpetedTuple[0].getCapabilities() == actualExpetedTuple[1]
asyncTest "Get supported capabilities of a non waku node": test "Get supported capabilities of a non waku node":
# non waku enr, i.e. Ethereum one # non waku enr, i.e. Ethereum one
let nonWakuEnr = "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2G"& let nonWakuEnr = "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2G"&

View File

@ -7,13 +7,14 @@ import
import import
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/node/message_cache, ../../waku/v2/node/message_cache,
./testlib/common ./testlib/common,
./testlib/waku2
type TestMessageCache = MessageCache[(PubsubTopic, ContentTopic)] type TestMessageCache = MessageCache[(PubsubTopic, ContentTopic)]
suite "MessageCache": suite "MessageCache":
test "subscribe to topic": test "subscribe to topic":
## Given ## Given
let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic"))
let cache = TestMessageCache.init() let cache = TestMessageCache.init()
@ -26,7 +27,7 @@ suite "MessageCache":
cache.isSubscribed(testTopic) cache.isSubscribed(testTopic)
test "unsubscribe from topic": test "unsubscribe from topic":
## Given ## Given
let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic"))
let cache = TestMessageCache.init() let cache = TestMessageCache.init()
@ -40,13 +41,13 @@ suite "MessageCache":
## Then ## Then
check: check:
not cache.isSubscribed(testTopic) not cache.isSubscribed(testTopic)
test "get messages of a subscribed topic": test "get messages of a subscribed topic":
## Given ## Given
let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic"))
let testMessage = fakeWakuMessage() let testMessage = fakeWakuMessage()
let cache = TestMessageCache.init() let cache = TestMessageCache.init()
# Init cache content # Init cache content
cache.subscribe(testTopic) cache.subscribe(testTopic)
@ -65,7 +66,7 @@ suite "MessageCache":
## Given ## Given
let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic"))
let testMessage = fakeWakuMessage() let testMessage = fakeWakuMessage()
let cache = TestMessageCache.init() let cache = TestMessageCache.init()
# Init cache content # Init cache content
cache.subscribe(testTopic) cache.subscribe(testTopic)
@ -81,7 +82,7 @@ suite "MessageCache":
check: check:
res.isOk() res.isOk()
res.get().len == 0 res.get().len == 0
test "get messages of a non-subscribed topic": test "get messages of a non-subscribed topic":
## Given ## Given
@ -105,7 +106,7 @@ suite "MessageCache":
cache.subscribe(testTopic) cache.subscribe(testTopic)
## When ## When
cache.addMessage(testTopic, testMessage) cache.addMessage(testTopic, testMessage)
## Then ## Then
@ -120,7 +121,7 @@ suite "MessageCache":
let testMessage = fakeWakuMessage() let testMessage = fakeWakuMessage()
let cache = TestMessageCache.init() let cache = TestMessageCache.init()
## When ## When
cache.addMessage(testTopic, testMessage) cache.addMessage(testTopic, testMessage)
## Then ## Then
@ -129,7 +130,7 @@ suite "MessageCache":
res.isErr() res.isErr()
res.error() == "Not subscribed to topic" res.error() == "Not subscribed to topic"
test "add messages beyond the capacity": test "add messages beyond the capacity":
## Given ## Given
let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic"))
@ -142,11 +143,11 @@ suite "MessageCache":
let cache = TestMessageCache.init(capacity = 2) let cache = TestMessageCache.init(capacity = 2)
cache.subscribe(testTopic) cache.subscribe(testTopic)
## When ## When
for msg in testMessages: for msg in testMessages:
cache.addMessage(testTopic, msg) cache.addMessage(testTopic, msg)
## Then ## Then
let messages = cache.getMessages(testTopic).tryGet() let messages = cache.getMessages(testTopic).tryGet()
check: check:
messages == testMessages[1..2] messages == testMessages[1..2]

View File

@ -12,8 +12,7 @@ import
import import
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../../waku/v2/utils/peers, ../../waku/v2/utils/peers,
../test_helpers, ./testlib/waku2
./testlib/common
procSuite "Peer Exchange": procSuite "Peer Exchange":
asyncTest "GossipSub (relay) peer exchange": asyncTest "GossipSub (relay) peer exchange":
@ -22,11 +21,11 @@ procSuite "Peer Exchange":
# Create nodes and ENR. These will be added to the discoverable list # Create nodes and ENR. These will be added to the discoverable list
let let
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, bindIp, Port(61100)) node1 = WakuNode.new(nodeKey1, bindIp, Port(61100))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, bindIp, Port(61102), sendSignedPeerRecord = true) node2 = WakuNode.new(nodeKey2, bindIp, Port(61102), sendSignedPeerRecord = true)
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, bindIp, Port(61103), sendSignedPeerRecord = true) node3 = WakuNode.new(nodeKey3, bindIp, Port(61103), sendSignedPeerRecord = true)
var var

View File

@ -28,13 +28,14 @@ import
../../waku/v2/protocol/waku_lightpush, ../../waku/v2/protocol/waku_lightpush,
../../waku/v2/protocol/waku_peer_exchange, ../../waku/v2/protocol/waku_peer_exchange,
../../waku/v2/protocol/waku_swap/waku_swap, ../../waku/v2/protocol/waku_swap/waku_swap,
../test_helpers, ./testlib/common,
./testlib/testutils ./testlib/testutils,
./testlib/waku2
procSuite "Peer Manager": procSuite "Peer Manager":
asyncTest "Peer dialing works": asyncTest "Peer dialing works":
# Create 2 nodes # Create 2 nodes
let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.start()))
await allFutures(nodes.mapIt(it.mountRelay())) await allFutures(nodes.mapIt(it.mountRelay()))
@ -59,7 +60,7 @@ procSuite "Peer Manager":
asyncTest "Dialing fails gracefully": asyncTest "Dialing fails gracefully":
# Create 2 nodes # Create 2 nodes
let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
await nodes[0].start() await nodes[0].start()
await nodes[0].mountRelay() await nodes[0].mountRelay()
@ -77,19 +78,17 @@ procSuite "Peer Manager":
asyncTest "Adding, selecting and filtering peers work": asyncTest "Adding, selecting and filtering peers work":
let let
node = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
# Create filter peer # Create filter peer
filterLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() filterLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet()
filterKey = crypto.PrivateKey.random(ECDSA, rng[]).get() filterPeer = PeerInfo.new(generateEcdsaKey(), @[filterLoc])
filterPeer = PeerInfo.new(filterKey, @[filterLoc])
# Create swap peer # Create swap peer
swapLoc = MultiAddress.init("/ip4/127.0.0.2/tcp/2").tryGet() swapLoc = MultiAddress.init("/ip4/127.0.0.2/tcp/2").tryGet()
swapKey = crypto.PrivateKey.random(ECDSA, rng[]).get() swapPeer = PeerInfo.new(generateEcdsaKey(), @[swapLoc])
swapPeer = PeerInfo.new(swapKey, @[swapLoc])
# Create store peer # Create store peer
storeLoc = MultiAddress.init("/ip4/127.0.0.3/tcp/4").tryGet() storeLoc = MultiAddress.init("/ip4/127.0.0.3/tcp/4").tryGet()
storeKey = crypto.PrivateKey.random(ECDSA, rng[]).get() storePeer = PeerInfo.new(generateEcdsaKey(), @[storeLoc])
storePeer = PeerInfo.new(storeKey, @[storeLoc])
await node.start() await node.start()
@ -120,7 +119,7 @@ procSuite "Peer Manager":
asyncTest "Peer manager keeps track of connections": asyncTest "Peer manager keeps track of connections":
# Create 2 nodes # Create 2 nodes
let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
await nodes[0].start() await nodes[0].start()
# Do not start node2 # Do not start node2
@ -157,7 +156,7 @@ procSuite "Peer Manager":
asyncTest "Peer manager updates failed peers correctly": asyncTest "Peer manager updates failed peers correctly":
# Create 2 nodes # Create 2 nodes
let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..<2).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
await nodes[0].start() await nodes[0].start()
await nodes[0].mountRelay() await nodes[0].mountRelay()
@ -209,10 +208,8 @@ procSuite "Peer Manager":
let let
database = SqliteDatabase.new(":memory:")[] database = SqliteDatabase.new(":memory:")[]
storage = WakuPeerStorage.new(database)[] storage = WakuPeerStorage.new(database)[]
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage)
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[]
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0))
peerInfo2 = node2.switch.peerInfo peerInfo2 = node2.switch.peerInfo
await node1.start() await node1.start()
@ -230,8 +227,7 @@ procSuite "Peer Manager":
# Simulate restart by initialising a new node using the same storage # Simulate restart by initialising a new node using the same storage
let let
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] node3 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage)
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage)
await node3.start() await node3.start()
check: check:
@ -255,10 +251,8 @@ procSuite "Peer Manager":
let let
database = SqliteDatabase.new(":memory:")[] database = SqliteDatabase.new(":memory:")[]
storage = WakuPeerStorage.new(database)[] storage = WakuPeerStorage.new(database)[]
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage)
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[]
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0))
peerInfo2 = node2.switch.peerInfo peerInfo2 = node2.switch.peerInfo
betaCodec = "/vac/waku/relay/2.0.0-beta2" betaCodec = "/vac/waku/relay/2.0.0-beta2"
stableCodec = "/vac/waku/relay/2.0.0" stableCodec = "/vac/waku/relay/2.0.0"
@ -281,8 +275,7 @@ procSuite "Peer Manager":
# Simulate restart by initialising a new node using the same storage # Simulate restart by initialising a new node using the same storage
let let
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] node3 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage)
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage)
await node3.mountRelay() await node3.mountRelay()
node3.wakuRelay.codec = stableCodec node3.wakuRelay.codec = stableCodec
@ -310,7 +303,7 @@ procSuite "Peer Manager":
asyncTest "Peer manager connects to all peers supporting a given protocol": asyncTest "Peer manager connects to all peers supporting a given protocol":
# Create 4 nodes # Create 4 nodes
let nodes = toSeq(0..<4).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..<4).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
# Start them # Start them
await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.start()))
@ -350,7 +343,7 @@ procSuite "Peer Manager":
asyncTest "Peer store keeps track of incoming connections": asyncTest "Peer store keeps track of incoming connections":
# Create 4 nodes # Create 4 nodes
let nodes = toSeq(0..<4).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..<4).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
# Start them # Start them
await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.start()))
@ -410,8 +403,7 @@ procSuite "Peer Manager":
let basePeerId = "16Uiu2HAm7QGEZKujdSbbo1aaQyfDPQ6Bw3ybQnj6fruH5Dxwd7D" let basePeerId = "16Uiu2HAm7QGEZKujdSbbo1aaQyfDPQ6Bw3ybQnj6fruH5Dxwd7D"
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] node = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60932))
node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60932))
peer1 = parseRemotePeerInfo("/ip4/0.0.0.0/tcp/30300/p2p/" & basePeerId & "1") peer1 = parseRemotePeerInfo("/ip4/0.0.0.0/tcp/30300/p2p/" & basePeerId & "1")
peer2 = parseRemotePeerInfo("/ip4/0.0.0.0/tcp/30301/p2p/" & basePeerId & "2") peer2 = parseRemotePeerInfo("/ip4/0.0.0.0/tcp/30301/p2p/" & basePeerId & "2")
peer3 = parseRemotePeerInfo("/ip4/0.0.0.0/tcp/30302/p2p/" & basePeerId & "3") peer3 = parseRemotePeerInfo("/ip4/0.0.0.0/tcp/30302/p2p/" & basePeerId & "3")

View File

@ -7,31 +7,31 @@ import
../../waku/common/sqlite, ../../waku/common/sqlite,
../../waku/v2/node/peer_manager/peer_manager, ../../waku/v2/node/peer_manager/peer_manager,
../../waku/v2/node/peer_manager/peer_store/waku_peer_storage, ../../waku/v2/node/peer_manager/peer_store/waku_peer_storage,
../test_helpers ./testlib/waku2
suite "Peer Storage": suite "Peer Storage":
test "Store, replace and retrieve from persistent peer storage": test "Store, replace and retrieve from persistent peer storage":
let let
database = SqliteDatabase.new(":memory:").tryGet() database = SqliteDatabase.new(":memory:").tryGet()
storage = WakuPeerStorage.new(database)[] storage = WakuPeerStorage.new(database)[]
# Test Peer # Test Peer
peerLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() peerLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet()
peerKey = crypto.PrivateKey.random(ECDSA, rng[]).get() peerKey = generateEcdsaKey()
peer = PeerInfo.new(peerKey, @[peerLoc]) peer = PeerInfo.new(peerKey, @[peerLoc])
peerProto = "/waku/2/default-waku/codec" peerProto = "/waku/2/default-waku/codec"
stored = StoredInfo(peerId: peer.peerId, addrs: @[peerLoc], protos: @[peerProto], publicKey: peerKey.getPublicKey().tryGet()) stored = StoredInfo(peerId: peer.peerId, addrs: @[peerLoc], protos: @[peerProto], publicKey: peerKey.getPublicKey().tryGet())
conn = Connectedness.CanConnect conn = Connectedness.CanConnect
disconn = 999999 disconn = 999999
defer: storage.close() defer: storage.close()
# Test insert and retrieve # Test insert and retrieve
discard storage.put(peer.peerId, stored, conn, disconn) discard storage.put(peer.peerId, stored, conn, disconn)
var responseCount = 0 var responseCount = 0
# flags to check data matches what was stored (default true) # flags to check data matches what was stored (default true)
var peerIdFlag, storedInfoFlag, connectednessFlag, disconnectFlag: bool var peerIdFlag, storedInfoFlag, connectednessFlag, disconnectFlag: bool
@ -39,7 +39,7 @@ suite "Peer Storage":
proc data(peerId: PeerID, storedInfo: StoredInfo, proc data(peerId: PeerID, storedInfo: StoredInfo,
connectedness: Connectedness, disconnectTime: int64) {.raises: [Defect].} = connectedness: Connectedness, disconnectTime: int64) {.raises: [Defect].} =
responseCount += 1 responseCount += 1
# Note: cannot use `check` within `{.raises: [Defect].}` block # Note: cannot use `check` within `{.raises: [Defect].}` block
# @TODO: /Nim/lib/pure/unittest.nim(577, 16) Error: can raise an unlisted exception: Exception # @TODO: /Nim/lib/pure/unittest.nim(577, 16) Error: can raise an unlisted exception: Exception
# These flags are checked outside this block. # These flags are checked outside this block.
@ -47,9 +47,9 @@ suite "Peer Storage":
storedInfoFlag = storedInfo == stored storedInfoFlag = storedInfo == stored
connectednessFlag = connectedness == conn connectednessFlag = connectedness == conn
disconnectFlag = disconnectTime == disconn disconnectFlag = disconnectTime == disconn
let res = storage.getAll(data) let res = storage.getAll(data)
check: check:
res.isErr == false res.isErr == false
responseCount == 1 responseCount == 1
@ -57,15 +57,15 @@ suite "Peer Storage":
storedInfoFlag storedInfoFlag
connectednessFlag connectednessFlag
disconnectFlag disconnectFlag
# Test replace and retrieve (update an existing entry) # Test replace and retrieve (update an existing entry)
discard storage.put(peer.peerId, stored, Connectedness.CannotConnect, disconn + 10) discard storage.put(peer.peerId, stored, Connectedness.CannotConnect, disconn + 10)
responseCount = 0 responseCount = 0
proc replacedData(peerId: PeerID, storedInfo: StoredInfo, proc replacedData(peerId: PeerID, storedInfo: StoredInfo,
connectedness: Connectedness, disconnectTime: int64) {.raises: [Defect].} = connectedness: Connectedness, disconnectTime: int64) {.raises: [Defect].} =
responseCount += 1 responseCount += 1
# Note: cannot use `check` within `{.raises: [Defect].}` block # Note: cannot use `check` within `{.raises: [Defect].}` block
# @TODO: /Nim/lib/pure/unittest.nim(577, 16) Error: can raise an unlisted exception: Exception # @TODO: /Nim/lib/pure/unittest.nim(577, 16) Error: can raise an unlisted exception: Exception
# These flags are checked outside this block. # These flags are checked outside this block.
@ -75,7 +75,7 @@ suite "Peer Storage":
disconnectFlag = disconnectTime == disconn + 10 disconnectFlag = disconnectTime == disconn + 10
let repRes = storage.getAll(replacedData) let repRes = storage.getAll(replacedData)
check: check:
repRes.isErr == false repRes.isErr == false
responseCount == 1 responseCount == 1

View File

@ -1,7 +1,7 @@
{.used.} {.used.}
import import
std/[options,sequtils, times], std/[sequtils, times],
chronos, chronos,
libp2p/crypto/crypto, libp2p/crypto/crypto,
libp2p/peerid, libp2p/peerid,
@ -12,7 +12,7 @@ import
../../waku/v2/node/peer_manager/peer_manager, ../../waku/v2/node/peer_manager/peer_manager,
../../waku/v2/node/peer_manager/waku_peer_store, ../../waku/v2/node/peer_manager/waku_peer_store,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../test_helpers ./testlib/waku2
suite "Extended nim-libp2p Peer Store": suite "Extended nim-libp2p Peer Store":
@ -39,7 +39,7 @@ suite "Extended nim-libp2p Peer Store":
# Peer1: Connected # Peer1: Connected
peerStore[AddressBook][p1] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/1").tryGet()] peerStore[AddressBook][p1] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/1").tryGet()]
peerStore[ProtoBook][p1] = @["/vac/waku/relay/2.0.0-beta1", "/vac/waku/store/2.0.0"] peerStore[ProtoBook][p1] = @["/vac/waku/relay/2.0.0-beta1", "/vac/waku/store/2.0.0"]
peerStore[KeyBook][p1] = KeyPair.random(ECDSA, rng[]).tryGet().pubkey peerStore[KeyBook][p1] = generateEcdsaKeyPair().pubkey
peerStore[AgentBook][p1] = "nwaku" peerStore[AgentBook][p1] = "nwaku"
peerStore[ProtoVersionBook][p1] = "protoVersion1" peerStore[ProtoVersionBook][p1] = "protoVersion1"
peerStore[ConnectionBook][p1] = Connected peerStore[ConnectionBook][p1] = Connected
@ -52,7 +52,7 @@ suite "Extended nim-libp2p Peer Store":
# Peer2: Connected # Peer2: Connected
peerStore[AddressBook][p2] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/2").tryGet()] peerStore[AddressBook][p2] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/2").tryGet()]
peerStore[ProtoBook][p2] = @["/vac/waku/relay/2.0.0", "/vac/waku/store/2.0.0"] peerStore[ProtoBook][p2] = @["/vac/waku/relay/2.0.0", "/vac/waku/store/2.0.0"]
peerStore[KeyBook][p2] = KeyPair.random(ECDSA, rng[]).tryGet().pubkey peerStore[KeyBook][p2] = generateEcdsaKeyPair().pubkey
peerStore[AgentBook][p2] = "nwaku" peerStore[AgentBook][p2] = "nwaku"
peerStore[ProtoVersionBook][p2] = "protoVersion2" peerStore[ProtoVersionBook][p2] = "protoVersion2"
peerStore[ConnectionBook][p2] = Connected peerStore[ConnectionBook][p2] = Connected
@ -65,7 +65,7 @@ suite "Extended nim-libp2p Peer Store":
# Peer3: Connected # Peer3: Connected
peerStore[AddressBook][p3] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/3").tryGet()] peerStore[AddressBook][p3] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/3").tryGet()]
peerStore[ProtoBook][p3] = @["/vac/waku/lightpush/2.0.0", "/vac/waku/store/2.0.0-beta1"] peerStore[ProtoBook][p3] = @["/vac/waku/lightpush/2.0.0", "/vac/waku/store/2.0.0-beta1"]
peerStore[KeyBook][p3] = KeyPair.random(ECDSA, rng[]).tryGet().pubkey peerStore[KeyBook][p3] = generateEcdsaKeyPair().pubkey
peerStore[AgentBook][p3] = "gowaku" peerStore[AgentBook][p3] = "gowaku"
peerStore[ProtoVersionBook][p3] = "protoVersion3" peerStore[ProtoVersionBook][p3] = "protoVersion3"
peerStore[ConnectionBook][p3] = Connected peerStore[ConnectionBook][p3] = Connected
@ -78,7 +78,7 @@ suite "Extended nim-libp2p Peer Store":
# Peer4: Added but never connected # Peer4: Added but never connected
peerStore[AddressBook][p4] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/4").tryGet()] peerStore[AddressBook][p4] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/4").tryGet()]
# unknown: peerStore[ProtoBook][p4] # unknown: peerStore[ProtoBook][p4]
peerStore[KeyBook][p4] = KeyPair.random(ECDSA, rng[]).tryGet().pubkey peerStore[KeyBook][p4] = generateEcdsaKeyPair().pubkey
# unknown: peerStore[AgentBook][p4] # unknown: peerStore[AgentBook][p4]
# unknown: peerStore[ProtoVersionBook][p4] # unknown: peerStore[ProtoVersionBook][p4]
peerStore[ConnectionBook][p4] = NotConnected peerStore[ConnectionBook][p4] = NotConnected
@ -91,7 +91,7 @@ suite "Extended nim-libp2p Peer Store":
# Peer5: Connecteed in the past # Peer5: Connecteed in the past
peerStore[AddressBook][p5] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/5").tryGet()] peerStore[AddressBook][p5] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/5").tryGet()]
peerStore[ProtoBook][p5] = @["/vac/waku/swap/2.0.0", "/vac/waku/store/2.0.0-beta2"] peerStore[ProtoBook][p5] = @["/vac/waku/swap/2.0.0", "/vac/waku/store/2.0.0-beta2"]
peerStore[KeyBook][p5] = KeyPair.random(ECDSA, rng[]).tryGet().pubkey peerStore[KeyBook][p5] = generateEcdsaKeyPair().pubkey
peerStore[AgentBook][p5] = "gowaku" peerStore[AgentBook][p5] = "gowaku"
peerStore[ProtoVersionBook][p5] = "protoVersion5" peerStore[ProtoVersionBook][p5] = "protoVersion5"
peerStore[ConnectionBook][p5] = CanConnect peerStore[ConnectionBook][p5] = CanConnect
@ -295,7 +295,7 @@ suite "Extended nim-libp2p Peer Store":
require p1.init("QmeuZJbXrszW2jdT7GdduSjQskPU3S7vvGWKtKgDfkDvW" & "1") require p1.init("QmeuZJbXrszW2jdT7GdduSjQskPU3S7vvGWKtKgDfkDvW" & "1")
peerStore[AddressBook][p1] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/1").tryGet()] peerStore[AddressBook][p1] = @[MultiAddress.init("/ip4/127.0.0.1/tcp/1").tryGet()]
peerStore[ProtoBook][p1] = @["proto"] peerStore[ProtoBook][p1] = @["proto"]
peerStore[KeyBook][p1] = KeyPair.random(ECDSA, rng[]).tryGet().pubkey peerStore[KeyBook][p1] = generateEcdsaKeyPair().pubkey
peerStore[AgentBook][p1] = "agent" peerStore[AgentBook][p1] = "agent"
peerStore[ProtoVersionBook][p1] = "version" peerStore[ProtoVersionBook][p1] = "version"
peerStore[LastFailedConnBook][p1] = Moment.init(getTime().toUnix, Second) peerStore[LastFailedConnBook][p1] = Moment.init(getTime().toUnix, Second)

View File

@ -10,13 +10,13 @@ import
import import
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../../waku/v2/node/rest/[server, client, utils], ../../waku/v2/node/rest/[server, client, utils],
../../waku/v2/node/rest/debug/debug_api ../../waku/v2/node/rest/debug/debug_api,
./testlib/waku2
proc testWakuNode(): WakuNode = proc testWakuNode(): WakuNode =
let let
rng = crypto.newRng() privkey = generateSecp256k1Key()
privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
port = Port(9000) port = Port(9000)
@ -25,7 +25,7 @@ proc testWakuNode(): WakuNode =
suite "REST API - Debug": suite "REST API - Debug":
asyncTest "Get node info - GET /debug/v1/info": asyncTest "Get node info - GET /debug/v1/info":
# Given # Given
let node = testWakuNode() let node = testWakuNode()
await node.start() await node.start()
@ -50,4 +50,4 @@ suite "REST API - Debug":
await restServer.stop() await restServer.stop()
await restServer.closeWait() await restServer.closeWait()
await node.stop() await node.stop()

View File

@ -14,13 +14,12 @@ import
../../waku/v2/node/rest/relay/[api_types, relay_api, topic_cache], ../../waku/v2/node/rest/relay/[api_types, relay_api, topic_cache],
../../waku/v2/protocol/waku_relay, ../../waku/v2/protocol/waku_relay,
../../waku/v2/utils/time, ../../waku/v2/utils/time,
./testlib/common ./testlib/waku2
proc testWakuNode(): WakuNode = proc testWakuNode(): WakuNode =
let let
rng = crypto.newRng() privkey = generateSecp256k1Key()
privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
port = Port(9000) port = Port(9000)

View File

@ -5,7 +5,7 @@ import
chronicles, chronicles,
unittest2, unittest2,
json_serialization json_serialization
import import
../../waku/v2/node/rest/serdes, ../../waku/v2/node/rest/serdes,
../../waku/v2/node/rest/base64, ../../waku/v2/node/rest/base64,
../../waku/v2/node/rest/relay/api_types, ../../waku/v2/node/rest/relay/api_types,

View File

@ -4,23 +4,25 @@ else:
{.push raises: [].} {.push raises: [].}
import import
testutils/unittests, std/[options, osproc, streams, strutils, sequtils],
stew/results, stew/results,
options, stew/shims/net as stewNet,
testutils/unittests,
chronos,
chronicles,
stint,
web3,
json,
libp2p/crypto/crypto,
eth/keys
import
../../waku/v2/protocol/waku_rln_relay/protocol_types, ../../waku/v2/protocol/waku_rln_relay/protocol_types,
../../waku/v2/protocol/waku_rln_relay/constants, ../../waku/v2/protocol/waku_rln_relay/constants,
../../waku/v2/protocol/waku_rln_relay/contract, ../../waku/v2/protocol/waku_rln_relay/contract,
../../waku/v2/protocol/waku_rln_relay/rln, ../../waku/v2/protocol/waku_rln_relay/rln,
../../waku/v2/protocol/waku_rln_relay/conversion_utils, ../../waku/v2/protocol/waku_rln_relay/conversion_utils,
../../waku/v2/protocol/waku_rln_relay/group_manager/on_chain/group_manager ../../waku/v2/protocol/waku_rln_relay/group_manager/on_chain/group_manager,
./testlib/common,
import
std/[osproc, streams, strutils, sequtils],
chronos, chronicles, stint, web3, json,
stew/shims/net as stewNet,
libp2p/crypto/crypto,
eth/keys,
../test_helpers,
./test_utils ./test_utils
from posix import kill, SIGINT from posix import kill, SIGINT
@ -88,14 +90,12 @@ proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} =
proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} = proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} =
let theRNG = keys.newRng()
let web3 = await newWeb3(EthClient) let web3 = await newWeb3(EthClient)
let accounts = await web3.provider.eth_accounts() let accounts = await web3.provider.eth_accounts()
let gasPrice = int(await web3.provider.eth_gasPrice()) let gasPrice = int(await web3.provider.eth_gasPrice())
web3.defaultAccount = accounts[0] web3.defaultAccount = accounts[0]
let pk = keys.PrivateKey.random(theRNG[]) let pk = keys.PrivateKey.random(rng[])
let acc = Address(toCanonicalAddress(pk.toPublicKey())) let acc = Address(toCanonicalAddress(pk.toPublicKey()))
var tx:EthSend var tx:EthSend

View File

@ -5,10 +5,10 @@ import
import import
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/utils/compat, ../../waku/v2/utils/compat,
../../waku/v2/utils/time ../../waku/v2/utils/time,
./testlib/common
procSuite "Waku Payload": suite "Waku Payload":
let rng = newRng()
test "Encode/Decode without encryption (version 0)": test "Encode/Decode without encryption (version 0)":
## This would be the usual way when no encryption is done or when it is done ## This would be the usual way when no encryption is done or when it is done

View File

@ -13,7 +13,8 @@ import
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/node/discv5/waku_discv5, ../../waku/v2/node/discv5/waku_discv5,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../test_helpers ./testlib/common,
./testlib/waku2
procSuite "Waku Discovery v5": procSuite "Waku Discovery v5":
asyncTest "Waku Discovery v5 end-to-end": asyncTest "Waku Discovery v5 end-to-end":
@ -22,17 +23,17 @@ procSuite "Waku Discovery v5":
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
nodeTcpPort1 = Port(61500) nodeTcpPort1 = Port(61500)
nodeUdpPort1 = Port(9000) nodeUdpPort1 = Port(9000)
node1 = WakuNode.new(nodeKey1, bindIp, nodeTcpPort1) node1 = WakuNode.new(nodeKey1, bindIp, nodeTcpPort1)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
nodeTcpPort2 = Port(61502) nodeTcpPort2 = Port(61502)
nodeUdpPort2 = Port(9002) nodeUdpPort2 = Port(9002)
node2 = WakuNode.new(nodeKey2, bindIp, nodeTcpPort2) node2 = WakuNode.new(nodeKey2, bindIp, nodeTcpPort2)
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
nodeTcpPort3 = Port(61504) nodeTcpPort3 = Port(61504)
nodeUdpPort3 = Port(9004) nodeUdpPort3 = Port(9004)
node3 = WakuNode.new(nodeKey3, bindIp, nodeTcpPort3) node3 = WakuNode.new(nodeKey3, bindIp, nodeTcpPort3)
@ -134,7 +135,7 @@ procSuite "Waku Discovery v5":
nodeTcpPort1 = Port(9010) nodeTcpPort1 = Port(9010)
nodeUdpPort1 = Port(9012) nodeUdpPort1 = Port(9012)
node1Key = generateKey() node1Key = generateSecp256k1Key()
node1NetConfig = NetConfig.init(bindIp = bindIp, node1NetConfig = NetConfig.init(bindIp = bindIp,
extIp = some(extIp), extIp = some(extIp),
extPort = some(nodeTcpPort1), extPort = some(nodeTcpPort1),
@ -159,7 +160,7 @@ procSuite "Waku Discovery v5":
nodeTcpPort2 = Port(9014) nodeTcpPort2 = Port(9014)
nodeUdpPort2 = Port(9016) nodeUdpPort2 = Port(9016)
node2Key = generateKey() node2Key = generateSecp256k1Key()
node2NetConfig = NetConfig.init(bindIp = bindIp, node2NetConfig = NetConfig.init(bindIp = bindIp,
extIp = some(extIp), extIp = some(extIp),
extPort = some(nodeTcpPort2), extPort = some(nodeTcpPort2),

View File

@ -14,37 +14,38 @@ import
../../waku/v2/node/peer_manager, ../../waku/v2/node/peer_manager,
../../waku/v2/node/dnsdisc/waku_dnsdisc, ../../waku/v2/node/dnsdisc/waku_dnsdisc,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../test_helpers ./testlib/common,
./testlib/waku2
procSuite "Waku DNS Discovery": suite "Waku DNS Discovery":
asyncTest "Waku DNS Discovery end-to-end": asyncTest "Waku DNS Discovery end-to-end":
## Tests integrated DNS discovery, from building ## Tests integrated DNS discovery, from building
## the tree to connecting to discovered nodes ## the tree to connecting to discovered nodes
# Create nodes and ENR. These will be added to the discoverable list # Create nodes and ENR. These will be added to the discoverable list
let let
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, bindIp, Port(63500)) node1 = WakuNode.new(nodeKey1, bindIp, Port(63500))
enr1 = node1.enr enr1 = node1.enr
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, bindIp, Port(63502)) node2 = WakuNode.new(nodeKey2, bindIp, Port(63502))
enr2 = node2.enr enr2 = node2.enr
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, bindIp, Port(63503)) node3 = WakuNode.new(nodeKey3, bindIp, Port(63503))
enr3 = node3.enr enr3 = node3.enr
await node1.mountRelay() await node1.mountRelay()
await node2.mountRelay() await node2.mountRelay()
await node3.mountRelay() await node3.mountRelay()
await allFutures([node1.start(), node2.start(), node3.start()]) await allFutures([node1.start(), node2.start(), node3.start()])
# Build and sign tree # Build and sign tree
var tree = buildTree(1, # Seq no var tree = buildTree(1, # Seq no
@[enr1, enr2, enr3], # ENR entries @[enr1, enr2, enr3], # ENR entries
@[]).get() # No link entries @[]).get() # No link entries
let treeKeys = keys.KeyPair.random(keys.newRng()[]) let treeKeys = keys.KeyPair.random(rng[])
# Sign tree # Sign tree
check: check:
@ -56,21 +57,21 @@ procSuite "Waku DNS Discovery":
zoneTxts = tree.buildTXT(domain).get() zoneTxts = tree.buildTXT(domain).get()
username = Base32.encode(treeKeys.pubkey().toRawCompressed()) username = Base32.encode(treeKeys.pubkey().toRawCompressed())
location = LinkPrefix & username & "@" & domain # See EIP-1459: https://eips.ethereum.org/EIPS/eip-1459 location = LinkPrefix & username & "@" & domain # See EIP-1459: https://eips.ethereum.org/EIPS/eip-1459
# Create a resolver for the domain # Create a resolver for the domain
proc resolver(domain: string): Future[string] {.async, gcsafe.} = proc resolver(domain: string): Future[string] {.async, gcsafe.} =
return zoneTxts[domain] return zoneTxts[domain]
# Create Waku DNS discovery client on a new Waku v2 node using the resolver # Create Waku DNS discovery client on a new Waku v2 node using the resolver
let let
nodeKey4 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey4 = generateSecp256k1Key()
node4 = WakuNode.new(nodeKey4, bindIp, Port(63504)) node4 = WakuNode.new(nodeKey4, bindIp, Port(63504))
await node4.mountRelay() await node4.mountRelay()
await node4.start() await node4.start()
var wakuDnsDisc = WakuDnsDiscovery.init(location, resolver).get() var wakuDnsDisc = WakuDnsDiscovery.init(location, resolver).get()
let res = wakuDnsDisc.findPeers() let res = wakuDnsDisc.findPeers()
@ -82,7 +83,7 @@ procSuite "Waku DNS Discovery":
res[].mapIt(it.peerId).contains(node1.switch.peerInfo.peerId) res[].mapIt(it.peerId).contains(node1.switch.peerInfo.peerId)
res[].mapIt(it.peerId).contains(node2.switch.peerInfo.peerId) res[].mapIt(it.peerId).contains(node2.switch.peerInfo.peerId)
res[].mapIt(it.peerId).contains(node3.switch.peerInfo.peerId) res[].mapIt(it.peerId).contains(node3.switch.peerInfo.peerId)
# Connect to discovered nodes # Connect to discovered nodes
await node4.connectToNodes(res[]) await node4.connectToNodes(res[])

View File

@ -11,15 +11,13 @@ import
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/protocol/waku_filter, ../../waku/v2/protocol/waku_filter,
../../waku/v2/protocol/waku_filter/client, ../../waku/v2/protocol/waku_filter/client,
./utils,
./testlib/common, ./testlib/common,
./testlib/switch ./testlib/waku2
proc newTestWakuFilterNode(switch: Switch, timeout: Duration = 2.hours): Future[WakuFilter] {.async.} = proc newTestWakuFilterNode(switch: Switch, timeout: Duration = 2.hours): Future[WakuFilter] {.async.} =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
proto = WakuFilter.new(peerManager, rng, timeout) proto = WakuFilter.new(peerManager, rng, timeout)
await proto.start() await proto.start()
@ -30,7 +28,6 @@ proc newTestWakuFilterNode(switch: Switch, timeout: Duration = 2.hours): Future[
proc newTestWakuFilterClient(switch: Switch): Future[WakuFilterClient] {.async.} = proc newTestWakuFilterClient(switch: Switch): Future[WakuFilterClient] {.async.} =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
proto = WakuFilterClient.new(peerManager, rng) proto = WakuFilterClient.new(peerManager, rng)
await proto.start() await proto.start()

View File

@ -3,34 +3,33 @@
import import
std/options, std/options,
stew/shims/net as stewNet, stew/shims/net as stewNet,
testutils/unittests, testutils/unittests,
chronos, chronos,
chronicles, chronicles,
libp2p/switch, libp2p/switch,
libp2p/protobuf/minprotobuf, libp2p/protobuf/minprotobuf,
libp2p/protocols/ping, libp2p/protocols/ping,
libp2p/stream/bufferstream, libp2p/stream/bufferstream,
libp2p/stream/connection, libp2p/stream/connection,
libp2p/crypto/crypto libp2p/crypto/crypto
import import
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../../waku/v2/utils/peers, ../../waku/v2/utils/peers,
../test_helpers, ./testlib/waku2
./utils
procSuite "Waku Keepalive": suite "Waku Keepalive":
asyncTest "handle ping keepalives": asyncTest "handle ping keepalives":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(63010)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(63010))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(63012)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(63012))
var completionFut = newFuture[bool]() var completionFut = newFuture[bool]()
proc pingHandler(peerId: PeerID) {.async, gcsafe, raises: [Defect].} = proc pingHandler(peerId: PeerID) {.async, gcsafe.} =
debug "Ping received" debug "Ping received"
check: check:
@ -44,7 +43,7 @@ procSuite "Waku Keepalive":
await node2.start() await node2.start()
await node2.mountRelay() await node2.mountRelay()
let pingProto = Ping.new(handler = pingHandler) let pingProto = Ping.new(handler = pingHandler)
await pingProto.start() await pingProto.start()
node2.switch.mount(pingProto) node2.switch.mount(pingProto)

View File

@ -2,19 +2,18 @@
import import
std/[algorithm, json, options, os], std/[algorithm, json, options, os],
testutils/unittests, chronos, stint, testutils/unittests, chronos, stint
import
../../waku/v2/protocol/waku_keystore, ../../waku/v2/protocol/waku_keystore,
../test_helpers ./testlib/common
from ../../waku/v2/protocol/waku_noise/noise_utils import randomSeqByte from ../../waku/v2/protocol/waku_noise/noise_utils import randomSeqByte
procSuite "Credentials test suite": procSuite "Credentials test suite":
# We initialize the RNG in test_helpers
let rng = rng()
let testAppInfo = AppInfo(application: "test", appIdentifier: "1234", version: "0.1") let testAppInfo = AppInfo(application: "test", appIdentifier: "1234", version: "0.1")
asyncTest "Create keystore": test "Create keystore":
let filepath = "./testAppKeystore.txt" let filepath = "./testAppKeystore.txt"
defer: removeFile(filepath) defer: removeFile(filepath)
@ -25,7 +24,7 @@ procSuite "Credentials test suite":
check: check:
keystoreRes.isOk() keystoreRes.isOk()
asyncTest "Load keystore": test "Load keystore":
let filepath = "./testAppKeystore.txt" let filepath = "./testAppKeystore.txt"
defer: removeFile(filepath) defer: removeFile(filepath)
@ -47,7 +46,7 @@ procSuite "Credentials test suite":
# We assume the loaded keystore to not have credentials set (previous tests delete the keystore at filepath) # We assume the loaded keystore to not have credentials set (previous tests delete the keystore at filepath)
keystore["credentials"].getElems().len() == 0 keystore["credentials"].getElems().len() == 0
asyncTest "Add credentials to keystore": test "Add credentials to keystore":
let filepath = "./testAppKeystore.txt" let filepath = "./testAppKeystore.txt"
defer: removeFile(filepath) defer: removeFile(filepath)
@ -83,7 +82,7 @@ procSuite "Credentials test suite":
membershipGroups: @[membershipGroup2]) membershipGroups: @[membershipGroup2])
let password = "%m0um0ucoW%" let password = "%m0um0ucoW%"
let keystoreRes = addMembershipCredentials(path = filepath, let keystoreRes = addMembershipCredentials(path = filepath,
credentials = @[membershipCredentials1, membershipCredentials2], credentials = @[membershipCredentials1, membershipCredentials2],
password = password, password = password,
@ -92,7 +91,7 @@ procSuite "Credentials test suite":
check: check:
keystoreRes.isOk() keystoreRes.isOk()
asyncTest "Add/retrieve credentials in keystore": test "Add/retrieve credentials in keystore":
let filepath = "./testAppKeystore.txt" let filepath = "./testAppKeystore.txt"
defer: removeFile(filepath) defer: removeFile(filepath)
@ -104,14 +103,14 @@ procSuite "Credentials test suite":
idSecretHash1 = randomSeqByte(rng[], 32) idSecretHash1 = randomSeqByte(rng[], 32)
idCommitment1 = randomSeqByte(rng[], 32) idCommitment1 = randomSeqByte(rng[], 32)
idCredential1 = IdentityCredential(idTrapdoor: idTrapdoor1, idNullifier: idNullifier1, idSecretHash: idSecretHash1, idCommitment: idCommitment1) idCredential1 = IdentityCredential(idTrapdoor: idTrapdoor1, idNullifier: idNullifier1, idSecretHash: idSecretHash1, idCommitment: idCommitment1)
var var
idTrapdoor2 = randomSeqByte(rng[], 32) idTrapdoor2 = randomSeqByte(rng[], 32)
idNullifier2 = randomSeqByte(rng[], 32) idNullifier2 = randomSeqByte(rng[], 32)
idSecretHash2 = randomSeqByte(rng[], 32) idSecretHash2 = randomSeqByte(rng[], 32)
idCommitment2 = randomSeqByte(rng[], 32) idCommitment2 = randomSeqByte(rng[], 32)
idCredential2 = IdentityCredential(idTrapdoor: idTrapdoor2, idNullifier: idNullifier2, idSecretHash: idSecretHash2, idCommitment: idCommitment2) idCredential2 = IdentityCredential(idTrapdoor: idTrapdoor2, idNullifier: idNullifier2, idSecretHash: idSecretHash2, idCommitment: idCommitment2)
# We generate two distinct membership groups # We generate two distinct membership groups
var contract1 = MembershipContract(chainId: "5", address: "0x0123456789012345678901234567890123456789") var contract1 = MembershipContract(chainId: "5", address: "0x0123456789012345678901234567890123456789")
var index1 = MembershipIndex(1) var index1 = MembershipIndex(1)
@ -136,7 +135,7 @@ procSuite "Credentials test suite":
membershipGroups: @[membershipGroup2]) membershipGroups: @[membershipGroup2])
let password = "%m0um0ucoW%" let password = "%m0um0ucoW%"
# We add credentials to the keystore. Note that only 3 credentials should be effectively added, since rlnMembershipCredentials3 is equal to membershipCredentials2 # We add credentials to the keystore. Note that only 3 credentials should be effectively added, since rlnMembershipCredentials3 is equal to membershipCredentials2
let keystoreRes = addMembershipCredentials(path = filepath, let keystoreRes = addMembershipCredentials(path = filepath,
credentials = @[membershipCredentials1, membershipCredentials2, membershipCredentials3, membershipCredentials4], credentials = @[membershipCredentials1, membershipCredentials2, membershipCredentials3, membershipCredentials4],
@ -147,13 +146,13 @@ procSuite "Credentials test suite":
keystoreRes.isOk() keystoreRes.isOk()
# We test retrieval of credentials. # We test retrieval of credentials.
var expectedMembershipGroups1 = @[membershipGroup1, membershipGroup2] var expectedMembershipGroups1 = @[membershipGroup1, membershipGroup2]
expectedMembershipGroups1.sort(sortMembershipGroup) expectedMembershipGroups1.sort(sortMembershipGroup)
let expectedCredential1 = MembershipCredentials(identityCredential: idCredential1, let expectedCredential1 = MembershipCredentials(identityCredential: idCredential1,
membershipGroups: expectedMembershipGroups1) membershipGroups: expectedMembershipGroups1)
var expectedMembershipGroups2 = @[membershipGroup2] var expectedMembershipGroups2 = @[membershipGroup2]
expectedMembershipGroups2.sort(sortMembershipGroup) expectedMembershipGroups2.sort(sortMembershipGroup)
let expectedCredential2 = MembershipCredentials(identityCredential: idCredential2, let expectedCredential2 = MembershipCredentials(identityCredential: idCredential2,
membershipGroups: expectedMembershipGroups2) membershipGroups: expectedMembershipGroups2)
@ -185,7 +184,7 @@ procSuite "Credentials test suite":
filterIdentityCredentials = @[idCredential1, idCredential2], filterIdentityCredentials = @[idCredential1, idCredential2],
appInfo = testAppInfo) appInfo = testAppInfo)
check: check:
recoveredCredentialsRes.isOk() recoveredCredentialsRes.isOk()
recoveredCredentialsRes.get() == @[expectedCredential1, expectedCredential2] recoveredCredentialsRes.get() == @[expectedCredential1, expectedCredential2]

View File

@ -6,14 +6,13 @@ import
testutils/unittests, chronos, testutils/unittests, chronos,
eth/keys eth/keys
import import
../../waku/v2/protocol/waku_keystore ../../waku/v2/protocol/waku_keystore,
./testlib/common
from ../../waku/v2/protocol/waku_noise/noise_utils import randomSeqByte from ../../waku/v2/protocol/waku_noise/noise_utils import randomSeqByte
suite "KeyFile test suite": suite "KeyFile test suite":
let rng = newRng()
test "Create/Save/Load single keyfile": test "Create/Save/Load single keyfile":
# The password we use to encrypt our secret # The password we use to encrypt our secret
@ -54,7 +53,7 @@ suite "KeyFile test suite":
let password1 = string.fromBytes(randomSeqByte(rng[], 20)) let password1 = string.fromBytes(randomSeqByte(rng[], 20))
let password2 = "" let password2 = ""
let password3 = string.fromBytes(randomSeqByte(rng[], 20)) let password3 = string.fromBytes(randomSeqByte(rng[], 20))
var keyfile: KfResult[JsonNode] var keyfile: KfResult[JsonNode]
let filepath = "./test.keyfile" let filepath = "./test.keyfile"
defer: removeFile(filepath) defer: removeFile(filepath)
@ -101,7 +100,7 @@ suite "KeyFile test suite":
saveKeyFile(filepath, keyfile.get()).isOk() saveKeyFile(filepath, keyfile.get()).isOk()
# Now there are 6 keyfiles stored in filepath encrypted with 3 different passwords # Now there are 6 keyfiles stored in filepath encrypted with 3 different passwords
# We decrypt the keyfiles using the respective passwords and we check that the number of # We decrypt the keyfiles using the respective passwords and we check that the number of
# successful decryptions corresponds to the number of secrets encrypted under that password # successful decryptions corresponds to the number of secrets encrypted under that password
var decodedKeyfilesPassword1 = loadKeyFiles(filepath, password1) var decodedKeyfilesPassword1 = loadKeyFiles(filepath, password1)
@ -121,7 +120,7 @@ suite "KeyFile test suite":
decodedKeyfilesPassword3.isOk() decodedKeyfilesPassword3.isOk()
decodedKeyfilesPassword3.get().len == 2 decodedKeyfilesPassword3.get().len == 2
var decodedSecretsPassword3 = decodedKeyfilesPassword3.get() var decodedSecretsPassword3 = decodedKeyfilesPassword3.get()
# We check if the corresponding secrets are correct # We check if the corresponding secrets are correct
check: check:
# Secrets encrypted with password 1 # Secrets encrypted with password 1
@ -140,8 +139,6 @@ suite "KeyFile test suite":
# Note: the original nim-eth "Create/Save/Load test" is redefined and expanded above in "KeyFile test suite" # Note: the original nim-eth "Create/Save/Load test" is redefined and expanded above in "KeyFile test suite"
suite "KeyFile test suite (adapted from nim-eth keyfile tests)": suite "KeyFile test suite (adapted from nim-eth keyfile tests)":
let rng = newRng()
# Testvectors originally from https://github.com/status-im/nim-eth/blob/fef47331c37ee8abb8608037222658737ff498a6/tests/keyfile/test_keyfile.nim#L22-L168 # Testvectors originally from https://github.com/status-im/nim-eth/blob/fef47331c37ee8abb8608037222658737ff498a6/tests/keyfile/test_keyfile.nim#L22-L168
let TestVectors = [ let TestVectors = [
%*{ %*{
@ -307,7 +304,7 @@ suite "KeyFile test suite (adapted from nim-eth keyfile tests)":
secret.isOk() secret.isOk()
secret.get() == expectedSecret secret.get() == expectedSecret
# Decryption with wrong password # Decryption with wrong password
secret = decodeKeyFileJson(TestVectors[i].getOrDefault("keyfile"), "wrongpassword") secret = decodeKeyFileJson(TestVectors[i].getOrDefault("keyfile"), "wrongpassword")
check: check:
@ -316,7 +313,7 @@ suite "KeyFile test suite (adapted from nim-eth keyfile tests)":
test "Wrong mac in keyfile": test "Wrong mac in keyfile":
# This keyfile is the same as the first one in TestVectors, # This keyfile is the same as the first one in TestVectors,
# but the last byte of mac is changed to 00. # but the last byte of mac is changed to 00.
# While ciphertext is the correct encryption of priv under password, # While ciphertext is the correct encryption of priv under password,
# mac verfication should fail and nothing will be decrypted # mac verfication should fail and nothing will be decrypted
@ -357,7 +354,7 @@ suite "KeyFile test suite (adapted from nim-eth keyfile tests)":
expectedSecret = randomSeqByte(rng[], 300) expectedSecret = randomSeqByte(rng[], 300)
password = "miawmiawcat" password = "miawmiawcat"
# By default, keyfiles' encryption key is derived from password using PBKDF2. # By default, keyfiles' encryption key is derived from password using PBKDF2.
# Here we test keyfiles encypted with a key derived from password using scrypt # Here we test keyfiles encypted with a key derived from password using scrypt
jsonKeyfile = createKeyFileJson(expectedSecret, password, 3, AES128CTR, SCRYPT) jsonKeyfile = createKeyFileJson(expectedSecret, password, 3, AES128CTR, SCRYPT)
@ -374,4 +371,4 @@ suite "KeyFile test suite (adapted from nim-eth keyfile tests)":
check: check:
loadKeyFiles("nonexistant.keyfile", "password").error == loadKeyFiles("nonexistant.keyfile", "password").error ==
KeyFileError.KeyfileDoesNotExist KeyFileError.KeyfileDoesNotExist

View File

@ -1,9 +1,9 @@
{.used.} {.used.}
import import
testutils/unittests, testutils/unittests,
chronicles, chronicles,
chronos, chronos,
libp2p/crypto/crypto libp2p/crypto/crypto
import import
../../waku/v2/node/peer_manager, ../../waku/v2/node/peer_manager,
@ -11,13 +11,12 @@ import
../../waku/v2/protocol/waku_lightpush, ../../waku/v2/protocol/waku_lightpush,
../../waku/v2/protocol/waku_lightpush/client, ../../waku/v2/protocol/waku_lightpush/client,
./testlib/common, ./testlib/common,
./testlib/switch ./testlib/waku2
proc newTestWakuLightpushNode(switch: Switch, handler: PushMessageHandler): Future[WakuLightPush] {.async.} = proc newTestWakuLightpushNode(switch: Switch, handler: PushMessageHandler): Future[WakuLightPush] {.async.} =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
proto = WakuLightPush.new(peerManager, rng, handler) proto = WakuLightPush.new(peerManager, rng, handler)
await proto.start() await proto.start()
@ -28,7 +27,6 @@ proc newTestWakuLightpushNode(switch: Switch, handler: PushMessageHandler): Futu
proc newTestWakuLightpushClient(switch: Switch): WakuLightPushClient = proc newTestWakuLightpushClient(switch: Switch): WakuLightPushClient =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
WakuLightPushClient.new(peerManager, rng) WakuLightPushClient.new(peerManager, rng)
@ -36,7 +34,7 @@ suite "Waku Lightpush":
asyncTest "push message to pubsub topic is successful": asyncTest "push message to pubsub topic is successful":
## Setup ## Setup
let let
serverSwitch = newTestSwitch() serverSwitch = newTestSwitch()
clientSwitch = newTestSwitch() clientSwitch = newTestSwitch()
@ -44,7 +42,7 @@ suite "Waku Lightpush":
## Given ## Given
let handlerFuture = newFuture[(string, WakuMessage)]() let handlerFuture = newFuture[(string, WakuMessage)]()
let handler = proc(peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage): Future[WakuLightPushResult[void]] {.async.} = let handler = proc(peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage): Future[WakuLightPushResult[void]] {.async.} =
handlerFuture.complete((pubsubTopic, message)) handlerFuture.complete((pubsubTopic, message))
return ok() return ok()
@ -78,7 +76,7 @@ suite "Waku Lightpush":
asyncTest "push message to pubsub topic should fail": asyncTest "push message to pubsub topic should fail":
## Setup ## Setup
let let
serverSwitch = newTestSwitch() serverSwitch = newTestSwitch()
clientSwitch = newTestSwitch() clientSwitch = newTestSwitch()
@ -86,9 +84,9 @@ suite "Waku Lightpush":
## Given ## Given
let error = "test_failure" let error = "test_failure"
let handlerFuture = newFuture[void]() let handlerFuture = newFuture[void]()
let handler = proc(peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage): Future[WakuLightPushResult[void]] {.async.} = let handler = proc(peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage): Future[WakuLightPushResult[void]] {.async.} =
handlerFuture.complete() handlerFuture.complete()
return err(error) return err(error)
@ -115,6 +113,6 @@ suite "Waku Lightpush":
let requestError = requestRes.error let requestError = requestRes.error
check: check:
requestError == error requestError == error
## Cleanup ## Cleanup
await allFutures(clientSwitch.stop(), serverSwitch.stop()) await allFutures(clientSwitch.stop(), serverSwitch.stop())

View File

@ -5,24 +5,21 @@ import
std/random, std/random,
std/tables, std/tables,
stew/byteutils, stew/byteutils,
libp2p/crypto/chacha20poly1305,
libp2p/protobuf/minprotobuf,
stew/endians2
import
../../waku/v2/utils/noise as waku_message_utils, ../../waku/v2/utils/noise as waku_message_utils,
../../waku/v2/protocol/waku_noise/noise_types, ../../waku/v2/protocol/waku_noise/noise_types,
../../waku/v2/protocol/waku_noise/noise_utils, ../../waku/v2/protocol/waku_noise/noise_utils,
../../waku/v2/protocol/waku_noise/noise, ../../waku/v2/protocol/waku_noise/noise,
../../waku/v2/protocol/waku_noise/noise_handshake_processing, ../../waku/v2/protocol/waku_noise/noise_handshake_processing,
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../test_helpers, ./testlib/common
libp2p/crypto/chacha20poly1305,
libp2p/protobuf/minprotobuf,
stew/endians2
procSuite "Waku Noise": procSuite "Waku Noise":
common.randomize()
# We initialize the RNG in test_helpers
let rng = rng()
# We initialize the RNG in std/random
randomize()
test "PKCS#7 Padding/Unpadding": test "PKCS#7 Padding/Unpadding":

View File

@ -1,7 +1,7 @@
{.used.} {.used.}
import import
std/[random, tables], std/tables,
stew/[results, byteutils], stew/[results, byteutils],
testutils/unittests, testutils/unittests,
libp2p/protobuf/minprotobuf libp2p/protobuf/minprotobuf
@ -11,13 +11,9 @@ import
../../waku/v2/protocol/waku_noise/noise_utils, ../../waku/v2/protocol/waku_noise/noise_utils,
../../waku/v2/protocol/waku_noise/noise_handshake_processing, ../../waku/v2/protocol/waku_noise/noise_handshake_processing,
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../test_helpers ./testlib/common
procSuite "Waku Noise Sessions": procSuite "Waku Noise Sessions":
# We initialize the RNG in test_helpers
let rng = rng()
# We initialize the RNG in std/random
randomize() randomize()
# This test implements the Device pairing and Secure Transfers with Noise # This test implements the Device pairing and Secure Transfers with Noise

View File

@ -18,9 +18,7 @@ import
../../waku/v2/protocol/waku_peer_exchange, ../../waku/v2/protocol/waku_peer_exchange,
../../waku/v2/protocol/waku_peer_exchange/rpc, ../../waku/v2/protocol/waku_peer_exchange/rpc,
../../waku/v2/protocol/waku_peer_exchange/rpc_codec, ../../waku/v2/protocol/waku_peer_exchange/rpc_codec,
../test_helpers, ./testlib/waku2
./utils,
./testlib/testutils
# TODO: Extend test coverage # TODO: Extend test coverage
@ -75,17 +73,17 @@ procSuite "Waku Peer Exchange":
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
nodeTcpPort1 = Port(64010) nodeTcpPort1 = Port(64010)
nodeUdpPort1 = Port(9000) nodeUdpPort1 = Port(9000)
node1 = WakuNode.new(nodeKey1, bindIp, nodeTcpPort1) node1 = WakuNode.new(nodeKey1, bindIp, nodeTcpPort1)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
nodeTcpPort2 = Port(64012) nodeTcpPort2 = Port(64012)
nodeUdpPort2 = Port(9002) nodeUdpPort2 = Port(9002)
node2 = WakuNode.new(nodeKey2, bindIp, nodeTcpPort2) node2 = WakuNode.new(nodeKey2, bindIp, nodeTcpPort2)
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
nodeTcpPort3 = Port(64014) nodeTcpPort3 = Port(64014)
nodeUdpPort3 = Port(9004) nodeUdpPort3 = Port(9004)
node3 = WakuNode.new(nodeKey3, bindIp, nodeTcpPort3) node3 = WakuNode.new(nodeKey3, bindIp, nodeTcpPort3)
@ -154,8 +152,8 @@ procSuite "Waku Peer Exchange":
asyncTest "peer exchange request functions returns some discovered peers": asyncTest "peer exchange request functions returns some discovered peers":
let let
node1 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
node2 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
# Start and mount peer exchange # Start and mount peer exchange
await allFutures([node1.start(), node2.start()]) await allFutures([node1.start(), node2.start()])
@ -198,8 +196,8 @@ procSuite "Waku Peer Exchange":
asyncTest "peer exchange handler works as expected": asyncTest "peer exchange handler works as expected":
let let
node1 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
node2 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
# Start and mount peer exchange # Start and mount peer exchange
await allFutures([node1.start(), node2.start()]) await allFutures([node1.start(), node2.start()])
@ -234,8 +232,8 @@ procSuite "Waku Peer Exchange":
asyncTest "peer exchange request fails gracefully": asyncTest "peer exchange request fails gracefully":
let let
node1 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
node2 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
# Start and mount peer exchange # Start and mount peer exchange
await allFutures([node1.start(), node2.start()]) await allFutures([node1.start(), node2.start()])

View File

@ -3,11 +3,11 @@
import import
std/[options, os, sequtils, times], std/[options, os, sequtils, times],
stew/byteutils, stew/byteutils,
stew/shims/net as stewNet, stew/shims/net as stewNet,
testutils/unittests, testutils/unittests,
chronos, chronos,
chronicles, chronicles,
stint, stint,
libp2p/crypto/crypto libp2p/crypto/crypto
import import
@ -15,16 +15,17 @@ import
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/protocol/waku_rln_relay, ../../waku/v2/protocol/waku_rln_relay,
../../waku/v2/protocol/waku_keystore, ../../waku/v2/protocol/waku_keystore,
../test_helpers ./testlib/waku2
const RlnRelayPubsubTopic = "waku/2/rlnrelay/proto" const RlnRelayPubsubTopic = "waku/2/rlnrelay/proto"
const RlnRelayContentTopic = "waku/2/rlnrelay/proto" const RlnRelayContentTopic = "waku/2/rlnrelay/proto"
procSuite "Waku rln relay":
suite "Waku rln relay":
asyncTest "mount waku-rln-relay in the off-chain mode": asyncTest "mount waku-rln-relay in the off-chain mode":
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey = generateSecp256k1Key()
node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60200)) node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60200))
await node.start() await node.start()
@ -43,8 +44,8 @@ procSuite "Waku rln relay":
groupIdCredentialsRes = groupCredentials.toIdentityCredentials() groupIdCredentialsRes = groupCredentials.toIdentityCredentials()
require: require:
groupIdCredentialsRes.isOk() groupIdCredentialsRes.isOk()
let let
groupIdCredentials = groupIdCredentialsRes.get() groupIdCredentials = groupIdCredentialsRes.get()
# extract the id commitments # extract the id commitments
groupIDCommitments = groupIdCredentials.mapIt(it.idCommitment) groupIDCommitments = groupIdCredentials.mapIt(it.idCommitment)
@ -199,7 +200,7 @@ suite "Waku rln relay":
let idCredentialRes = membershipKeyGen(rln) let idCredentialRes = membershipKeyGen(rln)
require: require:
idCredentialRes.isOk() idCredentialRes.isOk()
let idCredential = idCredentialRes.get() let idCredential = idCredentialRes.get()
let pkBuffer = toBuffer(idCredential.idCommitment) let pkBuffer = toBuffer(idCredential.idCommitment)
let pkBufferPtr = unsafeAddr(pkBuffer) let pkBufferPtr = unsafeAddr(pkBuffer)
@ -277,7 +278,7 @@ suite "Waku rln relay":
let idCredentialRes = membershipKeyGen(rln) let idCredentialRes = membershipKeyGen(rln)
require: require:
idCredentialRes.isOk() idCredentialRes.isOk()
let idCredential = idCredentialRes.get() let idCredential = idCredentialRes.get()
let pkBuffer = toBuffer(idCredential.idCommitment) let pkBuffer = toBuffer(idCredential.idCommitment)
let pkBufferPtr = unsafeAddr(pkBuffer) let pkBufferPtr = unsafeAddr(pkBuffer)
@ -324,7 +325,7 @@ suite "Waku rln relay":
debug "The root after deletion", rootHex3 debug "The root after deletion", rootHex3
# the root must change after the insertion # the root must change after the insertion
check: check:
not(rootHex1 == rootHex2) not(rootHex1 == rootHex2)
## The initial root of the tree (empty tree) must be identical to ## The initial root of the tree (empty tree) must be identical to
@ -407,7 +408,7 @@ suite "Waku rln relay":
require: require:
hashSuccess hashSuccess
let outputArr = cast[ptr array[32, byte]](outputBuffer.`ptr`)[] let outputArr = cast[ptr array[32, byte]](outputBuffer.`ptr`)[]
check: check:
"1e32b3ab545c07c8b4a7ab1ca4f46bc31e4fdc29ac3b240ef1d54b4017a26e4c" == "1e32b3ab545c07c8b4a7ab1ca4f46bc31e4fdc29ac3b240ef1d54b4017a26e4c" ==
outputArr.inHex() outputArr.inHex()
@ -458,7 +459,7 @@ suite "Waku rln relay":
let groupIdCredentialsRes = groupKeys.toIdentityCredentials() let groupIdCredentialsRes = groupKeys.toIdentityCredentials()
require: require:
groupIdCredentialsRes.isOk() groupIdCredentialsRes.isOk()
let groupIdCredentials = groupIdCredentialsRes.get() let groupIdCredentials = groupIdCredentialsRes.get()
# extract the id commitments # extract the id commitments
let groupIDCommitments = groupIdCredentials.mapIt(it.idCommitment) let groupIDCommitments = groupIdCredentials.mapIt(it.idCommitment)
@ -529,7 +530,7 @@ suite "Waku rln relay":
require: require:
idCredentialRes.isOk() idCredentialRes.isOk()
let idCredential = idCredentialRes.get() let idCredential = idCredentialRes.get()
var members = newSeq[IDCommitment]() var members = newSeq[IDCommitment]()
@ -641,7 +642,7 @@ suite "Waku rln relay":
verified.value() == false verified.value() == false
test "validate roots which are part of the acceptable window": test "validate roots which are part of the acceptable window":
# Setup: # Setup:
# This step consists of creating the rln instance and waku-rln-relay, # This step consists of creating the rln instance and waku-rln-relay,
# Inserting members, and creating a valid proof with the merkle root # Inserting members, and creating a valid proof with the merkle root
# create an RLN instance # create an RLN instance
@ -653,14 +654,14 @@ suite "Waku rln relay":
let rlnRelay = WakuRLNRelay(rlnInstance:rln) let rlnRelay = WakuRLNRelay(rlnInstance:rln)
let let
# peer's index in the Merkle Tree. # peer's index in the Merkle Tree.
index = 5'u index = 5'u
# create an identity credential # create an identity credential
idCredentialRes = membershipKeyGen(rlnRelay.rlnInstance) idCredentialRes = membershipKeyGen(rlnRelay.rlnInstance)
require: require:
idCredentialRes.isOk() idCredentialRes.isOk()
let idCredential = idCredentialRes.get() let idCredential = idCredentialRes.get()
let membershipCount: uint = AcceptableRootWindowSize + 5'u let membershipCount: uint = AcceptableRootWindowSize + 5'u
@ -678,13 +679,13 @@ suite "Waku rln relay":
require: require:
idCredentialRes.isOk() idCredentialRes.isOk()
members.add(idCredentialRes.get()) members.add(idCredentialRes.get())
# Batch inserts into the tree # Batch inserts into the tree
let insertedRes = rlnRelay.insertMembers(0, members.mapIt(it.idCommitment)) let insertedRes = rlnRelay.insertMembers(0, members.mapIt(it.idCommitment))
require: require:
insertedRes.isOk() insertedRes.isOk()
# Given: # Given:
# This step includes constructing a valid message with the latest merkle root # This step includes constructing a valid message with the latest merkle root
# prepare the message # prepare the message
let messageBytes = "Hello".toBytes() let messageBytes = "Hello".toBytes()
@ -708,7 +709,7 @@ suite "Waku rln relay":
require: require:
verified == true verified == true
# When: # When:
# This test depends on the local merkle tree root being part of a # This test depends on the local merkle tree root being part of a
# acceptable set of roots, which is denoted by AcceptableRootWindowSize # acceptable set of roots, which is denoted by AcceptableRootWindowSize
# The following action is equivalent to a member being removed upon listening to the events emitted by the contract # The following action is equivalent to a member being removed upon listening to the events emitted by the contract
@ -724,7 +725,7 @@ suite "Waku rln relay":
currentMerkleRoot.isOk() currentMerkleRoot.isOk()
currentMerkleRoot.value() != validProof.merkleRoot currentMerkleRoot.value() != validProof.merkleRoot
# Then: # Then:
# we try to verify a root against this window, # we try to verify a root against this window,
# which should return true # which should return true
let olderRootVerified = rlnRelay.validateRoot(validProof.merkleRoot) let olderRootVerified = rlnRelay.validateRoot(validProof.merkleRoot)
@ -733,13 +734,13 @@ suite "Waku rln relay":
olderRootVerified == true olderRootVerified == true
test "invalidate roots which are not part of the acceptable window": test "invalidate roots which are not part of the acceptable window":
# Setup: # Setup:
# This step consists of creating the rln instance and waku-rln-relay, # This step consists of creating the rln instance and waku-rln-relay,
# Inserting members, and creating a valid proof with the merkle root # Inserting members, and creating a valid proof with the merkle root
require: require:
AcceptableRootWindowSize < 10 AcceptableRootWindowSize < 10
# create an RLN instance # create an RLN instance
let rlnInstance = createRLNInstance() let rlnInstance = createRLNInstance()
require: require:
@ -749,7 +750,7 @@ suite "Waku rln relay":
let rlnRelay = WakuRLNRelay(rlnInstance:rln) let rlnRelay = WakuRLNRelay(rlnInstance:rln)
let let
# peer's index in the Merkle Tree. # peer's index in the Merkle Tree.
index = 6'u index = 6'u
# create an identity credential # create an identity credential
idCredentialRes = membershipKeyGen(rlnRelay.rlnInstance) idCredentialRes = membershipKeyGen(rlnRelay.rlnInstance)
@ -759,7 +760,7 @@ suite "Waku rln relay":
let idCredential = idCredentialRes.get() let idCredential = idCredentialRes.get()
let membershipCount: uint = AcceptableRootWindowSize + 5'u let membershipCount: uint = AcceptableRootWindowSize + 5'u
# Create a Merkle tree with random members # Create a Merkle tree with random members
for i in 0'u..membershipCount: for i in 0'u..membershipCount:
@ -777,7 +778,7 @@ suite "Waku rln relay":
require: require:
memberIsAdded.isOk() memberIsAdded.isOk()
# Given: # Given:
# This step includes constructing a valid message with the latest merkle root # This step includes constructing a valid message with the latest merkle root
# prepare the message # prepare the message
let messageBytes = "Hello".toBytes() let messageBytes = "Hello".toBytes()
@ -801,7 +802,7 @@ suite "Waku rln relay":
require: require:
verified == true verified == true
# When: # When:
# This test depends on the local merkle tree root being part of a # This test depends on the local merkle tree root being part of a
# acceptable set of roots, which is denoted by AcceptableRootWindowSize # acceptable set of roots, which is denoted by AcceptableRootWindowSize
# The following action is equivalent to a member being removed upon listening to the events emitted by the contract # The following action is equivalent to a member being removed upon listening to the events emitted by the contract
@ -815,7 +816,7 @@ suite "Waku rln relay":
currentMerkleRoot.isOk() currentMerkleRoot.isOk()
currentMerkleRoot.value() != validProof.merkleRoot currentMerkleRoot.value() != validProof.merkleRoot
# Then: # Then:
# we try to verify a proof against this window, # we try to verify a proof against this window,
# which should return false # which should return false
let olderRootVerified = rlnRelay.validateRoot(validProof.merkleRoot) let olderRootVerified = rlnRelay.validateRoot(validProof.merkleRoot)
@ -873,16 +874,16 @@ suite "Waku rln relay":
let let
wm1 = WakuMessage(proof: RateLimitProof(epoch: epoch, wm1 = WakuMessage(proof: RateLimitProof(epoch: epoch,
nullifier: nullifier1, nullifier: nullifier1,
shareX: shareX1, shareX: shareX1,
shareY: shareY1).encodeAndGetBuf()) shareY: shareY1).encodeAndGetBuf())
wm2 = WakuMessage(proof: RateLimitProof(epoch: epoch, wm2 = WakuMessage(proof: RateLimitProof(epoch: epoch,
nullifier: nullifier2, nullifier: nullifier2,
shareX: shareX2, shareX: shareX2,
shareY: shareY2).encodeAndGetBuf()) shareY: shareY2).encodeAndGetBuf())
wm3 = WakuMessage(proof: RateLimitProof(epoch: epoch, wm3 = WakuMessage(proof: RateLimitProof(epoch: epoch,
nullifier: nullifier3, nullifier: nullifier3,
shareX: shareX3, shareX: shareX3,
shareY: shareY3).encodeAndGetBuf()) shareY: shareY3).encodeAndGetBuf())
# check whether hasDuplicate correctly finds records with the same nullifiers but different secret shares # check whether hasDuplicate correctly finds records with the same nullifiers but different secret shares
@ -917,10 +918,10 @@ suite "Waku rln relay":
# create a group of 100 membership keys # create a group of 100 membership keys
let memListRes = createMembershipList(100) let memListRes = createMembershipList(100)
require: require:
memListRes.isOk() memListRes.isOk()
let let
(groupKeys, _) = memListRes.get() (groupKeys, _) = memListRes.get()
# convert the keys to IdentityCredential structs # convert the keys to IdentityCredential structs
groupIdCredentialsRes = groupKeys.toIdentityCredentials() groupIdCredentialsRes = groupKeys.toIdentityCredentials()
@ -1002,7 +1003,7 @@ suite "Waku rln relay":
rlnInstance.isOk() rlnInstance.isOk()
let rln = rlnInstance.get() let rln = rlnInstance.get()
# create an idendity credential # create an idendity credential
let idCredentialRes = rln.membershipKeyGen() let idCredentialRes = rln.membershipKeyGen()
require: require:
@ -1060,7 +1061,7 @@ suite "Waku rln relay":
credentials = @[rlnMembershipCredentials], credentials = @[rlnMembershipCredentials],
password = password, password = password,
appInfo = RLNAppInfo).isOk() appInfo = RLNAppInfo).isOk()
let readCredentialsResult = getMembershipCredentials(path = filepath, let readCredentialsResult = getMembershipCredentials(path = filepath,
password = password, password = password,
filterMembershipContracts = @[rlnMembershipContract], filterMembershipContracts = @[rlnMembershipContract],
@ -1071,7 +1072,7 @@ suite "Waku rln relay":
# getMembershipCredentials returns all credentials in keystore as sequence matching the filter # getMembershipCredentials returns all credentials in keystore as sequence matching the filter
let allMatchingCredentials = readCredentialsResult.get() let allMatchingCredentials = readCredentialsResult.get()
# if any is found, we return the first credential, otherwise credentials is none # if any is found, we return the first credential, otherwise credentials is none
var credentials = none(MembershipCredentials) var credentials = none(MembershipCredentials)
if allMatchingCredentials.len() > 0: if allMatchingCredentials.len() > 0:
credentials = some(allMatchingCredentials[0]) credentials = some(allMatchingCredentials[0])

View File

@ -11,7 +11,8 @@ import
../../waku/v2/protocol/waku_keystore, ../../waku/v2/protocol/waku_keystore,
../../waku/v2/protocol/waku_rln_relay, ../../waku/v2/protocol/waku_rln_relay,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../test_helpers, ./testlib/common,
./testlib/waku2,
./test_utils ./test_utils
from posix import kill, SIGINT from posix import kill, SIGINT
@ -80,14 +81,12 @@ proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} =
proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} = proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} =
let theRNG = keys.newRng()
let web3 = await newWeb3(EthClient) let web3 = await newWeb3(EthClient)
let accounts = await web3.provider.eth_accounts() let accounts = await web3.provider.eth_accounts()
let gasPrice = int(await web3.provider.eth_gasPrice()) let gasPrice = int(await web3.provider.eth_gasPrice())
web3.defaultAccount = accounts[0] web3.defaultAccount = accounts[0]
let pk = keys.PrivateKey.random(theRNG[]) let pk = keys.PrivateKey.random(rng[])
let acc = Address(toCanonicalAddress(pk.toPublicKey())) let acc = Address(toCanonicalAddress(pk.toPublicKey()))
var tx:EthSend var tx:EthSend
@ -106,7 +105,7 @@ proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} =
# Installs Ganache Daemon # Installs Ganache Daemon
proc installGanache() = proc installGanache() =
# We install Ganache. # We install Ganache.
# Packages will be installed to the ./build folder through the --prefix option # Packages will be installed to the ./build folder through the --prefix option
let installGanache = startProcess("npm", args = ["install", "ganache", "--prefix", "./build"], options = {poUsePath}) let installGanache = startProcess("npm", args = ["install", "ganache", "--prefix", "./build"], options = {poUsePath})
let returnCode = installGanache.waitForExit() let returnCode = installGanache.waitForExit()
@ -125,7 +124,7 @@ proc uninstallGanache() =
# Runs Ganache daemon # Runs Ganache daemon
proc runGanache(): Process = proc runGanache(): Process =
# We run directly "node node_modules/ganache/dist/node/cli.js" rather than using "npx ganache", so that the daemon does not spawn in a new child process. # We run directly "node node_modules/ganache/dist/node/cli.js" rather than using "npx ganache", so that the daemon does not spawn in a new child process.
# In this way, we can directly send a SIGINT signal to the corresponding PID to gracefully terminate Ganache without dealing with multiple processes. # In this way, we can directly send a SIGINT signal to the corresponding PID to gracefully terminate Ganache without dealing with multiple processes.
# Passed options are # Passed options are
# --port Port to listen on. # --port Port to listen on.
@ -193,11 +192,11 @@ procSuite "Waku-rln-relay":
# create an RLN instance # create an RLN instance
let rlnInstance = createRLNInstance() let rlnInstance = createRLNInstance()
require: require:
rlnInstance.isOk() rlnInstance.isOk()
# generate the membership keys # generate the membership keys
let identityCredentialRes = membershipKeyGen(rlnInstance.get()) let identityCredentialRes = membershipKeyGen(rlnInstance.get())
require: require:
identityCredentialRes.isOk() identityCredentialRes.isOk()
let identityCredential = identityCredentialRes.get() let identityCredential = identityCredentialRes.get()
let pk = identityCredential.idCommitment.toUInt256() let pk = identityCredential.idCommitment.toUInt256()
@ -249,12 +248,12 @@ procSuite "Waku-rln-relay":
# test ------------------------------ # test ------------------------------
# create an RLN instance # create an RLN instance
let rlnInstance = createRLNInstance() let rlnInstance = createRLNInstance()
require: require:
rlnInstance.isOk() rlnInstance.isOk()
let rln = rlnInstance.get() let rln = rlnInstance.get()
let idCredentialRes = rln.membershipKeyGen() let idCredentialRes = rln.membershipKeyGen()
require: require:
idCredentialRes.isOk() idCredentialRes.isOk()
let idCredential = idCredentialRes.get() let idCredential = idCredentialRes.get()
let pk = idCredential.idCommitment.toUInt256() let pk = idCredential.idCommitment.toUInt256()
@ -270,7 +269,7 @@ procSuite "Waku-rln-relay":
# generate another identity credential # generate another identity credential
let idCredential2Res = rln.membershipKeyGen() let idCredential2Res = rln.membershipKeyGen()
require: require:
idCredential2Res.isOk() idCredential2Res.isOk()
let idCredential2 = idCredential2Res.get() let idCredential2 = idCredential2Res.get()
let pk2 = idCredential2.idCommitment.toUInt256() let pk2 = idCredential2.idCommitment.toUInt256()
@ -279,7 +278,7 @@ procSuite "Waku-rln-relay":
let events = [newFuture[void](), newFuture[void]()] let events = [newFuture[void](), newFuture[void]()]
var futIndex = 0 var futIndex = 0
var handler: GroupUpdateHandler var handler: GroupUpdateHandler
handler = proc (blockNumber: BlockNumber, handler = proc (blockNumber: BlockNumber,
members: seq[MembershipTuple]): RlnRelayResult[void] = members: seq[MembershipTuple]): RlnRelayResult[void] =
debug "handler is called", members = members debug "handler is called", members = members
events[futIndex].complete() events[futIndex].complete()
@ -289,7 +288,7 @@ procSuite "Waku-rln-relay":
check: check:
insertRes.isOk() insertRes.isOk()
return ok() return ok()
# mount the handler for listening to the contract events # mount the handler for listening to the contract events
await subscribeToGroupEvents(ethClientUri = EthClient, await subscribeToGroupEvents(ethClientUri = EthClient,
ethAccountAddress = some(accounts[0]), ethAccountAddress = some(accounts[0]),
@ -332,7 +331,7 @@ procSuite "Waku-rln-relay":
# send takes the following parameters, c: ContractCallBase, value = 0.u256, gas = 3000000'u64 gasPrice = 0 # send takes the following parameters, c: ContractCallBase, value = 0.u256, gas = 3000000'u64 gasPrice = 0
# should use send proc for the contract functions that update the state of the contract # should use send proc for the contract functions that update the state of the contract
let tx = await sender.register(20.u256).send(value = MembershipFee) # value is the membership fee let tx = await sender.register(20.u256).send(value = MembershipFee) # value is the membership fee
debug "The hash of registration tx: ", tx debug "The hash of registration tx: ", tx
# let members: array[2, uint256] = [20.u256, 21.u256] # let members: array[2, uint256] = [20.u256, 21.u256]
# debug "This is the batch registration result ", await sender.registerBatch(members).send(value = (members.len * MembershipFee)) # value is the membership fee # debug "This is the batch registration result ", await sender.registerBatch(members).send(value = (members.len * MembershipFee)) # value is the membership fee
@ -355,16 +354,16 @@ procSuite "Waku-rln-relay":
# create an RLN instance # create an RLN instance
let rlnInstance = createRLNInstance() let rlnInstance = createRLNInstance()
require: require:
rlnInstance.isOk() rlnInstance.isOk()
# generate the membership keys # generate the membership keys
let identityCredentialRes = membershipKeyGen(rlnInstance.get()) let identityCredentialRes = membershipKeyGen(rlnInstance.get())
require: require:
identityCredentialRes.isOk() identityCredentialRes.isOk()
let identityCredential = identityCredentialRes.get() let identityCredential = identityCredentialRes.get()
# create an Ethereum private key and the corresponding account # create an Ethereum private key and the corresponding account
let (ethPrivKey, ethacc) = await createEthAccount() let (ethPrivKey, ethacc) = await createEthAccount()
# test ------------------------------ # test ------------------------------
@ -378,14 +377,14 @@ procSuite "Waku-rln-relay":
# register the rln-relay peer to the membership contract # register the rln-relay peer to the membership contract
let isSuccessful = await rlnPeer.register() let isSuccessful = await rlnPeer.register()
check: check:
isSuccessful.isOk() isSuccessful.isOk()
asyncTest "mounting waku rln-relay: check correct Merkle tree construction in the static/off-chain group management": asyncTest "mounting waku rln-relay: check correct Merkle tree construction in the static/off-chain group management":
# preparation ------------------------------ # preparation ------------------------------
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey = generateSecp256k1Key()
node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60110)) node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60110))
await node.start() await node.start()
@ -436,7 +435,7 @@ procSuite "Waku-rln-relay":
memIndex = index, memIndex = index,
pubsubTopic = RlnRelayPubsubTopic, pubsubTopic = RlnRelayPubsubTopic,
contentTopic = RlnRelayContentTopic) contentTopic = RlnRelayContentTopic)
require: require:
mountRes.isOk() mountRes.isOk()
@ -449,11 +448,11 @@ procSuite "Waku-rln-relay":
expectedRoot == calculatedRoot expectedRoot == calculatedRoot
await node.stop() await node.stop()
asyncTest "mounting waku rln-relay: check correct Merkle tree construction in the dynamic/onchain group management": asyncTest "mounting waku rln-relay: check correct Merkle tree construction in the dynamic/onchain group management":
# preparation ------------------------------ # preparation ------------------------------
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey = generateSecp256k1Key()
node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60111)) node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60111))
await node.start() await node.start()
@ -467,8 +466,8 @@ procSuite "Waku-rln-relay":
# choose one of the existing accounts for the rln-relay peer # choose one of the existing accounts for the rln-relay peer
ethAccountAddress = accounts[0] ethAccountAddress = accounts[0]
web3.defaultAccount = accounts[0] web3.defaultAccount = accounts[0]
# create an rln instance # create an rln instance
let rlnInstance = createRLNInstance() let rlnInstance = createRLNInstance()
@ -477,18 +476,18 @@ procSuite "Waku-rln-relay":
let rln = rlnInstance.get() let rln = rlnInstance.get()
# create two identity credentials # create two identity credentials
let let
idCredential1Res = rln.membershipKeyGen() idCredential1Res = rln.membershipKeyGen()
idCredential2Res = rln.membershipKeyGen() idCredential2Res = rln.membershipKeyGen()
require: require:
idCredential1Res.isOk() idCredential1Res.isOk()
idCredential2Res.isOk() idCredential2Res.isOk()
let let
idCredential1 = idCredential1Res.get() idCredential1 = idCredential1Res.get()
idCredential2 = idCredential2Res.get() idCredential2 = idCredential2Res.get()
pk1 = idCredential1.idCommitment.toUInt256() pk1 = idCredential1.idCommitment.toUInt256()
pk2 = idCredential2.idCommitment.toUInt256() pk2 = idCredential2.idCommitment.toUInt256()
debug "member key1", key = idCredential1.idCommitment.inHex debug "member key1", key = idCredential1.idCommitment.inHex
debug "member key2", key = idCredential2.idCommitment.inHex debug "member key2", key = idCredential2.idCommitment.inHex
@ -496,14 +495,14 @@ procSuite "Waku-rln-relay":
let let
memberIsAdded1 = rln.insertMembers(0, @[idCredential1.idCommitment]) memberIsAdded1 = rln.insertMembers(0, @[idCredential1.idCommitment])
memberIsAdded2 = rln.insertMembers(1, @[idCredential2.idCommitment]) memberIsAdded2 = rln.insertMembers(1, @[idCredential2.idCommitment])
require: require:
memberIsAdded1 memberIsAdded1
memberIsAdded2 memberIsAdded2
# get the Merkle root # get the Merkle root
let expectedRoot = rln.getMerkleRoot().value().inHex let expectedRoot = rln.getMerkleRoot().value().inHex
# prepare a contract sender to interact with it # prepare a contract sender to interact with it
let contractObj = web3.contractSender(MembershipContract, let contractObj = web3.contractSender(MembershipContract,
contractAddress) # creates a Sender object with a web3 field and contract address of type Address contractAddress) # creates a Sender object with a web3 field and contract address of type Address
@ -516,7 +515,7 @@ procSuite "Waku-rln-relay":
let tx2Hash = await contractObj.register(pk2).send(value = MembershipFee) let tx2Hash = await contractObj.register(pk2).send(value = MembershipFee)
debug "a member is registered", tx2 = tx2Hash debug "a member is registered", tx2 = tx2Hash
# create an Ethereum private key and the corresponding account # create an Ethereum private key and the corresponding account
let (ethPrivKey, ethacc) = await createEthAccount() let (ethPrivKey, ethacc) = await createEthAccount()
@ -527,7 +526,7 @@ procSuite "Waku-rln-relay":
ethClientAddr = EthClient, ethClientAddr = EthClient,
ethAccountAddress = some(ethacc), ethAccountAddress = some(ethacc),
ethAccountPrivKeyOpt = some(ethPrivKey), ethAccountPrivKeyOpt = some(ethPrivKey),
memContractAddr = contractAddress, memContractAddr = contractAddress,
memIdCredential = some(idCredential1), memIdCredential = some(idCredential1),
memIndex = some(MembershipIndex(0)), memIndex = some(MembershipIndex(0)),
pubsubTopic = RlnRelayPubsubTopic, pubsubTopic = RlnRelayPubsubTopic,
@ -537,7 +536,7 @@ procSuite "Waku-rln-relay":
mountRes.isOk() mountRes.isOk()
let wakuRlnRelay = mountRes.get() let wakuRlnRelay = mountRes.get()
await sleepAsync(2000.milliseconds()) # wait for the event to reach the group handler await sleepAsync(2000.milliseconds()) # wait for the event to reach the group handler
# rln pks are inserted into the rln peer's Merkle tree and the resulting root # rln pks are inserted into the rln peer's Merkle tree and the resulting root
@ -547,7 +546,7 @@ procSuite "Waku-rln-relay":
debug "expected root ", expectedRoot=expectedRoot debug "expected root ", expectedRoot=expectedRoot
check: check:
expectedRoot == calculatedRoot expectedRoot == calculatedRoot
await web3.close() await web3.close()
@ -568,16 +567,16 @@ procSuite "Waku-rln-relay":
# prepare two nodes # prepare two nodes
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey = generateSecp256k1Key()
node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60112)) node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60112))
await node.start() await node.start()
let let
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60113)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60113))
await node2.start() await node2.start()
# create an Ethereum private key and the corresponding account # create an Ethereum private key and the corresponding account
let (ethPrivKey, ethacc) = await createEthAccount() let (ethPrivKey, ethacc) = await createEthAccount()
# start rln-relay on the first node, leave rln-relay credentials empty # start rln-relay on the first node, leave rln-relay credentials empty
@ -586,7 +585,7 @@ procSuite "Waku-rln-relay":
ethClientAddr = EthClient, ethClientAddr = EthClient,
ethAccountAddress = some(ethacc), ethAccountAddress = some(ethacc),
ethAccountPrivKeyOpt = some(ethPrivKey), ethAccountPrivKeyOpt = some(ethPrivKey),
memContractAddr = contractAddress, memContractAddr = contractAddress,
memIdCredential = none(IdentityCredential), memIdCredential = none(IdentityCredential),
memIndex = none(MembershipIndex), memIndex = none(MembershipIndex),
pubsubTopic = RlnRelayPubsubTopic, pubsubTopic = RlnRelayPubsubTopic,
@ -603,7 +602,7 @@ procSuite "Waku-rln-relay":
ethClientAddr = EthClient, ethClientAddr = EthClient,
ethAccountAddress = some(ethacc), ethAccountAddress = some(ethacc),
ethAccountPrivKeyOpt = some(ethPrivKey), ethAccountPrivKeyOpt = some(ethPrivKey),
memContractAddr = contractAddress, memContractAddr = contractAddress,
memIdCredential = none(IdentityCredential), memIdCredential = none(IdentityCredential),
memIndex = none(MembershipIndex), memIndex = none(MembershipIndex),
pubsubTopic = RlnRelayPubsubTopic, pubsubTopic = RlnRelayPubsubTopic,
@ -614,7 +613,7 @@ procSuite "Waku-rln-relay":
let wakuRlnRelay2 = mountRes2.get() let wakuRlnRelay2 = mountRes2.get()
# the two nodes should be registered into the contract # the two nodes should be registered into the contract
# since nodes are spun up sequentially # since nodes are spun up sequentially
# the first node has index 0 whereas the second node gets index 1 # the first node has index 0 whereas the second node gets index 1
check: check:
@ -632,4 +631,4 @@ procSuite "Waku-rln-relay":
stopGanache(runGanache) stopGanache(runGanache)
# We uninstall Ganache # We uninstall Ganache
uninstallGanache() uninstallGanache()

View File

@ -1,7 +1,6 @@
{.used.} {.used.}
import import
std/tables,
stew/shims/net as stewNet, stew/shims/net as stewNet,
testutils/unittests, testutils/unittests,
chronos, chronos,
@ -14,12 +13,7 @@ import
libp2p/crypto/secp, libp2p/crypto/secp,
eth/keys eth/keys
import import
../../waku/v2/node/waku_node, ../../waku/v2/protocol/waku_swap/waku_swap
../../waku/v2/protocol/waku_swap/waku_swap,
../../waku/v2/utils/peers,
../test_helpers,
./utils,
./testlib/common
procSuite "Waku SWAP Accounting": procSuite "Waku SWAP Accounting":

View File

@ -1,15 +1,18 @@
# Tests of Swap contracts via external module # Tests of Swap contracts via external module
# #
import import
std/[unittest, options, tables, sets, osproc, strutils, strformat, json], std/[options, osproc, strutils, json],
chronicles, testutils/unittests,
../test_helpers, ./utils, chronicles
import
../../waku/v2/protocol/waku_swap/waku_swap_contracts ../../waku/v2/protocol/waku_swap/waku_swap_contracts
procSuite "Basic balance test": procSuite "Basic balance test":
var aliceSwapAddress = "" var aliceSwapAddress = ""
var signature = "" var signature = ""
var erc20address = "" var erc20address = ""
test "Get pwd of swap module": test "Get pwd of swap module":
let (output, errC) = osproc.execCmdEx("(cd ../swap-contracts-module && pwd)") let (output, errC) = osproc.execCmdEx("(cd ../swap-contracts-module && pwd)")
debug "output", output debug "output", output

View File

@ -10,12 +10,12 @@ import
stew/byteutils stew/byteutils
import import
../../waku/v2/node/wakuswitch, ../../waku/v2/node/wakuswitch,
../test_helpers, ./testlib/common,
./testlib/switch ./testlib/waku2
proc newCircuitRelayClientSwitch(relayClient: RelayClient): Switch = proc newCircuitRelayClientSwitch(relayClient: RelayClient): Switch =
SwitchBuilder.new() SwitchBuilder.new()
.withRng(newRng()) .withRng(rng())
.withAddresses(@[MultiAddress.init("/ip4/0.0.0.0/tcp/0").tryGet()]) .withAddresses(@[MultiAddress.init("/ip4/0.0.0.0/tcp/0").tryGet()])
.withTcpTransport() .withTcpTransport()
.withMplex() .withMplex()
@ -23,7 +23,7 @@ proc newCircuitRelayClientSwitch(relayClient: RelayClient): Switch =
.withCircuitRelay(relayClient) .withCircuitRelay(relayClient)
.build() .build()
procSuite "Waku Switch": suite "Waku Switch":
asyncTest "Waku Switch works with AutoNat": asyncTest "Waku Switch works with AutoNat":
## Given ## Given

View File

@ -23,18 +23,16 @@ import
../../waku/v2/protocol/waku_relay, ../../waku/v2/protocol/waku_relay,
../../waku/v2/protocol/waku_peer_exchange, ../../waku/v2/protocol/waku_peer_exchange,
../../waku/v2/utils/peers, ../../waku/v2/utils/peers,
./testlib/testutils, ./testlib/waku2
../test_helpers
procSuite "WakuNode": suite "WakuNode":
let rng = crypto.newRng()
asyncTest "Protocol matcher works as expected": asyncTest "Protocol matcher works as expected":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61000)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61000))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61002)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61002))
pubSubTopic = "/waku/2/default-waku/proto" pubSubTopic = "/waku/2/default-waku/proto"
contentTopic = ContentTopic("/waku/2/default-content/proto") contentTopic = ContentTopic("/waku/2/default-content/proto")
@ -89,9 +87,9 @@ procSuite "WakuNode":
resolver.ipResponses[("localhost", false)] = @["127.0.0.1"] resolver.ipResponses[("localhost", false)] = @["127.0.0.1"]
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61020), nameResolver = resolver) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61020), nameResolver = resolver)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61022)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61022))
# Construct DNS multiaddr for node2 # Construct DNS multiaddr for node2
@ -114,13 +112,13 @@ procSuite "WakuNode":
asyncTest "Maximum connections can be configured": asyncTest "Maximum connections can be configured":
let let
maxConnections = 2 maxConnections = 2
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"),
Port(60010), maxConnections = maxConnections) Port(60010), maxConnections = maxConnections)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
Port(60012)) Port(60012))
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"),
Port(60013)) Port(60013))
@ -153,7 +151,7 @@ procSuite "WakuNode":
asyncTest "Messages fails with wrong key path": asyncTest "Messages fails with wrong key path":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
expect IOError: expect IOError:
# gibberish # gibberish
@ -165,7 +163,7 @@ procSuite "WakuNode":
asyncTest "Peer info updates with correct announced addresses": asyncTest "Peer info updates with correct announced addresses":
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey = generateSecp256k1Key()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
bindPort = Port(61006) bindPort = Port(61006)
extIp = some(ValidIpAddress.init("127.0.0.1")) extIp = some(ValidIpAddress.init("127.0.0.1"))
@ -204,7 +202,7 @@ procSuite "WakuNode":
asyncTest "Node can use dns4 in announced addresses": asyncTest "Node can use dns4 in announced addresses":
let let
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey = generateSecp256k1Key()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
bindPort = Port(61010) bindPort = Port(61010)
extIp = some(ValidIpAddress.init("127.0.0.1")) extIp = some(ValidIpAddress.init("127.0.0.1"))
@ -231,12 +229,12 @@ procSuite "WakuNode":
expectedAgentString2 = "nim-libp2p/0.0.1" expectedAgentString2 = "nim-libp2p/0.0.1"
let let
# node with custom agent string # node with custom agent string
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61014), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61014),
agentString = some(expectedAgentString1)) agentString = some(expectedAgentString1))
# node with default agent string from libp2p # node with default agent string from libp2p
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61016)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61016))
await node1.start() await node1.start()
@ -266,12 +264,12 @@ procSuite "WakuNode":
# have two nodes to check that the multiaddress is advertised correctly # have two nodes to check that the multiaddress is advertised correctly
let let
# node with custom multiaddress # node with custom multiaddress
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61018), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61018),
extMultiAddrs = @[expectedMultiaddress1]) extMultiAddrs = @[expectedMultiaddress1])
# node with default multiaddress # node with default multiaddress
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61020)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61020))
await node1.start() await node1.start()
@ -292,8 +290,8 @@ procSuite "WakuNode":
asyncTest "Function fetchPeerExchangePeers succesfully exchanges px peers": asyncTest "Function fetchPeerExchangePeers succesfully exchanges px peers":
let let
node1 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
node2 = WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0)) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))
# Start and mount peer exchange # Start and mount peer exchange
await allFutures([node1.start(), node2.start()]) await allFutures([node1.start(), node2.start()])

View File

@ -1,33 +1,33 @@
{.used.} {.used.}
import import
stew/shims/net as stewNet, stew/shims/net as stewNet,
testutils/unittests, testutils/unittests,
chronicles, chronicles,
chronos, chronos,
libp2p/crypto/crypto libp2p/crypto/crypto
import import
../../waku/v2/node/peer_manager, ../../waku/v2/node/peer_manager,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/utils/peers, ../../waku/v2/utils/peers,
./testlib/common ./testlib/common,
./testlib/waku2
suite "WakuNode - Filter": suite "WakuNode - Filter":
asyncTest "subscriber should receive the message handled by the publisher": asyncTest "subscriber should receive the message handled by the publisher":
## Setup ## Setup
let rng = crypto.newRng()
let let
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60110)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60110))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60111)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60111))
await allFutures(server.start(), client.start()) await allFutures(server.start(), client.start())
await server.mountFilter() await server.mountFilter()
await client.mountFilterClient() await client.mountFilterClient()
## Given ## Given

View File

@ -1,10 +1,10 @@
{.used.} {.used.}
import import
stew/shims/net as stewNet, stew/shims/net as stewNet,
testutils/unittests, testutils/unittests,
chronicles, chronicles,
chronos, chronos,
libp2p/crypto/crypto, libp2p/crypto/crypto,
libp2p/switch libp2p/switch
import import
@ -13,20 +13,19 @@ import
../../waku/v2/node/peer_manager, ../../waku/v2/node/peer_manager,
../../waku/v2/utils/peers, ../../waku/v2/utils/peers,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
./testlib/common ./testlib/common,
./testlib/waku2
procSuite "WakuNode - Lightpush": procSuite "WakuNode - Lightpush":
let rng = crypto.newRng()
asyncTest "Lightpush message return success": asyncTest "Lightpush message return success":
## Setup ## Setup
let let
lightNodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] lightNodeKey = generateSecp256k1Key()
lightNode = WakuNode.new(lightNodeKey, ValidIpAddress.init("0.0.0.0"), Port(60010)) lightNode = WakuNode.new(lightNodeKey, ValidIpAddress.init("0.0.0.0"), Port(60010))
bridgeNodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] bridgeNodeKey = generateSecp256k1Key()
bridgeNode = WakuNode.new(bridgeNodeKey, ValidIpAddress.init("0.0.0.0"), Port(60012)) bridgeNode = WakuNode.new(bridgeNodeKey, ValidIpAddress.init("0.0.0.0"), Port(60012))
destNodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] destNodeKey = generateSecp256k1Key()
destNode = WakuNode.new(destNodeKey, ValidIpAddress.init("0.0.0.0"), Port(60013)) destNode = WakuNode.new(destNodeKey, ValidIpAddress.init("0.0.0.0"), Port(60013))
await allFutures(destNode.start(), bridgeNode.start(), lightNode.start()) await allFutures(destNode.start(), bridgeNode.start(), lightNode.start())
@ -35,7 +34,7 @@ procSuite "WakuNode - Lightpush":
await bridgeNode.mountRelay(@[DefaultPubsubTopic]) await bridgeNode.mountRelay(@[DefaultPubsubTopic])
await bridgeNode.mountLightPush() await bridgeNode.mountLightPush()
lightNode.mountLightPushClient() lightNode.mountLightPushClient()
discard await lightNode.peerManager.dialPeer(bridgeNode.peerInfo.toRemotePeerInfo(), WakuLightPushCodec) discard await lightNode.peerManager.dialPeer(bridgeNode.peerInfo.toRemotePeerInfo(), WakuLightPushCodec)
await sleepAsync(100.milliseconds) await sleepAsync(100.milliseconds)
await destNode.connectToNodes(@[bridgeNode.peerInfo.toRemotePeerInfo()]) await destNode.connectToNodes(@[bridgeNode.peerInfo.toRemotePeerInfo()])
@ -63,4 +62,3 @@ procSuite "WakuNode - Lightpush":
## Cleanup ## Cleanup
await allFutures(lightNode.stop(), bridgeNode.stop(), destNode.stop()) await allFutures(lightNode.stop(), bridgeNode.stop(), destNode.stop())

View File

@ -18,7 +18,8 @@ import
../../waku/v2/protocol/waku_message, ../../waku/v2/protocol/waku_message,
../../waku/v2/protocol/waku_rln_relay, ../../waku/v2/protocol/waku_rln_relay,
../../waku/v2/protocol/waku_keystore, ../../waku/v2/protocol/waku_keystore,
../../waku/v2/utils/peers ../../waku/v2/utils/peers,
./testlib/waku2
from std/times import epochTime from std/times import epochTime
@ -27,19 +28,17 @@ from std/times import epochTime
const RlnRelayPubsubTopic = "waku/2/rlnrelay/proto" const RlnRelayPubsubTopic = "waku/2/rlnrelay/proto"
procSuite "WakuNode - RLN relay": procSuite "WakuNode - RLN relay":
let rng = keys.newRng()
asyncTest "testing rln-relay with valid proof": asyncTest "testing rln-relay with valid proof":
let let
# publisher node # publisher node
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60300)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60300))
# Relay node # Relay node
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60302)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60302))
# Subscriber # Subscriber
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60303)) node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60303))
rlnRelayPubSubTopic = RlnRelayPubsubTopic rlnRelayPubSubTopic = RlnRelayPubsubTopic
@ -117,16 +116,17 @@ procSuite "WakuNode - RLN relay":
await node1.stop() await node1.stop()
await node2.stop() await node2.stop()
await node3.stop() await node3.stop()
asyncTest "testing rln-relay with invalid proof": asyncTest "testing rln-relay with invalid proof":
let let
# publisher node # publisher node
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60310)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60310))
# Relay node # Relay node
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60312)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60312))
# Subscriber # Subscriber
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60313)) node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60313))
rlnRelayPubSubTopic = RlnRelayPubsubTopic rlnRelayPubSubTopic = RlnRelayPubsubTopic
@ -229,13 +229,13 @@ procSuite "WakuNode - RLN relay":
let let
# publisher node # publisher node
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60320)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60320))
# Relay node # Relay node
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60322)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60322))
# Subscriber # Subscriber
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60323)) node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60323))
rlnRelayPubSubTopic = RlnRelayPubsubTopic rlnRelayPubSubTopic = RlnRelayPubsubTopic

View File

@ -1,14 +1,12 @@
import import
std/[times, random], std/[times, random],
stew/byteutils bearssl/rand,
libp2p/crypto/crypto
import import
../../../waku/v2/protocol/waku_message,
../../../waku/v2/utils/time ../../../waku/v2/utils/time
export
waku_message.DefaultPubsubTopic,
waku_message.DefaultContentTopic
# Time
proc now*(): Timestamp = proc now*(): Timestamp =
getNanosecondTime(getTime().toUnixFloat()) getNanosecondTime(getTime().toUnixFloat())
@ -17,31 +15,34 @@ proc ts*(offset=0, origin=now()): Timestamp =
origin + getNanosecondTime(offset) origin + getNanosecondTime(offset)
proc fakeWakuMessage*( ## Randomization
payload: string|seq[byte] = "TEST-PAYLOAD",
contentTopic = DefaultContentTopic,
ts = now(),
ephemeral = false
): WakuMessage =
var payloadBytes: seq[byte]
when payload is string:
payloadBytes = toBytes(payload)
else:
payloadBytes = payload
WakuMessage(
payload: payloadBytes,
contentTopic: contentTopic,
version: 2,
timestamp: ts,
ephemeral: ephemeral
)
# Randomization
proc randomize*() = proc randomize*() =
## Initializes the default random number generator with the given seed. ## Initializes the default random number generator with the given seed.
## From: https://nim-lang.org/docs/random.html#randomize,int64 ## From: https://nim-lang.org/docs/random.html#randomize,int64
let now = getTime() let now = getTime()
randomize(now.toUnix() * 1_000_000_000 + now.nanosecond) randomize(now.toUnix() * 1_000_000_000 + now.nanosecond)
## RNG
# Copied from here: https://github.com/status-im/nim-libp2p/blob/d522537b19a532bc4af94fcd146f779c1f23bad0/tests/helpers.nim#L28
type Rng = object
rng: ref HmacDrbgContext
# Typically having a module variable is considered bad design. This case should
# be considered as an exception and it should be used only in the tests.
var rngVar: Rng
proc getRng(): ref HmacDrbgContext =
# TODO: if `rngVar` is a threadvar like it should be, there are random and
# spurious compile failures on mac - this is not gcsafe but for the
# purpose of the tests, it's ok as long as we only use a single thread
{.gcsafe.}:
if rngVar.rng.isNil():
rngVar.rng = crypto.newRng()
rngVar.rng
template rng*(): ref HmacDrbgContext = getRng()

View File

@ -1,14 +0,0 @@
import
std/options,
libp2p/switch,
libp2p/builders
import
../../test_helpers
export switch
proc newTestSwitch*(key=none(PrivateKey), address=none(MultiAddress)): Switch =
let peerKey = key.get(PrivateKey.random(ECDSA, rng[]).get())
let peerAddr = address.get(MultiAddress.init("/ip4/127.0.0.1/tcp/0").get())
return newStandardSwitch(some(peerKey), addrs=peerAddr)

View File

@ -0,0 +1,56 @@
import
std/options,
stew/byteutils,
libp2p/switch,
libp2p/builders
import
../../../waku/v2/protocol/waku_message,
./common
export switch
# Switch
proc generateEcdsaKey*(): PrivateKey =
PrivateKey.random(ECDSA, rng[]).get()
proc generateEcdsaKeyPair*(): KeyPair =
KeyPair.random(ECDSA, rng[]).get()
proc generateSecp256k1Key*(): PrivateKey =
PrivateKey.random(Secp256k1, rng[]).get()
proc newTestSwitch*(key=none(PrivateKey), address=none(MultiAddress)): Switch =
let peerKey = key.get(generateSecp256k1Key())
let peerAddr = address.get(MultiAddress.init("/ip4/127.0.0.1/tcp/0").get())
return newStandardSwitch(some(peerKey), addrs=peerAddr)
# Waku message
export
waku_message.DefaultPubsubTopic,
waku_message.DefaultContentTopic
proc fakeWakuMessage*(
payload: string|seq[byte] = "TEST-PAYLOAD",
contentTopic = DefaultContentTopic,
ts = now(),
ephemeral = false
): WakuMessage =
var payloadBytes: seq[byte]
when payload is string:
payloadBytes = toBytes(payload)
else:
payloadBytes = payload
WakuMessage(
payload: payloadBytes,
contentTopic: contentTopic,
version: 2,
timestamp: ts,
ephemeral: ephemeral
)

View File

@ -1,72 +0,0 @@
# compile time options here
const
libp2p_pubsub_sign {.booldefine.} = true
libp2p_pubsub_verify {.booldefine.} = true
import random
import chronos
import libp2p/[builders,
protocols/pubsub/pubsub,
protocols/secure/secure]
import ../../waku/v2/protocol/waku_relay
export builders
randomize()
proc generateNodes*(
num: Natural,
secureManagers: openarray[SecureProtocol] = [
# array cos order matters
SecureProtocol.Secio,
SecureProtocol.Noise,
],
msgIdProvider: MsgIdProvider = nil,
gossip: bool = false,
triggerSelf: bool = false,
verifySignature: bool = libp2p_pubsub_verify,
sign: bool = libp2p_pubsub_sign): seq[PubSub] =
for i in 0..<num:
let switch = newStandardSwitch(secureManagers = secureManagers)
let wakuRelay = WakuRelay.init(
switch = switch,
triggerSelf = triggerSelf,
verifySignature = verifySignature,
sign = sign,
# XXX unclear why including this causes a compiler error, it is part of WakuRelay type
msgIdProvider = msgIdProvider).PubSub
switch.mount(wakuRelay)
result.add(wakuRelay)
proc subscribeNodes*(nodes: seq[PubSub]) {.async.} =
for dialer in nodes:
for node in nodes:
if dialer.switch.peerInfo.peerId != node.switch.peerInfo.peerId:
await dialer.switch.connect(node.switch.peerInfo.peerId, node.switch.peerInfo.addrs)
dialer.subscribePeer(node.switch.peerInfo.peerId)
proc subscribeSparseNodes*(nodes: seq[PubSub], degree: int = 2) {.async.} =
if nodes.len < degree:
raise (ref CatchableError)(msg: "nodes count needs to be greater or equal to degree!")
for i, dialer in nodes:
if (i mod degree) != 0:
continue
for node in nodes:
if dialer.switch.peerInfo.peerId != node.switch.peerInfo.peerId:
await dialer.switch.connect(node.switch.peerInfo.peerId, node.switch.peerInfo.addrs)
dialer.subscribePeer(node.switch.peerInfo.peerId)
proc subscribeRandom*(nodes: seq[PubSub]) {.async.} =
for dialer in nodes:
var dialed: seq[PeerID]
while dialed.len < nodes.len - 1:
let node = sample(nodes)
if node.switch.peerInfo.peerId notin dialed:
if dialer.switch.peerInfo.peerId != node.switch.peerInfo.peerId:
await dialer.switch.connect(node.switch.peerInfo.peerId, node.switch.peerInfo.addrs)
dialer.subscribePeer(node.switch.peerInfo.peerId)
dialed.add(node.switch.peerInfo.peerId)

View File

@ -8,8 +8,7 @@ import
import import
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../../../waku/v2/protocol/waku_archive/driver/queue_driver/index, ../../../waku/v2/protocol/waku_archive/driver/queue_driver/index,
../../../waku/v2/utils/time, ../../../waku/v2/utils/time
../testlib/common
## Helpers ## Helpers

View File

@ -10,7 +10,8 @@ import
../../../waku/v2/protocol/waku_archive/driver/queue_driver/index, ../../../waku/v2/protocol/waku_archive/driver/queue_driver/index,
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../../../waku/v2/utils/time, ../../../waku/v2/utils/time,
../testlib/common ../testlib/common,
../testlib/waku2
proc getTestQueueDriver(numMessages: int): QueueDriver = proc getTestQueueDriver(numMessages: int): QueueDriver =

View File

@ -9,8 +9,8 @@ import
../../../waku/v2/protocol/waku_archive, ../../../waku/v2/protocol/waku_archive,
../../../waku/v2/protocol/waku_archive/driver/queue_driver, ../../../waku/v2/protocol/waku_archive/driver/queue_driver,
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../utils, ../testlib/common,
../testlib/common ../testlib/waku2
logScope: logScope:

View File

@ -9,8 +9,8 @@ import
../../../waku/v2/protocol/waku_archive, ../../../waku/v2/protocol/waku_archive,
../../../waku/v2/protocol/waku_archive/driver/sqlite_driver, ../../../waku/v2/protocol/waku_archive/driver/sqlite_driver,
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../utils, ../testlib/common,
../testlib/common ../testlib/waku2
proc newTestDatabase(): SqliteDatabase = proc newTestDatabase(): SqliteDatabase =

View File

@ -10,8 +10,8 @@ import
../../../waku/v2/protocol/waku_archive, ../../../waku/v2/protocol/waku_archive,
../../../waku/v2/protocol/waku_archive/driver/sqlite_driver, ../../../waku/v2/protocol/waku_archive/driver/sqlite_driver,
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../utils, ../testlib/common,
../testlib/common ../testlib/waku2
logScope: logScope:
topics = "test archive _driver" topics = "test archive _driver"

View File

@ -13,8 +13,8 @@ import
../../../waku/v2/protocol/waku_archive/retention_policy/retention_policy_capacity, ../../../waku/v2/protocol/waku_archive/retention_policy/retention_policy_capacity,
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../../../waku/v2/utils/time, ../../../waku/v2/utils/time,
../utils, ../testlib/common,
../testlib/common ../testlib/waku2
proc newTestDatabase(): SqliteDatabase = proc newTestDatabase(): SqliteDatabase =

View File

@ -11,7 +11,8 @@ import
../../../waku/v2/protocol/waku_archive/driver/sqlite_driver, ../../../waku/v2/protocol/waku_archive/driver/sqlite_driver,
../../../waku/v2/protocol/waku_archive, ../../../waku/v2/protocol/waku_archive,
../../../waku/v2/utils/time, ../../../waku/v2/utils/time,
../testlib/common ../testlib/common,
../testlib/waku2
proc newTestDatabase(): SqliteDatabase = proc newTestDatabase(): SqliteDatabase =

View File

@ -13,8 +13,8 @@ import
../../../waku/v2/node/peer_manager, ../../../waku/v2/node/peer_manager,
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../../../waku/v2/protocol/waku_relay, ../../../waku/v2/protocol/waku_relay,
../testlib/switch, ../testlib/common,
../testlib/common ../testlib/waku2
proc noopRawHandler(): PubsubRawHandler = proc noopRawHandler(): PubsubRawHandler =

View File

@ -21,20 +21,18 @@ import
../../waku/v2/utils/peers, ../../waku/v2/utils/peers,
../../waku/v2/node/waku_node, ../../waku/v2/node/waku_node,
../../waku/v2/protocol/waku_relay, ../../waku/v2/protocol/waku_relay,
../../test_helpers, ../testlib/testutils,
../testlib/common, ../testlib/waku2
../testlib/testutils
template sourceDir: string = currentSourcePath.parentDir() template sourceDir: string = currentSourcePath.parentDir()
const KEY_PATH = sourceDir / "resources/test_key.pem" const KEY_PATH = sourceDir / "resources/test_key.pem"
const CERT_PATH = sourceDir / "resources/test_cert.pem" const CERT_PATH = sourceDir / "resources/test_cert.pem"
procSuite "WakuNode - Relay": suite "WakuNode - Relay":
let rng = crypto.newRng()
asyncTest "Relay protocol is started correctly": asyncTest "Relay protocol is started correctly":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60400)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60400))
# Relay protocol starts if mounted after node start # Relay protocol starts if mounted after node start
@ -48,7 +46,7 @@ procSuite "WakuNode - Relay":
# Relay protocol starts if mounted before node start # Relay protocol starts if mounted before node start
let let
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60402)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60402))
await node2.mountRelay() await node2.mountRelay()
@ -67,11 +65,11 @@ procSuite "WakuNode - Relay":
asyncTest "Messages are correctly relayed": asyncTest "Messages are correctly relayed":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60410)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60410))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60412)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60412))
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60413)) node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60413))
pubSubTopic = "test" pubSubTopic = "test"
contentTopic = ContentTopic("/waku/2/default-content/proto") contentTopic = ContentTopic("/waku/2/default-content/proto")
@ -125,13 +123,13 @@ procSuite "WakuNode - Relay":
let let
# publisher node # publisher node
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60420)) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60420))
# Relay node # Relay node
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60422)) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60422))
# Subscriber # Subscriber
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60423)) node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60423))
pubSubTopic = "test" pubSubTopic = "test"
@ -216,7 +214,7 @@ procSuite "WakuNode - Relay":
# TODO: Add a function to validate the WakuMessage integrity # TODO: Add a function to validate the WakuMessage integrity
xasyncTest "Stats of peer sending wrong WakuMessages are updated": xasyncTest "Stats of peer sending wrong WakuMessages are updated":
# Create 2 nodes # Create 2 nodes
let nodes = toSeq(0..1).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(0))) let nodes = toSeq(0..1).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)))
# Start all the nodes and mount relay with # Start all the nodes and mount relay with
await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.start()))
@ -247,10 +245,10 @@ procSuite "WakuNode - Relay":
asyncTest "Messages are relayed between two websocket nodes": asyncTest "Messages are relayed between two websocket nodes":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60510), wsBindPort = Port(8001), wsEnabled = true) bindPort = Port(60510), wsBindPort = Port(8001), wsEnabled = true)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60512), wsBindPort = Port(8101), wsEnabled = true) bindPort = Port(60512), wsBindPort = Port(8101), wsEnabled = true)
pubSubTopic = "test" pubSubTopic = "test"
@ -291,10 +289,10 @@ procSuite "WakuNode - Relay":
asyncTest "Messages are relayed between nodes with multiple transports (TCP and Websockets)": asyncTest "Messages are relayed between nodes with multiple transports (TCP and Websockets)":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60520), wsBindPort = Port(8002), wsEnabled = true) bindPort = Port(60520), wsBindPort = Port(8002), wsEnabled = true)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60522)) bindPort = Port(60522))
pubSubTopic = "test" pubSubTopic = "test"
@ -335,10 +333,10 @@ procSuite "WakuNode - Relay":
asyncTest "Messages relaying fails with non-overlapping transports (TCP or Websockets)": asyncTest "Messages relaying fails with non-overlapping transports (TCP or Websockets)":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60530)) bindPort = Port(60530))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60532), wsBindPort = Port(8103), wsEnabled = true) bindPort = Port(60532), wsBindPort = Port(8103), wsEnabled = true)
pubSubTopic = "test" pubSubTopic = "test"
@ -382,10 +380,10 @@ procSuite "WakuNode - Relay":
asyncTest "Messages are relayed between nodes with multiple transports (TCP and secure Websockets)": asyncTest "Messages are relayed between nodes with multiple transports (TCP and secure Websockets)":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60540), wsBindPort = Port(8004), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) bindPort = Port(60540), wsBindPort = Port(8004), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
bindPort = Port(60542)) bindPort = Port(60542))
pubSubTopic = "test" pubSubTopic = "test"
@ -425,9 +423,9 @@ procSuite "WakuNode - Relay":
asyncTest "Messages are relayed between nodes with multiple transports (websocket and secure Websockets)": asyncTest "Messages are relayed between nodes with multiple transports (websocket and secure Websockets)":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), bindPort = Port(60550), wsBindPort = Port(8005), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), bindPort = Port(60550), wsBindPort = Port(8005), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH)
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), bindPort = Port(60552),wsBindPort = Port(8105), wsEnabled = true ) node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), bindPort = Port(60552),wsBindPort = Port(8105), wsEnabled = true )
let let

View File

@ -27,7 +27,6 @@ proc newTestArchiveDriver(): ArchiveDriver =
proc newTestWakuStore(switch: Switch, store=newTestMessageStore()): Future[WakuStore] {.async.} = proc newTestWakuStore(switch: Switch, store=newTestMessageStore()): Future[WakuStore] {.async.} =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
proto = WakuStore.init(peerManager, rng, store) proto = WakuStore.init(peerManager, rng, store)
await proto.start() await proto.start()
@ -38,7 +37,6 @@ proc newTestWakuStore(switch: Switch, store=newTestMessageStore()): Future[WakuS
proc newTestWakuStoreClient(switch: Switch, store: MessageStore = nil): WakuStoreClient = proc newTestWakuStoreClient(switch: Switch, store: MessageStore = nil): WakuStoreClient =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
WakuStoreClient.new(peerManager, rng, store) WakuStoreClient.new(peerManager, rng, store)
@ -215,9 +213,9 @@ suite "WakuNode - waku store":
asyncTest "Resume proc fetches the history": asyncTest "Resume proc fetches the history":
## Setup ## Setup
let let
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60412)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60412))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60410)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60410))
await allFutures(client.start(), server.start()) await allFutures(client.start(), server.start())
@ -249,9 +247,9 @@ suite "WakuNode - waku store":
asyncTest "Resume proc discards duplicate messages": asyncTest "Resume proc discards duplicate messages":
## Setup ## Setup
let let
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60422)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60422))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60420)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60420))
await allFutures(server.start(), client.start()) await allFutures(server.start(), client.start())

View File

@ -9,7 +9,9 @@ import
../../../waku/v2/protocol/waku_store/rpc, ../../../waku/v2/protocol/waku_store/rpc,
../../../waku/v2/protocol/waku_store/rpc_codec, ../../../waku/v2/protocol/waku_store/rpc_codec,
../../../waku/v2/utils/time, ../../../waku/v2/utils/time,
../testlib/common ../testlib/common,
../testlib/waku2
procSuite "Waku Store - RPC codec": procSuite "Waku Store - RPC codec":

View File

@ -12,14 +12,13 @@ import
../../../waku/v2/protocol/waku_store, ../../../waku/v2/protocol/waku_store,
../../../waku/v2/protocol/waku_store/client, ../../../waku/v2/protocol/waku_store/client,
../testlib/common, ../testlib/common,
../testlib/switch ../testlib/waku2
proc newTestWakuStore(switch: Switch, handler: HistoryQueryHandler): Future[WakuStore] {.async.} = proc newTestWakuStore(switch: Switch, handler: HistoryQueryHandler): Future[WakuStore] {.async.} =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
proto = WakuStore.new(peerManager, rng, handler) proto = WakuStore.new(peerManager, rng, handler)
await proto.start() await proto.start()
@ -30,7 +29,6 @@ proc newTestWakuStore(switch: Switch, handler: HistoryQueryHandler): Future[Waku
proc newTestWakuStoreClient(switch: Switch): WakuStoreClient = proc newTestWakuStoreClient(switch: Switch): WakuStoreClient =
let let
peerManager = PeerManager.new(switch) peerManager = PeerManager.new(switch)
rng = crypto.newRng()
WakuStoreClient.new(peerManager, rng) WakuStoreClient.new(peerManager, rng)

View File

@ -22,7 +22,8 @@ import
../../../waku/v2/protocol/waku_filter, ../../../waku/v2/protocol/waku_filter,
../../../waku/v2/utils/peers, ../../../waku/v2/utils/peers,
../../../waku/v2/node/waku_node, ../../../waku/v2/node/waku_node,
../testlib/common ../testlib/common,
../testlib/waku2
proc newTestArchiveDriver(): ArchiveDriver = proc newTestArchiveDriver(): ArchiveDriver =
@ -39,8 +40,6 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): HistoryC
procSuite "WakuNode - Store": procSuite "WakuNode - Store":
## Fixtures ## Fixtures
let rng = crypto.newRng()
let timeOrigin = now() let timeOrigin = now()
let msgListA = @[ let msgListA = @[
fakeWakuMessage(@[byte 00], ts=ts(00, timeOrigin)), fakeWakuMessage(@[byte 00], ts=ts(00, timeOrigin)),
@ -67,9 +66,9 @@ procSuite "WakuNode - Store":
asyncTest "Store protocol returns expected messages": asyncTest "Store protocol returns expected messages":
## Setup ## Setup
let let
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60422)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60422))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60420)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60420))
await allFutures(client.start(), server.start()) await allFutures(client.start(), server.start())
@ -99,9 +98,9 @@ procSuite "WakuNode - Store":
asyncTest "Store node history response - forward pagination": asyncTest "Store node history response - forward pagination":
## Setup ## Setup
let let
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60432)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60432))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60430)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60430))
await allFutures(client.start(), server.start()) await allFutures(client.start(), server.start())
@ -148,9 +147,9 @@ procSuite "WakuNode - Store":
asyncTest "Store node history response - backward pagination": asyncTest "Store node history response - backward pagination":
## Setup ## Setup
let let
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60432)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60432))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60430)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60430))
await allFutures(client.start(), server.start()) await allFutures(client.start(), server.start())
@ -198,11 +197,11 @@ procSuite "WakuNode - Store":
## See nwaku issue #937: 'Store: ability to decouple store from relay' ## See nwaku issue #937: 'Store: ability to decouple store from relay'
## Setup ## Setup
let let
filterSourceKey = crypto.PrivateKey.random(Secp256k1, rng[])[] filterSourceKey = generateSecp256k1Key()
filterSource = WakuNode.new(filterSourceKey, ValidIpAddress.init("0.0.0.0"), Port(60404)) filterSource = WakuNode.new(filterSourceKey, ValidIpAddress.init("0.0.0.0"), Port(60404))
serverKey = crypto.PrivateKey.random(Secp256k1, rng[])[] serverKey = generateSecp256k1Key()
server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60402)) server = WakuNode.new(serverKey, ValidIpAddress.init("0.0.0.0"), Port(60402))
clientKey = crypto.PrivateKey.random(Secp256k1, rng[])[] clientKey = generateSecp256k1Key()
client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60400)) client = WakuNode.new(clientKey, ValidIpAddress.init("0.0.0.0"), Port(60400))
await allFutures(client.start(), server.start(), filterSource.start()) await allFutures(client.start(), server.start(), filterSource.start())

View File

@ -20,24 +20,20 @@ import
../../../waku/v2/protocol/waku_store, ../../../waku/v2/protocol/waku_store,
../../../waku/v2/protocol/waku_filter, ../../../waku/v2/protocol/waku_filter,
../../../waku/v2/utils/peers, ../../../waku/v2/utils/peers,
../../test_helpers ../testlib/waku2
procSuite "Waku v2 JSON-RPC API - Admin": procSuite "Waku v2 JSON-RPC API - Admin":
let let
rng = crypto.newRng()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
asyncTest "connect to ad-hoc peers": asyncTest "connect to ad-hoc peers":
# Create a couple of nodes # Create a couple of nodes
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] node1 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60600))
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60600)) node2 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60602))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[]
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60602))
peerInfo2 = node2.switch.peerInfo peerInfo2 = node2.switch.peerInfo
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] node3 = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60604))
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60604))
peerInfo3 = node3.switch.peerInfo peerInfo3 = node3.switch.peerInfo
await allFutures([node1.start(), node2.start(), node3.start()]) await allFutures([node1.start(), node2.start(), node3.start()])
@ -93,7 +89,7 @@ procSuite "Waku v2 JSON-RPC API - Admin":
asyncTest "get managed peer information": asyncTest "get managed peer information":
# Create 3 nodes and start them with relay # Create 3 nodes and start them with relay
let nodes = toSeq(0..<3).mapIt(WakuNode.new(generateKey(), ValidIpAddress.init("0.0.0.0"), Port(60220+it*2))) let nodes = toSeq(0..<3).mapIt(WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60220+it*2)))
await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.start()))
await allFutures(nodes.mapIt(it.mountRelay())) await allFutures(nodes.mapIt(it.mountRelay()))
@ -140,9 +136,7 @@ procSuite "Waku v2 JSON-RPC API - Admin":
await allFutures(nodes.mapIt(it.stop())) await allFutures(nodes.mapIt(it.stop()))
asyncTest "get unmanaged peer information": asyncTest "get unmanaged peer information":
let let node = WakuNode.new(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60523))
nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[]
node = WakuNode.new(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(60523))
await node.start() await node.start()
@ -170,11 +164,8 @@ procSuite "Waku v2 JSON-RPC API - Admin":
let let
locationAddr = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() locationAddr = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet()
filterKey = crypto.PrivateKey.random(ECDSA, rng[]).get() filterPeer = PeerInfo.new(generateEcdsaKey(), @[locationAddr])
filterPeer = PeerInfo.new(filterKey, @[locationAddr]) storePeer = PeerInfo.new(generateEcdsaKey(), @[locationAddr])
storeKey = crypto.PrivateKey.random(ECDSA, rng[]).get()
storePeer = PeerInfo.new(storeKey, @[locationAddr])
node.setStorePeer(storePeer.toRemotePeerInfo()) node.setStorePeer(storePeer.toRemotePeerInfo())
node.setFilterPeer(filterPeer.toRemotePeerInfo()) node.setFilterPeer(filterPeer.toRemotePeerInfo())

View File

@ -13,13 +13,13 @@ import
../../../waku/v2/node/peer_manager, ../../../waku/v2/node/peer_manager,
../../../waku/v2/node/waku_node, ../../../waku/v2/node/waku_node,
../../../waku/v2/node/jsonrpc/debug/handlers as debug_api, ../../../waku/v2/node/jsonrpc/debug/handlers as debug_api,
../../../waku/v2/node/jsonrpc/debug/client as debug_api_client ../../../waku/v2/node/jsonrpc/debug/client as debug_api_client,
../testlib/waku2
procSuite "Waku v2 JSON-RPC API - Debug": procSuite "Waku v2 JSON-RPC API - Debug":
let let
rng = crypto.newRng() privkey = generateSecp256k1Key()
privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
port = Port(9000) port = Port(9000)

View File

@ -17,7 +17,8 @@ import
../../../waku/v2/protocol/waku_message, ../../../waku/v2/protocol/waku_message,
../../../waku/v2/protocol/waku_filter/rpc, ../../../waku/v2/protocol/waku_filter/rpc,
../../../waku/v2/protocol/waku_filter/client, ../../../waku/v2/protocol/waku_filter/client,
../../../waku/v2/utils/peers ../../../waku/v2/utils/peers,
../testlib/waku2
proc newTestMessageCache(): filter_api.MessageCache = proc newTestMessageCache(): filter_api.MessageCache =
@ -26,14 +27,13 @@ proc newTestMessageCache(): filter_api.MessageCache =
procSuite "Waku v2 JSON-RPC API - Filter": procSuite "Waku v2 JSON-RPC API - Filter":
let let
rng = crypto.newRng()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
asyncTest "subscribe and unsubscribe": asyncTest "subscribe and unsubscribe":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, bindIp, Port(60390)) node1 = WakuNode.new(nodeKey1, bindIp, Port(60390))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, bindIp, Port(60392)) node2 = WakuNode.new(nodeKey2, bindIp, Port(60392))
await allFutures(node1.start(), node2.start()) await allFutures(node1.start(), node2.start())

View File

@ -19,7 +19,8 @@ import
../../../waku/v2/protocol/waku_relay, ../../../waku/v2/protocol/waku_relay,
../../../waku/v2/utils/compat, ../../../waku/v2/utils/compat,
../../../waku/v2/utils/peers, ../../../waku/v2/utils/peers,
../../../waku/v2/utils/time ../../../waku/v2/utils/time,
../testlib/waku2
proc newTestMessageCache(): relay_api.MessageCache = proc newTestMessageCache(): relay_api.MessageCache =
@ -28,8 +29,7 @@ proc newTestMessageCache(): relay_api.MessageCache =
procSuite "Waku v2 JSON-RPC API - Relay": procSuite "Waku v2 JSON-RPC API - Relay":
let let
rng = crypto.newRng() privkey = generateSecp256k1Key()
privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
port = Port(9000) port = Port(9000)
@ -87,11 +87,11 @@ procSuite "Waku v2 JSON-RPC API - Relay":
asyncTest "get latest messages": asyncTest "get latest messages":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, bindIp, Port(60300)) node1 = WakuNode.new(nodeKey1, bindIp, Port(60300))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, bindIp, Port(60302)) node2 = WakuNode.new(nodeKey2, bindIp, Port(60302))
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, bindIp, Port(60303), some(extIp), some(port)) node3 = WakuNode.new(nodeKey3, bindIp, Port(60303), some(extIp), some(port))
pubSubTopic = "polling" pubSubTopic = "polling"
contentTopic = DefaultContentTopic contentTopic = DefaultContentTopic
@ -178,11 +178,11 @@ procSuite "Waku v2 JSON-RPC API - Relay":
asyncTest "generate asymmetric keys and encrypt/decrypt communication": asyncTest "generate asymmetric keys and encrypt/decrypt communication":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, bindIp, Port(62001)) node1 = WakuNode.new(nodeKey1, bindIp, Port(62001))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, bindIp, Port(62002)) node2 = WakuNode.new(nodeKey2, bindIp, Port(62002))
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, bindIp, Port(62003), some(extIp), some(port)) node3 = WakuNode.new(nodeKey3, bindIp, Port(62003), some(extIp), some(port))
pubSubTopic = "polling" pubSubTopic = "polling"
contentTopic = DefaultContentTopic contentTopic = DefaultContentTopic
@ -269,11 +269,11 @@ procSuite "Waku v2 JSON-RPC API - Relay":
asyncTest "generate symmetric keys and encrypt/decrypt communication": asyncTest "generate symmetric keys and encrypt/decrypt communication":
let let
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey1 = generateSecp256k1Key()
node1 = WakuNode.new(nodeKey1, bindIp, Port(62100)) node1 = WakuNode.new(nodeKey1, bindIp, Port(62100))
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey2 = generateSecp256k1Key()
node2 = WakuNode.new(nodeKey2, bindIp, Port(62102)) node2 = WakuNode.new(nodeKey2, bindIp, Port(62102))
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[] nodeKey3 = generateSecp256k1Key()
node3 = WakuNode.new(nodeKey3, bindIp, Port(62103), some(extIp), some(port)) node3 = WakuNode.new(nodeKey3, bindIp, Port(62103), some(extIp), some(port))
pubSubTopic = "polling" pubSubTopic = "polling"
contentTopic = DefaultContentTopic contentTopic = DefaultContentTopic

View File

@ -19,7 +19,8 @@ import
../../../waku/v2/protocol/waku_store/rpc, ../../../waku/v2/protocol/waku_store/rpc,
../../../waku/v2/utils/peers, ../../../waku/v2/utils/peers,
../../../waku/v2/utils/time, ../../../waku/v2/utils/time,
../../v2/testlib/common ../../v2/testlib/common,
../../v2/testlib/waku2
proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Result[void, string] = proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Result[void, string] =
@ -32,8 +33,7 @@ proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage):
procSuite "Waku v2 JSON-RPC API - Store": procSuite "Waku v2 JSON-RPC API - Store":
let let
rng = crypto.newRng() privkey = generateSecp256k1Key()
privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet()
bindIp = ValidIpAddress.init("0.0.0.0") bindIp = ValidIpAddress.init("0.0.0.0")
extIp = ValidIpAddress.init("127.0.0.1") extIp = ValidIpAddress.init("127.0.0.1")
port = Port(9000) port = Port(9000)
@ -55,7 +55,7 @@ procSuite "Waku v2 JSON-RPC API - Store":
# WakuStore setup # WakuStore setup
let let
key = crypto.PrivateKey.random(ECDSA, rng[]).get() key = generateEcdsaKey()
peer = PeerInfo.new(key) peer = PeerInfo.new(key)
let driver: ArchiveDriver = QueueDriver.new() let driver: ArchiveDriver = QueueDriver.new()