From e0965431ae90a8a9a3ed3843b384058404bf3304 Mon Sep 17 00:00:00 2001 From: FlorianHuc Date: Thu, 29 Aug 2024 15:30:24 +0200 Subject: [PATCH] Tests/ethereum (#1012) * add workflow * Create gradle-ethereum-test.yml * remove duplicate * remove duplicate * change order of modules * change order of modules * change order of modules * Revert "change order of modules" This reverts commit 7c38a26fa183bda1ed80aa8d195b8043fab4561d. * change order of modules * remove build * make zkevm * make zkevm * adding logs * adding logs * adding logs * adding logs * adding logs * trigger on schedule * spotless * remove redundent steps. * Fix GeneralStateReferenceTest template import * Make tests run in parallel --------- Co-authored-by: Gaurav Ahuja --- .github/workflows/gradle-ethereum-tests.yml | 66 +++++++++++++++++++ docs/get-started.md | 6 ++ gradle/tests.gradle | 2 + reference-tests/build.gradle | 2 + .../linea/BlockchainReferenceTestTools.java | 16 ++++- .../GeneralStateReferenceTest.java.template | 4 +- 6 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/gradle-ethereum-tests.yml diff --git a/.github/workflows/gradle-ethereum-tests.yml b/.github/workflows/gradle-ethereum-tests.yml new file mode 100644 index 0000000000..e0604c807a --- /dev/null +++ b/.github/workflows/gradle-ethereum-tests.yml @@ -0,0 +1,66 @@ +name: gradle + +on: + schedule: + - cron: "0 23 * * *" + +env: + CARGO_NET_GIT_FETCH_WITH_CLI: true + +jobs: + ethereum-tests: + runs-on: ubuntu-latest-128 + steps: + - uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: | + ${{ secrets.CONSTRAINTS_SSH_KEY }} + + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: 21 + distribution: temurin + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + + # The asset URL for the latest release can be found with: + # curl -L -H "Accept: application/vnd.github+json" \ + # -H "Authorization: Bearer YOUR_GH_API_TOKEN" \ + # -H "X-GitHub-Api-Version: 2022-11-28" \ + # https://api.github.com/repos/ConsenSys/corset/releases/latest + # | jq '.assets[] | select(.name|endswith("x86_64-unknown-linux-musl.tar.gz")) | .url' + - name: Install Corset + run: RUSTFLAGS=-Awarnings cargo install --git ssh://git@github.com/ConsenSys/corset --tag v9.7.13 --locked --force +# run: | +# curl -L \ +# -H "Accept: application/octet-stream" \ +# -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ +# -H "X-GitHub-Api-Version: 2022-11-28" \ +# -o corset.tar.gz \ +# https://api.github.com/repos/Consensys/corset/releases/assets/151396061 +# tar xzf corset.tar.gz +# mv corset $HOME +# echo $HOME >> $GITHUB_PATH + + - name: Generate block chain reference tests + run: ./gradlew :reference-tests:generateBlockchainReferenceTests -Dorg.gradle.parallel=true -Dorg.gradle.caching=true + env: + JAVA_OPTS: -Dorg.gradle.daemon=false -DZKEVM_BIN_ORIGINAL_PATH="zkevm-constraints/zkevm.bin" + CORSET_FLAGS: fields,expand,expand,expand + + - name: generate zkevm.bin + run: cd ./zkevm-constraints; make zkevm.bin -B; cd .. + + - name: Run general reference tests + run: ./gradlew referenceGeneralStateTests + env: + JAVA_OPTS: -Dorg.gradle.daemon=false + CORSET_FLAGS: fields,expand,expand,expand + diff --git a/docs/get-started.md b/docs/get-started.md index 8bfe4315c3..6f43565cfa 100644 --- a/docs/get-started.md +++ b/docs/get-started.md @@ -65,9 +65,15 @@ ______________________________________________________________________ # Run only acceptance tests ./gradlew clean acceptanceTests +# Generate EVM test suite BlockchainTests +./gradlew :reference-tests:generateBlockchainReferenceTests + # Run EVM test suite BlockchainTests ./gradlew clean referenceBlockchainTests +# Generate EVM test suite GeneralStateTests +./gradlew :reference-tests:generateGeneralStateReferenceTests + # Run EVM test suite GeneralStateTests ./gradlew clean referenceGeneralStateTests diff --git a/gradle/tests.gradle b/gradle/tests.gradle index 9b97f7b4a6..a6ab5beb2c 100644 --- a/gradle/tests.gradle +++ b/gradle/tests.gradle @@ -43,6 +43,7 @@ apply plugin: 'com.adarshr.test-logger' test { minHeapSize = "4g" maxHeapSize = "8g" + maxParallelForks = Runtime.getRuntime().availableProcessors().intdiv(2) ?: 1 jvmArgs = [ '-XX:-UseGCOverheadLimit', // Mockito and jackson-databind do some strange reflection during tests. @@ -120,6 +121,7 @@ tasks.register('unitTests', Test) { minHeapSize = "4g" maxHeapSize = "8g" + maxParallelForks = Runtime.getRuntime().availableProcessors().intdiv(2) ?: 1 useJUnitPlatform { excludeTags("AcceptanceTest") diff --git a/reference-tests/build.gradle b/reference-tests/build.gradle index 4f5366394f..9bbc4df645 100644 --- a/reference-tests/build.gradle +++ b/reference-tests/build.gradle @@ -49,6 +49,7 @@ tasks.register('referenceBlockchainTests', Test) { minHeapSize = "4g" maxHeapSize = "20g" + maxParallelForks = Runtime.getRuntime().availableProcessors().intdiv(2) ?: 1 useJUnitPlatform { includeTags("BlockchainReferenceTest") @@ -62,6 +63,7 @@ tasks.register('referenceGeneralStateTests', Test) { minHeapSize = "4g" maxHeapSize = "20g" + maxParallelForks = Runtime.getRuntime().availableProcessors().intdiv(2) ?: 1 useJUnitPlatform { includeTags("GeneralStateReferenceTest") diff --git a/reference-tests/src/test/java/net/consensys/linea/BlockchainReferenceTestTools.java b/reference-tests/src/test/java/net/consensys/linea/BlockchainReferenceTestTools.java index 79f60e4f22..38cadb10aa 100644 --- a/reference-tests/src/test/java/net/consensys/linea/BlockchainReferenceTestTools.java +++ b/reference-tests/src/test/java/net/consensys/linea/BlockchainReferenceTestTools.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.List; +import lombok.extern.slf4j.Slf4j; import net.consensys.linea.corset.CorsetValidator; import net.consensys.linea.zktracer.ZkTracer; import org.hyperledger.besu.ethereum.MainnetBlockValidator; @@ -40,6 +41,7 @@ import org.hyperledger.besu.ethereum.rlp.RLPException; import org.hyperledger.besu.testutil.JsonTestParameters; +@Slf4j public class BlockchainReferenceTestTools { private static final ReferenceTestProtocolSchedules REFERENCE_TEST_PROTOCOL_SCHEDULES = ReferenceTestProtocolSchedules.create(); @@ -88,6 +90,7 @@ private BlockchainReferenceTestTools() { } public static Collection generateTestParametersForConfig(final String[] filePath) { + Arrays.stream(filePath).forEach(f -> log.info("checking file: {}", f)); return PARAMS.generate( Arrays.stream(filePath) .map(f -> Paths.get("src/test/resources/ethereum-tests/" + f).toFile()) @@ -100,6 +103,8 @@ public static void executeTest(final BlockchainReferenceTestCaseSpec spec) { spec.getWorldStateArchive() .getMutable(genesisBlockHeader.getStateRoot(), genesisBlockHeader.getHash()) .get(); + log.info( + "checking roothash {} is {}", worldState.rootHash(), genesisBlockHeader.getStateRoot()); assertThat(worldState.rootHash()).isEqualTo(genesisBlockHeader.getStateRoot()); final ProtocolSchedule schedule = @@ -130,13 +135,18 @@ public static void executeTest(final BlockchainReferenceTestCaseSpec spec) { final BlockImportResult importResult = blockImporter.importBlock(context, block, validationMode, validationMode); - + log.info( + "checking block is imported {} equals {}", + importResult.isImported(), + candidateBlock.isValid()); assertThat(importResult.isImported()).isEqualTo(candidateBlock.isValid()); } catch (final RLPException e) { + log.info("caugh RLP exception, checking it's invalid {}", candidateBlock.isValid()); assertThat(candidateBlock.isValid()).isFalse(); } - - assertThat(corsetValidator.validate(zkTracer.writeToTmpFile()).isValid()).isTrue(); + CorsetValidator.Result corsetResult = corsetValidator.validate(zkTracer.writeToTmpFile()); + log.info("Corset result {}", corsetResult); + assertThat(corsetResult.isValid()).isTrue(); } assertThat(blockchain.getChainHeadHash()).isEqualTo(spec.getLastBlockHash()); diff --git a/reference-tests/src/test/resources/templates/GeneralStateReferenceTest.java.template b/reference-tests/src/test/resources/templates/GeneralStateReferenceTest.java.template index 53a0455564..b34d0f7b4d 100644 --- a/reference-tests/src/test/resources/templates/GeneralStateReferenceTest.java.template +++ b/reference-tests/src/test/resources/templates/GeneralStateReferenceTest.java.template @@ -15,8 +15,8 @@ package net.consensys.linea.generated.generalstate; -import static net.consensys.linea.testing.GeneralStateReferenceTestTools.executeTest; -import static net.consensys.linea.testing.GeneralStateReferenceTestTools.generateTestParametersForConfig; +import static net.consensys.linea.GeneralStateReferenceTestTools.executeTest; +import static net.consensys.linea.GeneralStateReferenceTestTools.generateTestParametersForConfig; import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.util.stream.Stream;