# standard imports import unittest import logging # external imports from chainlib.chain import ChainSpec # local imports from chainsyncer.backend.memory import MemBackend from chainsyncer.driver.threadrange import ( range_to_backends, ThreadPoolRangeHistorySyncer, ) from chainsyncer.unittest.base import MockConn # testutil imports from tests.chainsyncer_base import TestBase logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() class TestThreadRange(TestBase): def test_range_split_even(self): chain_spec = ChainSpec('evm', 'bloxberg', 8996, 'foo') backends = range_to_backends(chain_spec, 5, 3, 20, 5, 10, MemBackend, 3) self.assertEqual(len(backends), 3) self.assertEqual(((5, 3), 5), backends[0].start()) self.assertEqual((9, 1023), backends[0].target()) self.assertEqual(((10, 0), 0), backends[1].start()) self.assertEqual((14, 1023), backends[1].target()) self.assertEqual(((15, 0), 0), backends[2].start()) self.assertEqual((19, 1023), backends[2].target()) def test_range_split_underflow(self): chain_spec = ChainSpec('evm', 'bloxberg', 8996, 'foo') backends = range_to_backends(chain_spec, 5, 3, 7, 5, 10, MemBackend, 3) self.assertEqual(len(backends), 2) self.assertEqual(((5, 3), 5), backends[0].start()) self.assertEqual((5, 1023), backends[0].target()) self.assertEqual(((6, 0), 0), backends[1].start()) self.assertEqual((6, 1023), backends[1].target()) def test_range_syncer(self): chain_spec = ChainSpec('evm', 'bloxberg', 8996, 'foo') backends = range_to_backends(chain_spec, 5, 3, 20, 5, 10, MemBackend, 3) syncer = ThreadPoolRangeHistorySyncer(MockConn, 3, backends, self.interface) syncer.loop(1, None) if __name__ == '__main__': unittest.main()