def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ block_number = 1 pseudo_random_generator = random.Random() channels = make_channel_set([channel_properties]) transfer_properties = LockedTransferSignedStateProperties( amount=channels[0].partner_state.contract_balance, expiration=channels[0].reveal_timeout + block_number + 1, canonical_identifier=channels[0].canonical_identifier, transferred_amount=0, locked_amount=channels[0].partner_state.contract_balance, ) from_transfer = create(transfer_properties) state_change = ActionInitTarget(channels.get_route(0), from_transfer) iteration = target.handle_inittarget(state_change, channels[0], pseudo_random_generator, block_number) assert search_for_item( iteration.events, SendSecretRequest, { "payment_identifier": from_transfer.payment_identifier, "amount": from_transfer.lock.amount, "secrethash": from_transfer.lock.secrethash, "recipient": UNIT_TRANSFER_INITIATOR, }, ) assert search_for_item(iteration.events, SendProcessed, {})
def test_handle_inittarget_bad_expiration(): """ Init transfer must do nothing if the expiration is bad. """ block_number = 1 amount = 3 expire = factories.UNIT_REVEAL_TIMEOUT + block_number from_transfer = factories.make_transfer( amount, factories.ADDR, expire, ) from_route = factories.make_route( factories.HOP1, amount, ) state_change = ActionInitTarget( factories.ADDR, from_route, from_transfer, factories.UNIT_HASHLOCK, block_number, ) iteration = target.handle_inittarget(state_change) assert len(iteration.events) == 0
def test_handle_inittarget_bad_expiration(): """ Init transfer must do nothing if the expiration is bad. """ block_number = 1 amount = 3 initiator = factories.HOP1 target_address = UNIT_TRANSFER_TARGET payment_network_identifier = factories.make_address() from_channel = factories.make_channel( our_address=target_address, partner_address=UNIT_TRANSFER_SENDER, partner_balance=amount, ) from_route = factories.route_from_channel(from_channel) expiration = from_channel.reveal_timeout + block_number + 1 from_transfer = factories.make_signed_transfer_for( from_channel, amount, initiator, target_address, expiration, UNIT_SECRET, ) channel.handle_receive_lockedtransfer( from_channel, from_transfer, ) state_change = ActionInitTarget(payment_network_identifier, from_route, from_transfer) iteration = target.handle_inittarget(state_change, from_channel, block_number) assert must_contain_entry(iteration.events, EventWithdrawFailed, {})
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ block_number = 1 amount = 3 expire = factories.UNIT_REVEAL_TIMEOUT + block_number + 1 initiator = factories.HOP1 from_route, from_transfer = factories.make_from( amount, factories.ADDR, expire, initiator, ) state_change = ActionInitTarget( factories.ADDR, from_route, from_transfer, block_number, ) iteration = target.handle_inittarget(state_change) events = iteration.events assert isinstance(events[0], SendSecretRequest) assert events[0].identifier == from_transfer.identifier assert events[0].amount == from_transfer.amount assert events[0].hashlock == from_transfer.hashlock assert events[0].receiver == initiator
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ block_number = 1 amount = 3 expire = factories.UNIT_REVEAL_TIMEOUT + block_number + 1 initiator = factories.HOP1 from_route, from_transfer = factories.make_from( amount, factories.ADDR, expire, initiator, ) state_change = ActionInitTarget( factories.ADDR, from_route, from_transfer, block_number, ) iteration = target.handle_inittarget(state_change) events = iteration.events assert isinstance(events[0], SendSecretRequest) assert events[0].identifier == from_transfer.identifier assert events[0].amount == from_transfer.amount assert events[0].hashlock == from_transfer.hashlock assert events[0].receiver == initiator
def test_handle_inittarget_bad_expiration(): """ Init transfer must do nothing if the expiration is bad. """ block_number = 1 pseudo_random_generator = random.Random() channels = make_channel_set([channel_properties]) expiration = channels[0].reveal_timeout + block_number + 1 from_transfer = make_target_transfer(channels[0], expiration=expiration) channel.handle_receive_lockedtransfer(channels[0], from_transfer) state_change = ActionInitTarget(channels.get_route(0), from_transfer) iteration = target.handle_inittarget(state_change, channels[0], pseudo_random_generator, block_number) assert search_for_item(iteration.events, EventUnlockClaimFailed, {})
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ amount = 3 block_number = 1 initiator = factories.HOP1 target_address = UNIT_TRANSFER_TARGET payment_network_identifier = factories.make_address() pseudo_random_generator = random.Random() from_channel = factories.make_channel( our_address=target_address, partner_address=UNIT_TRANSFER_SENDER, partner_balance=amount, ) from_route = factories.route_from_channel(from_channel) expiration = from_channel.reveal_timeout + block_number + 1 from_transfer = factories.make_signed_transfer( amount, initiator, target_address, expiration, UNIT_SECRET, channel_identifier=from_channel.identifier, ) state_change = ActionInitTarget( payment_network_identifier, from_route, from_transfer, ) iteration = target.handle_inittarget( state_change, from_channel, pseudo_random_generator, block_number, ) events = iteration.events assert events assert isinstance(events[0], SendSecretRequest) assert events[0].payment_identifier == from_transfer.payment_identifier assert events[0].amount == from_transfer.lock.amount assert events[0].secrethash == from_transfer.lock.secrethash assert events[0].recipient == initiator
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ amount = 3 block_number = 1 initiator = factories.HOP1 target_address = UNIT_TRANSFER_TARGET pseudo_random_generator = random.Random() from_channel = factories.make_channel( our_address=target_address, partner_address=UNIT_TRANSFER_SENDER, partner_balance=amount, ) from_route = factories.route_from_channel(from_channel) expiration = from_channel.reveal_timeout + block_number + 1 from_transfer = factories.make_signed_transfer( amount, initiator, target_address, expiration, UNIT_SECRET, channel_identifier=from_channel.identifier, token_network_address=from_channel.token_network_identifier, ) state_change = ActionInitTarget( from_route, from_transfer, ) iteration = target.handle_inittarget( state_change, from_channel, pseudo_random_generator, block_number, ) assert must_contain_entry( iteration.events, SendSecretRequest, { 'payment_identifier': from_transfer.payment_identifier, 'amount': from_transfer.lock.amount, 'secrethash': from_transfer.lock.secrethash, 'recipient': initiator, }) assert must_contain_entry(iteration.events, SendProcessed, {})
def make_target_state( our_address=factories.ADDR, amount=3, block_number=1, initiator=UNIT_TRANSFER_INITIATOR, expiration=None, pseudo_random_generator=None, ): pseudo_random_generator = pseudo_random_generator or random.Random() channels = make_channel_set( [ NettingChannelStateProperties( our_state=NettingChannelEndStateProperties(address=our_address), partner_state=NettingChannelEndStateProperties( address=UNIT_TRANSFER_SENDER, balance=amount ), ) ] ) expiration = expiration or channels[0].reveal_timeout + block_number + 1 from_transfer = make_target_transfer(channels[0], amount, expiration, initiator) state_change = ActionInitTarget( from_hop=channels.get_hop(0), transfer=from_transfer, balance_proof=from_transfer.balance_proof, sender=from_transfer.balance_proof.sender, # pylint: disable=no-member ) iteration = target.handle_inittarget( state_change=state_change, channel_state=channels[0], pseudo_random_generator=pseudo_random_generator, block_number=block_number, ) return TargetStateSetup( channel=channels[0], new_state=iteration.new_state, our_address=our_address, initiator=initiator, expiration=expiration, amount=amount, block_number=block_number, pseudo_random_generator=pseudo_random_generator, )
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ amount = 3 block_number = 1 initiator = factories.HOP1 target_address = UNIT_TRANSFER_TARGET pseudo_random_generator = random.Random() from_channel = factories.make_channel( our_address=target_address, partner_address=UNIT_TRANSFER_SENDER, partner_balance=amount, ) from_route = factories.route_from_channel(from_channel) expiration = from_channel.reveal_timeout + block_number + 1 from_transfer = factories.make_signed_transfer( amount, initiator, target_address, expiration, UNIT_SECRET, channel_identifier=from_channel.identifier, ) state_change = ActionInitTarget( from_route, from_transfer, ) iteration = target.handle_inittarget( state_change, from_channel, pseudo_random_generator, block_number, ) events = iteration.events assert events assert isinstance(events[0], SendSecretRequest) assert events[0].payment_identifier == from_transfer.payment_identifier assert events[0].amount == from_transfer.lock.amount assert events[0].secrethash == from_transfer.lock.secrethash assert events[0].recipient == initiator
def test_handle_inittarget_bad_expiration(): """ Init transfer must do nothing if the expiration is bad. """ block_number = 1 pseudo_random_generator = random.Random() channels = make_channel_set([channel_properties]) expiration = channels[0].reveal_timeout + block_number + 1 from_transfer = make_target_transfer(channels[0], expiration=expiration) channel.handle_receive_lockedtransfer(channels[0], from_transfer) state_change = ActionInitTarget(channels.get_route(0), from_transfer) iteration = target.handle_inittarget( state_change, channels[0], pseudo_random_generator, block_number, ) assert must_contain_entry(iteration.events, EventUnlockClaimFailed, {})
def make_target_state( our_address=factories.ADDR, amount=3, block_number=1, initiator=UNIT_TRANSFER_INITIATOR, expiration=None, pseudo_random_generator=None, ): pseudo_random_generator = pseudo_random_generator or random.Random() channels = make_channel_set([ NettingChannelStateProperties( our_state=NettingChannelEndStateProperties(address=our_address), partner_state=NettingChannelEndStateProperties( address=UNIT_TRANSFER_SENDER, balance=amount, ), ), ]) expiration = expiration or channels[0].reveal_timeout + block_number + 1 from_transfer = make_target_transfer(channels[0], amount, expiration, initiator) state_change = ActionInitTarget(route=channels.get_route(0), transfer=from_transfer) iteration = target.handle_inittarget( state_change=state_change, channel_state=channels[0], pseudo_random_generator=pseudo_random_generator, block_number=block_number, ) return TargetStateSetup( channel=channels[0], new_state=iteration.new_state, our_address=our_address, initiator=initiator, expiration=expiration, amount=amount, block_number=block_number, pseudo_random_generator=pseudo_random_generator, )
def test_handle_inittarget_bad_expiration(): """ Init transfer must do nothing if the expiration is bad. """ block_number = 1 amount = 3 expire = block_number + factories.UNIT_REVEAL_TIMEOUT initiator = factories.HOP1 from_route, from_transfer = factories.make_from( amount, factories.ADDR, expire, initiator, ) state_change = ActionInitTarget( factories.ADDR, from_route, from_transfer, block_number, ) iteration = target.handle_inittarget(state_change) assert len(iteration.events) == 0
def test_handle_inittarget_bad_expiration(): """ Init transfer must do nothing if the expiration is bad. """ block_number = 1 amount = 3 initiator = factories.HOP1 target_address = UNIT_TRANSFER_TARGET pseudo_random_generator = random.Random() from_channel = factories.make_channel( our_address=target_address, partner_address=UNIT_TRANSFER_SENDER, partner_balance=amount, ) from_route = factories.route_from_channel(from_channel) expiration = from_channel.reveal_timeout + block_number + 1 from_transfer = factories.make_signed_transfer_for( from_channel, amount, initiator, target_address, expiration, UNIT_SECRET, ) channel.handle_receive_lockedtransfer( from_channel, from_transfer, ) state_change = ActionInitTarget(from_route, from_transfer) iteration = target.handle_inittarget( state_change, from_channel, pseudo_random_generator, block_number, ) assert must_contain_entry(iteration.events, EventUnlockClaimFailed, {})
def make_target_state( our_address, amount, block_number, initiator, expiration=None, pseudo_random_generator=None, ): pseudo_random_generator = pseudo_random_generator or random.Random() from_channel = factories.make_channel( our_address=our_address, partner_address=UNIT_TRANSFER_SENDER, partner_balance=amount, ) from_route = factories.route_from_channel(from_channel) if expiration is None: expiration = from_channel.reveal_timeout + block_number + 1 from_transfer = factories.make_signed_transfer_for( from_channel, amount, initiator, our_address, expiration, UNIT_SECRET, ) state_change = ActionInitTarget(from_route, from_transfer) iteration = target.handle_inittarget( state_change, from_channel, pseudo_random_generator, block_number, ) return from_channel, iteration.new_state
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ block_number = 1 pseudo_random_generator = random.Random() channels = make_channel_set([channel_properties]) transfer_properties = LockedTransferSignedStateProperties( transfer=LockedTransferProperties( amount=channels[0].partner_state.contract_balance, expiration=channels[0].reveal_timeout + block_number + 1, balance_proof=BalanceProofProperties( channel_identifier=channels[0].identifier, token_network_identifier=channels[0].token_network_identifier, transferred_amount=0, locked_amount=channels[0].partner_state.contract_balance, ), ), ) from_transfer = create(transfer_properties) state_change = ActionInitTarget(channels.get_route(0), from_transfer) iteration = target.handle_inittarget( state_change, channels[0], pseudo_random_generator, block_number, ) assert must_contain_entry( iteration.events, SendSecretRequest, { 'payment_identifier': from_transfer.payment_identifier, 'amount': from_transfer.lock.amount, 'secrethash': from_transfer.lock.secrethash, 'recipient': UNIT_TRANSFER_INITIATOR, }) assert must_contain_entry(iteration.events, SendProcessed, {})
def test_handle_inittarget(): """ Init transfer must send a secret request if the expiration is valid. """ block_number = 1 pseudo_random_generator = random.Random() channels = make_channel_set([channel_properties]) transfer_properties = LockedTransferSignedStateProperties( transfer=LockedTransferProperties( amount=channels[0].partner_state.contract_balance, expiration=channels[0].reveal_timeout + block_number + 1, balance_proof=BalanceProofProperties( channel_identifier=channels[0].identifier, token_network_identifier=channels[0].token_network_identifier, transferred_amount=0, locked_amount=channels[0].partner_state.contract_balance, ), ), ) from_transfer = create(transfer_properties) state_change = ActionInitTarget(channels.get_route(0), from_transfer) iteration = target.handle_inittarget( state_change, channels[0], pseudo_random_generator, block_number, ) assert must_contain_entry(iteration.events, SendSecretRequest, { 'payment_identifier': from_transfer.payment_identifier, 'amount': from_transfer.lock.amount, 'secrethash': from_transfer.lock.secrethash, 'recipient': UNIT_TRANSFER_INITIATOR, }) assert must_contain_entry(iteration.events, SendProcessed, {})