@@ -12,7 +12,9 @@ import (
12
12
"testing"
13
13
"time"
14
14
15
+ "github.com/ava-labs/avalanchego/network/p2p"
15
16
"github.com/ava-labs/avalanchego/snow/engine/common"
17
+ "github.com/ava-labs/avalanchego/utils/logging"
16
18
"github.com/ava-labs/avalanchego/utils/set"
17
19
ethcommon "github.com/ethereum/go-ethereum/common"
18
20
@@ -49,11 +51,13 @@ var (
49
51
50
52
_ message.CrossChainRequest = & ExampleCrossChainRequest {}
51
53
_ message.CrossChainRequestHandler = & testCrossChainHandler {}
54
+
55
+ _ p2p.Handler = & testSDKHandler {}
52
56
)
53
57
54
58
func TestNetworkDoesNotConnectToItself (t * testing.T ) {
55
59
selfNodeID := ids .GenerateTestNodeID ()
56
- n := NewNetwork (nil , nil , nil , selfNodeID , 1 , 1 )
60
+ n := NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), nil , nil , nil , selfNodeID , 1 , 1 )
57
61
assert .NoError (t , n .Connected (context .Background (), selfNodeID , defaultPeerVersion ))
58
62
assert .EqualValues (t , 0 , n .Size ())
59
63
}
@@ -89,7 +93,7 @@ func TestRequestAnyRequestsRoutingAndResponse(t *testing.T) {
89
93
90
94
codecManager := buildCodec (t , HelloRequest {}, HelloResponse {})
91
95
crossChainCodecManager := buildCodec (t , ExampleCrossChainRequest {}, ExampleCrossChainResponse {})
92
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 16 , 16 )
96
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 16 , 16 )
93
97
net .SetRequestHandler (& HelloGreetingRequestHandler {codec : codecManager })
94
98
client := NewNetworkClient (net )
95
99
nodeID := ids .GenerateTestNodeID ()
@@ -164,7 +168,7 @@ func TestRequestRequestsRoutingAndResponse(t *testing.T) {
164
168
165
169
codecManager := buildCodec (t , HelloRequest {}, HelloResponse {})
166
170
crossChainCodecManager := buildCodec (t , ExampleCrossChainRequest {}, ExampleCrossChainResponse {})
167
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 16 , 16 )
171
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 16 , 16 )
168
172
net .SetRequestHandler (& HelloGreetingRequestHandler {codec : codecManager })
169
173
client := NewNetworkClient (net )
170
174
@@ -244,7 +248,7 @@ func TestAppRequestOnShutdown(t *testing.T) {
244
248
245
249
codecManager := buildCodec (t , HelloRequest {}, HelloResponse {})
246
250
crossChainCodecManager := buildCodec (t , ExampleCrossChainRequest {}, ExampleCrossChainResponse {})
247
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
251
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
248
252
client := NewNetworkClient (net )
249
253
nodeID := ids .GenerateTestNodeID ()
250
254
require .NoError (t , net .Connected (context .Background (), nodeID , defaultPeerVersion ))
@@ -293,7 +297,7 @@ func TestRequestMinVersion(t *testing.T) {
293
297
}
294
298
295
299
// passing nil as codec works because the net.AppRequest is never called
296
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 16 )
300
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 16 )
297
301
client := NewNetworkClient (net )
298
302
requestMessage := TestMessage {Message : "this is a request" }
299
303
requestBytes , err := message .RequestToBytes (codecManager , requestMessage )
@@ -356,7 +360,7 @@ func TestOnRequestHonoursDeadline(t *testing.T) {
356
360
processingDuration : 500 * time .Millisecond ,
357
361
}
358
362
359
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
363
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
360
364
net .SetRequestHandler (requestHandler )
361
365
nodeID := ids .GenerateTestNodeID ()
362
366
@@ -396,7 +400,7 @@ func TestGossip(t *testing.T) {
396
400
}
397
401
398
402
gossipHandler := & testGossipHandler {}
399
- clientNetwork = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
403
+ clientNetwork = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
400
404
clientNetwork .SetGossipHandler (gossipHandler )
401
405
402
406
assert .NoError (t , clientNetwork .Connected (context .Background (), nodeID , defaultPeerVersion ))
@@ -423,7 +427,7 @@ func TestHandleInvalidMessages(t *testing.T) {
423
427
requestID := uint32 (1 )
424
428
sender := testAppSender {}
425
429
426
- clientNetwork := NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
430
+ clientNetwork := NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
427
431
clientNetwork .SetGossipHandler (message.NoopMempoolGossipHandler {})
428
432
clientNetwork .SetRequestHandler (& testRequestHandler {})
429
433
@@ -457,12 +461,11 @@ func TestHandleInvalidMessages(t *testing.T) {
457
461
assert .NoError (t , clientNetwork .AppRequest (context .Background (), nodeID , requestID , time .Now ().Add (time .Second ), garbageResponse ))
458
462
assert .NoError (t , clientNetwork .AppRequest (context .Background (), nodeID , requestID , time .Now ().Add (time .Second ), emptyResponse ))
459
463
assert .NoError (t , clientNetwork .AppRequest (context .Background (), nodeID , requestID , time .Now ().Add (time .Second ), nilResponse ))
460
- assert .NoError (t , clientNetwork .AppResponse (context .Background (), nodeID , requestID , gossipMsg ))
461
- assert .NoError (t , clientNetwork .AppResponse (context .Background (), nodeID , requestID , requestMessage ))
462
- assert .NoError (t , clientNetwork .AppResponse (context .Background (), nodeID , requestID , garbageResponse ))
463
- assert .NoError (t , clientNetwork .AppResponse (context .Background (), nodeID , requestID , emptyResponse ))
464
- assert .NoError (t , clientNetwork .AppResponse (context .Background (), nodeID , requestID , nilResponse ))
465
- assert .NoError (t , clientNetwork .AppRequestFailed (context .Background (), nodeID , requestID ))
464
+ assert .ErrorIs (t , p2p .ErrUnrequestedResponse , clientNetwork .AppResponse (context .Background (), nodeID , requestID , gossipMsg ))
465
+ assert .ErrorIs (t , p2p .ErrUnrequestedResponse , clientNetwork .AppResponse (context .Background (), nodeID , requestID , requestMessage ))
466
+ assert .ErrorIs (t , p2p .ErrUnrequestedResponse , clientNetwork .AppResponse (context .Background (), nodeID , requestID , garbageResponse ))
467
+ assert .ErrorIs (t , p2p .ErrUnrequestedResponse , clientNetwork .AppResponse (context .Background (), nodeID , requestID , emptyResponse ))
468
+ assert .ErrorIs (t , p2p .ErrUnrequestedResponse , clientNetwork .AppResponse (context .Background (), nodeID , requestID , nilResponse ))
466
469
}
467
470
468
471
func TestNetworkPropagatesRequestHandlerError (t * testing.T ) {
@@ -473,7 +476,7 @@ func TestNetworkPropagatesRequestHandlerError(t *testing.T) {
473
476
requestID := uint32 (1 )
474
477
sender := testAppSender {}
475
478
476
- clientNetwork := NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
479
+ clientNetwork := NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
477
480
clientNetwork .SetGossipHandler (message.NoopMempoolGossipHandler {})
478
481
clientNetwork .SetRequestHandler (& testRequestHandler {err : errors .New ("fail" )}) // Return an error from the request handler
479
482
@@ -513,7 +516,7 @@ func TestCrossChainAppRequest(t *testing.T) {
513
516
},
514
517
}
515
518
516
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
519
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
517
520
net .SetCrossChainRequestHandler (& testCrossChainHandler {codec : crossChainCodecManager })
518
521
client := NewNetworkClient (net )
519
522
@@ -568,7 +571,7 @@ func TestCrossChainRequestRequestsRoutingAndResponse(t *testing.T) {
568
571
569
572
codecManager := buildCodec (t , TestMessage {})
570
573
crossChainCodecManager := buildCodec (t , ExampleCrossChainRequest {}, ExampleCrossChainResponse {})
571
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
574
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
572
575
net .SetCrossChainRequestHandler (& testCrossChainHandler {codec : crossChainCodecManager })
573
576
client := NewNetworkClient (net )
574
577
@@ -628,7 +631,7 @@ func TestCrossChainRequestOnShutdown(t *testing.T) {
628
631
}
629
632
codecManager := buildCodec (t , TestMessage {})
630
633
crossChainCodecManager := buildCodec (t , ExampleCrossChainRequest {}, ExampleCrossChainResponse {})
631
- net = NewNetwork (sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
634
+ net = NewNetwork (p2p . NewRouter (logging. NoLog {}, nil ), sender , codecManager , crossChainCodecManager , ids .EmptyNodeID , 1 , 1 )
632
635
client := NewNetworkClient (net )
633
636
634
637
exampleCrossChainRequest := ExampleCrossChainRequest {
@@ -649,6 +652,48 @@ func TestCrossChainRequestOnShutdown(t *testing.T) {
649
652
require .True (t , called )
650
653
}
651
654
655
+ func TestSDKRouting (t * testing.T ) {
656
+ require := require .New (t )
657
+ sender := & testAppSender {
658
+ sendAppRequestFn : func (s set.Set [ids.NodeID ], u uint32 , bytes []byte ) error {
659
+ return nil
660
+ },
661
+ sendAppResponseFn : func (id ids.NodeID , u uint32 , bytes []byte ) error {
662
+ return nil
663
+ },
664
+ }
665
+ protocol := 0
666
+ handler := & testSDKHandler {}
667
+ router := p2p .NewRouter (logging.NoLog {}, sender )
668
+ _ , err := router .RegisterAppProtocol (uint64 (protocol ), handler )
669
+ require .NoError (err )
670
+
671
+ networkCodec := codec .NewManager (0 )
672
+ crossChainCodec := codec .NewManager (0 )
673
+
674
+ network := NewNetwork (
675
+ router ,
676
+ nil ,
677
+ networkCodec ,
678
+ crossChainCodec ,
679
+ ids .EmptyNodeID ,
680
+ 1 ,
681
+ 1 ,
682
+ )
683
+
684
+ nodeID := ids .GenerateTestNodeID ()
685
+ foobar := append ([]byte {byte (protocol )}, []byte ("foobar" )... )
686
+ err = network .AppRequest (context .Background (), nodeID , 0 , time.Time {}, foobar )
687
+ require .NoError (err )
688
+ require .True (handler .appRequested )
689
+
690
+ err = network .AppResponse (context .Background (), ids .GenerateTestNodeID (), 0 , foobar )
691
+ require .ErrorIs (err , p2p .ErrUnrequestedResponse )
692
+
693
+ err = network .AppRequestFailed (context .Background (), nodeID , 0 )
694
+ require .ErrorIs (err , p2p .ErrUnrequestedResponse )
695
+ }
696
+
652
697
func buildCodec (t * testing.T , types ... interface {}) codec.Manager {
653
698
codecManager := codec .NewDefaultManager ()
654
699
c := linearcodec .NewDefault ()
@@ -850,3 +895,22 @@ type testCrossChainHandler struct {
850
895
func (t * testCrossChainHandler ) HandleCrossChainRequest (ctx context.Context , requestingChainID ids.ID , requestID uint32 , exampleRequest message.CrossChainRequest ) ([]byte , error ) {
851
896
return t .codec .Marshal (message .Version , ExampleCrossChainResponse {Response : "this is an example response" })
852
897
}
898
+
899
+ type testSDKHandler struct {
900
+ appRequested bool
901
+ }
902
+
903
+ func (t * testSDKHandler ) AppGossip (ctx context.Context , nodeID ids.NodeID , gossipBytes []byte ) error {
904
+ // TODO implement me
905
+ panic ("implement me" )
906
+ }
907
+
908
+ func (t * testSDKHandler ) AppRequest (ctx context.Context , nodeID ids.NodeID , deadline time.Time , requestBytes []byte ) ([]byte , error ) {
909
+ t .appRequested = true
910
+ return nil , nil
911
+ }
912
+
913
+ func (t * testSDKHandler ) CrossChainAppRequest (ctx context.Context , chainID ids.ID , deadline time.Time , requestBytes []byte ) ([]byte , error ) {
914
+ // TODO implement me
915
+ panic ("implement me" )
916
+ }
0 commit comments