示例#1
0
def test_write_request_manager_handles_batches(
        write_req_manager: WriteRequestManager, three_pc_batch):
    write_req_manager.post_apply_batch(three_pc_batch)
    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)
    write_req_manager.post_batch_rejected(three_pc_batch.ledger_id)
示例#2
0
def test_write_request_manager_fails_to_handle_batches(
        write_req_manager: WriteRequestManager, three_pc_batch):
    nonexistent_lid = 999
    three_pc_batch.ledger_id = nonexistent_lid

    with pytest.raises(LogicError):
        write_req_manager.post_apply_batch(three_pc_batch)

    with pytest.raises(LogicError):
        write_req_manager.post_batch_rejected(three_pc_batch)

    with pytest.raises(LogicError):
        write_req_manager.commit_batch(three_pc_batch)
示例#3
0
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)
示例#4
0
def test_write_request_manager_fails_to_handle_batches(
        write_req_manager: WriteRequestManager, three_pc_batch):
    nonexistent_lid = 999
    three_pc_batch.ledger_id = nonexistent_lid

    with pytest.raises(LogicError):
        write_req_manager.post_apply_batch(three_pc_batch)

    with pytest.raises(LogicError):
        write_req_manager.post_batch_rejected(three_pc_batch)

    with pytest.raises(LogicError):
        write_req_manager.commit_batch(nonexistent_lid,
                                       len(three_pc_batch.valid_digests),
                                       three_pc_batch.state_root,
                                       three_pc_batch.txn_root,
                                       three_pc_batch.pp_time)
示例#5
0
def test_write_request_manager_handles_batches(
        write_req_manager: WriteRequestManager, three_pc_batch):
    write_req_manager.post_apply_batch(three_pc_batch)
    write_req_manager.commit_batch(three_pc_batch)
    write_req_manager.post_batch_rejected(three_pc_batch.ledger_id)