Implement D parameter tests.
This commit is contained in:
parent
64477145c4
commit
a7796bf768
|
@ -37,6 +37,9 @@ import ../helpers, ../utils/[async, futures, async, tests]
|
||||||
proc `$`(peer: PubSubPeer): string =
|
proc `$`(peer: PubSubPeer): string =
|
||||||
shortLog(peer)
|
shortLog(peer)
|
||||||
|
|
||||||
|
proc voidTopicHandler(topic: string, data: seq[byte]) {.async.} =
|
||||||
|
discard
|
||||||
|
|
||||||
template tryPublish(
|
template tryPublish(
|
||||||
call: untyped, require: int, wait = 10.milliseconds, timeout = 5.seconds
|
call: untyped, require: int, wait = 10.milliseconds, timeout = 5.seconds
|
||||||
): untyped =
|
): untyped =
|
||||||
|
@ -1252,3 +1255,70 @@ suite "GossipSub":
|
||||||
await allFuturesThrowing(node0.switch.stop(), node1.switch.stop())
|
await allFuturesThrowing(node0.switch.stop(), node1.switch.stop())
|
||||||
|
|
||||||
await allFuturesThrowing(nodesFut.concat())
|
await allFuturesThrowing(nodesFut.concat())
|
||||||
|
|
||||||
|
suite "Gossipsub Parameters":
|
||||||
|
teardown:
|
||||||
|
checkTrackers()
|
||||||
|
|
||||||
|
asyncTest "dont prune peers if mesh len is less than d_high":
|
||||||
|
let
|
||||||
|
numberOfNodes = 5
|
||||||
|
topic = "foobar"
|
||||||
|
nodes = generateNodes(numberOfNodes, gossip = true)
|
||||||
|
nodesFut = await allFinished(nodes.mapIt(it.switch.start()))
|
||||||
|
|
||||||
|
await subscribeNodes(nodes)
|
||||||
|
|
||||||
|
for node in nodes:
|
||||||
|
node.subscribe(topic, voidTopicHandler)
|
||||||
|
|
||||||
|
for x in 0 ..< numberOfNodes:
|
||||||
|
for y in 0 ..< numberOfNodes:
|
||||||
|
if x != y:
|
||||||
|
await waitSub(nodes[x], nodes[y], topic)
|
||||||
|
|
||||||
|
let expectedNumberOfPeers = numberOfNodes - 1
|
||||||
|
for i in 0 ..< numberOfNodes:
|
||||||
|
var gossip = GossipSub(nodes[i])
|
||||||
|
check:
|
||||||
|
gossip.gossipsub[topic].len == expectedNumberOfPeers
|
||||||
|
gossip.mesh[topic].len == expectedNumberOfPeers
|
||||||
|
gossip.fanout.len == 0
|
||||||
|
|
||||||
|
await allFuturesThrowing(nodes.mapIt(allFutures(it.switch.stop())))
|
||||||
|
|
||||||
|
asyncTest "prune peers if mesh len is higher than d_high":
|
||||||
|
let
|
||||||
|
numberofNodes = 15
|
||||||
|
topic = "foobar"
|
||||||
|
nodes = generateNodes(numberofNodes, gossip = true)
|
||||||
|
nodesFut = await allFinished(nodes.mapIt(it.switch.start()))
|
||||||
|
|
||||||
|
await subscribeNodes(nodes)
|
||||||
|
|
||||||
|
for node in nodes:
|
||||||
|
node.subscribe(topic, voidTopicHandler)
|
||||||
|
|
||||||
|
for x in 0 ..< numberofNodes:
|
||||||
|
for y in 0 ..< numberofNodes:
|
||||||
|
if x != y:
|
||||||
|
await waitSub(nodes[x], nodes[y], topic)
|
||||||
|
|
||||||
|
# Give it time for a heartbeat
|
||||||
|
await sleepAsync(DURATION_TIMEOUT)
|
||||||
|
|
||||||
|
let
|
||||||
|
expectedNumberOfPeers = numberofNodes - 1
|
||||||
|
dHigh = 12
|
||||||
|
d = 6
|
||||||
|
dLow = 4
|
||||||
|
|
||||||
|
for i in 0 ..< numberofNodes:
|
||||||
|
var gossip = GossipSub(nodes[i])
|
||||||
|
|
||||||
|
check:
|
||||||
|
gossip.gossipsub[topic].len == expectedNumberOfPeers
|
||||||
|
gossip.mesh[topic].len >= dLow and gossip.mesh[topic].len <= dHigh
|
||||||
|
gossip.fanout.len == 0
|
||||||
|
|
||||||
|
await allFuturesThrowing(nodes.mapIt(allFutures(it.switch.stop())))
|
||||||
|
|
Loading…
Reference in New Issue