github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/db/kv/checkpoint_test.go (about) 1 package kv 2 3 import ( 4 "context" 5 "testing" 6 7 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 8 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1/wrapper" 9 "github.com/prysmaticlabs/prysm/shared/bytesutil" 10 "github.com/prysmaticlabs/prysm/shared/params" 11 "github.com/prysmaticlabs/prysm/shared/testutil" 12 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 13 "github.com/prysmaticlabs/prysm/shared/testutil/require" 14 "google.golang.org/protobuf/proto" 15 ) 16 17 func TestStore_JustifiedCheckpoint_CanSaveRetrieve(t *testing.T) { 18 db := setupDB(t) 19 ctx := context.Background() 20 root := bytesutil.ToBytes32([]byte{'A'}) 21 cp := ðpb.Checkpoint{ 22 Epoch: 10, 23 Root: root[:], 24 } 25 st, err := testutil.NewBeaconState() 26 require.NoError(t, err) 27 require.NoError(t, st.SetSlot(1)) 28 require.NoError(t, db.SaveState(ctx, st, root)) 29 require.NoError(t, db.SaveJustifiedCheckpoint(ctx, cp)) 30 31 retrieved, err := db.JustifiedCheckpoint(ctx) 32 require.NoError(t, err) 33 assert.Equal(t, true, proto.Equal(cp, retrieved), "Wanted %v, received %v", cp, retrieved) 34 } 35 36 func TestStore_FinalizedCheckpoint_CanSaveRetrieve(t *testing.T) { 37 db := setupDB(t) 38 ctx := context.Background() 39 40 genesis := bytesutil.ToBytes32([]byte{'G', 'E', 'N', 'E', 'S', 'I', 'S'}) 41 require.NoError(t, db.SaveGenesisBlockRoot(ctx, genesis)) 42 43 blk := testutil.NewBeaconBlock() 44 blk.Block.ParentRoot = genesis[:] 45 blk.Block.Slot = 40 46 47 root, err := blk.Block.HashTreeRoot() 48 require.NoError(t, err) 49 50 cp := ðpb.Checkpoint{ 51 Epoch: 5, 52 Root: root[:], 53 } 54 55 // a valid chain is required to save finalized checkpoint. 56 require.NoError(t, db.SaveBlock(ctx, wrapper.WrappedPhase0SignedBeaconBlock(blk))) 57 st, err := testutil.NewBeaconState() 58 require.NoError(t, err) 59 require.NoError(t, st.SetSlot(1)) 60 // a state is required to save checkpoint 61 require.NoError(t, db.SaveState(ctx, st, root)) 62 63 require.NoError(t, db.SaveFinalizedCheckpoint(ctx, cp)) 64 65 retrieved, err := db.FinalizedCheckpoint(ctx) 66 require.NoError(t, err) 67 assert.Equal(t, true, proto.Equal(cp, retrieved), "Wanted %v, received %v", cp, retrieved) 68 } 69 70 func TestStore_JustifiedCheckpoint_DefaultIsZeroHash(t *testing.T) { 71 db := setupDB(t) 72 ctx := context.Background() 73 74 cp := ðpb.Checkpoint{Root: params.BeaconConfig().ZeroHash[:]} 75 retrieved, err := db.JustifiedCheckpoint(ctx) 76 require.NoError(t, err) 77 assert.Equal(t, true, proto.Equal(cp, retrieved), "Wanted %v, received %v", cp, retrieved) 78 } 79 80 func TestStore_FinalizedCheckpoint_DefaultIsZeroHash(t *testing.T) { 81 db := setupDB(t) 82 ctx := context.Background() 83 84 cp := ðpb.Checkpoint{Root: params.BeaconConfig().ZeroHash[:]} 85 retrieved, err := db.FinalizedCheckpoint(ctx) 86 require.NoError(t, err) 87 assert.Equal(t, true, proto.Equal(cp, retrieved), "Wanted %v, received %v", cp, retrieved) 88 } 89 90 func TestStore_FinalizedCheckpoint_StateMustExist(t *testing.T) { 91 db := setupDB(t) 92 ctx := context.Background() 93 cp := ðpb.Checkpoint{ 94 Epoch: 5, 95 Root: []byte{'B'}, 96 } 97 98 require.ErrorContains(t, errMissingStateForCheckpoint.Error(), db.SaveFinalizedCheckpoint(ctx, cp)) 99 }