Esempio n. 1
0
async def test_interledger_multi_transfer_result():
    async def foo():
        return {"status": True, "tx_hash": "0xsuccess_tx_hash"}

    async def bar():
        return {"status": False, "tx_hash": "0xfail_tx_hash"}

    init = MockInitiator([])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    i = Interledger(init, [resp1, resp2], True)

    t = TransferToMulti()
    t.status = TransferStatus.SENT
    t.send_tasks = [asyncio.ensure_future(foo()), asyncio.ensure_future(bar())]
    i.transfers_sent = [t]

    # the processing to be observed
    task = asyncio.ensure_future(i.transfer_result())
    assert task.done() == False
    await task

    assert not i.transfers_sent
    assert t in i.transfers_responded

    tr = i.transfers_responded[0]
    assert tr.state == TransferStatus.RESPONDED
    assert tr.results[0]['status'] == True
    assert tr.results[1]['status'] == False
Esempio n. 2
0
async def test_interledger_multi_send_inquiry():

    t = TransferToMulti()
    t.payload = {}
    t.payload['nonce'] = str(uuid4().int)
    t.payload['data'] = b"dummy"

    init = MockInitiator([t])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    i = Interledger(init, [resp1, resp2], True)

    i.transfers = [t]

    # the processing to be observed
    task = asyncio.ensure_future(i.send_inquiry())
    assert task.done() == False
    await task

    assert len(i.transfers_inquired) == 1

    tr = i.transfers[0]
    assert tr.status == TransferStatus.INQUIRED

    assert len(tr.inquiry_tasks) == 2
    assert asyncio.isfuture(tr.inquiry_tasks[0])
    assert asyncio.isfuture(tr.inquiry_tasks[1])

    assert tr.inquiry_results == [None] * 2

    await asyncio.wait(tr.inquiry_tasks, return_when=asyncio.ALL_COMPLETED)
    assert tr.inquiry_tasks[0].done() == True
    assert tr.inquiry_tasks[1].done() == True
Esempio n. 3
0
async def test_interledger_multi_confirm_transfer_abort():
    async def foo():
        return {'abort_status': True, 'abort_tx_hash': '0x444'}

    init = MockInitiator([])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    i = Interledger(init, [resp1, resp2], True, 1)

    t = TransferToMulti()
    t.payload = {}
    t.payload['id'] = str(uuid4().int)
    t.results = []
    t.status = TransferStatus.CONFIRMING
    t.inquiry_decision = True
    t.confirm_task = asyncio.ensure_future(foo())
    i.results_aborting = [t]

    task = asyncio.ensure_future(i.confirm_transfer())
    assert task.done() == False
    await task

    res = i.results_abort[0]
    assert t.status == TransferStatus.FINALIZED
    assert res['abort_status'] == True
    assert res['abort_tx_hash'] == '0x444'
    assert len(i.results_abort) == 1
    assert len(i.results_commit) == 0

    assert len(i.results_aborting) == 0
Esempio n. 4
0
async def test_interledger_multi_process_result_inquiry_rejection():

    init = MockInitiator([])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    i = Interledger(init, [resp1, resp2], True)

    t = TransferToMulti()
    t.payload = {}
    t.payload['id'] = str(uuid4().int)
    t.status = TransferStatus.RESPONDED
    t.inquiry_decision = False
    t.results = [{
        "status": True
    }, {
        "status": True
    }]  # set it even to true should not affect
    i.transfers_responded = [t]

    task = asyncio.ensure_future(i.process_result())
    assert task.done() == False
    await task

    tr = i.results_aborting[0]
    assert tr.state == TransferStatus.CONFIRMING
    assert tr.results[0]['status'] == True
    assert tr.results[1]['status'] == True
    assert len(i.results_commit) == 0
    assert len(i.results_abort) == 0

    assert len(i.transfers_responded) == 0
Esempio n. 5
0
async def test_interledger_multi_receive_transfer():

    t = TransferToMulti()
    t.payload = {}

    init = MockInitiator([t])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    interledger = Interledger(init, [resp1, resp2], True)
    # interledger.test_interrupt = True

    task = asyncio.ensure_future(interledger.receive_transfer())
    assert task.done() == False
    l = await task

    assert init.events == []
    assert len(interledger.transfers) == 1
    assert l == 1
    assert interledger.transfers[0].state == TransferStatus.READY
