migrations: Enable deployment and data seeding to Bloxberg
This commit is contained in:
97
apps/cic-eth/tests/filters/test_token_filter.py
Normal file
97
apps/cic-eth/tests/filters/test_token_filter.py
Normal file
@@ -0,0 +1,97 @@
|
||||
# external imports
|
||||
from eth_erc20 import ERC20
|
||||
from chainlib.connection import RPCConnection
|
||||
from chainlib.eth.nonce import RPCNonceOracle
|
||||
from chainlib.eth.gas import (
|
||||
Gas,
|
||||
OverrideGasOracle,
|
||||
)
|
||||
from chainlib.eth.tx import (
|
||||
TxFormat,
|
||||
receipt,
|
||||
raw,
|
||||
unpack,
|
||||
Tx,
|
||||
)
|
||||
from chainlib.eth.block import (
|
||||
Block,
|
||||
block_latest,
|
||||
block_by_number,
|
||||
)
|
||||
from chainlib.eth.address import is_same_address
|
||||
from chainlib.eth.contract import ABIContractEncoder
|
||||
from hexathon import strip_0x
|
||||
from eth_token_index import TokenUniqueSymbolIndex
|
||||
|
||||
# local imports
|
||||
from cic_eth.runnable.daemons.filters.token import TokenFilter
|
||||
from cic_eth.db.models.gas_cache import GasCache
|
||||
from cic_eth.db.models.base import SessionBase
|
||||
|
||||
|
||||
def test_filter_gas(
|
||||
default_chain_spec,
|
||||
init_database,
|
||||
eth_rpc,
|
||||
eth_signer,
|
||||
contract_roles,
|
||||
agent_roles,
|
||||
token_roles,
|
||||
foo_token,
|
||||
token_registry,
|
||||
register_lookups,
|
||||
celery_session_worker,
|
||||
cic_registry,
|
||||
):
|
||||
|
||||
rpc = RPCConnection.connect(default_chain_spec, 'default')
|
||||
nonce_oracle = RPCNonceOracle(token_roles['FOO_TOKEN_OWNER'], eth_rpc)
|
||||
gas_oracle = OverrideGasOracle(price=1000000000, limit=1000000)
|
||||
c = ERC20(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
||||
(tx_hash_hex, tx_signed_raw_hex) = c.transfer(foo_token, token_roles['FOO_TOKEN_OWNER'], agent_roles['ALICE'], 100, tx_format=TxFormat.RLP_SIGNED)
|
||||
o = raw(tx_signed_raw_hex)
|
||||
eth_rpc.do(o)
|
||||
o = receipt(tx_hash_hex)
|
||||
rcpt = eth_rpc.do(o)
|
||||
assert rcpt['status'] == 1
|
||||
|
||||
fltr = TokenFilter(default_chain_spec, queue=None, call_address=agent_roles['ALICE'])
|
||||
|
||||
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)
|
||||
tx.apply_receipt(rcpt)
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
assert t == None
|
||||
|
||||
nonce_oracle = RPCNonceOracle(contract_roles['CONTRACT_DEPLOYER'], eth_rpc)
|
||||
c = TokenUniqueSymbolIndex(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle)
|
||||
(tx_hash_hex_register, o) = c.register(token_registry, contract_roles['CONTRACT_DEPLOYER'], foo_token)
|
||||
eth_rpc.do(o)
|
||||
o = receipt(tx_hash_hex)
|
||||
r = eth_rpc.do(o)
|
||||
assert r['status'] == 1
|
||||
|
||||
t = fltr.filter(eth_rpc, block, tx, db_session=init_database)
|
||||
r = t.get_leaf()
|
||||
assert t.successful()
|
||||
|
||||
q = init_database.query(GasCache)
|
||||
q = q.filter(GasCache.tx_hash==strip_0x(tx_hash_hex))
|
||||
o = q.first()
|
||||
|
||||
assert is_same_address(o.address, strip_0x(foo_token))
|
||||
assert o.value > 0
|
||||
|
||||
enc = ABIContractEncoder()
|
||||
enc.method('transfer')
|
||||
method = enc.get()
|
||||
|
||||
assert o.method == method
|
||||
@@ -103,11 +103,11 @@ def test_tag_account(
|
||||
|
||||
api = AdminApi(eth_rpc, queue=None)
|
||||
|
||||
t = api.tag_account('foo', agent_roles['ALICE'], default_chain_spec)
|
||||
t = api.tag_account(default_chain_spec, 'foo', agent_roles['ALICE'])
|
||||
t.get()
|
||||
t = api.tag_account('bar', agent_roles['BOB'], default_chain_spec)
|
||||
t = api.tag_account(default_chain_spec, 'bar', agent_roles['BOB'])
|
||||
t.get()
|
||||
t = api.tag_account('bar', agent_roles['CAROL'], default_chain_spec)
|
||||
t = api.tag_account(default_chain_spec, 'bar', agent_roles['CAROL'])
|
||||
t.get()
|
||||
|
||||
assert AccountRole.get_address('foo', init_database) == tx_normalize.wallet_address(agent_roles['ALICE'])
|
||||
|
||||
@@ -141,9 +141,57 @@ def test_role_task(
|
||||
)
|
||||
t = s.apply_async()
|
||||
r = t.get()
|
||||
assert r == 'foo'
|
||||
assert r[0][0] == address
|
||||
assert r[0][1] == 'foo'
|
||||
|
||||
|
||||
def test_get_role_task(
|
||||
init_database,
|
||||
celery_session_worker,
|
||||
default_chain_spec,
|
||||
):
|
||||
address_foo = '0x' + os.urandom(20).hex()
|
||||
role_foo = AccountRole.set('foo', address_foo)
|
||||
init_database.add(role_foo)
|
||||
|
||||
address_bar = '0x' + os.urandom(20).hex()
|
||||
role_bar = AccountRole.set('bar', address_bar)
|
||||
init_database.add(role_bar)
|
||||
|
||||
init_database.commit()
|
||||
|
||||
s = celery.signature(
|
||||
'cic_eth.eth.account.role_account',
|
||||
[
|
||||
'bar',
|
||||
default_chain_spec.asdict(),
|
||||
],
|
||||
queue=None,
|
||||
)
|
||||
t = s.apply_async()
|
||||
r = t.get()
|
||||
assert r[0][0] == address_bar
|
||||
assert r[0][1] == 'bar'
|
||||
|
||||
s = celery.signature(
|
||||
'cic_eth.eth.account.role_account',
|
||||
[
|
||||
None,
|
||||
default_chain_spec.asdict(),
|
||||
],
|
||||
queue=None,
|
||||
)
|
||||
t = s.apply_async()
|
||||
r = t.get()
|
||||
x_tags = ['foo', 'bar']
|
||||
x_addrs = [address_foo, address_bar]
|
||||
|
||||
for v in r:
|
||||
x_addrs.remove(v[0])
|
||||
x_tags.remove(v[1])
|
||||
|
||||
assert len(x_tags) == 0
|
||||
assert len(x_addrs) == 0
|
||||
|
||||
def test_gift(
|
||||
init_database,
|
||||
|
||||
Reference in New Issue
Block a user