def test_ts_is_not_set_for_non_pp(primary_orderer, ts_now, sender, pp, sender_orderer): primary_orderer.process_prepare( create_prepare(req_key=(0, 1), state_root=generate_state_root()), sender_orderer) primary_orderer.process_commit(create_commit_no_bls_sig(req_key=(0, 1)), sender_orderer) assert len(primary_orderer.pre_prepare_tss) == 0
def test_discard_process_three_phase_msg_for_old_view(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] view_no = test_node.viewNo - 1 pp_seq_no = replica.last_ordered_3pc[1] + 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica._external_bus.process_incoming(msg, sender) checkDiscardMsg([replica.stasher, ], msg, OLD_VIEW)
def test_discard_process_three_phase_msg(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] view_no = test_node.viewNo pp_seq_no = 0 # should start with 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica._external_bus.process_incoming(msg, sender) checkDiscardMsg([replica.stasher, ], msg, INCORRECT_PP_SEQ_NO)
def test_process_three_phase_msg_and_stashed_future_view(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] old_stashed_future_view_msgs = replica.stasher.num_stashed_future_view view_no = test_node.viewNo + 1 pp_seq_no = replica.last_ordered_3pc[1] + 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica.process_three_phase_msg(msg, sender) assert old_stashed_future_view_msgs + 1 == replica.stasher.num_stashed_future_view
def test_last_prepared_sertificate_return_max_3PC_key(replica): """ All the prepares has enough quorum. Expected result is that last_prepared_sertificate must be Max3PCKey(all of prepare's keys) == (0, 2) """ replica.isMaster = True replica.prepares.clear() prepare1 = create_prepare( req_key=(0, 1), state_root='8J7o1k3mDX2jtBvgVfFbijdy6NKbfeJ7SfY3K1nHLzQB') prepare1.voters = ('Alpha:0', 'Beta:0', 'Gamma:0', 'Delta:0') replica.prepares[(0, 1)] = prepare1 prepare2 = create_prepare( req_key=(0, 1), state_root='EuDgqga9DNr4bjH57Rdq6BRtvCN1PV9UX5Mpnm9gbMAZ') prepare2.voters = ('Alpha:0', 'Beta:0', 'Gamma:0', 'Delta:0') replica.prepares[(0, 2)] = prepare2 assert replica.last_prepared_certificate_in_view() == (0, 2)
def test_process_three_phase_msg_and_stashed_for_next_checkpoint(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] old_stashed_watermarks_msgs = replica.stasher.stash_size(STASH_WATERMARKS) view_no = test_node.viewNo pp_seq_no = replica.H + 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica._external_bus.process_incoming(msg, sender) assert old_stashed_watermarks_msgs + 1 == replica.stasher.stash_size(STASH_WATERMARKS)
def test_process_three_phase_msg_and_stashed_future_view(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] old_stashed_future_view_msgs = replica.stasher.stash_size(STASH_VIEW_3PC) view_no = test_node.viewNo + 1 pp_seq_no = replica.last_ordered_3pc[1] + 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica._external_bus.process_incoming(msg, sender) assert old_stashed_future_view_msgs + 1 == replica.stasher.stash_size(STASH_VIEW_3PC)
def test_lst_sertificate_return_max_3PC_key_of_quorumed_prepare(replica): """ Prepare with key (0, 2) does not have quorum of prepare. Therefore, expected Max3PC key must be (0, 1), because of previous prepare has enough quorum """ replica.isMaster = True replica.prepares.clear() prepare1 = create_prepare( req_key=(0, 1), state_root='8J7o1k3mDX2jtBvgVfFbijdy6NKbfeJ7SfY3K1nHLzQB') prepare1.voters = ('Alpha:0', 'Beta:0', 'Gamma:0', 'Delta:0') replica.prepares[(0, 1)] = prepare1 prepare2 = create_prepare( req_key=(0, 1), state_root='EuDgqga9DNr4bjH57Rdq6BRtvCN1PV9UX5Mpnm9gbMAZ') prepare2.voters = ('Delta:0', ) replica.prepares[(0, 2)] = prepare2 assert replica.last_prepared_certificate_in_view() == (0, 1)
def create_three_pc_msgs(replica, pp_seq_no): pre_prepare = create_pre_prepare_no_bls(generate_state_root(), view_no=replica.viewNo, pp_seq_no=pp_seq_no, inst_id=replica.instId) prepare = create_prepare(req_key=(replica.viewNo, pp_seq_no), state_root=generate_state_root(), inst_id=replica.instId) commit = create_commit_no_bls_sig(req_key=(replica.viewNo, pp_seq_no), inst_id=replica.instId) return [pre_prepare, prepare, commit]
def test_discard_process_three_phase_already_ordered_msg(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] replica.last_ordered_3pc = (test_node.viewNo, 100) replica._checkpointer.update_watermark_from_3pc() view_no = test_node.viewNo pp_seq_no = replica.h msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica._external_bus.process_incoming(msg, sender) checkDiscardMsg([replica.stasher, ], msg, ALREADY_ORDERED)
def test_process_three_phase_msg_and_stashed_for_next_checkpoint( test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] old_stashed_watermarks_msgs = replica.stasher.num_stashed_watermarks view_no = test_node.viewNo pp_seq_no = replica.H + 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica.process_three_phase_msg(msg, sender) assert old_stashed_watermarks_msgs + 1 == replica.stasher.num_stashed_watermarks
def test_process_three_phase_msg_with_catchup_stash(test_node, looper): sender = "NodeSender" inst_id = 0 replica = test_node.replicas[inst_id] old_catchup_stashed_msgs = replica.stasher.num_stashed_catchup test_node.mode = Mode.syncing # catchup in process view_no = test_node.viewNo pp_seq_no = replica.last_ordered_3pc[1] + 1 msg = create_prepare((view_no, pp_seq_no), generate_state_root(), inst_id) replica.process_three_phase_msg(msg, sender) assert old_catchup_stashed_msgs + 1 == replica.stasher.num_stashed_catchup
def create_3pc_msgs(view_no, pp_seq_no, inst_id): pre_prepare = create_pre_prepare_no_bls(generate_state_root(), view_no=view_no, pp_seq_no=pp_seq_no, inst_id=inst_id) prepare = create_prepare(req_key=(view_no, pp_seq_no), state_root=generate_state_root(), inst_id=inst_id) commit = create_commit_no_bls_sig(req_key=(view_no, pp_seq_no), inst_id=inst_id) return [pre_prepare, prepare, commit]
def test_check_previous_view_view_change_prep_cert_non_commit(validator, pp_seq_no): validator.replica.node.view_change_in_progress = True validator.replica.last_prepared_before_view_change = (validator.view_no - 1, 10) pre_prepare = create_pre_prepare_no_bls(generate_state_root(), view_no=validator.view_no - 1, pp_seq_no=pp_seq_no, inst_id=validator.inst_id) prepare = create_prepare(req_key=(validator.view_no - 1, pp_seq_no), state_root=generate_state_root(), inst_id=validator.inst_id) assert validator.validate_3pc_msg(pre_prepare) == (DISCARD, OLD_VIEW) assert validator.validate_3pc_msg(prepare) == (DISCARD, OLD_VIEW)
def test_check_previous_view_view_change_prep_cert_non_commit( validator, pp_seq_no, inst_id, view_no): validator._data.legacy_vc_in_progress = True validator._data.view_no = view_no + 1 validator._data.legacy_last_prepared_before_view_change = (view_no, 10) pre_prepare = create_pre_prepare_no_bls(generate_state_root(), view_no=view_no, pp_seq_no=pp_seq_no, inst_id=inst_id) prepare = create_prepare(req_key=(view_no, pp_seq_no), state_root=generate_state_root(), inst_id=inst_id) assert validator.validate(pre_prepare) == (DISCARD, OLD_VIEW) assert validator.validate(prepare) == (DISCARD, OLD_VIEW)
def test_check_catchup_modes_in_view_change_for_prep_cert_for_non_commit( validator, mode, view_no, inst_id): pp_seq_no = 10 validator._data.legacy_vc_in_progress = True validator._data.node_mode = mode validator._data.view_no = view_no + 1 validator._data.legacy_last_prepared_before_view_change = (view_no, pp_seq_no) pre_prepare = create_pre_prepare_no_bls(generate_state_root(), view_no=view_no, pp_seq_no=pp_seq_no, inst_id=inst_id) prepare = create_prepare(req_key=(view_no, pp_seq_no), state_root=generate_state_root(), inst_id=inst_id) assert validator.validate(pre_prepare) == (DISCARD, OLD_VIEW) assert validator.validate(prepare) == (DISCARD, OLD_VIEW)
def test_clear_data_on_view_change_started(internal_bus, orderer): pp = create_pre_prepare_no_bls( generate_state_root(), view_no=0, pp_seq_no=10, inst_id=0, audit_txn_root="HSai3sMHKeAva4gWMabDrm1yNhezvPHfXnGyHf2ex1L4") prepare = create_prepare(req_key=(0, 10), state_root=generate_state_root(), inst_id=0) commit = create_commit_no_bls_sig(req_key=(0, 10), inst_id=0) key = (pp.viewNo, pp.ppSeqNo) orderer.prePrepares[key] = pp orderer.prepares[key] = prepare orderer.commits[key] = commit orderer.pre_prepare_tss[key][pp.auditTxnRootHash, "Node1"] = 1234 orderer.prePreparesPendingFinReqs.append(pp) orderer.prePreparesPendingPrevPP[key] = pp orderer.sent_preprepares[key] = pp orderer.batches[key] = [ pp.ledgerId, pp.discarded, pp.ppTime, generate_state_root(), len(pp.reqIdr) ] orderer.ordered.add(*key) internal_bus.send(ViewChangeStarted(view_no=4)) assert not orderer.prePrepares assert not orderer.prepares assert not orderer.commits assert not orderer.pre_prepare_tss assert not orderer.prePreparesPendingFinReqs assert not orderer.prePreparesPendingPrevPP assert not orderer.sent_preprepares assert not orderer.batches assert not orderer.ordered
def test_validate_prepare(bls_bft_replicas, state_root): prepare = create_prepare((0, 0), state_root) for sender_bls_bft in bls_bft_replicas: for verifier_bls_bft in bls_bft_replicas: assert not verifier_bls_bft.validate_prepare( prepare, sender_bls_bft.node_id)
def prepare(view_no, pp_seq_no, inst_id=0): return create_prepare(req_key=(view_no, pp_seq_no), state_root=generate_state_root(), inst_id=inst_id)
def prepare(data): key = (data.view_no, 1) prepare = create_prepare(key, generate_state_root(), data.inst_id) data.prepares.addVote(prepare, data.name) return prepare
def test_process_prepare(bls_bft_replicas, state_root): for sender_bls_bft in bls_bft_replicas: prepare = create_prepare((0, 0), state_root) for verifier_bls_bft in bls_bft_replicas: verifier_bls_bft.process_prepare(prepare, sender_bls_bft.node_id)