add committee progress tests for non genesis case

This commit is contained in:
Danny Ryan 2021-04-15 12:19:51 -05:00
parent 2ac19be198
commit 81a83898cf
No known key found for this signature in database
GPG Key ID: 2765A792E42CE07A

View File

@ -1,7 +1,11 @@
from eth2spec.test.context import ( from eth2spec.test.context import (
spec_state_test, spec_state_test,
spec_test,
with_all_phases_except, with_all_phases_except,
with_configs, with_configs,
with_custom_state,
single_phase,
misc_balances,
) )
from eth2spec.test.helpers.constants import ( from eth2spec.test.helpers.constants import (
PHASE0, PHASE0,
@ -13,20 +17,12 @@ from eth2spec.test.helpers.epoch_processing import (
) )
@with_all_phases_except([PHASE0]) def run_sync_committees_progress_test(spec, state):
@spec_state_test
@with_configs([MINIMAL], reason="too slow")
def test_sync_committees_progress(spec, state):
current_epoch = spec.get_current_epoch(state)
# NOTE: if not in the genesis epoch, period math below needs to be
# adjusted relative to the current epoch
assert current_epoch == 0
first_sync_committee = state.current_sync_committee first_sync_committee = state.current_sync_committee
second_sync_committee = state.next_sync_committee second_sync_committee = state.next_sync_committee
slot_at_end_of_current_period = spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH - 1 end_slot_of_current_period = state.slot + spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH - 1
transition_to(spec, state, slot_at_end_of_current_period) transition_to(spec, state, end_slot_of_current_period)
# Ensure assignments have not changed: # Ensure assignments have not changed:
assert state.current_sync_committee == first_sync_committee assert state.current_sync_committee == first_sync_committee
@ -36,7 +32,39 @@ def test_sync_committees_progress(spec, state):
# Can compute the third committee having computed final balances in the last epoch # Can compute the third committee having computed final balances in the last epoch
# of this `EPOCHS_PER_SYNC_COMMITTEE_PERIOD` # of this `EPOCHS_PER_SYNC_COMMITTEE_PERIOD`
third_sync_committee = spec.get_sync_committee(state, 2 * spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD) current_epoch = spec.get_current_epoch(state)
third_sync_committee = spec.get_sync_committee(state, current_epoch + 2 * spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD)
assert state.current_sync_committee == second_sync_committee assert state.current_sync_committee == second_sync_committee
assert state.next_sync_committee == third_sync_committee assert state.next_sync_committee == third_sync_committee
@with_all_phases_except([PHASE0])
@spec_state_test
@with_configs([MINIMAL], reason="too slow")
def test_sync_committees_progress_genesis(spec, state):
# Genesis epoch period has an exceptional case
spec.get_current_epoch(state)
assert spec.get_current_epoch(state) == spec.GENESIS_EPOCH
yield from run_sync_committees_progress_test(spec, state)
@with_all_phases_except([PHASE0])
@spec_state_test
@with_configs([MINIMAL], reason="too slow")
def test_sync_committees_progress_not_genesis(spec, state):
# Transition out of the genesis epoch period to test non-exceptional case
start_slot_of_next_period = state.slot + spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH
transition_to(spec, state, start_slot_of_next_period)
yield from run_sync_committees_progress_test(spec, state)
@with_all_phases_except([PHASE0])
@with_custom_state(balances_fn=misc_balances, threshold_fn=lambda spec: spec.EJECTION_BALANCE)
@spec_test
@single_phase
@with_configs([MINIMAL], reason="too slow")
def test_sync_committees_progress_misc_balances(spec, state):
yield from run_sync_committees_progress_test(spec, state)