Skip to content

feat(consume): add consume enginex simulator #1765

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 26 commits into
base: main
Choose a base branch
from

Conversation

danceratopz
Copy link
Member

@danceratopz danceratopz commented Jun 18, 2025

🗒️ Description

Adds a simulator that runs BlockchainEngineXFixture against clients.

Running The Simulator & Initial results

I've been testing locally with a subset of 1846 tests that create 29 groups from Cancun:

uv run fill --output=fixtures --clean -x -m "not zkevm and not slow" tests/cancun --fork=Cancun --evm-bin=../evmone/build/bin/evmone-t8n -n 8 --generate-pre-alloc-groups

Then consume against a hive dev server:

uv run consume enginex --input=fixtures-cancun --durations=5 --dist=loadgroup -n 8 --enginex-fcu-frequency=0

Results for 1846 tests with 29 groups (=^ 29 client initializations):

  • reth: 85.37s (0:01:25).
  • besu: 361.71s (0:06:01).
    (client versions at Pectra Fork).

FCU Behavior

# Disable all FCUs (fastest execution)
uv run consume enginex --enginex-fcu-frequency=0 fixtures/

# FCU every test (current behavior)  
uv run consume enginex --enginex-fcu-frequency=1 fixtures/

# FCU every 3rd test per pre-allocation group
uv run consume enginex --enginex-fcu-frequency=3 fixtures/

Xdist Behavior

Tests get distributed to xdist worker by pre-allocation group using loadgroup:

uv run consume enginex --input=fixtures-cancun --durations=5 --dist=loadgroup -n 8 --enginex-fcu-frequency=0

🔗 Related Issues

✅ Checklist

  • All: Set appropriate labels for the changes.
  • All: Considered squashing commits to improve commit history.
  • All: Added an entry to CHANGELOG.md.
  • All: Considered updating the online docs in the ./docs/ directory.
  • Tests: Ran mkdocs serve locally and verified the auto-generated docs for new tests in the Test Case Reference are correctly formatted.

@danceratopz danceratopz self-assigned this Jun 18, 2025
@danceratopz danceratopz added type:feat type: Feature scope:consume Scope: Consume command suite labels Jun 18, 2025
@danceratopz danceratopz force-pushed the feat/consume-enginex branch from a2411f5 to b5a12fb Compare June 25, 2025 08:17
Plugins called 'conftest' are registered automatically if in a sub-path to a test. This rename requires an explicit registration, which is specified by defining the `pytest_plugins` variable in 'engine/conftest.py', respectively, 'rlp/conftest.py'.
These are fixtures that can also be shared by multi-client architecture simulators.
…ectory

Consolidate test_via_engine.py and test_via_rlp.py into a shared hive_tests/
directory to improve organization and prepare for future multi-client architectures.

- Create src/pytest_plugins/consume/simulators/hive_tests/ directory.
- Move test_via_engine.py from engine/ to hive_tests/.
- Move test_via_rlp.py from rlp/ to hive_tests/.
- Update get_command_paths() to reference new locations.
- Maintain separation: plugin configs (conftest.py) stay with their simulators.

This provides better logical organization of test execution files while
maintaining explicit pytest plugin structure.
… configs

With the move to hive_tests/, the simulator-specific conftest.py files are no
longer automatically discovered. Add explicit plugin registration to ensure
_supported_fixture_formats and other simulator configs are properly loaded.

- Add command_name parameter to HiveEnvironmentProcessor.
- Register simulator-specific plugins based on command name.
- Update ConsumeCommand to pass command_name to processors.
- Fix AttributeError: 'Config' object has no attribute '_supported_fixture_formats'.
@danceratopz danceratopz force-pushed the feat/consume-enginex branch from b5a12fb to 8cb47da Compare June 25, 2025 11:12
…conftest files

Move pytest_hive plugin registration from HiveEnvironmentProcessor to individual
simulator conftest files to centralize all plugin configuration in one place
per simulator.
Complete the plugin registration refactor by adding pytest_hive plugin
to the enginex simulator conftest file for consistency with other simulators.
…ests

Replace hardcoded function name check with parameter-based discovery for
better maintainability. This avoids the design flaw of production code
referencing specific test function names.

Fixes unit test failures by checking for 'test_case' parameter presence
instead of maintaining an allowlist of function names.
…zation

Replace function name check with fixture format detection to properly
distinguish between engine and enginex simulators. Both use the same
test function name but process different fixture formats:

- Engine simulator: "blockchain_test_engine" → standard parametrization
- EngineX simulator: "blockchain_test_engine_x" → enhanced parametrization with xdist group splitting and load balancing

This provides more robust detection and avoids the design flaw of
hardcoding test function names.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
scope:consume Scope: Consume command suite type:feat type: Feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant