mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 21:38:05 -05:00
Some improvements for the state package testing (#10316)
* Refactor to unify state getters block tests * Add reference tests to Altair and Bellatrix versions ofthe state * Fix function naming convetion * Add state-native/v2/references_test.go and state-native/v3/references_test.go * Gazelle run Co-authored-by: Radosław Kapka <rkapka@wp.pl>
This commit is contained in:
@@ -5,6 +5,7 @@ go_library(
|
||||
testonly = True,
|
||||
srcs = [
|
||||
"getters.go",
|
||||
"getters_block.go",
|
||||
"getters_validator.go",
|
||||
],
|
||||
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/state/testing",
|
||||
@@ -12,6 +13,7 @@ go_library(
|
||||
deps = [
|
||||
"//beacon-chain/state:go_default_library",
|
||||
"//config/fieldparams:go_default_library",
|
||||
"//encoding/bytesutil:go_default_library",
|
||||
"//proto/prysm/v1alpha1:go_default_library",
|
||||
"//testing/assert:go_default_library",
|
||||
"//testing/require:go_default_library",
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/testing/require"
|
||||
)
|
||||
|
||||
func VerifyBeaconState_SlotDataRace(t *testing.T, factory getState) {
|
||||
func VerifyBeaconStateSlotDataRace(t *testing.T, factory getState) {
|
||||
headState, err := factory()
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -33,7 +33,7 @@ func VerifyBeaconState_SlotDataRace(t *testing.T, factory getState) {
|
||||
type getStateWithCurrentJustifiedCheckpoint func(*ethpb.Checkpoint) (state.BeaconState, error)
|
||||
type clearInternalState func(state.BeaconState)
|
||||
|
||||
func VerifyBeaconState_MatchCurrentJustifiedCheckpt(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint, clear clearInternalState) {
|
||||
func VerifyBeaconStateMatchCurrentJustifiedCheckpt(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint, clear clearInternalState) {
|
||||
c1 := ðpb.Checkpoint{Epoch: 1}
|
||||
c2 := ðpb.Checkpoint{Epoch: 2}
|
||||
beaconState, err := factory(c1)
|
||||
@@ -46,7 +46,7 @@ func VerifyBeaconState_MatchCurrentJustifiedCheckpt(t *testing.T, factory getSta
|
||||
require.Equal(t, false, beaconState.MatchCurrentJustifiedCheckpoint(c1))
|
||||
}
|
||||
|
||||
func VerifyBeaconState_MatchCurrentJustifiedCheckptNative(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint) {
|
||||
func VerifyBeaconStateMatchCurrentJustifiedCheckptNative(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint) {
|
||||
c1 := ðpb.Checkpoint{Epoch: 1}
|
||||
c2 := ðpb.Checkpoint{Epoch: 2}
|
||||
beaconState, err := factory(c1)
|
||||
@@ -57,7 +57,7 @@ func VerifyBeaconState_MatchCurrentJustifiedCheckptNative(t *testing.T, factory
|
||||
require.Equal(t, false, beaconState.MatchPreviousJustifiedCheckpoint(c2))
|
||||
}
|
||||
|
||||
func VerifyBeaconState_MatchPreviousJustifiedCheckpt(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint, clear clearInternalState) {
|
||||
func VerifyBeaconStateMatchPreviousJustifiedCheckpt(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint, clear clearInternalState) {
|
||||
c1 := ðpb.Checkpoint{Epoch: 1}
|
||||
c2 := ðpb.Checkpoint{Epoch: 2}
|
||||
beaconState, err := factory(c1)
|
||||
@@ -70,7 +70,7 @@ func VerifyBeaconState_MatchPreviousJustifiedCheckpt(t *testing.T, factory getSt
|
||||
require.Equal(t, false, beaconState.MatchPreviousJustifiedCheckpoint(c1))
|
||||
}
|
||||
|
||||
func VerifyBeaconState_MatchPreviousJustifiedCheckptNative(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint) {
|
||||
func VerifyBeaconStateMatchPreviousJustifiedCheckptNative(t *testing.T, factory getStateWithCurrentJustifiedCheckpoint) {
|
||||
c1 := ðpb.Checkpoint{Epoch: 1}
|
||||
c2 := ðpb.Checkpoint{Epoch: 2}
|
||||
beaconState, err := factory(c1)
|
||||
@@ -81,7 +81,7 @@ func VerifyBeaconState_MatchPreviousJustifiedCheckptNative(t *testing.T, factory
|
||||
require.Equal(t, false, beaconState.MatchPreviousJustifiedCheckpoint(c2))
|
||||
}
|
||||
|
||||
func VerifyBeaconState_MarshalSSZ_NilState(t *testing.T, factory getState, clear clearInternalState) {
|
||||
func VerifyBeaconStateMarshalSSZNilState(t *testing.T, factory getState, clear clearInternalState) {
|
||||
s, err := factory()
|
||||
require.NoError(t, err)
|
||||
clear(s)
|
||||
@@ -89,7 +89,7 @@ func VerifyBeaconState_MarshalSSZ_NilState(t *testing.T, factory getState, clear
|
||||
require.ErrorContains(t, "nil beacon state", err)
|
||||
}
|
||||
|
||||
func VerifyBeaconState_ValidatorByPubkey(t *testing.T, factory getState) {
|
||||
func VerifyBeaconStateValidatorByPubkey(t *testing.T, factory getState) {
|
||||
keyCreator := func(input []byte) [fieldparams.BLSPubkeyLength]byte {
|
||||
nKey := [fieldparams.BLSPubkeyLength]byte{}
|
||||
copy(nKey[:1], input)
|
||||
|
||||
135
beacon-chain/state/testing/getters_block.go
Normal file
135
beacon-chain/state/testing/getters_block.go
Normal file
@@ -0,0 +1,135 @@
|
||||
package testing
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/state"
|
||||
fieldparams "github.com/prysmaticlabs/prysm/config/fieldparams"
|
||||
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||||
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/testing/require"
|
||||
)
|
||||
|
||||
type getStateWithLatestBlockHeader func(*ethpb.BeaconBlockHeader) (state.BeaconState, error)
|
||||
|
||||
func VerifyBeaconStateLatestBlockHeader(
|
||||
t *testing.T,
|
||||
factory getState,
|
||||
factoryLBH getStateWithLatestBlockHeader,
|
||||
) {
|
||||
s, err := factory()
|
||||
require.NoError(t, err)
|
||||
got := s.LatestBlockHeader()
|
||||
require.DeepEqual(t, (*ethpb.BeaconBlockHeader)(nil), got)
|
||||
|
||||
want := ðpb.BeaconBlockHeader{Slot: 100}
|
||||
s, err = factoryLBH(want)
|
||||
require.NoError(t, err)
|
||||
got = s.LatestBlockHeader()
|
||||
require.DeepEqual(t, want, got)
|
||||
|
||||
// Test copy does not mutate.
|
||||
got.Slot = 101
|
||||
require.DeepNotEqual(t, want, got)
|
||||
}
|
||||
|
||||
type getStateWithLBlockRoots func([][]byte) (state.BeaconState, error)
|
||||
|
||||
func VerifyBeaconStateBlockRoots(
|
||||
t *testing.T,
|
||||
factory getState,
|
||||
factoryBR getStateWithLBlockRoots,
|
||||
) {
|
||||
s, err := factory()
|
||||
require.NoError(t, err)
|
||||
got := s.BlockRoots()
|
||||
require.DeepEqual(t, ([][]byte)(nil), got)
|
||||
|
||||
want := [][]byte{{'a'}}
|
||||
s, err = factoryBR(want)
|
||||
require.NoError(t, err)
|
||||
got = s.BlockRoots()
|
||||
require.DeepEqual(t, want, got)
|
||||
|
||||
// Test copy does not mutate.
|
||||
got[0][0] = 'b'
|
||||
require.DeepNotEqual(t, want, got)
|
||||
}
|
||||
|
||||
func VerifyBeaconStateBlockRootsNative(
|
||||
t *testing.T,
|
||||
factory getState,
|
||||
factoryBR getStateWithLBlockRoots,
|
||||
) {
|
||||
s, err := factory()
|
||||
require.NoError(t, err)
|
||||
got := s.BlockRoots()
|
||||
want := make([][]byte, fieldparams.BlockRootsLength)
|
||||
for i := range want {
|
||||
want[i] = make([]byte, 32)
|
||||
}
|
||||
require.DeepEqual(t, want, got)
|
||||
|
||||
want = make([][]byte, fieldparams.BlockRootsLength)
|
||||
for i := range want {
|
||||
if i == 0 {
|
||||
want[i] = bytesutil.PadTo([]byte{'a'}, 32)
|
||||
} else {
|
||||
want[i] = make([]byte, 32)
|
||||
}
|
||||
|
||||
}
|
||||
s, err = factoryBR(want)
|
||||
require.NoError(t, err)
|
||||
got = s.BlockRoots()
|
||||
require.DeepEqual(t, want, got)
|
||||
|
||||
// Test copy does not mutate.
|
||||
got[0][0] = 'b'
|
||||
require.DeepNotEqual(t, want, got)
|
||||
}
|
||||
|
||||
func VerifyBeaconStateBlockRootAtIndex(
|
||||
t *testing.T,
|
||||
factory getState,
|
||||
factoryBR getStateWithLBlockRoots,
|
||||
) {
|
||||
s, err := factory()
|
||||
require.NoError(t, err)
|
||||
got, err := s.BlockRootAtIndex(0)
|
||||
require.NoError(t, err)
|
||||
require.DeepEqual(t, ([]byte)(nil), got)
|
||||
|
||||
r := [][]byte{{'a'}}
|
||||
s, err = factoryBR(r)
|
||||
require.NoError(t, err)
|
||||
got, err = s.BlockRootAtIndex(0)
|
||||
require.NoError(t, err)
|
||||
want := bytesutil.PadTo([]byte{'a'}, fieldparams.RootLength)
|
||||
require.DeepSSZEqual(t, want, got)
|
||||
}
|
||||
|
||||
func VerifyBeaconStateBlockRootAtIndexNative(
|
||||
t *testing.T,
|
||||
factory getState,
|
||||
factoryBR getStateWithLBlockRoots,
|
||||
) {
|
||||
s, err := factory()
|
||||
require.NoError(t, err)
|
||||
got, err := s.BlockRootAtIndex(0)
|
||||
require.NoError(t, err)
|
||||
require.DeepEqual(t, bytesutil.PadTo([]byte{}, 32), got)
|
||||
|
||||
r := [fieldparams.BlockRootsLength][32]byte{{'a'}}
|
||||
bRoots := make([][]byte, len(r))
|
||||
for i, root := range r {
|
||||
tmp := root
|
||||
bRoots[i] = tmp[:]
|
||||
}
|
||||
s, err = factoryBR(bRoots)
|
||||
require.NoError(t, err)
|
||||
got, err = s.BlockRootAtIndex(0)
|
||||
require.NoError(t, err)
|
||||
want := bytesutil.PadTo([]byte{'a'}, 32)
|
||||
require.DeepSSZEqual(t, want, got)
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
|
||||
type getState func() (state.BeaconState, error)
|
||||
|
||||
func VerifyBeaconState_ValidatorAtIndexReadOnly_HandlesNilSlice(t *testing.T, factory getState) {
|
||||
func VerifyBeaconStateValidatorAtIndexReadOnlyHandlesNilSlice(t *testing.T, factory getState) {
|
||||
st, err := factory()
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user