Skip to content

Commit 15b5cfd

Browse files
authored
fix(testing/specs): Fix benchmark pre-alloc grouping (#1708)
* fix(testing/specs): Fix benchmark spec genesis * refactor(testing/specs): Fork field in BaseTest * fix(testing/specs): Benchmark initialization * refactor(testing): Remove `fork` from generate
1 parent a191de9 commit 15b5cfd

File tree

20 files changed

+232
-256
lines changed

20 files changed

+232
-256
lines changed

packages/testing/src/execution_testing/cli/eofwrap.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ def _wrap_fixture(
323323

324324
test = BlockchainTest(
325325
genesis_environment=env,
326+
fork=EOFv1,
326327
pre=pre.root,
327328
post=fixture.post_state.root if fixture.post_state else {},
328329
blocks=[],
@@ -373,7 +374,6 @@ def _wrap_fixture(
373374

374375
result = test.generate(
375376
t8n=t8n,
376-
fork=EOFv1,
377377
fixture_format=BlockchainFixture,
378378
)
379379
assert isinstance(result, BlockchainFixture)

packages/testing/src/execution_testing/cli/fuzzer_bridge/blocktest_builder.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ def build_blocktest(
6868
# Generate fixture
6969
fixture = test.generate(
7070
t8n=self.t8n,
71-
fork=fork,
7271
fixture_format=BlockchainFixture,
7372
)
7473

packages/testing/src/execution_testing/cli/fuzzer_bridge/converter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ def blockchain_test_from_fuzzer(
251251

252252
return BlockchainTest(
253253
pre=pre,
254+
fork=fork,
254255
blocks=blocks,
255256
post={}, # Post-state verification can be added later
256257
genesis_environment=genesis_env,

packages/testing/src/execution_testing/cli/fuzzer_bridge/production_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ def generate_fixture(self, test_params: Dict[str, Any]) -> Dict[str, Any]:
201201
# Create test
202202
test = BlockchainTest(
203203
genesis_environment=test_params["genesis_environment"],
204+
fork=fork,
204205
pre=test_params["pre"],
205206
post=test_params["post"],
206207
blocks=test_params["blocks"],
@@ -210,7 +211,6 @@ def generate_fixture(self, test_params: Dict[str, Any]) -> Dict[str, Any]:
210211
# Generate fixture
211212
fixture = test.generate(
212213
t8n=self.t8n,
213-
fork=fork,
214214
fixture_format=BlockchainFixture,
215215
)
216216

packages/testing/src/execution_testing/cli/pytest_commands/plugins/execute/execute.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
407407
kwargs["expected_benchmark_gas_used"] = (
408408
request.getfixturevalue("gas_benchmark_value")
409409
)
410+
kwargs["fork"] = fork
410411
kwargs |= {
411412
p: request.getfixturevalue(p)
412413
for p in cls_fixture_parameters
@@ -436,9 +437,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
436437
[str(eoa) for eoa in pre._funded_eoa]
437438
)
438439

439-
execute = self.execute(
440-
fork=fork, execute_format=execute_format
441-
)
440+
execute = self.execute(execute_format=execute_format)
442441
execute.execute(
443442
fork=fork,
444443
eth_rpc=eth_rpc,

packages/testing/src/execution_testing/cli/pytest_commands/plugins/filler/filler.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
Alloc,
2929
ReferenceSpec,
3030
)
31-
from execution_testing.client_clis import TransitionTool
32-
from execution_testing.client_clis.clis.geth import FixtureConsumerTool
3331
from execution_testing.cli.gen_index import (
3432
generate_fixtures_index,
3533
)
34+
from execution_testing.client_clis import TransitionTool
35+
from execution_testing.client_clis.clis.geth import FixtureConsumerTool
3636
from execution_testing.fixtures import (
3737
BaseFixture,
3838
FixtureCollector,
@@ -1350,6 +1350,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
13501350
kwargs["pre"] = pre
13511351
if "expected_benchmark_gas_used" not in kwargs:
13521352
kwargs["expected_benchmark_gas_used"] = gas_benchmark_value
1353+
kwargs["fork"] = fork
13531354
kwargs |= {
13541355
p: request.getfixturevalue(p)
13551356
for p in cls_fixture_parameters
@@ -1380,7 +1381,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
13801381
# Use the original update_pre_alloc_groups method which
13811382
# returns the groups
13821383
self.update_pre_alloc_groups(
1383-
session.pre_alloc_groups, fork, request.node.nodeid
1384+
session.pre_alloc_groups, request.node.nodeid
13841385
)
13851386
return # Skip fixture generation in phase 1
13861387

@@ -1391,15 +1392,12 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
13911392
FixtureFillingPhase.PRE_ALLOC_GENERATION
13921393
in fixture_format.format_phases
13931394
):
1394-
pre_alloc_hash = self.compute_pre_alloc_group_hash(
1395-
fork=fork
1396-
)
1395+
pre_alloc_hash = self.compute_pre_alloc_group_hash()
13971396
group = session.get_pre_alloc_group(pre_alloc_hash)
13981397
self.pre = group.pre
13991398
try:
14001399
fixture = self.generate(
14011400
t8n=t8n,
1402-
fork=fork,
14031401
fixture_format=fixture_format,
14041402
)
14051403
finally:

packages/testing/src/execution_testing/cli/pytest_commands/plugins/filler/tests/test_prealloc_group.py

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,14 @@ class MockTest(BaseTest):
2424
def __init__(
2525
self,
2626
pre: Alloc,
27+
fork: Fork,
2728
genesis_environment: Environment,
2829
request: Mock | None = None,
2930
) -> None:
3031
"""Initialize mock test."""
3132
super().__init__( # type: ignore
3233
pre=pre,
34+
fork=fork,
3335
genesis_environment=genesis_environment,
3436
)
3537
self._request = request
@@ -38,9 +40,9 @@ def generate(self, *args: Any, **kwargs: Any) -> BaseFixture:
3840
"""Mock generate method."""
3941
raise NotImplementedError("This is a mock test class")
4042

41-
def get_genesis_environment(self, fork: Fork) -> Environment:
43+
def get_genesis_environment(self) -> Environment:
4244
"""Return the genesis environment."""
43-
return self.genesis_environment.set_fork_requirements(fork)
45+
return self.genesis_environment.set_fork_requirements(self.fork)
4446

4547

4648
def test_pre_alloc_group_separate() -> None:
@@ -51,8 +53,8 @@ def test_pre_alloc_group_separate() -> None:
5153
fork = Prague
5254

5355
# Create test without marker
54-
test1 = MockTest(pre=pre, genesis_environment=env)
55-
hash1 = test1.compute_pre_alloc_group_hash(fork)
56+
test1 = MockTest(pre=pre, genesis_environment=env, fork=fork)
57+
hash1 = test1.compute_pre_alloc_group_hash()
5658

5759
# Create test with "separate" marker
5860
mock_request = Mock()
@@ -62,15 +64,17 @@ def test_pre_alloc_group_separate() -> None:
6264
mock_marker.args = ("separate",)
6365
mock_request.node.get_closest_marker = Mock(return_value=mock_marker)
6466

65-
test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request)
66-
hash2 = test2.compute_pre_alloc_group_hash(fork)
67+
test2 = MockTest(
68+
pre=pre, genesis_environment=env, request=mock_request, fork=fork
69+
)
70+
hash2 = test2.compute_pre_alloc_group_hash()
6771

6872
# Hashes should be different due to "separate" marker
6973
assert hash1 != hash2
7074

7175
# Create another test without marker - should match first test
72-
test3 = MockTest(pre=pre, genesis_environment=env)
73-
hash3 = test3.compute_pre_alloc_group_hash(fork)
76+
test3 = MockTest(pre=pre, genesis_environment=env, fork=fork)
77+
hash3 = test3.compute_pre_alloc_group_hash()
7478

7579
assert hash1 == hash3
7680

@@ -89,8 +93,10 @@ def test_pre_alloc_group_custom_salt() -> None:
8993
mock_marker1.args = ("eip1234",)
9094
mock_request1.node.get_closest_marker = Mock(return_value=mock_marker1)
9195

92-
test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request1)
93-
hash1 = test1.compute_pre_alloc_group_hash(fork)
96+
test1 = MockTest(
97+
pre=pre, genesis_environment=env, request=mock_request1, fork=fork
98+
)
99+
hash1 = test1.compute_pre_alloc_group_hash()
94100

95101
# Create another test with same custom group "eip1234"
96102
mock_request2 = Mock()
@@ -102,8 +108,10 @@ def test_pre_alloc_group_custom_salt() -> None:
102108
mock_marker2.args = ("eip1234",) # Same group
103109
mock_request2.node.get_closest_marker = Mock(return_value=mock_marker2)
104110

105-
test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request2)
106-
hash2 = test2.compute_pre_alloc_group_hash(fork)
111+
test2 = MockTest(
112+
pre=pre, genesis_environment=env, request=mock_request2, fork=fork
113+
)
114+
hash2 = test2.compute_pre_alloc_group_hash()
107115

108116
# Hashes should be the same - both in "eip1234" group
109117
assert hash1 == hash2
@@ -116,8 +124,10 @@ def test_pre_alloc_group_custom_salt() -> None:
116124
mock_marker3.args = ("eip5678",) # Different group
117125
mock_request3.node.get_closest_marker = Mock(return_value=mock_marker3)
118126

119-
test3 = MockTest(pre=pre, genesis_environment=env, request=mock_request3)
120-
hash3 = test3.compute_pre_alloc_group_hash(fork)
127+
test3 = MockTest(
128+
pre=pre, genesis_environment=env, request=mock_request3, fork=fork
129+
)
130+
hash3 = test3.compute_pre_alloc_group_hash()
121131

122132
# Hash should be different - different custom group
123133
assert hash1 != hash3
@@ -138,8 +148,10 @@ def test_pre_alloc_group_separate_different_nodeids() -> None:
138148
mock_marker1.args = ("separate",)
139149
mock_request1.node.get_closest_marker = Mock(return_value=mock_marker1)
140150

141-
test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request1)
142-
hash1 = test1.compute_pre_alloc_group_hash(fork)
151+
test1 = MockTest(
152+
pre=pre, genesis_environment=env, request=mock_request1, fork=fork
153+
)
154+
hash1 = test1.compute_pre_alloc_group_hash()
143155

144156
# Create test with "separate" and nodeid2
145157
mock_request2 = Mock()
@@ -149,8 +161,10 @@ def test_pre_alloc_group_separate_different_nodeids() -> None:
149161
mock_marker2.args = ("separate",)
150162
mock_request2.node.get_closest_marker = Mock(return_value=mock_marker2)
151163

152-
test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request2)
153-
hash2 = test2.compute_pre_alloc_group_hash(fork)
164+
test2 = MockTest(
165+
pre=pre, genesis_environment=env, request=mock_request2, fork=fork
166+
)
167+
hash2 = test2.compute_pre_alloc_group_hash()
154168

155169
# Hashes should be different due to different nodeids
156170
assert hash1 != hash2
@@ -168,12 +182,14 @@ def test_no_pre_alloc_group_marker() -> None:
168182
mock_request.node.nodeid = "test_module.py::test_function"
169183
mock_request.node.get_closest_marker = Mock(return_value=None) # No marker
170184

171-
test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request)
172-
hash1 = test1.compute_pre_alloc_group_hash(fork)
185+
test1 = MockTest(
186+
pre=pre, genesis_environment=env, request=mock_request, fork=fork
187+
)
188+
hash1 = test1.compute_pre_alloc_group_hash()
173189

174190
# Create test without any request
175-
test2 = MockTest(pre=pre, genesis_environment=env)
176-
hash2 = test2.compute_pre_alloc_group_hash(fork)
191+
test2 = MockTest(pre=pre, genesis_environment=env, fork=fork)
192+
hash2 = test2.compute_pre_alloc_group_hash()
177193

178194
# Hashes should be the same - both have no marker
179195
assert hash1 == hash2
@@ -196,8 +212,10 @@ def test_pre_alloc_group_with_reason() -> None:
196212
}
197213
mock_request1.node.get_closest_marker = Mock(return_value=mock_marker1)
198214

199-
test1 = MockTest(pre=pre, genesis_environment=env, request=mock_request1)
200-
hash1 = test1.compute_pre_alloc_group_hash(fork)
215+
test1 = MockTest(
216+
pre=pre, genesis_environment=env, request=mock_request1, fork=fork
217+
)
218+
hash1 = test1.compute_pre_alloc_group_hash()
201219

202220
# Create another test with same group but different reason
203221
mock_request2 = Mock()
@@ -208,8 +226,10 @@ def test_pre_alloc_group_with_reason() -> None:
208226
mock_marker2.kwargs = {"reason": "Different reason but same group"}
209227
mock_request2.node.get_closest_marker = Mock(return_value=mock_marker2)
210228

211-
test2 = MockTest(pre=pre, genesis_environment=env, request=mock_request2)
212-
hash2 = test2.compute_pre_alloc_group_hash(fork)
229+
test2 = MockTest(
230+
pre=pre, genesis_environment=env, request=mock_request2, fork=fork
231+
)
232+
hash2 = test2.compute_pre_alloc_group_hash()
213233

214234
# Hashes should be the same - reason doesn't affect grouping
215235
assert hash1 == hash2

packages/testing/src/execution_testing/client_clis/tests/test_transition_tools_support.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,12 @@ def test_t8n_support(fork: Fork, installed_t8n: TransitionTool) -> None:
265265

266266
test = BlockchainTest(
267267
genesis_environment=env,
268+
fork=fork,
268269
pre=pre,
269270
post=block_1.expected_post_state,
270271
blocks=[block_1, block_2],
271272
)
272273
test.generate(
273274
t8n=installed_t8n,
274-
fork=fork,
275275
fixture_format=BlockchainFixture,
276276
)

0 commit comments

Comments
 (0)