github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/rpc/prysm/v1alpha1/node/server_test.go (about) 1 package node 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/ethereum/go-ethereum/common" 9 "github.com/ethereum/go-ethereum/crypto" 10 "github.com/ethereum/go-ethereum/p2p/enode" 11 mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" 12 dbutil "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" 13 "github.com/prysmaticlabs/prysm/beacon-chain/p2p" 14 mockP2p "github.com/prysmaticlabs/prysm/beacon-chain/p2p/testing" 15 mockSync "github.com/prysmaticlabs/prysm/beacon-chain/sync/initial-sync/testing" 16 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 17 "github.com/prysmaticlabs/prysm/shared/bytesutil" 18 "github.com/prysmaticlabs/prysm/shared/testutil" 19 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 20 "github.com/prysmaticlabs/prysm/shared/testutil/require" 21 "github.com/prysmaticlabs/prysm/shared/version" 22 "google.golang.org/grpc" 23 "google.golang.org/grpc/reflection" 24 "google.golang.org/protobuf/types/known/emptypb" 25 "google.golang.org/protobuf/types/known/timestamppb" 26 ) 27 28 func TestNodeServer_GetSyncStatus(t *testing.T) { 29 mSync := &mockSync.Sync{IsSyncing: false} 30 ns := &Server{ 31 SyncChecker: mSync, 32 } 33 res, err := ns.GetSyncStatus(context.Background(), &emptypb.Empty{}) 34 require.NoError(t, err) 35 assert.Equal(t, false, res.Syncing) 36 ns.SyncChecker = &mockSync.Sync{IsSyncing: true} 37 res, err = ns.GetSyncStatus(context.Background(), &emptypb.Empty{}) 38 require.NoError(t, err) 39 assert.Equal(t, true, res.Syncing) 40 } 41 42 func TestNodeServer_GetGenesis(t *testing.T) { 43 db := dbutil.SetupDB(t) 44 ctx := context.Background() 45 addr := common.Address{1, 2, 3} 46 require.NoError(t, db.SaveDepositContractAddress(ctx, addr)) 47 st, err := testutil.NewBeaconState() 48 require.NoError(t, err) 49 genValRoot := bytesutil.ToBytes32([]byte("I am root")) 50 ns := &Server{ 51 BeaconDB: db, 52 GenesisTimeFetcher: &mock.ChainService{}, 53 GenesisFetcher: &mock.ChainService{ 54 State: st, 55 ValidatorsRoot: genValRoot, 56 }, 57 } 58 res, err := ns.GetGenesis(context.Background(), &emptypb.Empty{}) 59 require.NoError(t, err) 60 assert.DeepEqual(t, addr.Bytes(), res.DepositContractAddress) 61 pUnix := timestamppb.New(time.Unix(0, 0)) 62 assert.Equal(t, res.GenesisTime.Seconds, pUnix.Seconds) 63 assert.DeepEqual(t, genValRoot[:], res.GenesisValidatorsRoot) 64 65 ns.GenesisTimeFetcher = &mock.ChainService{Genesis: time.Unix(10, 0)} 66 res, err = ns.GetGenesis(context.Background(), &emptypb.Empty{}) 67 require.NoError(t, err) 68 pUnix = timestamppb.New(time.Unix(10, 0)) 69 assert.Equal(t, res.GenesisTime.Seconds, pUnix.Seconds) 70 } 71 72 func TestNodeServer_GetVersion(t *testing.T) { 73 v := version.Version() 74 ns := &Server{} 75 res, err := ns.GetVersion(context.Background(), &emptypb.Empty{}) 76 require.NoError(t, err) 77 assert.Equal(t, v, res.Version) 78 } 79 80 func TestNodeServer_GetImplementedServices(t *testing.T) { 81 server := grpc.NewServer() 82 ns := &Server{ 83 Server: server, 84 } 85 ethpb.RegisterNodeServer(server, ns) 86 reflection.Register(server) 87 88 res, err := ns.ListImplementedServices(context.Background(), &emptypb.Empty{}) 89 require.NoError(t, err) 90 // We verify the services include the node service + the registered reflection service. 91 assert.Equal(t, 2, len(res.Services)) 92 } 93 94 func TestNodeServer_GetHost(t *testing.T) { 95 server := grpc.NewServer() 96 peersProvider := &mockP2p.MockPeersProvider{} 97 mP2P := mockP2p.NewTestP2P(t) 98 key, err := crypto.GenerateKey() 99 require.NoError(t, err) 100 db, err := enode.OpenDB("") 101 require.NoError(t, err) 102 lNode := enode.NewLocalNode(db, key) 103 record := lNode.Node().Record() 104 stringENR, err := p2p.SerializeENR(record) 105 require.NoError(t, err) 106 ns := &Server{ 107 PeerManager: &mockP2p.MockPeerManager{BHost: mP2P.BHost, Enr: record, PID: mP2P.BHost.ID()}, 108 PeersFetcher: peersProvider, 109 } 110 ethpb.RegisterNodeServer(server, ns) 111 reflection.Register(server) 112 h, err := ns.GetHost(context.Background(), &emptypb.Empty{}) 113 require.NoError(t, err) 114 assert.Equal(t, mP2P.PeerID().String(), h.PeerId) 115 assert.Equal(t, stringENR, h.Enr) 116 } 117 118 func TestNodeServer_GetPeer(t *testing.T) { 119 server := grpc.NewServer() 120 peersProvider := &mockP2p.MockPeersProvider{} 121 ns := &Server{ 122 PeersFetcher: peersProvider, 123 } 124 ethpb.RegisterNodeServer(server, ns) 125 reflection.Register(server) 126 firstPeer := peersProvider.Peers().All()[0] 127 128 res, err := ns.GetPeer(context.Background(), ðpb.PeerRequest{PeerId: firstPeer.String()}) 129 require.NoError(t, err) 130 assert.Equal(t, firstPeer.String(), res.PeerId, "Unexpected peer ID") 131 assert.Equal(t, int(ethpb.PeerDirection_INBOUND), int(res.Direction), "Expected 1st peer to be an inbound connection") 132 assert.Equal(t, ethpb.ConnectionState_CONNECTED, res.ConnectionState, "Expected peer to be connected") 133 } 134 135 func TestNodeServer_ListPeers(t *testing.T) { 136 server := grpc.NewServer() 137 peersProvider := &mockP2p.MockPeersProvider{} 138 ns := &Server{ 139 PeersFetcher: peersProvider, 140 } 141 ethpb.RegisterNodeServer(server, ns) 142 reflection.Register(server) 143 144 res, err := ns.ListPeers(context.Background(), &emptypb.Empty{}) 145 require.NoError(t, err) 146 assert.Equal(t, 2, len(res.Peers)) 147 assert.Equal(t, int(ethpb.PeerDirection_INBOUND), int(res.Peers[0].Direction)) 148 assert.Equal(t, ethpb.PeerDirection_OUTBOUND, res.Peers[1].Direction) 149 }