Skip to content
This repository has been archived by the owner on Jul 1, 2021. It is now read-only.

Commit

Permalink
PR feedback, thanks to CC
Browse files Browse the repository at this point in the history
  • Loading branch information
hwwhww committed May 13, 2019
1 parent 3f34749 commit c94a515
Showing 1 changed file with 52 additions and 27 deletions.
79 changes: 52 additions & 27 deletions tests/eth2/beacon/state-fixtures/test_minimal_state.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
import os
from pathlib import Path
import yaml
try:
from yaml import CLoader as Loader
except ImportError:
from yaml import Loader
import pytest

from py_ecc import bls
from eth_utils import (
to_tuple,
)
from py_ecc import bls # noqa: F401
from ssz.tools import (
from_formatted_dict,
to_formatted_dict,
)


from eth2.configs import (
Eth2Config,
)
Expand All @@ -22,21 +30,19 @@
)

# Test files
ROOT_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
ROOT_PROJECT_DIR = Path(__file__).cwd()

BASE_FIXTURE_PATH = os.path.join(ROOT_PROJECT_DIR, '../../', 'eth2-fixtures', 'state')
BASE_FIXTURE_PATH = ROOT_PROJECT_DIR / 'eth2-fixtures' / 'state'

FILE_NAMES = [
FIXTURE_FILE_NAMES = [
"sanity-check_small-config_32-vals.yaml",
"sanity-check_default-config_100-vals.yaml",
# "sanity-check_default-config_100-vals.yaml",
]


#
# Mock bls verification for these tests
#
bls = bls


def mock_bls_verify(message_hash, pubkey, signature, domain):
return True

Expand All @@ -50,51 +56,72 @@ def mock_bls_verify_multiple(pubkeys,

@pytest.fixture(autouse=True)
def mock_bls(mocker, request):
if 'noautofixt' in request.keywords:
if 'noautofixture' in request.keywords:
return

mocker.patch('py_ecc.bls.verify', side_effect=mock_bls_verify)
mocker.patch('py_ecc.bls.verify_multiple', side_effect=mock_bls_verify_multiple)


def get_test_case(file_names):
all_test_cases = []
#
# Helpers for generating test suite
#
def get_all_test_cases(file_names):
test_cases = []
for file_name in file_names:
with open(BASE_FIXTURE_PATH + '/' + file_name, 'U') as f:
file_to_open = BASE_FIXTURE_PATH / file_name
with open(file_to_open, 'U') as f:
# TODO: `proof_of_possession` is used in v0.5.1 spec and will be renamed to `signature`
# Trinity renamed it ahead due to py-ssz signing_root requirements
new_text = f.read().replace('proof_of_possession', 'signature')
try:
data = yaml.load(new_text)
all_test_cases += data['test_cases']
data = yaml.load(new_text, Loader=Loader)
test_cases += data['test_cases']
except yaml.YAMLError as exc:
print(exc)
return all_test_cases
return test_cases


test_cases = get_test_case(FILE_NAMES)
def state_fixture_mark_fn(fixture_name):
if fixture_name == 'test_transfer':
return pytest.mark.skip(reason="has not implemented")
else:
return None


@pytest.mark.parametrize("test_case", test_cases)
@to_tuple
def get_test_cases(fixture_file_names):
test_cases = get_all_test_cases(fixture_file_names)
for test_case in test_cases:
test_name = test_case['name']
mark = state_fixture_mark_fn(test_name)
if mark is not None:
yield pytest.param(test_case, id=test_name, marks=(mark,))
else:
yield pytest.param(test_case, id=test_name)


all_test_cases = get_test_cases(FIXTURE_FILE_NAMES)


@pytest.mark.parametrize(
"test_case",
all_test_cases
)
def test_state(base_db, test_case):
test_name = test_case['name']
if test_name == 'test_transfer':
print('skip')
else:
execute_state_transtion(test_case, base_db)
execute_state_transtion(test_case, base_db)


def generate_config_by_dict(dict_config):
dict_config['DEPOSIT_CONTRACT_ADDRESS'] = b'\x00' * 20
for key in list(dict_config):
if 'DOMAIN_' in key in key:
if 'DOMAIN_' in key:
# DOMAIN is defined in SignatureDomain
dict_config.pop(key, None)
return Eth2Config(**dict_config)


def execute_state_transtion(test_case, base_db):
test_name = test_case['name']
dict_config = test_case['config']
verify_signatures = test_case['verify_signatures']
dict_initial_state = test_case['initial_state']
Expand All @@ -104,8 +131,6 @@ def execute_state_transtion(test_case, base_db):
# TODO: make it case by case
assert verify_signatures is False

print(f"[{test_name}]")

# Set config
config = generate_config_by_dict(dict_config)

Expand Down

0 comments on commit c94a515

Please sign in to comment.