async def test_interledger_run_with_restore_sent():

    base = "sofie_asset_transfer"
    package = base + ".interledger.StateInterledger"

    # Create a transfer already half processed
    # for protocol PoW, it should have state (TransferOut | NotHere)
    t = Transfer()
    t.data = {}
    t.data["assetId"] = 123
    t.state = State.RESPONDED
    t.future = asyncio.Future()
    t.future.set_result({"status": True})
    t.result = {"status": True}

    with patch(package + ".restore_pending_transfers_ready",
               return_value=[]) as mock_ready:
        with patch(package + ".restore_pending_transfers_sent",
                   return_value=[t]) as mock_sent:

            interledger = StateInterledger(StateInitiator(), StateResponder())

            init = base + ".state_interfaces.StateInitiator"
            resp = base + ".state_interfaces.StateResponder"
            get_future = asyncio.Future()
            receive_future = asyncio.Future()
            commit_future = asyncio.Future()
            get_future.set_result([])
            receive_future.set_result({"status": True})
            commit_future.set_result(True)

            with patch(init + ".get_transfers",
                       return_value=get_future) as mock_get_transfers:
                with patch(
                        resp + ".receive_transfer",
                        return_value=receive_future) as mock_receive_transfer:
                    with patch(init + ".commit_transfer",
                               return_value=commit_future) as mock_commit:
                        with patch(base + ".interledger.Interledger.cleanup"
                                   ) as mock_cleanup:
                            # mock cleanup to check the transfer reaches the end

                            time = 1
                            task = asyncio.ensure_future(interledger.run())
                            await asyncio.sleep(time)
                            interledger.stop()
                            await task

                            assert len(interledger.transfers_sent) == 1
                            assert len(interledger.results_commit) == 1
                            assert interledger.pending == 0
Example #2
0
async def test_interledger_process_result_abort():

    i = Interledger(MockInitiator([]), None)
    
    t = Transfer()
    t.state = State.RESPONDED
    t.result = {"status": False}
    i.transfers_sent = [t]
    i.pending = 1
    
    task = asyncio.ensure_future(i.process_result())
    assert task.done() == False
    await task

    tr = i.transfers_sent[0]
    assert tr.state == State.FINALIZED
    assert len(i.results_commit) == 0
    assert len(i.results_abort) == 1
    assert i.pending == 0