mirror of https://github.com/waku-org/nwaku.git
83 lines
2.6 KiB
Nim
83 lines
2.6 KiB
Nim
{.used.}
|
|
|
|
import
|
|
stew/byteutils,
|
|
stew/shims/net as stewNet,
|
|
testutils/unittests,
|
|
chronicles,
|
|
chronos,
|
|
libp2p/crypto/crypto,
|
|
libp2p/switch,
|
|
../../waku/v2/protocol/waku_message,
|
|
../../waku/v2/protocol/waku_lightpush,
|
|
../../waku/v2/node/peer_manager/peer_manager,
|
|
../../waku/v2/utils/peers,
|
|
../../waku/v2/node/wakunode2
|
|
|
|
|
|
procSuite "WakuNode - Lightpush":
|
|
let rng = crypto.newRng()
|
|
|
|
asyncTest "Lightpush message return success":
|
|
let
|
|
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
|
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(60010))
|
|
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
|
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(60012))
|
|
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
|
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(60013))
|
|
|
|
let
|
|
pubSubTopic = "test"
|
|
contentTopic = ContentTopic("/waku/2/default-content/proto")
|
|
payload = "hello world".toBytes()
|
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
|
|
|
# Light node, only lightpush
|
|
await node1.start()
|
|
await node1.mountLightPush()
|
|
|
|
# Intermediate node
|
|
await node2.start()
|
|
await node2.mountRelay(@[pubSubTopic])
|
|
await node2.mountLightPush()
|
|
|
|
# Receiving node
|
|
await node3.start()
|
|
await node3.mountRelay(@[pubSubTopic])
|
|
|
|
discard await node1.peerManager.dialPeer(node2.switch.peerInfo.toRemotePeerInfo(), WakuLightPushCodec)
|
|
await sleepAsync(1.seconds)
|
|
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
|
|
|
var completionFutLightPush = newFuture[bool]()
|
|
var completionFutRelay = newFuture[bool]()
|
|
proc relayHandler(topic: string, data: seq[byte]) {.async, gcsafe.} =
|
|
let msg = WakuMessage.init(data)
|
|
if msg.isOk():
|
|
let val = msg.value()
|
|
check:
|
|
topic == pubSubTopic
|
|
val.contentTopic == contentTopic
|
|
val.payload == payload
|
|
completionFutRelay.complete(true)
|
|
|
|
node3.subscribe(pubSubTopic, relayHandler)
|
|
await sleepAsync(500.millis)
|
|
|
|
proc handler(response: PushResponse) {.gcsafe, closure.} =
|
|
debug "push response handler, expecting true"
|
|
check:
|
|
response.isSuccess == true
|
|
completionFutLightPush.complete(true)
|
|
|
|
# Publishing with lightpush
|
|
await node1.lightpush(pubSubTopic, message, handler)
|
|
await sleepAsync(500.millis)
|
|
|
|
check:
|
|
(await completionFutRelay.withTimeout(1.seconds)) == true
|
|
(await completionFutLightPush.withTimeout(1.seconds)) == true
|
|
|
|
await allFutures([node1.stop(), node2.stop(), node3.stop()])
|
|
|