@@ -28,6 +28,7 @@ import (
28
28
"github.com/ava-labs/avalanchego/subnets"
29
29
"github.com/ava-labs/avalanchego/upgrade"
30
30
"github.com/ava-labs/avalanchego/utils"
31
+ "github.com/ava-labs/avalanchego/utils/bloom"
31
32
"github.com/ava-labs/avalanchego/utils/constants"
32
33
"github.com/ava-labs/avalanchego/utils/crypto/bls"
33
34
"github.com/ava-labs/avalanchego/utils/ips"
@@ -753,3 +754,77 @@ func TestAllowConnectionAsAValidator(t *testing.T) {
753
754
}
754
755
wg .Wait ()
755
756
}
757
+
758
+ func TestGetAllPeers (t * testing.T ) {
759
+ require := require .New (t )
760
+
761
+ // Create a non-validator peer
762
+ dialer , listeners , nonVdrNodeIDs , configs := newTestNetwork (t , 1 )
763
+
764
+ configs [0 ].Beacons = validators .NewManager ()
765
+ configs [0 ].Validators = validators .NewManager ()
766
+ nonValidatorNetwork , err := NewNetwork (
767
+ configs [0 ],
768
+ upgrade .InitiallyActiveTime ,
769
+ newMessageCreator (t ),
770
+ prometheus .NewRegistry (),
771
+ logging.NoLog {},
772
+ listeners [0 ],
773
+ dialer ,
774
+ & testHandler {
775
+ InboundHandler : nil ,
776
+ ConnectedF : nil ,
777
+ DisconnectedF : nil ,
778
+ },
779
+ )
780
+ require .NoError (err )
781
+
782
+ // Create a network of validators
783
+ nodeIDs , networks , wg := newFullyConnectedTestNetwork (
784
+ t ,
785
+ []router.InboundHandler {
786
+ nil , nil , nil ,
787
+ },
788
+ )
789
+
790
+ // Connect the non-validator peer to the validator network
791
+ wg .Add (1 )
792
+ nonValidatorNetwork .ManuallyTrack (networks [0 ].config .MyNodeID , networks [0 ].config .MyIPPort .Get ())
793
+ go func () {
794
+ defer wg .Done ()
795
+
796
+ require .NoError (nonValidatorNetwork .Dispatch ())
797
+ }()
798
+
799
+ {
800
+ // The non-validator peer should be able to get all the peers in the network
801
+ peersListFromNonVdr := networks [0 ].Peers (nonVdrNodeIDs [0 ], nil , true , bloom .EmptyFilter , []byte {})
802
+ require .Len (peersListFromNonVdr , len (nodeIDs )- 1 )
803
+ peerNodes := set.NewSet [ids.NodeID ](len (peersListFromNonVdr ))
804
+ for _ , peer := range peersListFromNonVdr {
805
+ peerNodes .Add (peer .NodeID )
806
+ }
807
+ for _ , nodeID := range nodeIDs [1 :] {
808
+ require .True (peerNodes .Contains (nodeID ))
809
+ }
810
+ }
811
+
812
+ {
813
+ // A validator peer should be able to get all the peers in the network
814
+ peersListFromVdr := networks [0 ].Peers (nodeIDs [1 ], nil , true , bloom .EmptyFilter , []byte {})
815
+ require .Len (peersListFromVdr , len (nodeIDs )- 2 ) // GetPeerList doesn't return the peer that requested it
816
+ peerNodes := set.NewSet [ids.NodeID ](len (peersListFromVdr ))
817
+ for _ , peer := range peersListFromVdr {
818
+ peerNodes .Add (peer .NodeID )
819
+ }
820
+ for _ , nodeID := range nodeIDs [2 :] {
821
+ require .True (peerNodes .Contains (nodeID ))
822
+ }
823
+ }
824
+
825
+ nonValidatorNetwork .StartClose ()
826
+ for _ , net := range networks {
827
+ net .StartClose ()
828
+ }
829
+ wg .Wait ()
830
+ }
0 commit comments