erigon-pulse/cl/spectest/consensus_tests/finality.go
Giulio rebuffo 24987878e4
Resumable beacon state reconstruction (#8918)
* Most of the PR changed files are extra and slightly more complicated
unit tests.
* Fixed Eth1DataVotes not inheriting genesis
* Fixed Attestations simulation using wrong slot when reconstructing
partecipation
* Fixed Copy() operation on BeaconState on Eth1DataVotes
* Used correct ListSSZ type for Eth1DataVotes and HistoricalSummaries
* Fixed wrong []uint64 deltas on empty slots
2023-12-11 14:07:57 +01:00

43 lines
1.1 KiB
Go

package consensus_tests
import (
"fmt"
"io/fs"
"testing"
"github.com/ledgerwatch/erigon/cl/transition/machine"
"github.com/ledgerwatch/erigon/spectest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var FinalityFinality = spectest.HandlerFunc(func(t *testing.T, root fs.FS, c spectest.TestCase) (err error) {
testState, err := spectest.ReadBeaconState(root, c.Version(), spectest.PreSsz)
require.NoError(t, err)
expectedState, err := spectest.ReadBeaconState(root, c.Version(), spectest.PostSsz)
require.NoError(t, err)
blocks, err := spectest.ReadBlocks(root, c.Version())
if err != nil {
return err
}
startSlot := testState.Slot()
for _, block := range blocks {
if err := machine.TransitionState(c.Machine, testState, block); err != nil {
require.NoError(t, fmt.Errorf("cannot transition state: %w. slot=%d. start_slot=%d", err, block.Block.Slot, startSlot))
}
}
expectedRoot, err := testState.HashSSZ()
assert.NoError(t, err)
haveRoot, err := expectedState.HashSSZ()
assert.NoError(t, err)
assert.EqualValues(t, haveRoot, expectedRoot, "state root")
return nil
})