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  }