mirror of
https://github.com/vacp2p/nim-libp2p.git
synced 2025-03-01 16:40:32 +00:00
Implement message should not go back to source test.
This commit is contained in:
parent
4bffaf1a06
commit
952b08cff5
@ -13,6 +13,7 @@ import sequtils, options, tables, sets, sugar
|
|||||||
import chronos, stew/byteutils, chronos/ratelimit
|
import chronos, stew/byteutils, chronos/ratelimit
|
||||||
import chronicles
|
import chronicles
|
||||||
import metrics
|
import metrics
|
||||||
|
import results
|
||||||
import std/options
|
import std/options
|
||||||
import ../../libp2p/protocols/pubsub/gossipsub/behavior
|
import ../../libp2p/protocols/pubsub/gossipsub/behavior
|
||||||
import
|
import
|
||||||
@ -1347,13 +1348,59 @@ suite "Gossipsub Parameters":
|
|||||||
for node in nodes:
|
for node in nodes:
|
||||||
node.subscribe(topic, voidTopicHandler)
|
node.subscribe(topic, voidTopicHandler)
|
||||||
|
|
||||||
# await waitForMesh(nodes[0], nodes[1], topic)
|
|
||||||
await sleepAsync(1.seconds)
|
await sleepAsync(1.seconds)
|
||||||
|
|
||||||
# try:
|
|
||||||
let mcache = GossipSub(nodes[0]).mcache
|
|
||||||
|
|
||||||
discard nodes[0].publish(topic, "Hello!".toBytes())
|
discard nodes[0].publish(topic, "Hello!".toBytes())
|
||||||
await sleepAsync(3.seconds)
|
await sleepAsync(3.seconds)
|
||||||
|
|
||||||
await allFuturesThrowing(nodes.mapIt(allFutures(it.switch.stop())))
|
await allFuturesThrowing(nodes.mapIt(allFutures(it.switch.stop())))
|
||||||
|
|
||||||
|
asyncTest "messages are not sent back to source or forwarding peer":
|
||||||
|
# Given 3 handlers, one for each node
|
||||||
|
var
|
||||||
|
handlerFuture0 = newFuture[bool]()
|
||||||
|
handlerFuture1 = newFuture[bool]()
|
||||||
|
handlerFuture2 = newFuture[bool]()
|
||||||
|
|
||||||
|
proc handler0(topic: string, data: seq[byte]) {.async.} =
|
||||||
|
handlerFuture0.complete(true)
|
||||||
|
|
||||||
|
proc handler1(topic: string, data: seq[byte]) {.async.} =
|
||||||
|
handlerFuture1.complete(true)
|
||||||
|
|
||||||
|
proc handler2(topic: string, data: seq[byte]) {.async.} =
|
||||||
|
handlerFuture2.complete(true)
|
||||||
|
|
||||||
|
# Instantiate 3 nodes
|
||||||
|
let
|
||||||
|
numberOfNodes = 3
|
||||||
|
topic = "foobar"
|
||||||
|
nodes = generateNodes(numberOfNodes, gossip = true)
|
||||||
|
nodesFut = await allFinished(nodes.mapIt(it.switch.start()))
|
||||||
|
node0 = nodes[0]
|
||||||
|
node1 = nodes[1]
|
||||||
|
node2 = nodes[2]
|
||||||
|
|
||||||
|
# Connect them in a ring
|
||||||
|
await node0.switch.connect(node1.peerInfo.peerId, node1.peerInfo.addrs)
|
||||||
|
await node1.switch.connect(node2.peerInfo.peerId, node2.peerInfo.addrs)
|
||||||
|
await node2.switch.connect(node0.peerInfo.peerId, node0.peerInfo.addrs)
|
||||||
|
await sleepAsync(DURATION_TIMEOUT)
|
||||||
|
|
||||||
|
# Subscribe them all to the same topic
|
||||||
|
nodes[0].subscribe(topic, handler0)
|
||||||
|
nodes[1].subscribe(topic, handler1)
|
||||||
|
nodes[2].subscribe(topic, handler2)
|
||||||
|
await sleepAsync(DURATION_TIMEOUT)
|
||||||
|
|
||||||
|
# When node 0 sends a message
|
||||||
|
discard nodes[0].publish(topic, "Hello!".toBytes())
|
||||||
|
await sleepAsync(DURATION_TIMEOUT)
|
||||||
|
|
||||||
|
# Nodes 1 and 2 should receive the message, but node 0 shouldn't receive it back
|
||||||
|
check:
|
||||||
|
(await handlerFuture0.waitForResult()).isErr
|
||||||
|
(await handlerFuture1.waitForResult()).isOk
|
||||||
|
(await handlerFuture2.waitForResult()).isOk
|
||||||
|
|
||||||
|
await allFuturesThrowing(nodes.mapIt(allFutures(it.switch.stop())))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user