package beaconclient import ( "context" "testing" "time" "github.com/gogo/protobuf/proto" "github.com/golang/mock/gomock" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" "github.com/prysmaticlabs/prysm/shared/mock" "github.com/prysmaticlabs/prysm/shared/testutil" logTest "github.com/sirupsen/logrus/hooks/test" ) func TestService_ChainHead(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() client := mock.NewMockBeaconChainClient(ctrl) bs := Service{ beaconClient: client, } wanted := ðpb.ChainHead{ HeadSlot: 4, HeadEpoch: 0, HeadBlockRoot: make([]byte, 32), } client.EXPECT().GetChainHead(gomock.Any(), gomock.Any()).Return(wanted, nil) res, err := bs.ChainHead(context.Background()) if err != nil { t.Fatal(err) } if !proto.Equal(res, wanted) { t.Errorf("Wanted %v, received %v", wanted, res) } } func TestService_QuerySyncStatus(t *testing.T) { hook := logTest.NewGlobal() ctrl := gomock.NewController(t) defer ctrl.Finish() client := mock.NewMockNodeClient(ctrl) bs := Service{ nodeClient: client, } syncStatusPollingInterval = time.Millisecond client.EXPECT().GetSyncStatus(gomock.Any(), gomock.Any()).Return(ðpb.SyncStatus{ Syncing: true, }, nil) client.EXPECT().GetSyncStatus(gomock.Any(), gomock.Any()).Return(ðpb.SyncStatus{ Syncing: false, }, nil) bs.querySyncStatus(context.Background()) testutil.AssertLogsContain(t, hook, "Waiting for beacon node to be fully synced...") testutil.AssertLogsContain(t, hook, "Beacon node is fully synced") }