@@ -20,6 +20,7 @@ import (
20
20
"fmt"
21
21
"testing"
22
22
23
+ "github.com/hyperledger/fabric/gossip/common"
23
24
"github.com/stretchr/testify/assert"
24
25
)
25
26
@@ -136,6 +137,205 @@ func TestToString(t *testing.T) {
136
137
assert .NotContains (t , fmt .Sprintf ("%v" , sMsg ), "2" )
137
138
}
138
139
140
+ func TestAliveMessageNoActionTaken (t * testing.T ) {
141
+ comparator := NewGossipMessageComparator (1 )
142
+
143
+ sMsg1 := signedGossipMessage ("testChannel" , & GossipMessage_AliveMsg {
144
+ AliveMsg : & AliveMessage {
145
+ Membership : & Member {
146
+ Endpoint : "localhost" ,
147
+ Metadata : []byte {1 , 2 , 3 , 4 , 5 },
148
+ PkiId : []byte {17 },
149
+ },
150
+ Timestamp : & PeerTime {
151
+ IncNumber : 1 ,
152
+ SeqNum : 1 ,
153
+ },
154
+ Identity : []byte ("peerID1" ),
155
+ },
156
+ })
157
+
158
+ sMsg2 := signedGossipMessage ("testChannel" , & GossipMessage_AliveMsg {
159
+ AliveMsg : & AliveMessage {
160
+ Membership : & Member {
161
+ Endpoint : "localhost" ,
162
+ Metadata : []byte {1 , 2 , 3 , 4 , 5 },
163
+ PkiId : []byte {15 },
164
+ },
165
+ Timestamp : & PeerTime {
166
+ IncNumber : 2 ,
167
+ SeqNum : 2 ,
168
+ },
169
+ Identity : []byte ("peerID1" ),
170
+ },
171
+ })
172
+
173
+ assert .Equal (t , comparator (sMsg1 , sMsg2 ), common .MessageNoAction )
174
+ }
175
+
176
+ func TestStateInfoMessageNoActionTaken (t * testing.T ) {
177
+ comparator := NewGossipMessageComparator (1 )
178
+
179
+ // msg1 and msg2 have same channel mac, while different pkid, while
180
+ // msg and msg3 same pkid and different channel mac
181
+
182
+ sMsg1 := signedGossipMessage ("testChannel" , stateInfoMessage (1 , 1 , []byte {17 }, []byte {17 , 13 }))
183
+ sMsg2 := signedGossipMessage ("testChannel" , stateInfoMessage (1 , 1 , []byte {13 }, []byte {17 , 13 }))
184
+
185
+ // We only should compare comparable messages, e.g. message from same peer
186
+ // In any other cases no invalidation should be taken.
187
+ assert .Equal (t , comparator (sMsg1 , sMsg2 ), common .MessageNoAction )
188
+ }
189
+
190
+ func TestStateInfoMessagesInvalidation (t * testing.T ) {
191
+ comparator := NewGossipMessageComparator (1 )
192
+
193
+ sMsg1 := signedGossipMessage ("testChannel" , stateInfoMessage (1 , 1 , []byte {17 }, []byte {17 }))
194
+ sMsg2 := signedGossipMessage ("testChannel" , stateInfoMessage (1 , 1 , []byte {17 }, []byte {17 }))
195
+ sMsg3 := signedGossipMessage ("testChannel" , stateInfoMessage (1 , 2 , []byte {17 }, []byte {17 }))
196
+ sMsg4 := signedGossipMessage ("testChannel" , stateInfoMessage (2 , 1 , []byte {17 }, []byte {17 }))
197
+
198
+ assert .Equal (t , comparator (sMsg1 , sMsg2 ), common .MessageInvalidated )
199
+
200
+ assert .Equal (t , comparator (sMsg1 , sMsg3 ), common .MessageInvalidated )
201
+ assert .Equal (t , comparator (sMsg3 , sMsg1 ), common .MessageInvalidates )
202
+
203
+ assert .Equal (t , comparator (sMsg1 , sMsg4 ), common .MessageInvalidated )
204
+ assert .Equal (t , comparator (sMsg4 , sMsg1 ), common .MessageInvalidates )
205
+
206
+ assert .Equal (t , comparator (sMsg3 , sMsg4 ), common .MessageInvalidated )
207
+ assert .Equal (t , comparator (sMsg4 , sMsg3 ), common .MessageInvalidates )
208
+ }
209
+
210
+ func TestAliveMessageInvalidation (t * testing.T ) {
211
+ comparator := NewGossipMessageComparator (1 )
212
+
213
+ sMsg1 := signedGossipMessage ("testChannel" , & GossipMessage_AliveMsg {
214
+ AliveMsg : & AliveMessage {
215
+ Membership : & Member {
216
+ Endpoint : "localhost" ,
217
+ Metadata : []byte {1 , 2 , 3 , 4 , 5 },
218
+ PkiId : []byte {17 },
219
+ },
220
+ Timestamp : & PeerTime {
221
+ IncNumber : 1 ,
222
+ SeqNum : 1 ,
223
+ },
224
+ Identity : []byte ("peerID1" ),
225
+ },
226
+ })
227
+
228
+ sMsg2 := signedGossipMessage ("testChannel" , & GossipMessage_AliveMsg {
229
+ AliveMsg : & AliveMessage {
230
+ Membership : & Member {
231
+ Endpoint : "localhost" ,
232
+ Metadata : []byte {1 , 2 , 3 , 4 , 5 },
233
+ PkiId : []byte {17 },
234
+ },
235
+ Timestamp : & PeerTime {
236
+ IncNumber : 2 ,
237
+ SeqNum : 2 ,
238
+ },
239
+ Identity : []byte ("peerID1" ),
240
+ },
241
+ })
242
+
243
+ sMsg3 := signedGossipMessage ("testChannel" , & GossipMessage_AliveMsg {
244
+ AliveMsg : & AliveMessage {
245
+ Membership : & Member {
246
+ Endpoint : "localhost" ,
247
+ Metadata : []byte {1 , 2 , 3 , 4 , 5 },
248
+ PkiId : []byte {17 },
249
+ },
250
+ Timestamp : & PeerTime {
251
+ IncNumber : 1 ,
252
+ SeqNum : 2 ,
253
+ },
254
+ Identity : []byte ("peerID1" ),
255
+ },
256
+ })
257
+
258
+ assert .Equal (t , comparator (sMsg1 , sMsg2 ), common .MessageInvalidated )
259
+ assert .Equal (t , comparator (sMsg2 , sMsg1 ), common .MessageInvalidates )
260
+ assert .Equal (t , comparator (sMsg1 , sMsg3 ), common .MessageInvalidated )
261
+ assert .Equal (t , comparator (sMsg3 , sMsg1 ), common .MessageInvalidates )
262
+ }
263
+
264
+ func TestDataMessageInvalidation (t * testing.T ) {
265
+ comparator := NewGossipMessageComparator (5 )
266
+
267
+ data := []byte {1 , 1 , 1 }
268
+ sMsg1 := signedGossipMessage ("testChannel" , dataMessage (1 , "hash" , data ))
269
+ sMsg2 := signedGossipMessage ("testChannel" , dataMessage (1 , "hash" , data ))
270
+ sMsg3 := signedGossipMessage ("testChannel" , dataMessage (1 , "newHash" , data ))
271
+ sMsg4 := signedGossipMessage ("testChannel" , dataMessage (2 , "newHash" , data ))
272
+ sMsg5 := signedGossipMessage ("testChannel" , dataMessage (7 , "newHash" , data ))
273
+
274
+ assert .Equal (t , comparator (sMsg1 , sMsg2 ), common .MessageInvalidated )
275
+ assert .Equal (t , comparator (sMsg1 , sMsg3 ), common .MessageNoAction )
276
+ assert .Equal (t , comparator (sMsg1 , sMsg4 ), common .MessageNoAction )
277
+ assert .Equal (t , comparator (sMsg1 , sMsg5 ), common .MessageInvalidated )
278
+ assert .Equal (t , comparator (sMsg5 , sMsg1 ), common .MessageInvalidates )
279
+ }
280
+
281
+ func TestIdentityMessagesInvalidation (t * testing.T ) {
282
+ comparator := NewGossipMessageComparator (5 )
283
+
284
+ msg1 := signedGossipMessage ("testChannel" , & GossipMessage_PeerIdentity {
285
+ PeerIdentity : & PeerIdentity {
286
+ PkiId : []byte {17 },
287
+ Cert : []byte {1 , 2 , 3 , 4 },
288
+ Metadata : nil ,
289
+ },
290
+ })
291
+
292
+ msg2 := signedGossipMessage ("testChannel" , & GossipMessage_PeerIdentity {
293
+ PeerIdentity : & PeerIdentity {
294
+ PkiId : []byte {17 },
295
+ Cert : []byte {1 , 2 , 3 , 4 },
296
+ Metadata : nil ,
297
+ },
298
+ })
299
+
300
+ msg3 := signedGossipMessage ("testChannel" , & GossipMessage_PeerIdentity {
301
+ PeerIdentity : & PeerIdentity {
302
+ PkiId : []byte {11 },
303
+ Cert : []byte {11 , 21 , 31 , 41 },
304
+ Metadata : nil ,
305
+ },
306
+ })
307
+
308
+ assert .Equal (t , comparator (msg1 , msg2 ), common .MessageInvalidated )
309
+ assert .Equal (t , comparator (msg1 , msg3 ), common .MessageNoAction )
310
+ }
311
+
312
+ func TestLeadershipMessagesNoAction (t * testing.T ) {
313
+ comparator := NewGossipMessageComparator (5 )
314
+
315
+ msg1 := signedGossipMessage ("testChannel" , leadershipMessage (1 , 1 , []byte {17 }))
316
+ msg2 := signedGossipMessage ("testChannel" , leadershipMessage (1 , 1 , []byte {11 }))
317
+
318
+ // If message with different pkid's no action should be taken
319
+ assert .Equal (t , comparator (msg1 , msg2 ), common .MessageNoAction )
320
+ }
321
+
322
+ func TestLeadershipMessagesInvalidation (t * testing.T ) {
323
+ comparator := NewGossipMessageComparator (5 )
324
+
325
+ pkiID := []byte {17 }
326
+ msg1 := signedGossipMessage ("testChannel" , leadershipMessage (1 , 1 , pkiID ))
327
+ msg2 := signedGossipMessage ("testChannel" , leadershipMessage (1 , 2 , pkiID ))
328
+ msg3 := signedGossipMessage ("testChannel" , leadershipMessage (2 , 1 , pkiID ))
329
+
330
+ // If message with different pkid's no action should be taken
331
+ assert .Equal (t , comparator (msg1 , msg2 ), common .MessageInvalidated )
332
+ assert .Equal (t , comparator (msg2 , msg1 ), common .MessageInvalidates )
333
+ assert .Equal (t , comparator (msg1 , msg3 ), common .MessageInvalidated )
334
+ assert .Equal (t , comparator (msg3 , msg1 ), common .MessageInvalidates )
335
+ assert .Equal (t , comparator (msg2 , msg3 ), common .MessageInvalidated )
336
+ assert .Equal (t , comparator (msg3 , msg2 ), common .MessageInvalidates )
337
+ }
338
+
139
339
func envelopes () []* Envelope {
140
340
return []* Envelope {
141
341
{Payload : []byte {2 , 2 , 2 },
@@ -147,3 +347,54 @@ func envelopes() []*Envelope {
147
347
},
148
348
}
149
349
}
350
+
351
+ func leadershipMessage (incNum uint64 , seqNum uint64 , pkid []byte ) * GossipMessage_LeadershipMsg {
352
+ return & GossipMessage_LeadershipMsg {
353
+ LeadershipMsg : & LeadershipMessage {
354
+ PkiId : pkid ,
355
+ IsDeclaration : false ,
356
+ Timestamp : & PeerTime {
357
+ IncNumber : incNum ,
358
+ SeqNum : seqNum ,
359
+ },
360
+ },
361
+ }
362
+ }
363
+
364
+ func stateInfoMessage (incNumber uint64 , seqNum uint64 , pkid []byte , mac []byte ) * GossipMessage_StateInfo {
365
+ return & GossipMessage_StateInfo {
366
+ StateInfo : & StateInfo {
367
+ Metadata : []byte {},
368
+ Timestamp : & PeerTime {
369
+ IncNumber : incNumber ,
370
+ SeqNum : seqNum ,
371
+ },
372
+ PkiId : pkid ,
373
+ ChannelMAC : mac ,
374
+ },
375
+ }
376
+ }
377
+
378
+ func dataMessage (seqNum uint64 , hash string , data []byte ) * GossipMessage_DataMsg {
379
+ return & GossipMessage_DataMsg {
380
+ DataMsg : & DataMessage {
381
+ Payload : & Payload {
382
+ SeqNum : seqNum ,
383
+ Hash : hash ,
384
+ Data : data ,
385
+ },
386
+ },
387
+ }
388
+ }
389
+
390
+ func signedGossipMessage (channelID string , content isGossipMessage_Content ) * SignedGossipMessage {
391
+ return & SignedGossipMessage {
392
+ GossipMessage : & GossipMessage {
393
+ Channel : []byte ("testChannel" ),
394
+ Tag : GossipMessage_EMPTY ,
395
+ Nonce : 0 ,
396
+ Content : content ,
397
+ },
398
+ Envelope : envelopes ()[0 ],
399
+ }
400
+ }
0 commit comments