package sanity import ( "context" "strconv" "testing" "github.com/golang/snappy" "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/transition" state_native "github.com/prysmaticlabs/prysm/v5/beacon-chain/state/state-native" ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v5/testing/require" "github.com/prysmaticlabs/prysm/v5/testing/spectest/utils" "github.com/prysmaticlabs/prysm/v5/testing/util" "google.golang.org/protobuf/proto" ) func init() { transition.SkipSlotCache.Disable() } // RunSlotProcessingTests executes "sanity/slots" tests. func RunSlotProcessingTests(t *testing.T, config string) { require.NoError(t, utils.SetConfig(t, config)) testFolders, testsFolderPath := utils.TestFolders(t, config, "deneb", "sanity/slots/pyspec_tests") for _, folder := range testFolders { t.Run(folder.Name(), func(t *testing.T) { preBeaconStateFile, err := util.BazelFileBytes(testsFolderPath, folder.Name(), "pre.ssz_snappy") require.NoError(t, err) preBeaconStateSSZ, err := snappy.Decode(nil /* dst */, preBeaconStateFile) require.NoError(t, err, "Failed to decompress") base := ðpb.BeaconStateDeneb{} require.NoError(t, base.UnmarshalSSZ(preBeaconStateSSZ), "Failed to unmarshal") beaconState, err := state_native.InitializeFromProtoDeneb(base) require.NoError(t, err) file, err := util.BazelFileBytes(testsFolderPath, folder.Name(), "slots.yaml") require.NoError(t, err) fileStr := string(file) slotsCount, err := strconv.ParseUint(fileStr[:len(fileStr)-5], 10, 64) require.NoError(t, err) postBeaconStateFile, err := util.BazelFileBytes(testsFolderPath, folder.Name(), "post.ssz_snappy") require.NoError(t, err) postBeaconStateSSZ, err := snappy.Decode(nil /* dst */, postBeaconStateFile) require.NoError(t, err, "Failed to decompress") postBeaconState := ðpb.BeaconStateDeneb{} require.NoError(t, postBeaconState.UnmarshalSSZ(postBeaconStateSSZ), "Failed to unmarshal") postState, err := transition.ProcessSlots(context.Background(), beaconState, beaconState.Slot().Add(slotsCount)) require.NoError(t, err) pbState, err := state_native.ProtobufBeaconStateDeneb(postState.ToProto()) require.NoError(t, err) if !proto.Equal(pbState, postBeaconState) { t.Fatal("Did not receive expected post state") } }) } }