WIP session filter interrupt test
This commit is contained in:
parent
045c120439
commit
a3517d0203
@ -124,6 +124,7 @@ class SyncDriver:
|
|||||||
|
|
||||||
|
|
||||||
def process_single(self, conn, block, tx):
|
def process_single(self, conn, block, tx):
|
||||||
|
logg.debug('single')
|
||||||
self.session.filter(conn, block, tx)
|
self.session.filter(conn, block, tx)
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,6 +15,10 @@ from chainsyncer.driver import SyncDriver
|
|||||||
logg = logging.getLogger().getChild(__name__)
|
logg = logging.getLogger().getChild(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class MockFilterError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MockConn:
|
class MockConn:
|
||||||
"""Noop connection mocker.
|
"""Noop connection mocker.
|
||||||
|
|
||||||
@ -82,7 +86,7 @@ class MockStore(State):
|
|||||||
|
|
||||||
class MockFilter:
|
class MockFilter:
|
||||||
|
|
||||||
def __init__(self, name, brk=False, z=None):
|
def __init__(self, name, brk=None, brk_hard=None, z=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
if z == None:
|
if z == None:
|
||||||
h = hashlib.sha256()
|
h = hashlib.sha256()
|
||||||
@ -90,6 +94,7 @@ class MockFilter:
|
|||||||
z = h.digest()
|
z = h.digest()
|
||||||
self.z = z
|
self.z = z
|
||||||
self.brk = brk
|
self.brk = brk
|
||||||
|
self.brk_hard = brk_hard
|
||||||
self.contents = []
|
self.contents = []
|
||||||
|
|
||||||
|
|
||||||
@ -102,8 +107,21 @@ class MockFilter:
|
|||||||
|
|
||||||
|
|
||||||
def filter(self, conn, block, tx):
|
def filter(self, conn, block, tx):
|
||||||
|
r = False
|
||||||
self.contents.append((block.number, tx.index, tx.hash,))
|
self.contents.append((block.number, tx.index, tx.hash,))
|
||||||
return self.brk
|
if self.brk_hard != None:
|
||||||
|
r = True
|
||||||
|
if self.brk_hard > 0:
|
||||||
|
r = True
|
||||||
|
self.brk_hard -= 1
|
||||||
|
if r:
|
||||||
|
raise MockFilterError()
|
||||||
|
if self.brk != None:
|
||||||
|
if self.brk > 0:
|
||||||
|
r = True
|
||||||
|
self.brk -= 1
|
||||||
|
logg.debug('filter {} r {}'.format(self.common_name(), r))
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
class MockDriver(SyncDriver):
|
class MockDriver(SyncDriver):
|
||||||
|
@ -21,6 +21,7 @@ from chainsyncer.unittest import (
|
|||||||
MockTx,
|
MockTx,
|
||||||
MockBlock,
|
MockBlock,
|
||||||
MockDriver,
|
MockDriver,
|
||||||
|
MockFilterError,
|
||||||
)
|
)
|
||||||
from chainsyncer.driver import SyncDriver
|
from chainsyncer.driver import SyncDriver
|
||||||
|
|
||||||
@ -81,5 +82,36 @@ class TestFilter(unittest.TestCase):
|
|||||||
self.assertEqual(len(fltr_one.contents), 3)
|
self.assertEqual(len(fltr_one.contents), 3)
|
||||||
|
|
||||||
|
|
||||||
|
def test_driver_interrupt(self):
|
||||||
|
drv = MockDriver(self.store, target=1)
|
||||||
|
|
||||||
|
tx_hash = os.urandom(32).hex()
|
||||||
|
tx = MockTx(0, tx_hash)
|
||||||
|
block = MockBlock(0, [tx_hash])
|
||||||
|
drv.add_block(block)
|
||||||
|
|
||||||
|
fltr_one = MockFilter('foo', brk_hard=1)
|
||||||
|
self.store.register(fltr_one)
|
||||||
|
fltr_two = MockFilter('bar')
|
||||||
|
self.store.register(fltr_two)
|
||||||
|
|
||||||
|
with self.assertRaises(MockFilterError):
|
||||||
|
drv.run(self.conn)
|
||||||
|
|
||||||
|
store = SyncFsStore(self.path)
|
||||||
|
drv = MockDriver(store, target=1)
|
||||||
|
drv.add_block(block)
|
||||||
|
|
||||||
|
tx_hash_one = os.urandom(32).hex()
|
||||||
|
tx = MockTx(0, tx_hash_one)
|
||||||
|
tx_hash_two = os.urandom(32).hex()
|
||||||
|
tx = MockTx(1, tx_hash_two)
|
||||||
|
block = MockBlock(1, [tx_hash_one, tx_hash_two])
|
||||||
|
drv.add_block(block)
|
||||||
|
|
||||||
|
with self.assertRaises(SyncDone):
|
||||||
|
drv.run(self.conn)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user