Skip to content

Commit

Permalink
Merge pull request #814 from ethereum/fix-header-tests
Browse files Browse the repository at this point in the history
fix and extend header tests
  • Loading branch information
djrtwo committed Mar 20, 2019
2 parents 74e4f05 + f4012ee commit 422c607
Showing 1 changed file with 52 additions and 7 deletions.
59 changes: 52 additions & 7 deletions tests/phase0/block_processing/test_process_block_header.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

from build.phase0.spec import (
get_beacon_proposer_index,
cache_state,
advance_slot,
process_block_header,
)
from tests.phase0.helpers import (
Expand All @@ -14,13 +16,56 @@
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):
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)
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)
block = build_empty_block_for_next_slot(state)

return state, [block], None
pre_state, post_state = run_block_header_processing(state, block, valid=False)
return pre_state, block, None

0 comments on commit 422c607

Please sign in to comment.