chainqueue

Blockchain transaction queue control
Log | Files | Refs | LICENSE

commit 01b674d09ec0a0b2392a5389fc606c70446a0d53
parent 0fa12adfa1ddccc183edbb9307757f15109e0672
Author: lash <dev@holbrook.no>
Date:   Sun, 10 Apr 2022 14:00:01 +0000

Add change test for chainqueue entry

Diffstat:
Mchainqueue/entry.py | 3++-
Mchainqueue/store/base.py | 4++++
Mtests/base_shep.py | 3+++
Mtests/test_entry.py | 22++++++++++++++++++++++
Mtests/test_shep.py | 1+
5 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/chainqueue/entry.py b/chainqueue/entry.py @@ -115,7 +115,8 @@ class QueueEntry: def fail(self, block, tx): if self.__match_state(self.store.NETWORK_ERROR): return - self.store.set(self.k, self.store.NETWORK_ERROR) + v = self.store.state(self.k) + self.store.change(self.k, v | self.store.NETWORK_ERROR, self.store.QUEUED) if self.store.cache: self.store.cache.set_block(self.tx_hash, block, tx) diff --git a/chainqueue/store/base.py b/chainqueue/store/base.py @@ -1,11 +1,14 @@ # standard imports import re import datetime +import logging # local imports from chainqueue.cache import CacheTx from chainqueue.entry import QueueEntry +logg = logging.getLogger(__name__) + def to_key(t, n, k): return '{}_{}_{}'.format(t, n, k) @@ -125,6 +128,7 @@ class Store: def final(self, k, block, tx, error=False): entry = QueueEntry(self, k) entry.load() + logg.debug('entry {} {}'.format(k, entry.k)) if error: entry.fail(block, tx) else: diff --git a/tests/base_shep.py b/tests/base_shep.py @@ -2,6 +2,7 @@ import tempfile import unittest import shutil +import logging # external imports from shep.store.file import SimpleFileStoreFactory @@ -19,6 +20,7 @@ from tests.common import ( MockContentStore, ) +logg = logging.getLogger(__name__) class TestShepBase(unittest.TestCase): @@ -30,6 +32,7 @@ class TestShepBase(unittest.TestCase): counter = MockCounter() chain_spec = ChainSpec('foo', 'bar', 42, 'baz') self.store = Store(chain_spec, self.state, content_store, counter) + logg.debug('using path {}'.format(self.path)) def tearDown(self): diff --git a/tests/test_entry.py b/tests/test_entry.py @@ -5,6 +5,8 @@ import unittest # external imports from hexathon import add_0x +from chainlib.tx import Tx +from chainlib.block import Block # local imports from chainqueue import QueueEntry @@ -59,5 +61,25 @@ class TestEntry(TestShepBase): self.assertEqual(len(txs), 1) + def test_entry_change(self): + signed_tx = add_0x(os.urandom(128).hex()) + nonce = 42 + entry = QueueEntry(self.store, cache_adapter=MockCacheTokenTx) + tx_hash = entry.create(signed_tx) + + block = Block() + block.number = 13 + tx = Tx(None) + tx.index = 666 + + entry.readysend() + entry.reserve() + entry.sendfail() + + entry = QueueEntry(self.store, tx_hash, cache_adapter=MockCacheTokenTx) + entry.load() + self.assertEqual(str(entry), tx_hash + ': SENDFAIL') + + if __name__ == '__main__': unittest.main() diff --git a/tests/test_shep.py b/tests/test_shep.py @@ -55,5 +55,6 @@ class TestShep(TestShepBase): self.store.put('bar', cache_adapter=MockCacheTokenTx) + if __name__ == '__main__': unittest.main()