github.com/prysmaticlabs/prysm@v1.4.4/spectest/shared/phase0/sanity/slot_processing.go (about) 1 package sanity 2 3 import ( 4 "context" 5 "strconv" 6 "testing" 7 8 "github.com/golang/snappy" 9 "github.com/prysmaticlabs/prysm/beacon-chain/core/state" 10 "github.com/prysmaticlabs/prysm/beacon-chain/state/v1" 11 pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" 12 "github.com/prysmaticlabs/prysm/shared/testutil" 13 "github.com/prysmaticlabs/prysm/shared/testutil/require" 14 "github.com/prysmaticlabs/prysm/spectest/utils" 15 "google.golang.org/protobuf/proto" 16 "gopkg.in/d4l3k/messagediff.v1" 17 ) 18 19 func init() { 20 state.SkipSlotCache.Disable() 21 } 22 23 // RunSlotProcessingTests executes "sanity/slots" tests. 24 func RunSlotProcessingTests(t *testing.T, config string) { 25 require.NoError(t, utils.SetConfig(t, config)) 26 27 testFolders, testsFolderPath := utils.TestFolders(t, config, "phase0", "sanity/slots/pyspec_tests") 28 29 for _, folder := range testFolders { 30 t.Run(folder.Name(), func(t *testing.T) { 31 preBeaconStateFile, err := testutil.BazelFileBytes(testsFolderPath, folder.Name(), "pre.ssz_snappy") 32 require.NoError(t, err) 33 preBeaconStateSSZ, err := snappy.Decode(nil /* dst */, preBeaconStateFile) 34 require.NoError(t, err, "Failed to decompress") 35 base := &pb.BeaconState{} 36 require.NoError(t, base.UnmarshalSSZ(preBeaconStateSSZ), "Failed to unmarshal") 37 beaconState, err := v1.InitializeFromProto(base) 38 require.NoError(t, err) 39 40 file, err := testutil.BazelFileBytes(testsFolderPath, folder.Name(), "slots.yaml") 41 require.NoError(t, err) 42 fileStr := string(file) 43 slotsCount, err := strconv.Atoi(fileStr[:len(fileStr)-5]) 44 require.NoError(t, err) 45 46 postBeaconStateFile, err := testutil.BazelFileBytes(testsFolderPath, folder.Name(), "post.ssz_snappy") 47 require.NoError(t, err) 48 postBeaconStateSSZ, err := snappy.Decode(nil /* dst */, postBeaconStateFile) 49 require.NoError(t, err, "Failed to decompress") 50 postBeaconState := &pb.BeaconState{} 51 require.NoError(t, postBeaconState.UnmarshalSSZ(postBeaconStateSSZ), "Failed to unmarshal") 52 postState, err := state.ProcessSlots(context.Background(), beaconState, beaconState.Slot().Add(uint64(slotsCount))) 53 require.NoError(t, err) 54 55 pbState, err := v1.ProtobufBeaconState(postState.CloneInnerState()) 56 require.NoError(t, err) 57 if !proto.Equal(pbState, postBeaconState) { 58 diff, _ := messagediff.PrettyDiff(beaconState, postBeaconState) 59 t.Fatalf("Post state does not match expected. Diff between states %s", diff) 60 } 61 }) 62 } 63 }