Skip to content

Getting Started: Filling Tests

By default, JSON test fixtures are generated from this repository's Python test cases using the Ethereum Execution Layer Specification (EELS) reference implementation. The resulting JSON fixtures can be executed against execution clients to verify consensus.

  1. Explore test cases via --collect-only and search for test cases that combine PUSH0 and DELEGATECALL in the EVM functionality introduced in the Shanghai hard fork:

    uv run fill --collect-only -k "push0 and delegatecall" tests/shanghai/
    

    The fill command is based on pytest. The above command uses the optional pytest arguments:

    • --collect-only only collect test cases; don't execute them.
    • -k <expression> filter test cases by their test case ID based on the given expression.
    • tests/shanghai the directory containing the test cases (tells fill to only discover test cases in this directory; default: tests/).

    Expected console output:

    Screenshot of pytest test collection console output

  2. Fill state_test fixtures for these test cases:

    uv run fill -k "push0 and delegatecall" tests/shanghai/ -m state_test -v
    

    where:

    • -m state_test only fills test cases marked as a state_test (see all available markers via uv run fill --markers).
    • -v enables verbose output.

    Expected console output:

    Screenshot of fill test collection console output

  3. Verify the generated fixtures:

    a. Check the corresponding fixture file has been generated:

    head fixtures/state_tests/shanghai/eip3855_push0/push0/push0_contract_during_call_contexts.json
    

    b. Open the generated HTML test using the link provided at the bottom of the console output. This is written to the output directory at:

    ./fixtures/.meta/report_fill.html
    

Next Steps

  1. Learn useful command-line flags.
  2. Execute tests for features under development via the --fork flag.
  3. Optional: Configure VS Code to auto-format Python code and execute tests within VS Code.
  4. Implement a new test case, see Writing Tests.