def test_node_request_propagates(looper, setup, txnPoolNodeSet, sdk_wallet_client, sdk_pool_handle, tconf): """ One of node lacks sufficient propagates """ faulty_node, recv_client_requests = setup old_count_recv_ppg = get_count(faulty_node, faulty_node.processPropagate) old_count_recv_req = get_count(faulty_node, faulty_node.processRequest) def sum_of_sent_batches(): return faulty_node.replicas[0].lastPrePrepareSeqNo + \ faulty_node.replicas[1].lastPrePrepareSeqNo old_sum_of_sent_batches = sum_of_sent_batches() old_count_request_propagates = sum_of_request_propagates(faulty_node) sent_reqs = 1 sdk_send_random_and_check(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client, sent_reqs) looper.runFor(tconf.PROPAGATE_REQUEST_DELAY) if recv_client_requests: assert get_count(faulty_node, faulty_node.processRequest) > old_count_recv_req assert get_count(faulty_node, faulty_node.processPropagate) == old_count_recv_ppg assert sum_of_request_propagates( faulty_node) == old_count_request_propagates else: assert get_count(faulty_node, faulty_node.processPropagate) > old_count_recv_ppg assert get_count(faulty_node, faulty_node.processRequest) == old_count_recv_req # Attempt to request PROPAGATEs was made as many number of times as the # number of sent batches in both replicas since both replicas # independently request PROPAGATEs assert sum_of_request_propagates(faulty_node) - \ old_count_request_propagates == (sum_of_sent_batches() - old_sum_of_sent_batches) faulty_node.nodeIbStasher.reset_delays_and_process_delayeds() sdk_ensure_pool_functional(looper, txnPoolNodeSet, sdk_wallet_client, sdk_pool_handle, num_reqs=4)
def test_replica_received_preprepare_with_unknown_request(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_steward, chkFreqPatched, tconf): sdk_send_random_and_check(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_steward, 1) replica = txnPoolNodeSet[1].master_replica start_request_propagate_count = sum_of_request_propagates(txnPoolNodeSet[1]) with delay_rules(txnPoolNodeSet[1].nodeIbStasher, ppgDelay(delay=10)): sdk_send_random_and_check(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_steward, 1) params = replica._ordering_service.spylog.getLastParams(OrderingService.process_preprepare) pp = params["pre_prepare"] sender = params["sender"] looper.runFor(tconf.PROPAGATE_REQUEST_DELAY) assert (pp, sender, set(pp.reqIdr)) not in replica._ordering_service.prePreparesPendingFinReqs assert 1 == sum_of_request_propagates(txnPoolNodeSet[1]) - start_request_propagate_count