run process yield-from test pattern

This commit is contained in:
protolambda 2019-05-24 14:58:06 +02:00
parent f2e3cd01aa
commit 73f0f74fb0
No known key found for this signature in database
GPG Key ID: EC89FDBB2B4C7623
1 changed files with 26 additions and 10 deletions

View File

@ -5,10 +5,34 @@ from eth2spec.phase0.spec import (
is_active_validator, is_active_validator,
process_registry_updates process_registry_updates
) )
from eth2spec.phase0.state_transition import state_transition
from eth2spec.test.helpers.block import build_empty_block_for_next_slot, sign_block
from eth2spec.test.helpers.state import next_epoch from eth2spec.test.helpers.state import next_epoch
from eth2spec.test.context import spec_state_test from eth2spec.test.context import spec_state_test
def run_process_registry_updates(state, valid=True):
"""
Run ``process_crosslinks``, yielding:
- pre-state ('pre')
- post-state ('post').
If ``valid == False``, run expecting ``AssertionError``
"""
# transition state to slot before state transition
slot = state.slot + (spec.SLOTS_PER_EPOCH - state.slot % spec.SLOTS_PER_EPOCH) - 1
block = build_empty_block_for_next_slot(state, signed=False)
block.slot = slot
sign_block(state, block)
state_transition(state, block)
# cache state before epoch transition
spec.cache_state(state)
yield 'pre', state
process_registry_updates(state)
yield 'post', state
@spec_state_test @spec_state_test
def test_activation(state): def test_activation(state):
index = 0 index = 0
@ -23,11 +47,7 @@ def test_activation(state):
for _ in range(spec.ACTIVATION_EXIT_DELAY + 1): for _ in range(spec.ACTIVATION_EXIT_DELAY + 1):
next_epoch(state) next_epoch(state)
yield 'pre', state yield from run_process_registry_updates(state)
process_registry_updates(state)
yield 'post', state
assert state.validator_registry[index].activation_eligibility_epoch != spec.FAR_FUTURE_EPOCH assert state.validator_registry[index].activation_eligibility_epoch != spec.FAR_FUTURE_EPOCH
assert state.validator_registry[index].activation_epoch != spec.FAR_FUTURE_EPOCH assert state.validator_registry[index].activation_epoch != spec.FAR_FUTURE_EPOCH
@ -49,11 +69,7 @@ def test_ejection(state):
for _ in range(spec.ACTIVATION_EXIT_DELAY + 1): for _ in range(spec.ACTIVATION_EXIT_DELAY + 1):
next_epoch(state) next_epoch(state)
yield 'pre', state yield from run_process_registry_updates(state)
process_registry_updates(state)
yield 'post', state
assert state.validator_registry[index].exit_epoch != spec.FAR_FUTURE_EPOCH assert state.validator_registry[index].exit_epoch != spec.FAR_FUTURE_EPOCH
assert not is_active_validator( assert not is_active_validator(