fix: waku bridge test timing (#1429)

* fix: waku bridge test timing

* fix: shorten timing more
This commit is contained in:
Hanno Cornelius 2022-11-28 22:07:21 +02:00 committed by GitHub
parent 696bd6bd6b
commit 08cbe5216a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,10 +2,10 @@
import import
std/[sequtils, strutils, tables], std/[sequtils, strutils, tables],
stew/byteutils, stew/byteutils,
stew/shims/net as stewNet, stew/shims/net as stewNet,
testutils/unittests, testutils/unittests,
chronos, chronos,
libp2p/crypto/crypto, libp2p/crypto/crypto,
libp2p/crypto/secp, libp2p/crypto/secp,
libp2p/peerid, libp2p/peerid,
@ -45,7 +45,7 @@ procSuite "WakuBridge":
nodev2Key = nodev2Key, nodev2Key = nodev2Key,
nodev2BindIp = ValidIpAddress.init("0.0.0.0"), nodev2BindPort= Port(62200), nodev2BindIp = ValidIpAddress.init("0.0.0.0"), nodev2BindPort= Port(62200),
nodev2PubsubTopic = DefaultBridgeTopic) nodev2PubsubTopic = DefaultBridgeTopic)
# Waku v1 node # Waku v1 node
v1Node = setupTestNode(rng, Waku) v1Node = setupTestNode(rng, Waku)
@ -59,14 +59,14 @@ procSuite "WakuBridge":
payloadV2 = "hello from V2".toBytes() payloadV2 = "hello from V2".toBytes()
encodedPayloadV2 = Payload(payload: payloadV2, dst: some(nodev1Key.pubKey)) encodedPayloadV2 = Payload(payload: payloadV2, dst: some(nodev1Key.pubKey))
message = WakuMessage(payload: encodedPayloadV2.encode(1, rng[]).get(), contentTopic: contentTopic, version: 1) message = WakuMessage(payload: encodedPayloadV2.encode(1, rng[]).get(), contentTopic: contentTopic, version: 1)
######################## ########################
# Tests setup/teardown # # Tests setup/teardown #
######################## ########################
# setup: # setup:
# # Runs before each test # # Runs before each test
# teardown: # teardown:
# # Runs after each test # # Runs after each test
@ -76,7 +76,7 @@ procSuite "WakuBridge":
asyncTest "Topics are correctly converted between Waku v1 and Waku v2": asyncTest "Topics are correctly converted between Waku v1 and Waku v2":
# Expected cases # Expected cases
check: check:
toV1Topic(ContentTopic("/waku/1/0x00000000/rfc26")) == [byte 0x00, byte 0x00, byte 0x00, byte 0x00] toV1Topic(ContentTopic("/waku/1/0x00000000/rfc26")) == [byte 0x00, byte 0x00, byte 0x00, byte 0x00]
toV2ContentTopic([byte 0x00, byte 0x00, byte 0x00, byte 0x00]) == ContentTopic("/waku/1/0x00000000/rfc26") toV2ContentTopic([byte 0x00, byte 0x00, byte 0x00, byte 0x00]) == ContentTopic("/waku/1/0x00000000/rfc26")
@ -92,15 +92,15 @@ procSuite "WakuBridge":
expect LPError: expect LPError:
# Content topic not namespaced # Content topic not namespaced
discard toV1Topic(ContentTopic("this-is-my-content")) discard toV1Topic(ContentTopic("this-is-my-content"))
expect ValueError: expect ValueError:
# Content topic name too short # Content topic name too short
discard toV1Topic(ContentTopic("/waku/1/0x112233/rfc26")) discard toV1Topic(ContentTopic("/waku/1/0x112233/rfc26"))
expect ValueError: expect ValueError:
# Content topic name not hex # Content topic name not hex
discard toV1Topic(ContentTopic("/waku/1/my-content/rfc26")) discard toV1Topic(ContentTopic("/waku/1/my-content/rfc26"))
asyncTest "Verify that WakuMessages are on bridgeable content topics": asyncTest "Verify that WakuMessages are on bridgeable content topics":
let let
validCT = ContentTopic("/waku/1/my-content/rfc26") validCT = ContentTopic("/waku/1/my-content/rfc26")
@ -127,25 +127,23 @@ procSuite "WakuBridge":
var completionFut = newFuture[bool]() var completionFut = newFuture[bool]()
proc relayHandler(topic: string, data: seq[byte]) {.async, gcsafe.} = proc relayHandler(topic: string, data: seq[byte]) {.async, gcsafe.} =
let msg = WakuMessage.decode(data) let msg = WakuMessage.decode(data)
if msg.isOk() and msg.value().version == 1: if msg.isOk() and msg.value().version == 1:
check: check:
# Message fields are as expected # Message fields are as expected
msg.value().contentTopic == contentTopic # Topic translation worked msg.value().contentTopic == contentTopic # Topic translation worked
string.fromBytes(msg.value().payload).contains("from V1") string.fromBytes(msg.value().payload).contains("from V1")
completionFut.complete(true) completionFut.complete(true)
v2Node.subscribe(DefaultBridgeTopic, relayHandler) v2Node.subscribe(DefaultBridgeTopic, relayHandler)
await sleepAsync(250.millis)
# Test bridging from V2 to V1 # Test bridging from V2 to V1
await v2Node.publish(DefaultBridgeTopic, message) await v2Node.publish(DefaultBridgeTopic, message)
await sleepAsync(250.millis) await sleepAsync(1.seconds)
check: check:
# v1Node received message published by v2Node # v1Node received message published by v2Node
@ -159,7 +157,7 @@ procSuite "WakuBridge":
# Message fields are as expected # Message fields are as expected
msg.env.topic == topic # Topic translation worked msg.env.topic == topic # Topic translation worked
string.fromBytes(decodedPayload.payload).contains("from V2") string.fromBytes(decodedPayload.payload).contains("from V2")
# Test bridging from V1 to V2 # Test bridging from V1 to V2
check: check:
v1Node.postMessage(ttl = 5, v1Node.postMessage(ttl = 5,
@ -174,18 +172,18 @@ procSuite "WakuBridge":
await v2Node.publish(DefaultBridgeTopic, message) await v2Node.publish(DefaultBridgeTopic, message)
await sleepAsync(250.millis) await sleepAsync(1.seconds)
check: check:
# v1Node did not receive duplicate of previous message # v1Node did not receive duplicate of previous message
v1Node.protocolState(Waku).queue.items.len == 0 v1Node.protocolState(Waku).queue.items.len == 0
# Teardown test # Teardown test
bridge.nodeV1.resetMessageQueue() bridge.nodeV1.resetMessageQueue()
v1Node.resetMessageQueue() v1Node.resetMessageQueue()
waitFor allFutures([bridge.stop(), v2Node.stop()]) waitFor allFutures([bridge.stop(), v2Node.stop()])
asyncTest "Bridge manages its v1 connections": asyncTest "Bridge manages its v1 connections":
# Given # Given
let let
@ -206,10 +204,10 @@ procSuite "WakuBridge":
nodev2PubsubTopic = DefaultBridgeTopic, nodev2PubsubTopic = DefaultBridgeTopic,
v1Pool = v1NodePool.mapIt(newNode(it.toEnode())), v1Pool = v1NodePool.mapIt(newNode(it.toEnode())),
targetV1Peers = targetV1Peers) targetV1Peers = targetV1Peers)
for node in v1NodePool: for node in v1NodePool:
node.startListening() node.startListening()
# When # When
waitFor v1Bridge.start() waitFor v1Bridge.start()
await sleepAsync(250.millis) # Give peers some time to connect await sleepAsync(250.millis) # Give peers some time to connect