Port new fixtures, registry setup in tests

This commit is contained in:
nolash 2021-03-15 19:46:37 +01:00
parent a6fd20124c
commit be3a2e7b2d
Signed by untrusted user who does not match committer: lash
GPG Key ID: 21D2E7BB88C2A746
6 changed files with 228 additions and 2 deletions

View File

@ -10,5 +10,6 @@ sys.path.insert(0, root_dir)
from tests.fixtures_config import *
from tests.fixtures_celery import *
from tests.fixtures_database import *
from tests.fixtures_registry import *
from chainlib.pytest.fixtures_ethtester import *
from tests.fixtures_contracts import *
from chainlib.eth.pytest import *
from cic_registry.pytest import *

View File

@ -0,0 +1,35 @@
# standard imports
import json
import hashlib
# external imports
import pytest
from eth_accounts_index import AccountRegistry
from chainlib.eth.nonce import NodeNonceOracle
from hexathon import add_0x
# local imports
from cic_registry.registry import Registry
from cic_registry.encoding import to_identifier
@pytest.fixture(scope='function')
def accounts_registry(
registry,
eth_signer,
eth_rpc,
accounts,
default_chain_spec,
default_chain_config,
):
nonce_oracle = NodeNonceOracle(accounts[0], eth_rpc)
c = Registry(signer=eth_rpc.signer, nonce_oracle=nonce_oracle)
chain_spec_identifier = to_identifier(str(default_chain_spec))
h = hashlib.new('sha256')
j = json.dumps(default_chain_config)
h.update(j.encode('utf-8'))
z = h.digest()
chain_config_digest = add_0x(z.hex())
o = c.set(registry, accounts[0], 'AccountsRegistry', accounts[1], chain_spec_identifier, chain_config_digest)

View File

View File

@ -0,0 +1,137 @@
# standard imports
import os
import logging
import time
# third-party imports
import pytest
import celery
from chainlib.eth.connection import RPCConnection
import logging_tree
from eth_keys import KeyAPI
# local imports
from cic_eth.error import OutOfGasError
from cic_eth.db.models.otx import Otx
from cic_eth.db.models.base import SessionBase
from cic_eth.db.enum import StatusEnum
from cic_eth.db.enum import StatusEnum
from cic_eth.db.models.nonce import Nonce
from cic_eth.db.models.role import AccountRole
from cic_eth.eth.account import AccountTxFactory
logg = logging.getLogger()
def test_create_account(
default_chain_spec,
init_rpc,
init_database,
celery_session_worker,
caplog,
):
s = celery.signature(
'cic_eth.eth.account.create',
[
'foo',
str(default_chain_spec),
],
)
t = s.apply_async()
r = t.get()
session = SessionBase.create_session()
q = session.query(Nonce).filter(Nonce.address_hex==r)
o = q.first()
session.close()
assert o != None
assert o.nonce == 0
s = celery.signature(
'cic_eth.eth.account.have',
[
r,
str(default_chain_spec),
],
)
t = s.apply_async()
assert r == t.get()
def test_register_account(
default_chain_spec,
accounts_registry,
init_database,
accounts,
rpc,
cic_registry,
celery_session_worker,
empty_accounts,
):
logg.debug('chainspec {}'.format(str(default_chain_spec)))
s_nonce = celery.signature(
'cic_eth.eth.tx.reserve_nonce',
[
empty_accounts[0],
accounts[0],
],
queue=None,
)
s_register = celery.signature(
'cic_eth.eth.account.register',
[
str(default_chain_spec),
init_w3.eth.accounts[0],
],
)
s_nonce.link(s_register)
t = s_nonce.apply_async()
address = t.get()
for r in t.collect():
pass
assert t.successful()
session = SessionBase.create_session()
o = session.query(Otx).first()
tx_signed_hex = o.signed_tx
session.close()
s_send = celery.signature(
'cic_eth.eth.tx.send',
[
[tx_signed_hex],
str(default_chain_spec),
],
)
t = s_send.apply_async()
address = t.get()
r = t.collect()
t.successful()
init_eth_tester.mine_block()
assert accounts_registry.have(eth_empty_accounts[0])
def test_role_task(
init_database,
celery_session_worker,
default_chain_spec,
):
address = '0x' + os.urandom(20).hex()
role = AccountRole.set('foo', address)
init_database.add(role)
init_database.commit()
s = celery.signature(
'cic_eth.eth.account.role',
[
address,
str(default_chain_spec),
],
)
t = s.apply_async()
r = t.get()
assert r == 'foo'

View File

@ -0,0 +1,49 @@
# standard imports
import logging
# external imports
from chainlib.eth.connection import RPCConnection
from chainlib.eth.gas import (
balance,
price,
)
from chainlib.eth.tx import (
count_pending,
count_confirmed,
)
from chainlib.eth.sign import (
sign_message,
)
logg = logging.getLogger(__name__)
def test_init_eth_tester(
accounts,
init_eth_tester,
init_rpc,
):
conn = RPCConnection.connect()
o = balance(accounts[0])
conn.do(o)
o = price()
conn.do(o)
o = count_pending(accounts[0])
conn.do(o)
o = count_confirmed(accounts[0])
conn.do(o)
def test_signer(
init_eth_tester,
init_rpc,
accounts,
):
o = sign_message(accounts[0], '0x2a')
conn = RPCConnection.connect('signer')
r = conn.do(o)

View File

@ -0,0 +1,4 @@
def test_registry(
accounts_registry,
):
pass