tests: split up state test execution

This commit is contained in:
Martin Holst Swende 2023-07-31 15:58:47 +02:00
parent 817553cc28
commit 96017c248c
No known key found for this signature in database
GPG key ID: 683B438C05A5DDF0

View file

@ -35,7 +35,24 @@ import (
"github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/eth/tracers/logger"
) )
func TestState(t *testing.T) { func TestStateCurrent(t *testing.T) {
testState(t, stateTestDir)
}
func TestStateLegacy(t *testing.T) {
// For Istanbul, older tests were moved into LegacyTests
testState(t, legacyStateTestDir)
}
func TestStateBenchmarks(t *testing.T) {
testState(t, benchmarksDir)
}
func TestStateFuture(t *testing.T) {
testState(t, filepath.Join(baseDir, "EIPTests", "StateTests"))
}
func testState(t *testing.T, dir string) {
t.Parallel() t.Parallel()
st := new(testMatcher) st := new(testMatcher)
@ -66,38 +83,30 @@ func TestState(t *testing.T) {
st.fails(`stEIP4844-blobtransactions/opcodeBlobhashOutOfRange.json`, "test has incorrect state root") st.fails(`stEIP4844-blobtransactions/opcodeBlobhashOutOfRange.json`, "test has incorrect state root")
st.fails(`stEIP4844-blobtransactions/opcodeBlobhBounds.json`, "test has incorrect state root") st.fails(`stEIP4844-blobtransactions/opcodeBlobhBounds.json`, "test has incorrect state root")
// For Istanbul, older tests were moved into LegacyTests st.walk(t, dir, func(t *testing.T, name string, test *StateTest) {
for _, dir := range []string{ for _, subtest := range test.Subtests() {
filepath.Join(baseDir, "EIPTests", "StateTests"), subtest := subtest
stateTestDir, key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index)
legacyStateTestDir,
benchmarksDir,
} {
st.walk(t, dir, func(t *testing.T, name string, test *StateTest) {
for _, subtest := range test.Subtests() {
subtest := subtest
key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index)
t.Run(key+"/trie", func(t *testing.T) { t.Run(key+"/trie", func(t *testing.T) {
withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error { withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error {
_, _, err := test.Run(subtest, vmconfig, false) _, _, err := test.Run(subtest, vmconfig, false)
return st.checkFailure(t, err) return st.checkFailure(t, err)
})
}) })
t.Run(key+"/snap", func(t *testing.T) { })
withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error { t.Run(key+"/snap", func(t *testing.T) {
snaps, statedb, err := test.Run(subtest, vmconfig, true) withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error {
if snaps != nil && statedb != nil { snaps, statedb, err := test.Run(subtest, vmconfig, true)
if _, err := snaps.Journal(statedb.IntermediateRoot(false)); err != nil { if snaps != nil && statedb != nil {
return err if _, err := snaps.Journal(statedb.IntermediateRoot(false)); err != nil {
} return err
} }
return st.checkFailure(t, err) }
}) return st.checkFailure(t, err)
}) })
} })
}) }
} })
} }
// Transactions with gasLimit above this value will not get a VM trace on failure. // Transactions with gasLimit above this value will not get a VM trace on failure.