@@ -16,6 +16,7 @@ import ../utils
1616import ../../../ libp2p/ protocols/ pubsub/ [gossipsub, pubsub]
1717import ../../../ libp2p/ protocols/ pubsub/ rpc/ [messages]
1818import ../../ helpers
19+ import ../../ utils/ futures
1920
2021suite " 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