Complete syncitem filter advance
This commit is contained in:
@@ -1,50 +1,21 @@
|
||||
# standard imports
|
||||
import unittest
|
||||
import hashlib
|
||||
import tempfile
|
||||
import shutil
|
||||
import logging
|
||||
|
||||
# external imports
|
||||
from shep.state import State
|
||||
|
||||
# local imports
|
||||
from chainsyncer.session import SyncSession
|
||||
from chainsyncer.state import SyncState
|
||||
from chainsyncer.store.fs import SyncFsStore
|
||||
from chainsyncer.unittest import (
|
||||
MockStore,
|
||||
MockFilter,
|
||||
)
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logg = logging.getLogger()
|
||||
|
||||
class MockStore(State):
|
||||
|
||||
def __init__(self, bits=0):
|
||||
super(MockStore, self).__init__(bits, check_alias=False)
|
||||
|
||||
|
||||
class MockFilter:
|
||||
|
||||
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):
|
||||
return self.z
|
||||
|
||||
|
||||
def common_name(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def filter(self, conn, block, tx):
|
||||
return self.brk
|
||||
|
||||
|
||||
class TestSync(unittest.TestCase):
|
||||
|
||||
@@ -64,7 +35,7 @@ class TestSync(unittest.TestCase):
|
||||
|
||||
|
||||
def test_sum(self):
|
||||
store = MockStore(4)
|
||||
store = MockStore(6)
|
||||
state = SyncState(store)
|
||||
|
||||
b = b'\x2a' * 32
|
||||
|
||||
@@ -8,6 +8,13 @@ import os
|
||||
|
||||
# local imports
|
||||
from chainsyncer.store.fs import SyncFsStore
|
||||
from chainsyncer.session import SyncSession
|
||||
from chainsyncer.error import (
|
||||
LockError,
|
||||
FilterDone,
|
||||
IncompleteFilterError,
|
||||
)
|
||||
from chainsyncer.unittest import MockFilter
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logg = logging.getLogger()
|
||||
@@ -69,8 +76,97 @@ class TestFs(unittest.TestCase):
|
||||
store = SyncFsStore(self.path)
|
||||
store.start(13)
|
||||
self.assertTrue(store.first)
|
||||
# todo not done
|
||||
|
||||
|
||||
def test_sync_process_nofilter(self):
|
||||
store = SyncFsStore(self.path)
|
||||
session = SyncSession(store)
|
||||
session.start()
|
||||
o = session.get(0)
|
||||
with self.assertRaises(FilterDone):
|
||||
o.advance()
|
||||
|
||||
|
||||
def test_sync_process_onefilter(self):
|
||||
store = SyncFsStore(self.path)
|
||||
session = SyncSession(store)
|
||||
|
||||
fltr_one = MockFilter('foo')
|
||||
session.register(fltr_one)
|
||||
|
||||
session.start()
|
||||
o = session.get(0)
|
||||
o.advance()
|
||||
o.release()
|
||||
|
||||
|
||||
def test_sync_process_outoforder(self):
|
||||
store = SyncFsStore(self.path)
|
||||
session = SyncSession(store)
|
||||
|
||||
fltr_one = MockFilter('foo')
|
||||
session.register(fltr_one)
|
||||
fltr_two = MockFilter('two')
|
||||
session.register(fltr_two)
|
||||
|
||||
session.start()
|
||||
o = session.get(0)
|
||||
o.advance()
|
||||
with self.assertRaises(LockError):
|
||||
o.advance()
|
||||
|
||||
o.release()
|
||||
with self.assertRaises(LockError):
|
||||
o.release()
|
||||
|
||||
o.advance()
|
||||
o.release()
|
||||
|
||||
|
||||
def test_sync_process_interrupt(self):
|
||||
store = SyncFsStore(self.path)
|
||||
session = SyncSession(store)
|
||||
|
||||
fltr_one = MockFilter('foo')
|
||||
session.register(fltr_one)
|
||||
fltr_two = MockFilter('bar')
|
||||
session.register(fltr_two)
|
||||
|
||||
session.start()
|
||||
o = session.get(0)
|
||||
o.advance()
|
||||
o.release(interrupt=True)
|
||||
with self.assertRaises(FilterDone):
|
||||
o.advance()
|
||||
|
||||
|
||||
def test_sync_process_reset(self):
|
||||
store = SyncFsStore(self.path)
|
||||
session = SyncSession(store)
|
||||
|
||||
fltr_one = MockFilter('foo')
|
||||
session.register(fltr_one)
|
||||
fltr_two = MockFilter('bar')
|
||||
session.register(fltr_two)
|
||||
|
||||
session.start()
|
||||
o = session.get(0)
|
||||
o.advance()
|
||||
with self.assertRaises(LockError):
|
||||
o.reset()
|
||||
o.release()
|
||||
with self.assertRaises(IncompleteFilterError):
|
||||
o.reset()
|
||||
|
||||
o.advance()
|
||||
o.release()
|
||||
|
||||
with self.assertRaises(FilterDone):
|
||||
o.advance()
|
||||
|
||||
o.reset()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user