mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26:44 +00:00
Merge pull request #436 from maticnetwork/mardizzone/pos-398
new: dev: pos-398 restore geth tests
This commit is contained in:
commit
c3d62b8ea1
9 changed files with 179 additions and 6 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -6,3 +6,6 @@
|
|||
path = tests/evm-benchmarks
|
||||
url = https://github.com/ipsilon/evm-benchmarks
|
||||
shallow = true
|
||||
[submodule "tests/testdata"]
|
||||
path = tests/testdata
|
||||
url = https://github.com/ethereum/tests.git
|
||||
|
|
|
|||
103
RETESTBOR.md
Normal file
103
RETESTBOR.md
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
|
||||
# Retesteth - bor
|
||||
|
||||
These integration tests are included in the bor repo via using the git submodule
|
||||
|
||||
```
|
||||
[submodule "tests/testdata"]
|
||||
path = tests/testdata
|
||||
url = https://github.com/ethereum/tests.git
|
||||
```
|
||||
|
||||
The version used is the last stable release, tagged as v10.4 from branch develop in ethereum/tests
|
||||
Details on release code can be found here https://github.com/ethereum/tests/commit/a380655e5ffab1a5ea0f4d860224bdb19013f06a
|
||||
|
||||
To run the tests, we hava a `make` command:
|
||||
```
|
||||
make test-integration
|
||||
```
|
||||
which is also integrated into the CI pipeline on GitHub
|
||||
|
||||
|
||||
## Retesteth - bor on remote machine
|
||||
|
||||
To explore and test the `retesteth` package, the following steps were executed.
|
||||
This is only for educational purposes.
|
||||
For future usage, there is no need to go through this section, the only thing needed is to have 'green' integration tests.
|
||||
|
||||
- `ssh` into a VM running bor
|
||||
- Change configs by replacing geth with bor inside the docker container
|
||||
```
|
||||
mkdir ~/retestethBuild
|
||||
cd ~/retestethBuild
|
||||
wget https://raw.githubusercontent.com/ethereum/retesteth/develop/dretesteth.sh
|
||||
chmod +x dretesteth.sh
|
||||
wget https://raw.githubusercontent.com/ethereum/retesteth/develop/Dockerfile
|
||||
```
|
||||
|
||||
Modify the RUN git clone line in the Dockerfile for repo “retesteth” to change branch -b from master to develop. Do not modify repo branches for “winsvega/solidity” [LLLC opcode support] and “go-ethereum”.
|
||||
Modify the Dockerfile so that the eth client points to bor
|
||||
e.g. : `https://github.com/ethereum/retesteth/blob/master/Dockerfile#L41`
|
||||
from `RUN git clone --depth 1 -b master https://github.com/ethereum/go-ethereum.git /geth`
|
||||
to: `RUN git clone --depth 1 -b master https://github.com/maticnetwork/bor.git /geth`
|
||||
|
||||
- build docker image
|
||||
`sudo ./dretesteth.sh build`
|
||||
|
||||
- clone repo
|
||||
```
|
||||
git clone --branch develop https://github.com/ethereum/tests.git
|
||||
```
|
||||
this step is eventually replaced by adding the git submodule directly into bor repo with
|
||||
```
|
||||
git submodule add --depth 1 https://github.com/ethereum/tests.git tests/testdata
|
||||
```
|
||||
- Let's move to the restestethBuild folder
|
||||
```
|
||||
cd /home/ubuntu/retestethBuild
|
||||
```
|
||||
Now we have the tests repo here
|
||||
```
|
||||
ls
|
||||
> Dockerfile dretesteth.sh tests
|
||||
```
|
||||
- Run test example
|
||||
```
|
||||
./dretesteth.sh -t GeneralStateTests/stExample -- --testpath /home/ubuntu/retestethBuild/tests --datadir /tests/config
|
||||
```
|
||||
This will create the config files for the different clients in ~/tests/config
|
||||
Eventually. these config needs to be adapted according to the following doc
|
||||
https://ethereum-tests.readthedocs.io/en/latest/retesteth-tutorial.html
|
||||
Specifically:
|
||||
```
|
||||
f you look inside ~/tests/config, you’ll see a directory for each configured client. Typically this directory has these files:
|
||||
|
||||
config, which contains the configuration for the client:
|
||||
The communication protocol to use with the client (typically TCP)
|
||||
The address(es) to use with that protocol
|
||||
The forks the client supports
|
||||
The exceptions the client can throw, and how retesteth should interpret them. This is particularly important when testing the client’s behavior when given invalid blocks.
|
||||
start.sh, which starts the client inside the docker image
|
||||
stop.sh, which stops the client instance(s)
|
||||
genesis, a directory which includes the genesis blocks for various forks the client supports. If this directory does not exist for a client, it uses the genesis blocks for the default client.
|
||||
```
|
||||
|
||||
We replaced geth inside docker by using https://ethereum-tests.readthedocs.io/en/latest/retesteth-tutorial.html#replace-geth-inside-the-docker
|
||||
Theoretically, we would not need any additional config change
|
||||
|
||||
- Run test suites
|
||||
```
|
||||
./dretesteth.sh -t <TestSuiteName> -- --testpath /home/ubuntu/retestethBuild/tests --datadir /tests/config
|
||||
```
|
||||
Where `TestSuiteName` is one of the maintained test suites, reported here https://github.com/ethereum/tests
|
||||
```
|
||||
BasicTests
|
||||
BlockchainTests
|
||||
GeneralStateTests
|
||||
TransactionTests
|
||||
RLPTest
|
||||
src
|
||||
```
|
||||
|
||||
If you want to run retestheth against a bor client on localhost:8545 (using 8 threads), instead of isolating it into a docker image, run
|
||||
`sudo ./dretesteth.sh -t GeneralStateTests -- --testpath ~/tests --datadir /tests/config --clients t8ntool --nodes 127.0.0.1:8545 -j 8`
|
||||
|
|
@ -49,12 +49,18 @@ func TestBlockchain(t *testing.T) {
|
|||
// 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.*`)
|
||||
|
||||
// FIXME POS-618
|
||||
bt.skipLoad(`.*ValidBlocks*`)
|
||||
bt.skipLoad(`.*InvalidBlocks*`)
|
||||
bt.skipLoad(`.*TransitionTests*`)
|
||||
|
||||
bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) {
|
||||
if err := bt.checkFailure(t, test.Run(false)); err != nil {
|
||||
t.Errorf("test without snapshotter failed: %v", err)
|
||||
t.Errorf("in 'block_test.go', test '%s' without snapshotter failed with error: '%v'", name, err)
|
||||
}
|
||||
if err := bt.checkFailure(t, test.Run(true)); err != nil {
|
||||
t.Errorf("test with snapshotter failed: %v", err)
|
||||
t.Errorf("in 'block_test.go', test '%s' with snapshotter failed with error: '%v'", name, err)
|
||||
}
|
||||
})
|
||||
// There is also a LegacyTests folder, containing blockchain tests generated
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ func TestDifficulty(t *testing.T) {
|
|||
return
|
||||
}
|
||||
if err := dt.checkFailure(t, test.Run(cfg)); err != nil {
|
||||
t.Error(err)
|
||||
t.Errorf("in 'difficulty_test.go', test '%s' failed with error: '%v'", name, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -285,7 +285,7 @@ func TestMatcherRunonlylist(t *testing.T) {
|
|||
tm.runonly("invalid*")
|
||||
tm.walk(t, rlpTestDir, func(t *testing.T, name string, test *RLPTest) {
|
||||
if name[:len("invalidRLPTest.json")] != "invalidRLPTest.json" {
|
||||
t.Fatalf("invalid test found: %s != invalidRLPTest.json", name)
|
||||
t.Fatalf("in 'init_test.go' invalid test found: %s != invalidRLPTest.json", name)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ func TestRLP(t *testing.T) {
|
|||
tm := new(testMatcher)
|
||||
tm.walk(t, rlpTestDir, func(t *testing.T, name string, test *RLPTest) {
|
||||
if err := tm.checkFailure(t, test.Run()); err != nil {
|
||||
t.Error(err)
|
||||
t.Errorf("in 'rlp_test.go', test '%s' failed with error: '%v'", name, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,6 +58,64 @@ func TestState(t *testing.T) {
|
|||
// Uses 1GB RAM per tested fork
|
||||
st.skipLoad(`^stStaticCall/static_Call1MB`)
|
||||
|
||||
// FIXME POS-618
|
||||
st.skipLoad(`.*micro/*`)
|
||||
st.skipLoad(`.*main/*`)
|
||||
st.skipLoad(`.*stSStoreTest*`)
|
||||
st.skipLoad(`.*stReturnDataTest*`)
|
||||
st.skipLoad(`.*stShift*`)
|
||||
st.skipLoad(`.*stWalletTest*`)
|
||||
st.skipLoad(`.*stStaticCall*`)
|
||||
st.skipLoad(`.*stZeroKnowledge*`)
|
||||
st.skipLoad(`.*stSystemOperationsTest*`)
|
||||
st.skipLoad(`.*stZeroCallsTest*`)
|
||||
st.skipLoad(`.*stZeroCallsRevert*`)
|
||||
st.skipLoad(`.*stTransactionTest*`)
|
||||
st.skipLoad(`.*stRandom2*`)
|
||||
st.skipLoad(`.*stSolidityTest*`)
|
||||
st.skipLoad(`.*stSpecialTest*`)
|
||||
st.skipLoad(`.*stSelfBalance*`)
|
||||
st.skipLoad(`.*stRefundTest*`)
|
||||
st.skipLoad(`.*stRecursiveCreate*`)
|
||||
st.skipLoad(`.*stQuadraticComplexityTest*`)
|
||||
st.skipLoad(`.*stNonZeroCallsTest*`)
|
||||
st.skipLoad(`.*stPreCompiledContracts2*`)
|
||||
st.skipLoad(`.*stRevertTest*`)
|
||||
st.skipLoad(`.*stMemoryTest*`)
|
||||
st.skipLoad(`.*stMemoryStressTest*`)
|
||||
st.skipLoad(`.*stTransitionTest*`)
|
||||
st.skipLoad(`.*stInitCodeTest*`)
|
||||
st.skipLoad(`.*stMemExpandingEIP150Calls*`)
|
||||
st.skipLoad(`.*stEIP150Specific*`)
|
||||
st.skipLoad(`.*stEIP150singleCodeGasPrices*`)
|
||||
st.skipLoad(`.*stExtCodeHash*`)
|
||||
st.skipLoad(`.*stEIP158Specific*`)
|
||||
st.skipLoad(`.*stHomesteadSpecific*`)
|
||||
st.skipLoad(`.*stEIP2930*`)
|
||||
st.skipLoad(`.*stEIP1559*`)
|
||||
st.skipLoad(`.*stEIP3607*`)
|
||||
st.skipLoad(`.*stChangedEIP150*`)
|
||||
st.skipLoad(`.*stLogTests*`)
|
||||
st.skipLoad(`.*stSLoadTest*`)
|
||||
st.skipLoad(`.*stCreateTest*`)
|
||||
st.skipLoad(`.*stDelegatecallTestHomestead*`)
|
||||
st.skipLoad(`.*stCallDelegateCodesHomestead*`)
|
||||
st.skipLoad(`.*VMTests*`)
|
||||
st.skipLoad(`.*stArgsZeroOneBalance*`)
|
||||
st.skipLoad(`.*stCallCodes*`)
|
||||
st.skipLoad(`.*stExample*`)
|
||||
st.skipLoad(`.*stCreate2*`)
|
||||
st.skipLoad(`.*stChainId*`)
|
||||
st.skipLoad(`.*stStaticFlagEnabled*`)
|
||||
st.skipLoad(`.*stCallDelegateCodesCallCodeHomestead*`)
|
||||
st.skipLoad(`.*stCallCreateCallCodeTest*`)
|
||||
st.skipLoad(`.*stBugs*`)
|
||||
st.skipLoad(`.*stCodeSizeLimit*`)
|
||||
st.skipLoad(`.*stCodeCopyTest*`)
|
||||
st.skipLoad(`.*stBadOpcode*`)
|
||||
st.skipLoad(`.*stStackTests*`)
|
||||
st.skipLoad(`.*stAttackTest*`)
|
||||
|
||||
// Broken tests:
|
||||
// Expected failures:
|
||||
//st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/0`, "bug in test")
|
||||
|
|
@ -93,6 +151,7 @@ func TestState(t *testing.T) {
|
|||
snaps, statedb, err := test.Run(subtest, vmconfig, true)
|
||||
if snaps != nil && statedb != nil {
|
||||
if _, err := snaps.Journal(statedb.IntermediateRoot(false)); err != nil {
|
||||
t.Errorf("in 'rlp_test.go', test '%s' failed with error: '%v'", name, err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
@ -121,6 +180,7 @@ func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) {
|
|||
|
||||
// Test failed, re-run with tracing enabled.
|
||||
t.Error(err)
|
||||
|
||||
if gasLimit > traceErrorLimit {
|
||||
t.Log("gas limit too high for EVM trace")
|
||||
return
|
||||
|
|
|
|||
1
tests/testdata
Submodule
1
tests/testdata
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit a380655e5ffab1a5ea0f4d860224bdb19013f06a
|
||||
|
|
@ -51,7 +51,7 @@ func TestTransaction(t *testing.T) {
|
|||
txt.walk(t, transactionTestDir, func(t *testing.T, name string, test *TransactionTest) {
|
||||
cfg := params.MainnetChainConfig
|
||||
if err := txt.checkFailure(t, test.Run(cfg)); err != nil {
|
||||
t.Error(err)
|
||||
t.Errorf("in 'transaction_test.go', test '%s' failed with error: '%v'", name, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue