Skip to content

Commit 0c2b351

Browse files
committed
test: refactor
1 parent 9d24abd commit 0c2b351

1 file changed

Lines changed: 83 additions & 26 deletions

File tree

tests/pubsub/integration/testgossipsubsignatureflags.nim

Lines changed: 83 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import ../utils
1616
import ../../../libp2p/protocols/pubsub/[gossipsub, pubsub]
1717
import ../../../libp2p/protocols/pubsub/rpc/[messages]
1818
import ../../helpers
19+
import ../../utils/futures
1920

2021
suite "GossipSub Integration - Signature Flags":
2122
const
@@ -40,6 +41,9 @@ suite "GossipSub Integration - Signature Flags":
4041

4142
tryPublish await nodes[0].publish(topic, testData), 1
4243

44+
checkUntilTimeout:
45+
receivedMessages[].len > 0
46+
4347
let receivedMessage = receivedMessages[][0]
4448
check:
4549
receivedMessage.data == testData
@@ -63,6 +67,9 @@ suite "GossipSub Integration - Signature Flags":
6367

6468
tryPublish await nodes[0].publish(topic, testData), 1
6569

70+
checkUntilTimeout:
71+
receivedMessages[].len > 0
72+
6673
let receivedMessage = receivedMessages[][0]
6774
check:
6875
receivedMessage.data == testData
@@ -84,6 +91,9 @@ suite "GossipSub Integration - Signature Flags":
8491
let testData = "anonymous message".toBytes()
8592
tryPublish await nodes[0].publish(topic, testData), 1
8693

94+
checkUntilTimeout:
95+
receivedMessages[].len > 0
96+
8797
let receivedMessage = receivedMessages[][0]
8898
check:
8999
receivedMessage.data == testData
@@ -92,69 +102,116 @@ suite "GossipSub Integration - Signature Flags":
92102
receivedMessage.signature.len == 0
93103
receivedMessage.key.len == 0
94104

95-
type NodeConfig = tuple[sign: bool, verify: bool, anonymize: bool]
96-
let scenarios =
97-
@[
98-
# (sender_config, receiver_config, should_work)
105+
type NodeConfig = object
106+
sign: bool
107+
verify: bool
108+
anonymize: bool
99109

110+
type Scenario = object
111+
senderConfig: NodeConfig
112+
receiverConfig: NodeConfig
113+
shouldWork: bool
114+
115+
let scenarios: seq[Scenario] =
116+
@[
100117
# valid combos
101118
# S default, R default
102-
((true, true, false), (true, true, false), true),
119+
Scenario(
120+
senderConfig: NodeConfig(sign: true, verify: true, anonymize: false),
121+
receiverConfig: NodeConfig(sign: true, verify: true, anonymize: false),
122+
shouldWork: true,
123+
),
103124
# S default, R anonymous
104-
((true, true, false), (false, false, true), true),
125+
Scenario(
126+
senderConfig: NodeConfig(sign: true, verify: true, anonymize: false),
127+
receiverConfig: NodeConfig(sign: false, verify: false, anonymize: true),
128+
shouldWork: true,
129+
),
105130
# S anonymous, R anonymous
106-
((false, false, true), (false, false, true), true),
131+
Scenario(
132+
senderConfig: NodeConfig(sign: false, verify: false, anonymize: true),
133+
receiverConfig: NodeConfig(sign: false, verify: false, anonymize: true),
134+
shouldWork: true,
135+
),
107136
# S only sign, R only verify
108-
((true, false, false), (false, true, false), true),
137+
Scenario(
138+
senderConfig: NodeConfig(sign: true, verify: false, anonymize: false),
139+
receiverConfig: NodeConfig(sign: false, verify: true, anonymize: false),
140+
shouldWork: true,
141+
),
109142
# S only verify, R only sign
110-
((true, true, true), (false, false, false), true),
143+
Scenario(
144+
senderConfig: NodeConfig(sign: true, verify: true, anonymize: true),
145+
receiverConfig: NodeConfig(sign: false, verify: false, anonymize: false),
146+
shouldWork: true,
147+
),
111148
# S anonymous (not signed despite the flag), R minimal
112-
((false, true, true), (true, false, false), true),
149+
Scenario(
150+
senderConfig: NodeConfig(sign: false, verify: true, anonymize: true),
151+
receiverConfig: NodeConfig(sign: true, verify: false, anonymize: false),
152+
shouldWork: true,
153+
),
113154
# S unsigned, R unsigned
114-
((false, false, false), (false, false, false), true),
155+
Scenario(
156+
senderConfig: NodeConfig(sign: false, verify: false, anonymize: false),
157+
receiverConfig: NodeConfig(sign: false, verify: false, anonymize: false),
158+
shouldWork: true,
159+
),
115160

116161
# invalid combos
117162
# S anonymous, R default
118-
((false, false, true), (true, true, false), false),
163+
Scenario(
164+
senderConfig: NodeConfig(sign: false, verify: false, anonymize: true),
165+
receiverConfig: NodeConfig(sign: true, verify: true, anonymize: false),
166+
shouldWork: false,
167+
),
119168
# S unsigned, R anonymous but verify
120-
((false, false, false), (true, true, true), false),
169+
Scenario(
170+
senderConfig: NodeConfig(sign: false, verify: false, anonymize: false),
171+
receiverConfig: NodeConfig(sign: true, verify: true, anonymize: true),
172+
shouldWork: false,
173+
),
121174
# S unsigned, R default
122-
((false, false, false), (true, true, false), false),
175+
Scenario(
176+
senderConfig: NodeConfig(sign: false, verify: false, anonymize: false),
177+
receiverConfig: NodeConfig(sign: true, verify: true, anonymize: false),
178+
shouldWork: false,
179+
),
123180
]
124181

125182
for scenario in scenarios:
126183
let title = "Compatibility matrix: " & $scenario
127184
asyncTest title:
128185
let
129-
(senderConfig, receiverConfig, shouldWork) = scenario
130186
sender = generateNodes(
131187
1,
132188
gossip = true,
133-
sign = senderConfig[0],
134-
verifySignature = senderConfig[1],
135-
anonymize = senderConfig[2],
189+
sign = scenario.senderConfig.sign,
190+
verifySignature = scenario.senderConfig.verify,
191+
anonymize = scenario.senderConfig.anonymize,
136192
)[0]
137193
receiver = generateNodes(
138194
1,
139195
gossip = true,
140-
sign = receiverConfig[0],
141-
verifySignature = receiverConfig[1],
142-
anonymize = receiverConfig[2],
196+
sign = scenario.receiverConfig.sign,
197+
verifySignature = scenario.receiverConfig.verify,
198+
anonymize = scenario.receiverConfig.anonymize,
143199
)[0]
144200
nodes = @[sender, receiver]
145201

146202
startNodesAndDeferStop(nodes)
147203
await connectNodesStar(nodes)
148204

149-
var messageReceived = false
150-
proc handler(topic: string, data: seq[byte]) {.async.} =
151-
messageReceived = true
205+
let (messageReceivedFut, handler) = createCompleteHandler()
152206

153207
nodes.subscribeAllNodes(topic, handler)
154208
await waitForHeartbeat()
155209

156210
discard await sender.publish(topic, testData)
157-
await waitForHeartbeat()
158211

212+
let messageReceived = await waitForState(messageReceivedFut, HEARTBEAT_TIMEOUT)
159213
check:
160-
messageReceived == shouldWork
214+
if scenario.shouldWork:
215+
messageReceived.isCompleted(true)
216+
else:
217+
messageReceived.isCancelled()

0 commit comments

Comments
 (0)