@@ -33,7 +33,6 @@ type serverHarness struct {
33
33
clientCfg * ClientConfig
34
34
mockSigner * test.MockSigner
35
35
mockMsgStore * MockMsgStore
36
- mockTxStore proof.TxProofStore
37
36
srv * Server
38
37
grpcServer * grpc.Server
39
38
cleanup func ()
@@ -45,7 +44,6 @@ func newServerHarness(t *testing.T) *serverHarness {
45
44
signer .Signature = test .RandBytes (64 )
46
45
47
46
inMemMsgStore := NewMockStore ()
48
- inMemTxStore := proof .NewMockTxProofStore ()
49
47
50
48
nextPort := port .NextAvailablePort ()
51
49
listenAddr := fmt .Sprintf (test .ListenAddrTemplate , nextPort )
@@ -56,7 +54,6 @@ func newServerHarness(t *testing.T) *serverHarness {
56
54
HeaderVerifier : proof .MockHeaderVerifier ,
57
55
MerkleVerifier : proof .DefaultMerkleVerifier ,
58
56
MsgStore : inMemMsgStore ,
59
- TxProofStore : inMemTxStore ,
60
57
}
61
58
h := & serverHarness {
62
59
listenAddr : listenAddr ,
@@ -70,7 +67,6 @@ func newServerHarness(t *testing.T) *serverHarness {
70
67
},
71
68
mockSigner : signer ,
72
69
mockMsgStore : inMemMsgStore ,
73
- mockTxStore : inMemTxStore ,
74
70
}
75
71
h .start (t )
76
72
@@ -217,6 +213,15 @@ func (h *clientHarness) stop(t *testing.T) {
217
213
require .NoError (t , err )
218
214
}
219
215
216
+ func randProof (t * testing.T ) proof.TxProof {
217
+ t .Helper ()
218
+
219
+ randOp := test .RandOp (t )
220
+ return proof.TxProof {
221
+ ClaimedOutPoint : randOp ,
222
+ }
223
+ }
224
+
220
225
// TestServerClientAuthAndRestart tests the server and client authentication
221
226
// process, and that the client can re-connect to the server after it has
222
227
// restarted. It also tests that the client can receive messages from the
@@ -226,7 +231,6 @@ func TestServerClientAuthAndRestart(t *testing.T) {
226
231
harness := newServerHarness (t )
227
232
clientCfg := harness .clientCfg
228
233
229
- randOp := test .RandOp (t )
230
234
clientKey1 , _ := test .RandKeyDesc (t )
231
235
clientKey2 , _ := test .RandKeyDesc (t )
232
236
filter := MessageFilter {}
@@ -279,7 +283,7 @@ func TestServerClientAuthAndRestart(t *testing.T) {
279
283
}
280
284
281
285
// We also store the message in the store, so we can retrieve it later.
282
- _ , err = harness .mockMsgStore .StoreMessage (ctx , randOp , msg1 )
286
+ _ , err = harness .mockMsgStore .StoreMessage (ctx , randProof ( t ) , msg1 )
283
287
require .NoError (t , err )
284
288
285
289
harness .srv .publishMessage (msg1 )
@@ -310,7 +314,7 @@ func TestServerClientAuthAndRestart(t *testing.T) {
310
314
ReceiverKey : * clientKey1 .PubKey ,
311
315
ArrivalTimestamp : time .Now (),
312
316
}
313
- _ , err = harness .mockMsgStore .StoreMessage (ctx , randOp , msg2 )
317
+ _ , err = harness .mockMsgStore .StoreMessage (ctx , randProof ( t ) , msg2 )
314
318
require .NoError (t , err )
315
319
316
320
harness .srv .publishMessage (msg2 )
@@ -379,6 +383,7 @@ func TestSendMessage(t *testing.T) {
379
383
380
384
clientKey1 , _ := test .RandKeyDesc (t )
381
385
clientKey2 , _ := test .RandKeyDesc (t )
386
+ clientKey3 , _ := test .RandKeyDesc (t )
382
387
383
388
proofWithHeight := func (p proof.TxProof , h uint32 ) proof.TxProof {
384
389
p .BlockHeight = h
@@ -391,7 +396,7 @@ func TestSendMessage(t *testing.T) {
391
396
testCases := []struct {
392
397
name string
393
398
txProofs []proof.TxProof
394
- recvKey keychain.KeyDescriptor
399
+ recvKeys [] keychain.KeyDescriptor
395
400
sendKey keychain.KeyDescriptor
396
401
msgs [][]byte
397
402
expiryHeight uint32
@@ -400,15 +405,15 @@ func TestSendMessage(t *testing.T) {
400
405
{
401
406
name : "empty payload" ,
402
407
txProofs : []proof.TxProof {* txProof1 },
403
- recvKey : clientKey2 ,
408
+ recvKeys : []keychain. KeyDescriptor { clientKey2 } ,
404
409
sendKey : clientKey1 ,
405
410
msgs : [][]byte {nil },
406
411
expectedErrs : []string {"empty payload" },
407
412
},
408
413
{
409
414
name : "long payload" ,
410
415
txProofs : []proof.TxProof {* txProof1 },
411
- recvKey : clientKey2 ,
416
+ recvKeys : []keychain. KeyDescriptor { clientKey2 } ,
412
417
sendKey : clientKey1 ,
413
418
msgs : [][]byte {
414
419
bytes .Repeat ([]byte ("foo" ), MsgMaxSize ),
@@ -418,7 +423,7 @@ func TestSendMessage(t *testing.T) {
418
423
{
419
424
name : "missing expiry height" ,
420
425
txProofs : []proof.TxProof {* txProof1 },
421
- recvKey : clientKey2 ,
426
+ recvKeys : []keychain. KeyDescriptor { clientKey2 } ,
422
427
sendKey : clientKey1 ,
423
428
msgs : [][]byte {[]byte ("yoooo" )},
424
429
expectedErrs : []string {"missing expiry block height" },
@@ -428,7 +433,7 @@ func TestSendMessage(t *testing.T) {
428
433
txProofs : []proof.TxProof {
429
434
proofWithHeight (* txProof1 , 100002 ),
430
435
},
431
- recvKey : clientKey2 ,
436
+ recvKeys : []keychain. KeyDescriptor { clientKey2 } ,
432
437
sendKey : clientKey1 ,
433
438
msgs : [][]byte {[]byte ("yoooo" )},
434
439
expiryHeight : 123 ,
@@ -442,7 +447,7 @@ func TestSendMessage(t *testing.T) {
442
447
txProofs : []proof.TxProof {
443
448
proofWithHeight (* txProof1 , 100002 ),
444
449
},
445
- recvKey : clientKey2 ,
450
+ recvKeys : []keychain. KeyDescriptor { clientKey2 } ,
446
451
sendKey : clientKey1 ,
447
452
msgs : [][]byte {[]byte ("yoooo" )},
448
453
expiryHeight : 100002 + 123 ,
@@ -453,7 +458,10 @@ func TestSendMessage(t *testing.T) {
453
458
proofWithHeight (* txProof1 , 100002 ),
454
459
proofWithHeight (* txProof1 , 100002 ),
455
460
},
456
- recvKey : clientKey2 ,
461
+ recvKeys : []keychain.KeyDescriptor {
462
+ clientKey2 ,
463
+ clientKey3 ,
464
+ },
457
465
sendKey : clientKey1 ,
458
466
msgs : [][]byte {
459
467
[]byte ("yoooo" ),
@@ -472,7 +480,11 @@ func TestSendMessage(t *testing.T) {
472
480
proofWithHeight (* txProof2 , 100002 ),
473
481
proofWithHeight (* txProof3 , 100002 ),
474
482
},
475
- recvKey : clientKey2 ,
483
+ recvKeys : []keychain.KeyDescriptor {
484
+ clientKey2 ,
485
+ clientKey2 ,
486
+ clientKey2 ,
487
+ },
476
488
sendKey : clientKey1 ,
477
489
msgs : [][]byte {
478
490
[]byte ("yoooo" ),
@@ -507,9 +519,10 @@ func TestSendMessage(t *testing.T) {
507
519
for idx := range tc .msgs {
508
520
msg := tc .msgs [idx ]
509
521
txProof := tc .txProofs [idx ]
522
+ recvKey := tc .recvKeys [idx ]
510
523
511
524
msgID , err := client1 .client .SendMessage (
512
- ctx , * tc . recvKey .PubKey , msg , txProof ,
525
+ ctx , * recvKey .PubKey , msg , txProof ,
513
526
tc .expiryHeight ,
514
527
)
515
528
@@ -528,6 +541,18 @@ func TestSendMessage(t *testing.T) {
528
541
// We should be able to read the message if
529
542
// there was no error sending it.
530
543
client2 .readMessages (t , msgID )
544
+
545
+ // Sending the same message again should result
546
+ // in the same message ID, but should not cause
547
+ // another message to be sent to any recipients.
548
+ msgIDReSend , err := client1 .client .SendMessage (
549
+ ctx , * recvKey .PubKey , msg , txProof ,
550
+ tc .expiryHeight ,
551
+ )
552
+ require .NoError (t , err )
553
+
554
+ require .Equal (t , msgID , msgIDReSend )
555
+ client2 .expectNoMessage (t )
531
556
}
532
557
})
533
558
}
@@ -569,7 +594,6 @@ func TestReceiveBacklog(t *testing.T) {
569
594
harness := newServerHarness (t )
570
595
571
596
ctx := context .Background ()
572
- randOp := test .RandOp (t )
573
597
receiver1 , _ := test .RandKeyDesc (t )
574
598
receiver2 , _ := test .RandKeyDesc (t )
575
599
receiver3 , _ := test .RandKeyDesc (t )
@@ -611,7 +635,9 @@ func TestReceiveBacklog(t *testing.T) {
611
635
}
612
636
613
637
for _ , msg := range messages {
614
- _ , err := harness .mockMsgStore .StoreMessage (ctx , randOp , msg )
638
+ _ , err := harness .mockMsgStore .StoreMessage (
639
+ ctx , randProof (t ), msg ,
640
+ )
615
641
require .NoError (t , err )
616
642
}
617
643
0 commit comments