Add register filter test
This commit is contained in:
parent
989a0cb976
commit
740c1f7b91
@ -50,7 +50,8 @@ class RegistrationFilter(SyncFilter):
|
|||||||
queue=self.queue,
|
queue=self.queue,
|
||||||
)
|
)
|
||||||
s_nonce.link(s_gift)
|
s_nonce.link(s_gift)
|
||||||
s_nonce.apply_async()
|
t = s_nonce.apply_async()
|
||||||
|
return t
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -21,6 +21,7 @@ from tests.fixtures_config import *
|
|||||||
from tests.fixtures_database import *
|
from tests.fixtures_database import *
|
||||||
from tests.fixtures_celery import *
|
from tests.fixtures_celery import *
|
||||||
from tests.fixtures_role import *
|
from tests.fixtures_role import *
|
||||||
|
from tests.fixtures_contract import *
|
||||||
from chainlib.eth.pytest import *
|
from chainlib.eth.pytest import *
|
||||||
from eth_contract_registry.pytest import *
|
from eth_contract_registry.pytest import *
|
||||||
from cic_eth_registry.pytest.fixtures_contracts import *
|
from cic_eth_registry.pytest.fixtures_contracts import *
|
||||||
@ -80,3 +81,5 @@ def have_redis(
|
|||||||
return e
|
return e
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
38
apps/cic-eth/tests/filters/test_filter_bogus.py
Normal file
38
apps/cic-eth/tests/filters/test_filter_bogus.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# local imports
|
||||||
|
from cic_eth.runnable.daemons.filters.gas import GasFilter
|
||||||
|
from cic_eth.runnable.daemons.filters.transferauth import TransferAuthFilter
|
||||||
|
from cic_eth.runnable.daemons.filters.callback import CallbackFilter
|
||||||
|
from cic_eth.runnable.daemons.filters.straggler import StragglerFilter
|
||||||
|
from cic_eth.runnable.daemons.filters.tx import TxFilter
|
||||||
|
from cic_eth.runnable.daemons.filters.register import RegistrationFilter
|
||||||
|
|
||||||
|
|
||||||
|
# Hit tx mismatch paths on all filters
|
||||||
|
def test_filter_bogus(
|
||||||
|
init_database,
|
||||||
|
bogus_tx_block,
|
||||||
|
default_chain_spec,
|
||||||
|
eth_rpc,
|
||||||
|
eth_signer,
|
||||||
|
transfer_auth,
|
||||||
|
cic_registry,
|
||||||
|
contract_roles,
|
||||||
|
register_lookups,
|
||||||
|
):
|
||||||
|
|
||||||
|
fltrs = [
|
||||||
|
TransferAuthFilter(cic_registry, default_chain_spec, eth_rpc, call_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||||
|
GasFilter(default_chain_spec, queue=None),
|
||||||
|
TxFilter(default_chain_spec, None),
|
||||||
|
CallbackFilter(default_chain_spec, None, None, caller_address=contract_roles['CONTRACT_DEPLOYER']),
|
||||||
|
StragglerFilter(default_chain_spec, None),
|
||||||
|
RegistrationFilter(default_chain_spec, queue=None),
|
||||||
|
]
|
||||||
|
|
||||||
|
for fltr in fltrs:
|
||||||
|
r = None
|
||||||
|
try:
|
||||||
|
r = fltr.filter(eth_rpc, bogus_tx_block[0], bogus_tx_block[1], db_session=init_database)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
assert not r
|
78
apps/cic-eth/tests/filters/test_register_filter.py
Normal file
78
apps/cic-eth/tests/filters/test_register_filter.py
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# external imports
|
||||||
|
from eth_accounts_index.registry import AccountRegistry
|
||||||
|
from chainlib.connection import RPCConnection
|
||||||
|
from chainlib.eth.nonce import RPCNonceOracle
|
||||||
|
from chainlib.eth.gas import OverrideGasOracle
|
||||||
|
from chainlib.eth.tx import(
|
||||||
|
receipt,
|
||||||
|
unpack,
|
||||||
|
Tx,
|
||||||
|
)
|
||||||
|
from chainlib.eth.block import (
|
||||||
|
block_latest,
|
||||||
|
block_by_number,
|
||||||
|
Block,
|
||||||
|
)
|
||||||
|
from erc20_faucet import Faucet
|
||||||
|
from hexathon import strip_0x
|
||||||
|
from chainqueue.query import get_account_tx
|
||||||
|
|
||||||
|
# local imports
|
||||||
|
from cic_eth.runnable.daemons.filters.register import RegistrationFilter
|
||||||
|
|
||||||
|
|
||||||
|
def test_register_filter(
|
||||||
|
default_chain_spec,
|
||||||
|
init_database,
|
||||||
|
eth_rpc,
|
||||||
|
eth_signer,
|
||||||
|
account_registry,
|
||||||
|
faucet,
|
||||||
|
register_lookups,
|
||||||
|
contract_roles,
|
||||||
|
agent_roles,
|
||||||
|
cic_registry,
|
||||||
|
init_celery_tasks,
|
||||||
|
celery_session_worker,
|
||||||
|
caplog,
|
||||||
|
):
|
||||||
|
|
||||||
|
nonce_oracle = RPCNonceOracle(contract_roles['ACCOUNT_REGISTRY_WRITER'], conn=eth_rpc)
|
||||||
|
gas_oracle = OverrideGasOracle(limit=AccountRegistry.gas(), conn=eth_rpc)
|
||||||
|
|
||||||
|
c = AccountRegistry(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
||||||
|
(tx_hash_hex, o) = c.add(account_registry, contract_roles['ACCOUNT_REGISTRY_WRITER'], agent_roles['ALICE'])
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
tx_signed_raw_bytes = bytes.fromhex(strip_0x(o['params'][0]))
|
||||||
|
|
||||||
|
o = receipt(tx_hash_hex)
|
||||||
|
rcpt = eth_rpc.do(o)
|
||||||
|
assert rcpt['status'] == 1
|
||||||
|
|
||||||
|
o = block_latest()
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
o = block_by_number(r, include_tx=False)
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
block = Block(r)
|
||||||
|
block.txs = [tx_hash_hex]
|
||||||
|
|
||||||
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
|
tx = Tx(tx_src, block=block, rcpt=rcpt)
|
||||||
|
tx.apply_receipt(rcpt)
|
||||||
|
|
||||||
|
fltr = RegistrationFilter(default_chain_spec, queue=None)
|
||||||
|
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||||
|
|
||||||
|
t.get_leaf()
|
||||||
|
assert t.successful()
|
||||||
|
|
||||||
|
gift_txs = get_account_tx(default_chain_spec.asdict(), agent_roles['ALICE'], as_sender=True, session=init_database)
|
||||||
|
ks = list(gift_txs.keys())
|
||||||
|
assert len(ks) == 1
|
||||||
|
|
||||||
|
tx_raw_signed_hex = strip_0x(gift_txs[ks[0]])
|
||||||
|
tx_raw_signed_bytes = bytes.fromhex(tx_raw_signed_hex)
|
||||||
|
gift_tx = unpack(tx_raw_signed_bytes, default_chain_spec)
|
||||||
|
|
||||||
|
gift = Faucet.parse_give_to_request(gift_tx['data'])
|
||||||
|
assert gift[0] == agent_roles['ALICE']
|
@ -31,6 +31,7 @@ def test_filter_transferauth(
|
|||||||
transfer_auth,
|
transfer_auth,
|
||||||
foo_token,
|
foo_token,
|
||||||
celery_session_worker,
|
celery_session_worker,
|
||||||
|
register_lookups,
|
||||||
init_custodial,
|
init_custodial,
|
||||||
cic_registry,
|
cic_registry,
|
||||||
):
|
):
|
||||||
|
77
apps/cic-eth/tests/fixtures_contract.py
Normal file
77
apps/cic-eth/tests/fixtures_contract.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# standard imports
|
||||||
|
import os
|
||||||
|
|
||||||
|
# external imports
|
||||||
|
import pytest
|
||||||
|
from chainlib.eth.contract import (
|
||||||
|
ABIContractEncoder,
|
||||||
|
ABIContractType,
|
||||||
|
)
|
||||||
|
from chainlib.eth.nonce import RPCNonceOracle
|
||||||
|
from chainlib.eth.gas import OverrideGasOracle
|
||||||
|
from chainlib.eth.block import (
|
||||||
|
block_latest,
|
||||||
|
block_by_number,
|
||||||
|
Block,
|
||||||
|
)
|
||||||
|
from chainlib.eth.tx import (
|
||||||
|
receipt,
|
||||||
|
TxFactory,
|
||||||
|
TxFormat,
|
||||||
|
unpack,
|
||||||
|
Tx,
|
||||||
|
)
|
||||||
|
from hexathon import strip_0x
|
||||||
|
|
||||||
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
root_dir = os.path.dirname(script_dir)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='function')
|
||||||
|
def bogus_tx_block(
|
||||||
|
default_chain_spec,
|
||||||
|
eth_rpc,
|
||||||
|
eth_signer,
|
||||||
|
contract_roles,
|
||||||
|
):
|
||||||
|
|
||||||
|
nonce_oracle = RPCNonceOracle(contract_roles['CONTRACT_DEPLOYER'], conn=eth_rpc)
|
||||||
|
gas_oracle = OverrideGasOracle(limit=2000000, conn=eth_rpc)
|
||||||
|
|
||||||
|
f = open(os.path.join(script_dir, 'testdata', 'Bogus.bin'), 'r')
|
||||||
|
bytecode = f.read()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
c = TxFactory(default_chain_spec, signer=eth_signer, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle)
|
||||||
|
tx = c.template(contract_roles['CONTRACT_DEPLOYER'], None, use_nonce=True)
|
||||||
|
tx = c.set_code(tx, bytecode)
|
||||||
|
(tx_hash_hex, o) = c.build(tx)
|
||||||
|
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
|
||||||
|
o = receipt(tx_hash_hex)
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
|
||||||
|
contract_address = r['contract_address']
|
||||||
|
|
||||||
|
enc = ABIContractEncoder()
|
||||||
|
enc.method('poke')
|
||||||
|
data = enc.get()
|
||||||
|
tx = c.template(contract_roles['CONTRACT_DEPLOYER'], contract_address, use_nonce=True)
|
||||||
|
tx = c.set_code(tx, data)
|
||||||
|
(tx_hash_hex, o) = c.finalize(tx, TxFormat.JSONRPC)
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
tx_signed_raw_hex = strip_0x(o['params'][0])
|
||||||
|
|
||||||
|
o = block_latest()
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
o = block_by_number(r, include_tx=False)
|
||||||
|
r = eth_rpc.do(o)
|
||||||
|
block = Block(r)
|
||||||
|
block.txs = [tx_hash_hex]
|
||||||
|
|
||||||
|
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||||||
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||||||
|
tx = Tx(tx_src, block=block)
|
||||||
|
|
||||||
|
return (block, tx)
|
@ -156,6 +156,7 @@ def test_gift(
|
|||||||
eth_signer,
|
eth_signer,
|
||||||
init_celery_tasks,
|
init_celery_tasks,
|
||||||
cic_registry,
|
cic_registry,
|
||||||
|
register_lookups,
|
||||||
celery_session_worker,
|
celery_session_worker,
|
||||||
):
|
):
|
||||||
|
|
||||||
|
1
apps/cic-eth/tests/testdata/Bogus.bin
vendored
Normal file
1
apps/cic-eth/tests/testdata/Bogus.bin
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
60806040526000805534801561001457600080fd5b50610181806100246000396000f3fe608060405234801561001057600080fd5b5060043610610053576000357c0100000000000000000000000000000000000000000000000000000000900480630dbe671f146100585780631817835814610076575b600080fd5b610060610080565b60405161006d91906100ae565b60405180910390f35b61007e610086565b005b60005481565b600080815480929190610098906100d3565b9190505550565b6100a8816100c9565b82525050565b60006020820190506100c3600083018461009f565b92915050565b6000819050919050565b60006100de826100c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156101115761011061011c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122034ad8e91e864f030d47f5b93e281869206c1b203c36dc79a209ac9c9c16e577564736f6c63430008040033
|
10
apps/cic-eth/tests/testdata/Bogus.sol
vendored
Normal file
10
apps/cic-eth/tests/testdata/Bogus.sol
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
pragma solidity ^0.8.0;
|
||||||
|
|
||||||
|
contract Bogus {
|
||||||
|
|
||||||
|
uint256 public a = 0;
|
||||||
|
|
||||||
|
function poke() public {
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user