Skip to content

Commit

Permalink
tests: update test suite for istanbul (ethereum#20082)
Browse files Browse the repository at this point in the history
* update tests for istanbul

* tests: updated blockchaintests, see ethereum/tests#637

* tests: update again, hopefully fixed this time

* tests: skip time consuming, run legacy tests

* tests: update again

* build: disable long-running tests on travis

* tests: fix formatting nits

* tests: I hate github's editor
  • Loading branch information
holiman authored and enriquefynn committed Feb 15, 2021
1 parent df67ed3 commit 97e5e43
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 14 deletions.
2 changes: 1 addition & 1 deletion build/ci.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ func doTest(cmdline []string) {
// Test a single package at a time. CI builders are slow
// and some tests run into timeouts under load.
gotest := goTool("test", buildFlags(env)...)
gotest.Args = append(gotest.Args, "-p", "1", "-timeout", "5m")
gotest.Args = append(gotest.Args, "-p", "1", "-timeout", "5m", "--short")
if *coverage {
gotest.Args = append(gotest.Args, "-covermode=atomic", "-cover")
}
Expand Down
23 changes: 13 additions & 10 deletions tests/block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,9 @@ func TestBlockchain(t *testing.T) {

bt := new(testMatcher)
// General state tests are 'exported' as blockchain tests, but we can run them natively.
bt.skipLoad(`^ValidBlocks/bcStateTests/`)
// Skip random failures due to selfish mining test.
bt.skipLoad(`^GeneralStateTests/`)
// Skip random failures due to selfish mining test
bt.skipLoad(`.*bcForgedTest/bcForkUncle\.json`)
bt.skipLoad(`.*bcMultiChainTest/(ChainAtoChainB_blockorder|CallContractFromNotBestBlock)`)
bt.skipLoad(`.*bcTotalDifficultyTest/(lotsOfLeafs|lotsOfBranches|sideChainWithMoreTransactions)`)

// These are not formatted like the rest -- due to the large postState, the postState
// was replaced by a hash, instead of a genesisAlloc map
// See https://github.com/ethereum/tests/pull/616
bt.skipLoad(`.*bcExploitTest/ShanghaiLove.json`)
bt.skipLoad(`.*bcExploitTest/SuicideIssue.json`)

// Slow tests
bt.slow(`.*bcExploitTest/DelegateCallSpam.json`)
Expand All @@ -45,9 +37,20 @@ func TestBlockchain(t *testing.T) {
bt.slow(`.*/bcGasPricerTest/RPC_API_Test.json`)
bt.slow(`.*/bcWalletTest/`)

// Very slow test
bt.skipLoad(`.*/stTimeConsuming/.*`)

// test takes a lot for time and goes easily OOM because of sha3 calculation on a huge range,
// using 4.6 TGas
bt.skipLoad(`.*randomStatetest94.json.*`)

bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) {
if err := bt.checkFailure(t, name, test.Run()); err != nil {
t.Error(err)
}
})

// There is also a LegacyTests folder, containing blockchain tests generated
// prior to Istanbul. However, they are all derived from GeneralStateTests,
// which run natively, so there's no reason to run them here.
}
1 change: 1 addition & 0 deletions tests/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ var (
baseDir = filepath.Join(".", "testdata")
blockTestDir = filepath.Join(baseDir, "BlockchainTests")
stateTestDir = filepath.Join(baseDir, "GeneralStateTests")
legacyStateTestDir = filepath.Join(baseDir, "LegacyTests", "Constantinople", "GeneralStateTests")
transactionTestDir = filepath.Join(baseDir, "TransactionTests")
vmTestDir = filepath.Join(baseDir, "VMTests")
rlpTestDir = filepath.Join(baseDir, "RLPTests")
Expand Down
20 changes: 18 additions & 2 deletions tests/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ func TestState(t *testing.T) {
st.slow(`^stStaticCall/static_Call1MB`)
st.slow(`^stSystemOperationsTest/CallRecursiveBomb`)
st.slow(`^stTransactionTest/Opcodes_TransactionInit`)

// Very time consuming
st.skipLoad(`^stTimeConsuming/`)

// Broken tests:
st.skipLoad(`^stTransactionTest/OverflowGasRequire\.json`) // gasLimit > 256 bits
st.skipLoad(`^stTransactionTest/zeroSigTransa[^/]*\.json`) // EIP-86 is not supported yet
// Expected failures:
//st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/0`, "bug in test")
//st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/3`, "bug in test")
Expand All @@ -64,6 +66,20 @@ func TestState(t *testing.T) {
})
}
})
// For Istanbul, older tests were moved into LegacyTests
st.walk(t, legacyStateTestDir, func(t *testing.T, name string, test *StateTest) {
for _, subtest := range test.Subtests() {
subtest := subtest
key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index)
name := name + "/" + key
t.Run(key, func(t *testing.T) {
withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error {
_, err := test.Run(subtest, vmconfig)
return st.checkFailure(t, name, err)
})
})
}
})
}

// Transactions with gasLimit above this value will not get a VM trace on failure.
Expand Down
2 changes: 1 addition & 1 deletion tests/testdata
Submodule testdata updated 7840 files

0 comments on commit 97e5e43

Please sign in to comment.