示例#1
0
def test_get_token_network_address_by_token_address():
    test_state = factories.make_chain_state(number_of_channels=1)
    assert (
        views.get_token_network_address_by_token_address(
            chain_state=test_state.chain_state,
            token_network_registry_address=factories.make_address(),
            token_address=factories.make_address(),
        )
        is None
    )
    assert (
        views.get_token_network_address_by_token_address(
            chain_state=test_state.chain_state,
            token_network_registry_address=test_state.token_network_registry_address,
            token_address=factories.make_address(),
        )
        is None
    )
    assert (
        views.get_token_network_address_by_token_address(
            chain_state=test_state.chain_state,
            token_network_registry_address=factories.make_address(),
            token_address=test_state.token_address,
        )
        is None
    )
    assert (
        views.get_token_network_address_by_token_address(
            chain_state=test_state.chain_state,
            token_network_registry_address=test_state.token_network_registry_address,
            token_address=test_state.token_address,
        )
        == test_state.token_network_address
    )
示例#2
0
def test_listings():
    test_state = factories.make_chain_state(number_of_channels=3)
    assert (
        views.get_token_network_addresses(
            chain_state=test_state.chain_state,
            token_network_registry_address=factories.make_address(),
        )
        == []
    )
    assert views.get_token_network_addresses(
        chain_state=test_state.chain_state,
        token_network_registry_address=test_state.token_network_registry_address,
    ) == [test_state.token_network_address]
    assert (
        views.get_token_identifiers(
            chain_state=test_state.chain_state,
            token_network_registry_address=factories.make_address(),
        )
        == []
    )
    assert views.get_token_identifiers(
        chain_state=test_state.chain_state,
        token_network_registry_address=test_state.token_network_registry_address,
    ) == [test_state.token_address]
    assert views.get_token_network_registry_address(chain_state=test_state.chain_state) == [
        test_state.token_network_registry_address
    ]
示例#3
0
def test_get_channelstate_by_canonical_identifier():
    test_state = factories.make_chain_state(number_of_channels=3)
    canonical_identifier = test_state.channels[1].canonical_identifier

    assert (views.get_channelstate_by_canonical_identifier(
        chain_state=test_state.chain_state,
        canonical_identifier=canonical_identifier) == test_state.channels[1])
示例#4
0
def test_total_token_network_channels():
    number_of_channels = 3
    test_state = factories.make_chain_state(
        number_of_channels=number_of_channels)
    unknown_token_address = factories.make_address()
    unknown_token_network_registry_address = factories.make_address()
    assert (views.total_token_network_channels(
        chain_state=test_state.chain_state,
        token_network_registry_address=unknown_token_network_registry_address,
        token_address=unknown_token_address,
    ) == 0)
    assert (views.total_token_network_channels(
        chain_state=test_state.chain_state,
        token_network_registry_address=unknown_token_network_registry_address,
        token_address=test_state.token_address,
    ) == 0)
    assert (views.total_token_network_channels(
        chain_state=test_state.chain_state,
        token_network_registry_address=test_state.
        token_network_registry_address,
        token_address=unknown_token_address,
    ) == 0)
    assert (views.total_token_network_channels(
        chain_state=test_state.chain_state,
        token_network_registry_address=test_state.
        token_network_registry_address,
        token_address=test_state.token_address,
    ) == number_of_channels)
示例#5
0
def test_list_all_channelstate():
    test_state = factories.make_chain_state(number_of_channels=3)
    assert sorted(channel.partner_state.address
                  for channel in views.list_all_channelstate(
                      test_state.chain_state)) == sorted(
                          channel.partner_state.address
                          for channel in test_state.channels)
示例#6
0
def test_get_channelstate_by_token_network_and_partner():
    test_state = factories.make_chain_state(number_of_channels=3)
    partner_address = test_state.channels[1].partner_state.address
    assert (views.get_channelstate_by_token_network_and_partner(
        chain_state=test_state.chain_state,
        token_network_address=test_state.token_network_address,
        partner_address=partner_address,
    ) == test_state.channels[1])
示例#7
0
def test_get_token_network_by_address():
    test_state = factories.make_chain_state(number_of_channels=3)
    assert (views.get_token_network_by_address(
        test_state.chain_state, test_state.token_network_address).address ==
            test_state.token_network_address)
    unknown_token_network_address = factories.make_address()
    assert (views.get_token_network_by_address(
        test_state.chain_state, unknown_token_network_address) is None)
示例#8
0
def test_filter_channels_by_partneraddress():
    test_state = factories.make_chain_state(number_of_channels=3)
    partner_addresses = [c.partner_state.address for c in test_state.channels[1:]]

    assert (
        views.filter_channels_by_partneraddress(
            chain_state=test_state.chain_state,
            token_network_registry_address=test_state.token_network_registry_address,
            token_address=test_state.token_address,
            partner_addresses=partner_addresses,
        )
        == test_state.channels[1:]
    )
示例#9
0
def test_get_our_capacity_for_token_network():
    test_state = factories.make_chain_state(number_of_channels=3)
    chain_state = test_state.chain_state
    test_state.channels[-1].close_transaction = TransactionExecutionStatus(
        started_block_number=chain_state.block_number,
        finished_block_number=chain_state.block_number,
        result=TransactionExecutionStatus.SUCCESS,
    )
    expected_sum = sum(c.our_state.contract_balance
                       for c in test_state.channels[:-1])
    assert (views.get_our_deposits_for_token_network(
        chain_state=chain_state,
        token_network_registry_address=test_state.
        token_network_registry_address,
        token_address=test_state.token_address,
    ) == expected_sum)
