def setUp(self): self.block_tree_manager = BlockTreeManager(with_genesis=False) self.gossip = MockNetwork() self.executor = SynchronousExecutor() self.txn_executor = MockTransactionExecutor() self.block_sender = MockBlockSender() self.chain_id_manager = MockChainIdManager() self.state_delta_processor = MockStateDeltaProcessor() self.chain_head_lock = RLock() def chain_updated(head, committed_batches=None, uncommitted_batches=None): pass self.chain_ctrl = ChainController( block_cache=self.block_tree_manager.block_cache, state_view_factory=MockStateViewFactory( self.block_tree_manager.state_db), block_sender=self.block_sender, executor=self.executor, transaction_executor=MockTransactionExecutor(), chain_head_lock=self.chain_head_lock, on_chain_updated=chain_updated, squash_handler=None, chain_id_manager=self.chain_id_manager, state_delta_processor=self.state_delta_processor, identity_signing_key=self.block_tree_manager.identity_signing_key, data_dir=None, config_dir=None) self.assertIsNone(self.chain_ctrl.chain_head)
def setUp(self): self.block_tree_manager = BlockTreeManager() self.gossip = MockNetwork() self.executor = SynchronousExecutor() self.txn_executor = MockTransactionExecutor() self.block_sender = MockBlockSender() self.chain_id_manager = MockChainIdManager() def chain_updated(head, committed_batches=None, uncommitted_batches=None): pass self.chain_ctrl = ChainController( block_cache=self.block_tree_manager.block_cache, state_view_factory=MockStateViewFactory( self.block_tree_manager.state_db), block_sender=self.block_sender, executor=self.executor, transaction_executor=MockTransactionExecutor(), on_chain_updated=chain_updated, squash_handler=None, chain_id_manager=self.chain_id_manager, identity_signing_key=self.block_tree_manager.identity_signing_key, data_dir=None) init_root = self.chain_ctrl.chain_head self.assert_is_chain_head(init_root) # create a chain of length 5 extending the root _, head = self.generate_chain(init_root, 5) self.receive_and_process_blocks(head) self.assert_is_chain_head(head) self.init_head = head
def __init__(self): self.block_tree_manager = BlockTreeManager() self.gossip = MockNetwork() self.txn_executor = MockTransactionExecutor() self.block_sender = MockBlockSender() self.chain_id_manager = MockChainIdManager() self._chain_head_lock = RLock() self.permission_verifier = MockPermissionVerifier() self.state_view_factory = MockStateViewFactory( self.block_tree_manager.state_db) self.transaction_executor = MockTransactionExecutor( batch_execution_result=None) self.executor = SynchronousExecutor() self.block_validator = BlockValidator( state_view_factory=self.state_view_factory, block_cache=self.block_tree_manager.block_cache, transaction_executor=self.transaction_executor, squash_handler=None, identity_signer=self.block_tree_manager.identity_signer, data_dir=None, config_dir=None, permission_verifier=self.permission_verifier, thread_pool=self.executor) def chain_updated(head, committed_batches=None, uncommitted_batches=None): pass self.chain_ctrl = ChainController( block_cache=self.block_tree_manager.block_cache, block_validator=self.block_validator, state_view_factory=self.state_view_factory, chain_head_lock=self._chain_head_lock, on_chain_updated=chain_updated, chain_id_manager=self.chain_id_manager, data_dir=None, config_dir=None, chain_observers=[]) init_root = self.chain_ctrl.chain_head self.assert_is_chain_head(init_root) # create a chain of length 5 extending the root _, head = self.generate_chain(init_root, 5) self.receive_and_process_blocks(head) self.assert_is_chain_head(head) self.init_head = head
def __init__(self): self.block_tree_manager = BlockTreeManager(with_genesis=False) self.gossip = MockNetwork() self.txn_executor = MockTransactionExecutor() self.block_sender = MockBlockSender() self.chain_id_manager = MockChainIdManager() self.chain_head_lock = RLock() self.permission_verifier = MockPermissionVerifier() self.state_view_factory = MockStateViewFactory( self.block_tree_manager.state_db) self.transaction_executor = MockTransactionExecutor( batch_execution_result=None) self.executor = SynchronousExecutor() self.block_validator = BlockValidator( state_view_factory=self.state_view_factory, block_cache=self.block_tree_manager.block_cache, transaction_executor=self.transaction_executor, squash_handler=None, identity_signer=self.block_tree_manager.identity_signer, data_dir=None, config_dir=None, permission_verifier=self.permission_verifier, thread_pool=self.executor) def chain_updated(head, committed_batches=None, uncommitted_batches=None): pass self.chain_ctrl = ChainController( block_cache=self.block_tree_manager.block_cache, block_validator=self.block_validator, state_view_factory=self.state_view_factory, chain_head_lock=self.chain_head_lock, on_chain_updated=chain_updated, chain_id_manager=self.chain_id_manager, data_dir=None, config_dir=None, chain_observers=[]) self.assertIsNone(self.chain_ctrl.chain_head)
class TestChainControllerGenesisPeer(unittest.TestCase): def setUp(self): self.block_tree_manager = BlockTreeManager(with_genesis=False) self.gossip = MockNetwork() self.executor = SynchronousExecutor() self.txn_executor = MockTransactionExecutor() self.block_sender = MockBlockSender() self.chain_id_manager = MockChainIdManager() self.state_delta_processor = MockStateDeltaProcessor() self.chain_head_lock = RLock() def chain_updated(head, committed_batches=None, uncommitted_batches=None): pass self.chain_ctrl = ChainController( block_cache=self.block_tree_manager.block_cache, state_view_factory=MockStateViewFactory( self.block_tree_manager.state_db), block_sender=self.block_sender, executor=self.executor, transaction_executor=MockTransactionExecutor(), chain_head_lock=self.chain_head_lock, on_chain_updated=chain_updated, squash_handler=None, chain_id_manager=self.chain_id_manager, state_delta_processor=self.state_delta_processor, identity_signing_key=self.block_tree_manager.identity_signing_key, data_dir=None, config_dir=None) self.assertIsNone(self.chain_ctrl.chain_head) def test_genesis_block_mismatch(self): '''Test mismatch block chain id will drop genesis block. Given a ChainController with an empty chain mismatches the block-chain-id stored on disk. ''' self.chain_id_manager.save_block_chain_id('my_chain_id') some_other_genesis_block = \ self.block_tree_manager.generate_genesis_block() self.chain_ctrl.on_block_received(some_other_genesis_block) self.assertIsNone(self.chain_ctrl.chain_head) def test_genesis_block_matches_block_chain_id(self): '''Test that a validator with no chain will accept a valid genesis block that matches the block-chain-id stored on disk. ''' my_genesis_block = self.block_tree_manager.generate_genesis_block() chain_id = my_genesis_block.header_signature self.chain_id_manager.save_block_chain_id(chain_id) with patch.object(BlockValidator, 'validate_block', return_value=True): self.chain_ctrl.on_block_received(my_genesis_block) self.assertIsNotNone(self.chain_ctrl.chain_head) chain_head_sig = self.chain_ctrl.chain_head.header_signature self.assertEqual( chain_head_sig[:8], chain_id[:8], 'Chain id does not match') self.assertEqual(chain_id, self.chain_id_manager.get_block_chain_id()) def test_invalid_genesis_block_matches_block_chain_id(self): '''Test that a validator with no chain will drop an invalid genesis block that matches the block-chain-id stored on disk. ''' my_genesis_block = self.block_tree_manager.generate_genesis_block() chain_id = my_genesis_block.header_signature self.chain_id_manager.save_block_chain_id(chain_id) with patch.object(BlockValidator, 'validate_block', return_value=False): self.chain_ctrl.on_block_received(my_genesis_block) self.assertIsNone(self.chain_ctrl.chain_head)