@ -4,25 +4,61 @@ import logging
# external imports
from chainlib . chain import ChainSpec
from chainlib . eth . unittest . ethtester import EthTesterCase
from chainlib . eth . nonce import RPCNonceOracle
from chainlib . eth . gas import (
RPCGasOracle ,
Gas ,
)
from chainlib . eth . unittest . base import TestRPCConnection
# local imports
from chainsyncer . backend . memory import MemBackend
from chainsyncer . driver . threadrange import (
# range_to_backends,
sync_split ,
ThreadPoolRangeHistorySyncer ,
)
from chainsyncer . unittest . base import MockConn
from chainsyncer . unittest . db import ChainSyncerDb
# testutil imports
from tests . chainsyncer_base import TestBase
from tests . chainsyncer_base import (
EthChainInterface ,
)
logging . basicConfig ( level = logging . DEBUG )
logg = logging . getLogger ( )
class TestThreadRange ( TestBase ) :
class SyncerCounter :
def __init__ ( self ) :
self . hits = [ ]
def filter ( self , conn , block , tx , db_session = None ) :
logg . debug ( ' fltr {} {} ' . format ( block , tx ) )
self . hits . append ( ( block , tx ) )
class TestBaseEth ( EthTesterCase ) :
interface = EthChainInterface ( )
def setUp ( self ) :
super ( TestBaseEth , self ) . setUp ( )
self . db = ChainSyncerDb ( )
self . session = self . db . bind_session ( )
def tearDown ( self ) :
self . session . commit ( )
self . db . release_session ( self . session )
#os.unlink(self.db_path)
class TestThreadRange ( TestBaseEth ) :
interface = EthChainInterface ( )
def test_range_split_even ( self ) :
ranges = sync_split ( 5 , 20 , 3 )
@ -31,41 +67,46 @@ class TestThreadRange(TestBase):
self . assertEqual ( ranges [ 1 ] , ( 10 , 14 ) )
self . assertEqual ( ranges [ 2 ] , ( 15 , 19 ) )
# 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)
#
def test_range_syncer ( self ) :
def test_range_split_underflow ( self ) :
ranges = sync_split ( 5 , 8 , 4 )
self . assertEqual ( len ( ranges ) , 3 )
self . assertEqual ( ranges [ 0 ] , ( 5 , 5 ) )
self . assertEqual ( ranges [ 1 ] , ( 6 , 6 ) )
self . assertEqual ( ranges [ 2 ] , ( 7 , 7 ) )
def test_range_syncer_hello ( self ) :
chain_spec = ChainSpec ( ' evm ' , ' bloxberg ' , 8996 , ' foo ' )
backend = MemBackend . custom ( chain_spec , 20 , 5 , 3 , 5 , 10 )
syncer = ThreadPoolRangeHistorySyncer ( MockConn , 3 , backend , self . interface )
syncer . loop ( 0.1 , None )
def test_range_syncer_content ( self ) :
nonce_oracle = RPCNonceOracle ( self . accounts [ 0 ] , self . rpc )
gas_oracle = RPCGasOracle ( self . rpc )
self . backend . mine_blocks ( 10 )
c = Gas ( signer = self . signer , nonce_oracle = nonce_oracle , gas_oracle = gas_oracle , chain_spec = self . chain_spec )
( tx_hash , o ) = c . create ( self . accounts [ 0 ] , self . accounts [ 1 ] , 1024 )
r = self . rpc . do ( o )
self . backend . mine_blocks ( 3 )
c = Gas ( signer = self . signer , nonce_oracle = nonce_oracle , gas_oracle = gas_oracle , chain_spec = self . chain_spec )
( tx_hash , o ) = c . create ( self . accounts [ 0 ] , self . accounts [ 1 ] , 2048 )
r = self . rpc . do ( o )
self . backend . mine_blocks ( 10 )
backend = MemBackend . custom ( self . chain_spec , 20 , 5 , 3 , 5 , 10 )
syncer = ThreadPoolRangeHistorySyncer ( 3 , backend , self . interface )
fltr = SyncerCounter ( )
syncer . add_filter ( fltr )
syncer . loop ( 0.1 , None )
if __name__ == ' __main__ ' :
unittest . main ( )