示例#10
0
def test_channelstate_filters():
    test_state = factories.make_chain_state(number_of_channels=5)
    chain_state = test_state.chain_state
    token_network_registry_address = test_state.token_network_registry_address
    token_address = test_state.token_address

    channel_open, channel_closing, channel_closed, channel_settling, channel_settled = (
        test_state.channels
    )
    in_progress = TransactionExecutionStatus(started_block_number=chain_state.block_number)
    done = TransactionExecutionStatus(
        started_block_number=chain_state.block_number,
        finished_block_number=chain_state.block_number,
        result=TransactionExecutionStatus.SUCCESS,
    )
    channel_closing.close_transaction = in_progress
    channel_closed.close_transaction = done
    channel_settling.close_transaction = done
    channel_settling.settle_transaction = in_progress
    channel_settled.close_transaction = done
    channel_settled.settle_transaction = done

    unknown_token = factories.make_address()
    assert (
        views.get_channelstate_open(
            chain_state=chain_state,
            token_network_registry_address=token_network_registry_address,
            token_address=unknown_token,
        )
        == []
    )

    opened = views.get_channelstate_open(
        chain_state=chain_state,
        token_network_registry_address=token_network_registry_address,
        token_address=token_address,
    )
    assert opened == [channel_open]

    closing = views.get_channelstate_closing(
        chain_state=chain_state,
        token_network_registry_address=token_network_registry_address,
        token_address=token_address,
    )
    assert closing == [channel_closing]

    closed = views.get_channelstate_closed(
        chain_state=chain_state,
        token_network_registry_address=token_network_registry_address,
        token_address=token_address,
    )
    assert closed == [channel_closed]

    settling = views.get_channelstate_settling(
        chain_state=chain_state,
        token_network_registry_address=token_network_registry_address,
        token_address=token_address,
    )
    assert settling == [channel_settling]

    settled = views.get_channelstate_settled(
        chain_state=chain_state,
        token_network_registry_address=token_network_registry_address,
        token_address=token_address,
    )
    assert settled == [channel_settled]
示例#11
0
def test_initiator_skips_used_routes():
    defaults = factories.NettingChannelStateProperties(
        our_state=factories.NettingChannelEndStateProperties.OUR_STATE,
        partner_state=factories.NettingChannelEndStateProperties(balance=10),
        open_transaction=factories.TransactionExecutionStatusProperties(
            started_block_number=1, finished_block_number=2, result="success"),
    )
    properties = [
        factories.NettingChannelStateProperties(
            partner_state=factories.NettingChannelEndStateProperties(
                privatekey=factories.HOP1_KEY, address=factories.HOP1))
    ]
    test_chain_state = factories.make_chain_state(number_of_channels=1,
                                                  properties=properties,
                                                  defaults=defaults)
    channels = test_chain_state.channel_set

    bob = channels.channels[0].partner_state.address

    routes = [[
        factories.UNIT_OUR_ADDRESS, bob, factories.UNIT_TRANSFER_TARGET
    ]]

    transfer = factories.create(
        factories.TransferDescriptionProperties(
            initiator=factories.UNIT_OUR_ADDRESS,
            target=factories.UNIT_TRANSFER_TARGET))
    init_action = factories.initiator_make_init_action(
        channels=channels,
        routes=routes,
        transfer=transfer,
        estimated_fee=FeeAmount(0))
    transition_result = handle_action_init_initiator(
        chain_state=test_chain_state.chain_state, state_change=init_action)

    chain_state = transition_result.new_state

    assert transfer.secrethash in chain_state.payment_mapping.secrethashes_to_task

    initiator_task = chain_state.payment_mapping.secrethashes_to_task[
        transfer.secrethash]
    initiator_state = initiator_task.manager_state

    assert len(initiator_state.routes) == 1, "Should have one route"
    assert len(
        initiator_state.routes[0].route) == 3, "Route should not be pruned"
    assert initiator_state.routes[0].route == routes[
        0], "Should have test route"

    events = transition_result.events

    assert isinstance(events[-1], SendLockedTransfer)

    locked_transfer = initiator_state.initiator_transfers[
        transfer.secrethash].transfer

    received_transfer = factories.create(
        factories.LockedTransferSignedStateProperties(
            expiration=locked_transfer.lock.expiration,
            payment_identifier=locked_transfer.payment_identifier,
            canonical_identifier=locked_transfer.balance_proof.
            canonical_identifier,
            initiator=factories.UNIT_OUR_ADDRESS,
            sender=bob,
            pkey=factories.HOP1_KEY,
            message_identifier=factories.make_message_identifier(),
            routes=[],
            secret=transfer.secret,
        ))

    role = views.get_transfer_role(chain_state=chain_state,
                                   secrethash=locked_transfer.lock.secrethash)

    assert role == "initiator", "Should keep initiator role"

    failed_route_state_change = ReceiveTransferCancelRoute(
        transfer=received_transfer,
        balance_proof=received_transfer.balance_proof,
        sender=received_transfer.balance_proof.sender,  # pylint: disable=no-member
    )

    state_transition(chain_state=chain_state,
                     state_change=failed_route_state_change)

    reroute_state_change = ActionTransferReroute(
        transfer=received_transfer,
        balance_proof=received_transfer.balance_proof,
        sender=received_transfer.balance_proof.sender,  # pylint: disable=no-member
        secret=factories.make_secret(),
    )

    iteration = state_transition(chain_state=chain_state,
                                 state_change=reroute_state_change)

    assert search_for_item(iteration.events, SendLockedTransfer, {}) is None