Beispiel #1
0
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
Beispiel #2
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)
Beispiel #3
0
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
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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]
Beispiel #10
0
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
Beispiel #18
0
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)
Beispiel #20
0
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
Beispiel #21
0
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)