def test_events_for_revealsecret():
    """ The secret is revealed backwards to the payer once the payee sent the
    SecretReveal.
    """
    secret = factories.UNIT_SECRET
    our_address = factories.ADDR

    transfers_pair = make_transfers_pair(
        factories.HOP1,
        [factories.HOP2, factories.HOP3, factories.HOP4],
        factories.HOP6,
        amount=10,
        secret=secret,
    )

    events = mediator.events_for_revealsecret(
        transfers_pair,
        our_address,
    )

    # the secret is known by this node, but no other payee is at a secret known
    # state, do nothing
    assert len(events) == 0

    first_pair = transfers_pair[0]
    last_pair = transfers_pair[1]

    last_pair.payee_state = 'payee_secret_revealed'
    events = mediator.events_for_revealsecret(
        transfers_pair,
        our_address,
    )

    # the last known hop sent a secret reveal message, this node learned the
    # secret and now must reveal to the payer node from the transfer pair
    assert len(events) == 1
    assert events[0].secret == secret
    assert events[0].receiver == last_pair.payer_route.node_address
    assert last_pair.payer_state == 'payer_secret_revealed'

    events = mediator.events_for_revealsecret(
        transfers_pair,
        our_address,
    )

    # the payeee from the first_pair did not send a secret reveal message, do
    # nothing
    assert len(events) == 0

    first_pair.payee_state = 'payee_secret_revealed'
    events = mediator.events_for_revealsecret(
        transfers_pair,
        our_address,
    )

    assert len(events) == 1
    assert events[0].secret == secret
    assert events[0].receiver == first_pair.payer_route.node_address
    assert first_pair.payer_state == 'payer_secret_revealed'
示例#2
0
def test_events_for_revealsecret_all_states():
    """ The secret must be revealed backwards to the payer if the payee knows
    the secret.
    """
    secret = factories.UNIT_SECRET
    our_address = factories.ADDR

    payee_secret_known = (
        'payee_secret_revealed',
        'payee_refund_withdraw',
        'payee_contract_withdraw',
        'payee_balance_proof',
    )

    for state in payee_secret_known:
        transfers_pair = make_transfers_pair(
            [factories.HOP1, factories.HOP2],
            factories.HOP6,
            amount=10,
            secret=secret,
        )

        pair = transfers_pair[0]
        pair.payee_state = state

        events = mediator.events_for_revealsecret(
            transfers_pair,
            our_address,
        )

        assert events[0].secret == secret
        assert events[0].target == factories.HOP1
示例#3
0
def test_events_for_revealsecret_secret_unknown():
    """ When the secret is not know there is nothing to do. """
    transfers_pair = make_transfers_pair(
        [factories.HOP1, factories.HOP2, factories.HOP3],
        factories.HOP6,
        amount=10,
    )

    events = mediator.events_for_revealsecret(
        transfers_pair,
        factories.ADDR,
    )

    assert len(events) == 0