github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/cache/checkpoint_state_test.go (about) 1 package cache 2 3 import ( 4 "testing" 5 6 types "github.com/prysmaticlabs/eth2-types" 7 iface "github.com/prysmaticlabs/prysm/beacon-chain/state/interface" 8 "github.com/prysmaticlabs/prysm/beacon-chain/state/v1" 9 pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" 10 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 11 "github.com/prysmaticlabs/prysm/shared/bytesutil" 12 "github.com/prysmaticlabs/prysm/shared/params" 13 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 14 "github.com/prysmaticlabs/prysm/shared/testutil/require" 15 "google.golang.org/protobuf/proto" 16 ) 17 18 func TestCheckpointStateCache_StateByCheckpoint(t *testing.T) { 19 cache := NewCheckpointStateCache() 20 21 cp1 := ðpb.Checkpoint{Epoch: 1, Root: bytesutil.PadTo([]byte{'A'}, 32)} 22 st, err := v1.InitializeFromProto(&pb.BeaconState{ 23 GenesisValidatorsRoot: params.BeaconConfig().ZeroHash[:], 24 Slot: 64, 25 }) 26 require.NoError(t, err) 27 28 state, err := cache.StateByCheckpoint(cp1) 29 require.NoError(t, err) 30 assert.Equal(t, iface.BeaconState(nil), state, "Expected state not to exist in empty cache") 31 32 require.NoError(t, cache.AddCheckpointState(cp1, st)) 33 34 state, err = cache.StateByCheckpoint(cp1) 35 require.NoError(t, err) 36 37 pbState1, err := v1.ProtobufBeaconState(state.InnerStateUnsafe()) 38 require.NoError(t, err) 39 pbState2, err := v1.ProtobufBeaconState(st.InnerStateUnsafe()) 40 require.NoError(t, err) 41 if !proto.Equal(pbState1, pbState2) { 42 t.Error("incorrectly cached state") 43 } 44 45 cp2 := ðpb.Checkpoint{Epoch: 2, Root: bytesutil.PadTo([]byte{'B'}, 32)} 46 st2, err := v1.InitializeFromProto(&pb.BeaconState{ 47 Slot: 128, 48 }) 49 require.NoError(t, err) 50 require.NoError(t, cache.AddCheckpointState(cp2, st2)) 51 52 state, err = cache.StateByCheckpoint(cp2) 53 require.NoError(t, err) 54 assert.DeepEqual(t, st2.CloneInnerState(), state.CloneInnerState(), "incorrectly cached state") 55 56 state, err = cache.StateByCheckpoint(cp1) 57 require.NoError(t, err) 58 assert.DeepEqual(t, st.CloneInnerState(), state.CloneInnerState(), "incorrectly cached state") 59 } 60 61 func TestCheckpointStateCache_MaxSize(t *testing.T) { 62 c := NewCheckpointStateCache() 63 st, err := v1.InitializeFromProto(&pb.BeaconState{ 64 Slot: 0, 65 }) 66 require.NoError(t, err) 67 68 for i := uint64(0); i < uint64(maxCheckpointStateSize+100); i++ { 69 require.NoError(t, st.SetSlot(types.Slot(i))) 70 require.NoError(t, c.AddCheckpointState(ðpb.Checkpoint{Epoch: types.Epoch(i), Root: make([]byte, 32)}, st)) 71 } 72 73 assert.Equal(t, maxCheckpointStateSize, len(c.cache.Keys())) 74 }