package blockchain import ( "context" "testing" testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" "github.com/prysmaticlabs/prysm/beacon-chain/state/stategen" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/wrapper" "github.com/prysmaticlabs/prysm/testing/require" ) func TestHeadSlot_DataRace(t *testing.T) { beaconDB := testDB.SetupDB(t) s := &Service{ cfg: &config{BeaconDB: beaconDB}, } wait := make(chan struct{}) go func() { defer close(wait) require.NoError(t, s.saveHead(context.Background(), [32]byte{})) }() s.HeadSlot() <-wait } func TestHeadRoot_DataRace(t *testing.T) { beaconDB := testDB.SetupDB(t) s := &Service{ cfg: &config{BeaconDB: beaconDB, StateGen: stategen.New(beaconDB)}, head: &head{root: [32]byte{'A'}}, } wait := make(chan struct{}) go func() { defer close(wait) require.NoError(t, s.saveHead(context.Background(), [32]byte{})) }() _, err := s.HeadRoot(context.Background()) require.NoError(t, err) <-wait } func TestHeadBlock_DataRace(t *testing.T) { beaconDB := testDB.SetupDB(t) s := &Service{ cfg: &config{BeaconDB: beaconDB, StateGen: stategen.New(beaconDB)}, head: &head{block: wrapper.WrappedPhase0SignedBeaconBlock(ðpb.SignedBeaconBlock{})}, } wait := make(chan struct{}) go func() { defer close(wait) require.NoError(t, s.saveHead(context.Background(), [32]byte{})) }() _, err := s.HeadBlock(context.Background()) require.NoError(t, err) <-wait } func TestHeadState_DataRace(t *testing.T) { beaconDB := testDB.SetupDB(t) s := &Service{ cfg: &config{BeaconDB: beaconDB, StateGen: stategen.New(beaconDB)}, } wait := make(chan struct{}) go func() { defer close(wait) require.NoError(t, s.saveHead(context.Background(), [32]byte{})) }() _, err := s.HeadState(context.Background()) require.NoError(t, err) <-wait }