Esempio n. 6
0
async def test_interledger_multi_transfer_inquiry():
    async def foo():
        return {"status": True, "tx_hash": "0xsuccess_tx_hash"}

    async def bar():
        return {"status": False, "tx_hash": "0xfail_tx_hash"}

    init = MockInitiator([])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    i = Interledger(init, [resp1, resp2], True)

    t = TransferToMulti()
    t.status = TransferStatus.INQUIRED
    t.inquiry_tasks = [
        asyncio.ensure_future(foo()),
        asyncio.ensure_future(bar())
    ]
    i.transfers_inquired = [t]

    # the processing to be observed
    task = asyncio.ensure_future(i.transfer_inquiry())
    assert task.done() == False
    await task

    assert len(i.transfers_inquired) == 0
    assert len(i.transfers_answered) == 1

    tr = i.transfers_answered[0]
    assert tr.state == TransferStatus.ANSWERED
    assert tr.inquiry_results[0]['status'] == True
    assert tr.inquiry_results[1]['status'] == False

    assert tr.inquiry_decision == True

    assert not i.transfers_inquired
Esempio n. 7
0
async def test_interledger_ledger_run_with_cleanup():

    l1, l2, l3 = [], [], []
    for i in range(4):
        t1, t2, t3 = TransferToMulti(), TransferToMulti(), TransferToMulti()
        t1.payload, t2.payload, t3.payload = {}, {}, {}
        t1.payload['nonce'], t1.payload['id'], t1.payload['data'] = str(
            uuid4().int), '1', b"dummy1"
        t2.payload['nonce'], t2.payload['id'], t2.payload['data'] = str(
            uuid4().int), '2', b"dummy2"
        t3.payload['nonce'], t3.payload['id'], t3.payload['data'] = str(
            uuid4().int), '3', b"dummy3"
        l1.append(t1)
        l2.append(t2)
        l3.append(t3)

    init = MockInitiator(l1)
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    resp3 = MockMultiResponderAbort()
    i = Interledger(init, [resp1, resp2, resp3], True, 2)

    task = asyncio.ensure_future(i.run())

    time = 1.0
    # Consume l1
    await asyncio.sleep(time)  # Simulate interledger running

    # New events
    init.events = l2
    # Consume l2
    await asyncio.sleep(time)  # Simulate interledger running

    # New events
    i.responders[1] = MockMultiResponderAbort()
    init.events = l3
    # Consume l3, but with a responder returning False -> abort
    await asyncio.sleep(time)  # Simulate interledger running

    assert len(i.transfers) == 0
    assert len(i.transfers_sent) == 0
    assert len(i.transfers_responded) == 0
    assert len(i.results_committing) == 0
    assert len(i.results_aborting) == 0
    assert len(i.results_commit) == 8
    assert len(i.results_abort) == 4

    i.stop()
    await task
Esempio n. 8
0
async def test_interledger_multi_send_transfer():

    t = TransferToMulti()
    t.payload = {}
    t.payload['nonce'] = str(uuid4().int)
    t.payload['data'] = b"dummy"
    t.inquiry_decision = True
    t.status = TransferStatus.ANSWERED

    init = MockInitiator([t])
    resp1 = MockMultiResponder()
    resp2 = MockMultiResponder()
    i = Interledger(init, [resp1, resp2], True)

    i.transfers = [t]
    i.transfers_answered = [t]

    # the processing to be observed
    task = asyncio.ensure_future(i.send_transfer())
    assert task.done() == False
    await task

    assert len(i.transfers_sent) == 1

    tr = i.transfers[0]
    assert tr.status == TransferStatus.SENT

    # verify the `send_tasks` instead of `send_task` works as expected
    assert tr.send_task is None
    assert asyncio.isfuture(tr.send_tasks[0])

    assert tr.results == [None] * 2

    assert tr in i.transfers_sent
    assert not i.transfers_answered

    await asyncio.wait(tr.send_tasks, return_when=asyncio.ALL_COMPLETED)
    assert tr.send_tasks[0].done() == True