New filter interface, add state step stubs

This commit is contained in:
lash
2022-03-17 10:09:12 +00:00
parent 2ba87de195
commit af47e31cc8
4 changed files with 90 additions and 121 deletions

View File

@@ -11,15 +11,20 @@ from chainsyncer.session import SyncSession
class MockStore(State):
def __init__(self, bits):
def __init__(self, bits=0):
super(MockStore, self).__init__(bits, check_alias=False)
class MockFilter:
def __init__(self, z, name):
self.z = z
def __init__(self, name, brk=False, z=None):
self.name = name
if z == None:
h = hashlib.sha256()
h.update(self.name.encode('utf-8'))
z = h.digest()
self.z = z
self.brk = brk
def sum(self):
@@ -30,43 +35,59 @@ class MockFilter:
return self.name
def filter(self, conn, block, tx):
return self.brk
class TestSync(unittest.TestCase):
def setUp(self):
self.store = MockStore(6)
self.state = SyncState(self.store)
def test_basic(self):
session = SyncSession(self.state)
store = MockStore(6)
state = SyncState(store)
session = SyncSession(None, state)
self.assertTrue(session.is_default)
session = SyncSession(self.state, session_id='foo')
session = SyncSession(None, state, session_id='foo')
self.assertFalse(session.is_default)
def test_sum(self):
store = MockStore(4)
state = SyncState(store)
b = b'\x2a' * 32
fltr = MockFilter(b, name='foo')
self.state.register(fltr)
fltr = MockFilter('foo', z=b)
state.register(fltr)
b = b'\x0d' * 31
fltr = MockFilter(b, name='bar')
fltr = MockFilter('bar', z=b)
with self.assertRaises(ValueError):
self.state.register(fltr)
state.register(fltr)
b = b'\x0d' * 32
fltr = MockFilter(b, name='bar')
self.state.register(fltr)
fltr = MockFilter('bar', z=b)
state.register(fltr)
v = self.state.sum()
v = state.sum()
self.assertEqual(v.hex(), 'a24abf9fec112b4e0210ae874b4a371f8657b1ee0d923ad6d974aef90bad8550')
def test_session_start(self):
session = SyncSession(self.state)
store = MockStore(6)
state = SyncState(store)
session = SyncSession(None, state)
session.start()
def test_state_dynamic(self):
store = MockStore()
state = SyncState(store)
b = b'\x0d' * 32
fltr = MockFilter(name='foo', z=b)
state.register(fltr)
if __name__ == '__main__':
unittest.main()