test_syncer.py (2389B)
1 # standard imports 2 import unittest 3 4 # external imports 5 from chainlib.eth.gas import ( 6 Gas, 7 RPCGasOracle, 8 ) 9 from chainlib.eth.nonce import RPCNonceOracle 10 from chainlib.eth.unittest.ethtester import EthTesterCase 11 from chainsyncer.driver import HistorySyncer 12 from chainsyncer.backend.memory import MemBackend 13 from hexathon import strip_0x 14 15 # local imports 16 from taint.taint import Tainter 17 from taint.account import Account 18 from taint.tag import ( 19 TagPool, 20 Tag, 21 ) 22 23 24 class TestSyncer(EthTesterCase): 25 26 def setUp(self): 27 super(TestSyncer, self).setUp() 28 self.syncer_backend = MemBackend(self.chain_spec, None, target_block=10) 29 self.syncer = HistorySyncer(self.syncer_backend) 30 31 self.alice_account = bytes.fromhex(strip_0x(self.accounts[0])) 32 self.alice = Account(self.chain_spec, self.alice_account, label='alice') 33 self.alice.tag(b'foo') 34 35 self.bob_account = bytes.fromhex(strip_0x(self.accounts[1])) 36 self.bob = Account(self.chain_spec, self.bob_account, label='bob') 37 self.bob.tag(b'bar') 38 39 self.filter_bits_size = 1024 40 self.result_handler = TagPool() 41 self.frontend = Tainter(self.chain_spec, self.filter_bits_size, result_handler=self.result_handler) 42 self.frontend.add_subject(self.bob) 43 self.frontend.add_subject(self.alice) 44 45 self.syncer.add_filter(self.frontend) 46 47 48 def test_sync_single(self): 49 self.backend.mine_blocks(3) 50 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 51 gas_oracle = RPCGasOracle(self.rpc) 52 c = Gas(self.chain_spec, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle, signer=self.signer) 53 (tx_hash_hex, o) = c.create(self.accounts[0], self.accounts[1], 1024) 54 self.rpc.do(o) 55 self.backend.mine_blocks(3) 56 57 self.assertFalse(self.frontend.have(4, 0)) 58 59 self.syncer.loop(0.001, self.rpc) 60 61 self.assertTrue(self.frontend.have(4, 0)) 62 63 tag = Tag() 64 tag.create(b'foo') 65 tag.create(b'bar') 66 z = tag.get() 67 68 self.assertEqual(len(self.result_handler.pool.keys()), 3) 69 self.assertIn(z, self.result_handler.pool.keys()) 70 self.assertIn(self.alice, self.result_handler.pool[z]) 71 self.assertIn(self.bob, self.result_handler.pool[z]) 72 73 74 if __name__ == '__main__': 75 unittest.main()