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'
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
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