-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4103 from jtraglia/add-fulu-fork-tests
Add fulu fork tests
- Loading branch information
Showing
6 changed files
with
235 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
82 changes: 82 additions & 0 deletions
82
tests/core/pyspec/eth2spec/test/fulu/fork/test_fulu_fork_basic.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
from eth2spec.test.context import ( | ||
with_phases, | ||
with_custom_state, | ||
with_presets, | ||
spec_test, with_state, | ||
low_balances, misc_balances, large_validator_set, | ||
) | ||
from eth2spec.test.utils import with_meta_tags | ||
from eth2spec.test.helpers.constants import ( | ||
ELECTRA, FULU, | ||
MINIMAL, | ||
) | ||
from eth2spec.test.helpers.state import ( | ||
next_epoch, | ||
next_epoch_via_block, | ||
) | ||
from eth2spec.test.helpers.fulu.fork import ( | ||
FULU_FORK_TEST_META_TAGS, | ||
run_fork_test, | ||
) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_base_state(spec, phases, state): | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_next_epoch(spec, phases, state): | ||
next_epoch(spec, state) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_next_epoch_with_block(spec, phases, state): | ||
next_epoch_via_block(spec, state) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_many_next_epoch(spec, phases, state): | ||
for _ in range(3): | ||
next_epoch(spec, state) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@with_custom_state(balances_fn=low_balances, threshold_fn=lambda spec: spec.config.EJECTION_BALANCE) | ||
@spec_test | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_random_low_balances(spec, phases, state): | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@with_custom_state(balances_fn=misc_balances, threshold_fn=lambda spec: spec.config.EJECTION_BALANCE) | ||
@spec_test | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_random_misc_balances(spec, phases, state): | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@with_presets([MINIMAL], | ||
reason="mainnet config leads to larger validator set than limit of public/private keys pre-generated") | ||
@with_custom_state(balances_fn=large_validator_set, threshold_fn=lambda spec: spec.config.EJECTION_BALANCE) | ||
@spec_test | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fork_random_large_validator_set(spec, phases, state): | ||
yield from run_fork_test(phases[FULU], state) |
84 changes: 84 additions & 0 deletions
84
tests/core/pyspec/eth2spec/test/fulu/fork/test_fulu_fork_random.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
from random import Random | ||
|
||
from eth2spec.test.context import ( | ||
with_phases, | ||
with_custom_state, | ||
with_presets, | ||
spec_test, with_state, | ||
low_balances, misc_balances, large_validator_set, | ||
) | ||
from eth2spec.test.utils import with_meta_tags | ||
from eth2spec.test.helpers.constants import ( | ||
ELECTRA, FULU, | ||
MINIMAL, | ||
) | ||
from eth2spec.test.helpers.fulu.fork import ( | ||
FULU_FORK_TEST_META_TAGS, | ||
run_fork_test, | ||
) | ||
from eth2spec.test.helpers.random import randomize_state | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_0(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(1010)) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_1(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(2020)) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_2(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(3030)) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_state | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_3(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(4040)) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_custom_state(balances_fn=low_balances, threshold_fn=lambda spec: spec.config.EJECTION_BALANCE) | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_low_balances(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(5050)) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@spec_test | ||
@with_custom_state(balances_fn=misc_balances, threshold_fn=lambda spec: spec.config.EJECTION_BALANCE) | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_misc_balances(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(6060)) | ||
yield from run_fork_test(phases[FULU], state) | ||
|
||
|
||
@with_phases(phases=[ELECTRA], other_phases=[FULU]) | ||
@with_presets([MINIMAL], | ||
reason="mainnet config leads to larger validator set than limit of public/private keys pre-generated") | ||
@spec_test | ||
@with_custom_state(balances_fn=large_validator_set, threshold_fn=lambda spec: spec.config.EJECTION_BALANCE) | ||
@with_meta_tags(FULU_FORK_TEST_META_TAGS) | ||
def test_fulu_fork_random_large_validator_set(spec, phases, state): | ||
randomize_state(spec, state, rng=Random(7070)) | ||
yield from run_fork_test(phases[FULU], state) |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
from eth2spec.test.helpers.constants import ( | ||
FULU, | ||
) | ||
|
||
|
||
FULU_FORK_TEST_META_TAGS = { | ||
'fork': FULU, | ||
} | ||
|
||
|
||
def run_fork_test(post_spec, pre_state): | ||
yield 'pre', pre_state | ||
|
||
post_state = post_spec.upgrade_to_fulu(pre_state) | ||
|
||
# Stable fields | ||
stable_fields = [ | ||
'genesis_time', 'genesis_validators_root', 'slot', | ||
# History | ||
'latest_block_header', 'block_roots', 'state_roots', 'historical_roots', | ||
# Eth1 | ||
'eth1_data', 'eth1_data_votes', 'eth1_deposit_index', | ||
# Registry | ||
# NOTE: 'validators', 'balances' could be changed. | ||
# Randomness | ||
'randao_mixes', | ||
# Slashings | ||
'slashings', | ||
# Participation | ||
'previous_epoch_participation', 'current_epoch_participation', | ||
# Finality | ||
'justification_bits', 'previous_justified_checkpoint', 'current_justified_checkpoint', 'finalized_checkpoint', | ||
# Inactivity | ||
'inactivity_scores', | ||
# Sync | ||
'current_sync_committee', 'next_sync_committee', | ||
# Withdrawals | ||
'next_withdrawal_index', 'next_withdrawal_validator_index', | ||
# Deep history valid from Capella onwards | ||
'historical_summaries', | ||
'latest_execution_payload_header' | ||
|
||
] | ||
for field in stable_fields: | ||
assert getattr(pre_state, field) == getattr(post_state, field) | ||
|
||
# Modified fields | ||
modified_fields = ['fork'] | ||
for field in modified_fields: | ||
assert getattr(pre_state, field) != getattr(post_state, field) | ||
|
||
assert len(pre_state.validators) == len(post_state.validators) | ||
for pre_validator, post_validator in zip(pre_state.validators, post_state.validators): | ||
stable_validator_fields = [ | ||
'pubkey', 'withdrawal_credentials', | ||
'slashed', | ||
'activation_epoch', 'exit_epoch', 'withdrawable_epoch', | ||
] | ||
for field in stable_validator_fields: | ||
assert getattr(pre_validator, field) == getattr(post_validator, field) | ||
|
||
assert pre_state.fork.current_version == post_state.fork.previous_version | ||
assert post_state.fork.current_version == post_spec.config.FULU_FORK_VERSION | ||
assert post_state.fork.epoch == post_spec.get_current_epoch(post_state) | ||
|
||
yield 'post', post_state | ||
|
||
return post_state |