169 lines
4.1 KiB
Python
169 lines
4.1 KiB
Python
# standard imports
|
|
import logging
|
|
import os
|
|
|
|
# third-party imports
|
|
import celery
|
|
import pytest
|
|
|
|
# local imports
|
|
import cic_eth
|
|
from cic_eth.db.models.lock import Lock
|
|
from cic_eth.db.enum import StatusEnum
|
|
from cic_eth.db.enum import LockEnum
|
|
from cic_eth.error import LockedError
|
|
from cic_eth.queue.tx import create as queue_create
|
|
from cic_eth.queue.tx import set_sent_status
|
|
from cic_eth.eth.tx import cache_gas_refill_data
|
|
from cic_eth.error import PermanentTxError
|
|
from cic_eth.queue.tx import get_tx
|
|
from cic_eth.eth.task import sign_tx
|
|
|
|
logg = logging.getLogger()
|
|
|
|
|
|
# TODO: There is no
|
|
def test_send_reject(
|
|
default_chain_spec,
|
|
init_w3,
|
|
mocker,
|
|
init_database,
|
|
celery_session_worker,
|
|
):
|
|
|
|
nonce = init_w3.eth.getTransactionCount(init_w3.eth.accounts[0], 'pending')
|
|
tx = {
|
|
'from': init_w3.eth.accounts[0],
|
|
'to': init_w3.eth.accounts[1],
|
|
'nonce': nonce,
|
|
'gas': 21000,
|
|
'gasPrice': 1000000,
|
|
'value': 128,
|
|
'chainId': default_chain_spec.chain_id(),
|
|
'data': '',
|
|
}
|
|
|
|
chain_str = str(default_chain_spec)
|
|
|
|
(tx_hash_hex, tx_signed_raw_hex) = sign_tx(tx, chain_str)
|
|
queue_create(tx['nonce'], tx['from'], tx_hash_hex, tx_signed_raw_hex, str(default_chain_spec))
|
|
cache_gas_refill_data(tx_hash_hex, tx)
|
|
s = celery.signature(
|
|
'cic_eth.eth.tx.send',
|
|
[
|
|
[tx_signed_raw_hex],
|
|
chain_str,
|
|
],
|
|
)
|
|
t = s.apply_async()
|
|
r = t.get()
|
|
|
|
|
|
def test_sync_tx(
|
|
default_chain_spec,
|
|
init_database,
|
|
init_w3,
|
|
init_wallet_extension,
|
|
init_eth_tester,
|
|
celery_session_worker,
|
|
eth_empty_accounts,
|
|
):
|
|
|
|
nonce = init_w3.eth.getTransactionCount(init_w3.eth.accounts[0], 'pending')
|
|
tx = {
|
|
'from': init_w3.eth.accounts[0],
|
|
'to': init_w3.eth.accounts[1],
|
|
'nonce': nonce,
|
|
'gas': 21000,
|
|
'gasPrice': 1000000,
|
|
'value': 128,
|
|
'chainId': default_chain_spec.chain_id(),
|
|
'data': '',
|
|
}
|
|
|
|
chain_str = str(default_chain_spec)
|
|
|
|
(tx_hash_hex, tx_signed_raw_hex) = sign_tx(tx, chain_str)
|
|
queue_create(tx['nonce'], tx['from'], tx_hash_hex, tx_signed_raw_hex, str(default_chain_spec))
|
|
cache_gas_refill_data(tx_hash_hex, tx)
|
|
|
|
init_w3.eth.send_raw_transaction(tx_signed_raw_hex)
|
|
|
|
s = celery.signature(
|
|
'cic_eth.eth.tx.sync_tx',
|
|
[
|
|
tx_hash_hex,
|
|
chain_str,
|
|
],
|
|
queue=None
|
|
)
|
|
t = s.apply_async()
|
|
r = t.get()
|
|
for _ in t.collect():
|
|
pass
|
|
assert t.successful()
|
|
|
|
tx_dict = get_tx(tx_hash_hex)
|
|
assert tx_dict['status'] == StatusEnum.SENT
|
|
|
|
init_eth_tester.mine_block()
|
|
|
|
s = celery.signature(
|
|
'cic_eth.eth.tx.sync_tx',
|
|
[
|
|
tx_hash_hex,
|
|
chain_str,
|
|
],
|
|
queue=None
|
|
)
|
|
t = s.apply_async()
|
|
r = t.get()
|
|
for _ in t.collect():
|
|
pass
|
|
assert t.successful()
|
|
|
|
tx_dict = get_tx(tx_hash_hex)
|
|
assert tx_dict['status'] == StatusEnum.SUCCESS
|
|
|
|
|
|
|
|
def test_resume_tx(
|
|
default_chain_spec,
|
|
init_database,
|
|
init_w3,
|
|
celery_session_worker,
|
|
):
|
|
|
|
tx = {
|
|
'from': init_w3.eth.accounts[0],
|
|
'to': init_w3.eth.accounts[1],
|
|
'nonce': 42 ,
|
|
'gas': 21000,
|
|
'gasPrice': 1000000,
|
|
'value': 128,
|
|
'chainId': default_chain_spec.chain_id(),
|
|
'data': '',
|
|
}
|
|
tx_signed = init_w3.eth.sign_transaction(tx)
|
|
tx_hash = init_w3.keccak(hexstr=tx_signed['raw'])
|
|
tx_hash_hex = tx_hash.hex()
|
|
queue_create(tx['nonce'], tx['from'], tx_hash_hex, tx_signed['raw'], str(default_chain_spec))
|
|
cache_gas_refill_data(tx_hash_hex, tx)
|
|
|
|
set_sent_status(tx_hash_hex, True)
|
|
|
|
s = celery.signature(
|
|
'cic_eth.eth.tx.resume_tx',
|
|
[
|
|
tx_hash_hex,
|
|
str(default_chain_spec),
|
|
],
|
|
)
|
|
t = s.apply_async()
|
|
t.get()
|
|
for r in t.collect():
|
|
logg.debug('collect {}'.format(r))
|
|
assert t.successful()
|
|
|
|
|