commit 6201420ad2c0d0794fa963b2073a1b0e2240ab2a
parent 987a18fd6b55b3d1a0e80c3b4be12ee781edee1f
Author: nolash <dev@holbrook.no>
Date: Thu, 15 Apr 2021 15:27:19 +0200
Use mock conn and process method from headsyncer in testsyncer
Diffstat:
3 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/chainsyncer/driver.py b/chainsyncer/driver.py
@@ -92,6 +92,9 @@ class BlockPollSyncer(Syncer):
if self.pre_callback != None:
self.pre_callback()
while True and Syncer.running_global:
+ if start_tx > 0:
+ start_tx -= 1
+ continue
try:
block = self.get(conn)
except SyncDone as e:
@@ -108,8 +111,6 @@ class BlockPollSyncer(Syncer):
self.block_callback(block, None)
last_block = block
- if start_tx > 0:
- block.txs = block.txs[start_tx:]
self.process(conn, block)
start_tx = 0
time.sleep(self.yield_delay)
@@ -121,8 +122,8 @@ class BlockPollSyncer(Syncer):
class HeadSyncer(BlockPollSyncer):
def process(self, conn, block):
- logg.debug('process block {}'.format(block))
(pair, fltr) = self.backend.get()
+ logg.debug('process block {} (backend {}:{})'.format(block, pair, fltr))
i = pair[1] # set tx index from previous
tx = None
while True:
@@ -137,6 +138,7 @@ class HeadSyncer(BlockPollSyncer):
tx.apply_receipt(rcpt)
self.process_single(conn, block, tx)
+ self.backend.reset_filter()
i += 1
diff --git a/chainsyncer/unittest/base.py b/chainsyncer/unittest/base.py
@@ -12,6 +12,13 @@ from chainsyncer.error import NoBlockForYou
logg = logging.getLogger().getChild(__name__)
+
+class MockConn:
+
+ def do(self, o):
+ pass
+
+
class MockTx:
def __init__(self, index, tx_hash):
@@ -19,6 +26,10 @@ class MockTx:
self.index = index
+ def apply_receipt(self, rcpt):
+ self.rcpt = rcpt
+
+
class MockBlock:
def __init__(self, number, txs):
@@ -54,13 +65,3 @@ class TestSyncer(HistorySyncer):
block_txs.append(add_0x(os.urandom(32).hex()))
return MockBlock(block_height, block_txs)
-
-
- # TODO: implement mock conn instead, and use HeadSyncer.process
- def process(self, conn, block):
- i = 0
- for tx in block.txs:
- self.process_single(conn, block, block.tx(i))
- self.backend.reset_filter()
- i += 1
- self.backend.set(block.number + 1, 0)
diff --git a/tests/test_interrupt.py b/tests/test_interrupt.py
@@ -14,6 +14,7 @@ from chainsyncer.backend.sql import SyncerBackend
from tests.base import TestBase
from chainsyncer.unittest.base import (
MockBlock,
+ MockConn,
TestSyncer,
)
@@ -63,27 +64,28 @@ class TestInterrupt(TestBase):
self.filters = [
CountFilter('foo'),
CountFilter('bar'),
- NaughtyCountExceptionFilter('xyzzy', 3),
+ NaughtyCountExceptionFilter('xyzzy', croak_on=3),
CountFilter('baz'),
]
self.backend = None
+ self.conn = MockConn()
def assert_filter_interrupt(self):
- syncer = TestSyncer(self.backend, [4, 2, 3])
+ syncer = TestSyncer(self.backend, [4, 3, 2])
for fltr in self.filters:
syncer.add_filter(fltr)
try:
- syncer.loop(0.1, None)
+ syncer.loop(0.1, self.conn)
except RuntimeError:
logg.info('caught croak')
pass
(pair, fltr) = self.backend.get()
self.assertGreater(fltr, 0)
- syncer.loop(0.1, None)
+ syncer.loop(0.1, self.conn)
for fltr in self.filters:
logg.debug('{} {}'.format(str(fltr), fltr.c))