mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-01-26 10:29:07 +00:00
Merge pull request #814 from ethereum/fix-header-tests
fix and extend header tests
This commit is contained in:
commit
422c607f74
@ -4,6 +4,8 @@ import pytest
|
|||||||
|
|
||||||
from build.phase0.spec import (
|
from build.phase0.spec import (
|
||||||
get_beacon_proposer_index,
|
get_beacon_proposer_index,
|
||||||
|
cache_state,
|
||||||
|
advance_slot,
|
||||||
process_block_header,
|
process_block_header,
|
||||||
)
|
)
|
||||||
from tests.phase0.helpers import (
|
from tests.phase0.helpers import (
|
||||||
@ -14,13 +16,56 @@ from tests.phase0.helpers import (
|
|||||||
pytestmark = pytest.mark.header
|
pytestmark = pytest.mark.header
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_state_for_header_processing(state):
|
||||||
|
cache_state(state)
|
||||||
|
advance_slot(state)
|
||||||
|
|
||||||
|
|
||||||
|
def run_block_header_processing(state, block, valid=True):
|
||||||
|
"""
|
||||||
|
Run ``process_block_header`` returning the pre and post state.
|
||||||
|
If ``valid == False``, run expecting ``AssertionError``
|
||||||
|
"""
|
||||||
|
prepare_state_for_header_processing(state)
|
||||||
|
post_state = deepcopy(state)
|
||||||
|
|
||||||
|
if not valid:
|
||||||
|
with pytest.raises(AssertionError):
|
||||||
|
process_block_header(post_state, block)
|
||||||
|
return state, None
|
||||||
|
|
||||||
|
process_block_header(post_state, block)
|
||||||
|
return state, post_state
|
||||||
|
|
||||||
|
|
||||||
|
def test_success(state):
|
||||||
|
block = build_empty_block_for_next_slot(state)
|
||||||
|
pre_state, post_state = run_block_header_processing(state, block)
|
||||||
|
return state, block, post_state
|
||||||
|
|
||||||
|
|
||||||
|
def test_invalid_slot(state):
|
||||||
|
block = build_empty_block_for_next_slot(state)
|
||||||
|
block.slot = state.slot + 2 # invalid slot
|
||||||
|
|
||||||
|
pre_state, post_state = run_block_header_processing(state, block, valid=False)
|
||||||
|
return pre_state, block, None
|
||||||
|
|
||||||
|
|
||||||
|
def test_invalid_previous_block_root(state):
|
||||||
|
block = build_empty_block_for_next_slot(state)
|
||||||
|
block.previous_block_root = b'\12'*32 # invalid prev root
|
||||||
|
|
||||||
|
pre_state, post_state = run_block_header_processing(state, block, valid=False)
|
||||||
|
return pre_state, block, None
|
||||||
|
|
||||||
|
|
||||||
def test_proposer_slashed(state):
|
def test_proposer_slashed(state):
|
||||||
pre_state = deepcopy(state)
|
# set proposer to slashed
|
||||||
|
proposer_index = get_beacon_proposer_index(state, state.slot + 1)
|
||||||
|
state.validator_registry[proposer_index].slashed = True
|
||||||
|
|
||||||
block = build_empty_block_for_next_slot(pre_state)
|
block = build_empty_block_for_next_slot(state)
|
||||||
proposer_index = get_beacon_proposer_index(pre_state, block.slot)
|
|
||||||
pre_state.validator_registry[proposer_index].slashed = True
|
|
||||||
with pytest.raises(AssertionError):
|
|
||||||
process_block_header(pre_state, block)
|
|
||||||
|
|
||||||
return state, [block], None
|
pre_state, post_state = run_block_header_processing(state, block, valid=False)
|
||||||
|
return pre_state, block, None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user