def test_write_request_manager_chain_of_responsib_batch( write_req_manager: WriteRequestManager, three_pc_batch, db): write_req_manager.batch_handlers[DOMAIN_LEDGER_ID] = [] handlers = write_req_manager.batch_handlers[DOMAIN_LEDGER_ID] check_list = [FakeSomething(), FakeSomething(), FakeSomething()] def modify_check_list(): assert not all(check.check_field for check in check_list) f_check = next(check for check in check_list if check.check_field is False) f_check.check_field = True def modify_check_list_post_apply(batch, prev_result): modify_check_list() return 1, 1, 1 def modify_check_list_commit(ledger_id, txn_count, state_root, txn_root, pp_time, prev_handler_result): modify_check_list() return 1, 1, 1 def modify_check_list_post_rejected(lid, prev_result): modify_check_list() return 1, 1, 1 for i in range(3): handler = DomainBatchHandler(db) handler.post_batch_applied = modify_check_list_post_apply handler.commit_batch = modify_check_list_commit handler.post_batch_rejected = modify_check_list_post_rejected handlers.append(handler) for check in check_list: check.check_field = False write_req_manager.post_apply_batch(three_pc_batch) assert all(check.check_field for check in check_list) for check in check_list: check.check_field = False write_req_manager.commit_batch(three_pc_batch.ledger_id, len(three_pc_batch.valid_digests), three_pc_batch.state_root, three_pc_batch.txn_root, three_pc_batch.pp_time) assert all(check.check_field for check in check_list) for check in check_list: check.check_field = False write_req_manager.post_batch_rejected(three_pc_batch.ledger_id) assert all(check.check_field for check in check_list)
def write_req_manager(db): manager = WriteRequestManager(db) write_req_handler = NodeHandler(db, None) batch_req_handler = DomainBatchHandler(db) manager.register_req_handler(write_req_handler) manager.register_batch_handler(batch_req_handler) # We do not need to check request handler workability handler = manager.request_handlers[NODE][0] handler.static_validation = lambda request: 1 handler.dynamic_validation = lambda request: 1 handler.update_state = lambda txn, updated_state, request, is_committed: 1 handler.apply_request = lambda request, batch_ts, prev_result: (1, 1, 1) handler.apply_forced_request = lambda request: 1 handler.transform_txn_for_ledger = lambda txn: 1 # Same for batches handler = manager.batch_handlers[DOMAIN_LEDGER_ID][0] handler.post_batch_applied = lambda batch, prev_handler_result: 1 handler.commit_batch = lambda batch, prev_handler_result=None: 1 handler.post_batch_rejected = lambda ledger_id, prev_handler_result: 1 return manager
def register_domain_batch_handlers(self): domain_b_h = DomainBatchHandler(self.node.db_manager) self.node.write_manager.register_batch_handler(domain_b_h)
def domain_batch_handler(database_manager): bh = DomainBatchHandler(database_manager) bh.ledger.appendTxns([{'txnMetadata': {'seqNo': 1}}]) return bh