Add tx cache test

This commit is contained in:
nolash 2021-04-02 10:48:54 +02:00
parent a5078a7e37
commit b501450827
Signed by: lash
GPG Key ID: 21D2E7BB88C2A746
5 changed files with 44 additions and 14 deletions

View File

@ -23,6 +23,7 @@ def upgrade():
sa.Column('otx_id', sa.Integer, sa.ForeignKey('otx.id'), nullable=True),
sa.Column('date_created', sa.DateTime, nullable=False),
sa.Column('date_updated', sa.DateTime, nullable=False),
sa.Column('date_checked', sa.DateTime, nullable=False),
sa.Column('source_token_address', sa.String(42), nullable=False),
sa.Column('destination_token_address', sa.String(42), nullable=False),
sa.Column('sender', sa.String(42), nullable=False),

View File

@ -562,10 +562,3 @@ class Otx(SessionBase):
self.tx_hash = strip_0x(tx_hash)
self.signed_tx = strip_0x(signed_tx)
self.status = StatusEnum.PENDING
#signed_tx_bytes = bytes.fromhex(strip_0x(signed_tx))
#signed_tx_bytes = bytes.fromhex(strip_0x(tx_hash))
# sender_address = address_hex_from_signed_tx(signed_tx_bytes)
# logg.debug('decoded tx {}'.format(sender_address))

View File

@ -1,18 +1,18 @@
# standard imports
import datetime
# third-party imports
# external imports
from sqlalchemy import Column, String, Integer, DateTime, Enum, ForeignKey, Boolean, NUMERIC
from sqlalchemy.ext.hybrid import hybrid_method, hybrid_property
#from sqlalchemy.orm import relationship, backref
#from sqlalchemy.ext.declarative import declarative_base
from hexathon import (
strip_0x,
)
# local imports
from .base import SessionBase
from .otx import Otx
from cic_eth.db.util import num_serialize
from cic_eth.error import NotLocalTxError
from cic_eth.db.error import TxStateChangeError
from chainqueue.error import NotLocalTxError
from chainqueue.db.error import TxStateChangeError
class TxCache(SessionBase):
@ -127,7 +127,7 @@ class TxCache(SessionBase):
def __init__(self, tx_hash, sender, recipient, source_token_address, destination_token_address, from_value, to_value, block_number=None, tx_index=None, session=None):
session = SessionBase.bind_session(session)
q = session.query(Otx)
q = q.filter(Otx.tx_hash==tx_hash)
q = q.filter(Otx.tx_hash==strip_0x(tx_hash))
tx = q.first()
if tx == None:
SessionBase.release_session(session)

4
chainqueue/error.py Normal file
View File

@ -0,0 +1,4 @@
class NotLocalTxError(Exception):
"""Exception raised when trying to access a tx not originated from a local task
"""
pass

View File

@ -11,6 +11,7 @@ from hexathon import (
# local imports
from chainqueue.db.models.otx import Otx
from chainqueue.db.models.tx import TxCache
# test imports
from tests.base import TestBase
@ -33,5 +34,36 @@ class TestBasic(TestBase):
self.session.add(otx)
def test_tx(self):
tx_hash = add_0x(os.urandom(32).hex())
tx = add_0x(os.urandom(128).hex())
nonce = 42
otx = Otx(nonce, tx_hash, tx)
self.session.add(otx)
alice = add_0x(os.urandom(20).hex())
bob = add_0x(os.urandom(20).hex())
foo_token = add_0x(os.urandom(20).hex())
bar_token = add_0x(os.urandom(20).hex())
from_value = 13
to_value = 666
block_number = 1024
tx_index = 1337
txc = TxCache(
tx_hash,
alice,
bob,
foo_token,
bar_token,
from_value,
to_value,
block_number=block_number,
tx_index=tx_index,
session=self.session,
)
self.session.add(txc)
if __name__ == '__main__':
unittest.main()