/
upgrade_to_capella.go
61 lines (54 loc) · 2.41 KB
/
upgrade_to_capella.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package fork
import (
"path"
"testing"
"github.com/golang/snappy"
"github.com/prysmaticlabs/prysm/v4/beacon-chain/core/capella"
"github.com/prysmaticlabs/prysm/v4/beacon-chain/core/helpers"
state_native "github.com/prysmaticlabs/prysm/v4/beacon-chain/state/state-native"
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
"github.com/prysmaticlabs/prysm/v4/testing/require"
"github.com/prysmaticlabs/prysm/v4/testing/spectest/utils"
"github.com/prysmaticlabs/prysm/v4/testing/util"
"google.golang.org/protobuf/proto"
)
// RunUpgradeToCapella is a helper function that runs capella's fork spec tests.
// It unmarshals a pre- and post-state to check `UpgradeToCapella` comply with spec implementation.
func RunUpgradeToCapella(t *testing.T, config string) {
require.NoError(t, utils.SetConfig(t, config))
testFolders, testsFolderPath := utils.TestFolders(t, config, "capella", "fork/fork/pyspec_tests")
if len(testFolders) == 0 {
t.Fatalf("No test folders found for %s/%s/%s", config, "capella", "fork/fork/pyspec_tests")
}
for _, folder := range testFolders {
t.Run(folder.Name(), func(t *testing.T) {
helpers.ClearCache()
folderPath := path.Join(testsFolderPath, folder.Name())
preStateFile, err := util.BazelFileBytes(path.Join(folderPath, "pre.ssz_snappy"))
require.NoError(t, err)
preStateSSZ, err := snappy.Decode(nil /* dst */, preStateFile)
require.NoError(t, err, "Failed to decompress")
preStateBase := ðpb.BeaconStateBellatrix{}
if err := preStateBase.UnmarshalSSZ(preStateSSZ); err != nil {
t.Fatalf("Failed to unmarshal: %v", err)
}
preState, err := state_native.InitializeFromProtoBellatrix(preStateBase)
require.NoError(t, err)
postState, err := capella.UpgradeToCapella(preState)
require.NoError(t, err)
postStateFromFunction, err := state_native.ProtobufBeaconStateCapella(postState.ToProtoUnsafe())
require.NoError(t, err)
postStateFile, err := util.BazelFileBytes(path.Join(folderPath, "post.ssz_snappy"))
require.NoError(t, err)
postStateSSZ, err := snappy.Decode(nil /* dst */, postStateFile)
require.NoError(t, err, "Failed to decompress")
postStateFromFile := ðpb.BeaconStateCapella{}
if err := postStateFromFile.UnmarshalSSZ(postStateSSZ); err != nil {
t.Fatalf("Failed to unmarshal: %v", err)
}
if !proto.Equal(postStateFromFile, postStateFromFunction) {
t.Fatal("Post state does not match expected")
}
})
}
}