package sync import ( "context" "testing" "time" mockChain "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" "github.com/prysmaticlabs/prysm/beacon-chain/core/feed" statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" p2ptest "github.com/prysmaticlabs/prysm/beacon-chain/p2p/testing" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" mockSync "github.com/prysmaticlabs/prysm/beacon-chain/sync/initial-sync/testing" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" "github.com/prysmaticlabs/prysm/shared/bls" "github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/testutil" "github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/require" ) func TestService_StatusZeroEpoch(t *testing.T) { bState, err := stateTrie.InitializeFromProto(&pb.BeaconState{Slot: 0}) require.NoError(t, err) r := &Service{ p2p: p2ptest.NewTestP2P(t), initialSync: new(mockSync.Sync), chain: &mockChain.ChainService{ Genesis: time.Now(), State: bState, }, } r.chainStarted = true assert.NoError(t, r.Status(), "Wanted non failing status") } func TestSyncHandlers_WaitToSync(t *testing.T) { p2p := p2ptest.NewTestP2P(t) chainService := &mockChain.ChainService{ Genesis: time.Now(), ValidatorsRoot: [32]byte{'A'}, } r := Service{ ctx: context.Background(), p2p: p2p, chain: chainService, stateNotifier: chainService.StateNotifier(), initialSync: &mockSync.Sync{IsSyncing: false}, } topic := "/eth2/%x/beacon_block" go r.registerHandlers() time.Sleep(100 * time.Millisecond) i := r.stateNotifier.StateFeed().Send(&feed.Event{ Type: statefeed.Initialized, Data: &statefeed.InitializedData{ StartTime: time.Now(), }, }) if i == 0 { t.Fatal("didn't send genesis time to subscribers") } b := []byte("sk") b32 := bytesutil.ToBytes32(b) sk, err := bls.SecretKeyFromBytes(b32[:]) require.NoError(t, err) msg := testutil.NewBeaconBlock() msg.Block.ParentRoot = testutil.Random32Bytes(t) msg.Signature = sk.Sign([]byte("data")).Marshal() p2p.ReceivePubSub(topic, msg) // wait for chainstart to be sent time.Sleep(400 * time.Millisecond) require.Equal(t, true, r.chainStarted, "Did not receive chain start event.") }