def test_routing_mocked_pfs_invalid_json(chain_state, token_network_state, one_to_n_address, our_address): token_network_state, addresses, _ = create_square_network_topology( token_network_state=token_network_state, our_address=our_address) address1, address2, address3, address4 = addresses # test routing with all nodes available chain_state.nodeaddresses_to_networkstates = { address1: NetworkState.REACHABLE, address2: NetworkState.REACHABLE, address3: NetworkState.REACHABLE, } response = mocked_failed_response(error=ValueError(), status_code=200) with patch.object(requests, "post", return_value=response): routes, feedback_token = get_best_routes_with_iou_request_mocked( chain_state=chain_state, token_network_state=token_network_state, one_to_n_address=one_to_n_address, from_address=our_address, to_address=address4, amount=50, ) # Request to PFS failed, but we do not fall back to internal routing assert len(routes) == 0 assert feedback_token is None
def test_routing_mocked_pfs_invalid_json(chain_state, token_network_state, one_to_n_address, our_address): token_network_state, addresses, channel_states = create_square_network_topology( token_network_state=token_network_state, our_address=our_address) address1, address2, address3, address4 = addresses channel_state1, channel_state2 = channel_states # test routing with all nodes available chain_state.nodeaddresses_to_networkstates = { address1: NetworkState.REACHABLE, address2: NetworkState.REACHABLE, address3: NetworkState.REACHABLE, } response = mocked_failed_response(error=ValueError(), status_code=200) with patch.object(requests, "post", return_value=response): routes, feedback_token = get_best_routes_with_iou_request_mocked( chain_state=chain_state, token_network_state=token_network_state, one_to_n_address=one_to_n_address, from_address=our_address, to_address=address4, amount=50, ) # PFS doesn't work, so internal routing is used, so two possible routes are returned, # whereas the path via address1 is shorter ( # even if the route is not possible from a global perspective) # in case the mocked pfs response were used, we would not see address1 on the route assert routes[0].next_hop_address == address1 assert routes[0].forward_channel_id == channel_state1.identifier assert routes[1].next_hop_address == address2 assert routes[1].forward_channel_id == channel_state2.identifier assert feedback_token is None
def test_get_and_update_iou(one_to_n_address): request_args = dict( url="url", token_network_address=factories.UNIT_TOKEN_NETWORK_ADDRESS, sender=factories.make_address(), receiver=factories.make_address(), privkey=PRIVKEY, ) # RequestExceptions should be reraised as ServiceRequestFailed with pytest.raises(ServiceRequestFailed): with patch.object(session, "get", side_effect=requests.RequestException): get_last_iou(**request_args) # invalid JSON should raise a ServiceRequestFailed response = mocked_failed_response(error=ValueError) with pytest.raises(ServiceRequestFailed): with patch.object(session, "get", return_value=response): get_last_iou(**request_args) response = mocked_json_response(response_data={"other_key": "other_value"}) with patch.object(session, "get", return_value=response): iou = get_last_iou(**request_args) assert iou is None, "get_pfs_iou should return None if pfs returns no iou." last_iou = make_iou( pfs_config=PFS_CONFIG, our_address=factories.UNIT_TRANSFER_INITIATOR, privkey=PRIVKEY, block_number=10, one_to_n_address=one_to_n_address, chain_id=4, offered_fee=TokenAmount(1), ) response = mocked_json_response(response_data=dict( last_iou=last_iou.as_json())) with patch.object(session, "get", return_value=response): iou = get_last_iou(**request_args) assert iou == last_iou new_iou_1 = update_iou(replace(iou), PRIVKEY, added_amount=10) assert new_iou_1.amount == last_iou.amount + 10 assert new_iou_1.sender == last_iou.sender assert new_iou_1.receiver == last_iou.receiver assert new_iou_1.expiration_block == last_iou.expiration_block assert new_iou_1.signature is not None new_iou_2 = update_iou(replace(iou), PRIVKEY, expiration_block=45) assert new_iou_2.expiration_block == 45 assert new_iou_1.sender == iou.sender assert new_iou_1.receiver == iou.receiver assert new_iou_1.expiration_block == iou.expiration_block assert new_iou_2.signature is not None