def test_regression_unfiltered_routes( raiden_network, token_addresses, settle_timeout, deposit, ): """ The transfer should proceed without triggering an assert. Transfers failed in networks where two or more paths to the destination are possible but they share same node as a first hop. """ app0, app1, app2, app3, app4 = raiden_network token = token_addresses[0] registry_address = app0.raiden.default_registry.address # Topology: # # 0 -> 1 -> 2 -> 4 # | ^ # +--> 3 ---+ app_channels = [ (app0, app1), (app1, app2), (app1, app3), (app3, app4), (app2, app4), ] greenlets = [] for first_app, second_app in app_channels: greenlets.append(gevent.spawn( payment_channel_open_and_deposit, first_app, second_app, token, deposit, settle_timeout, )) gevent.wait(greenlets) wait_for_channels( app_channels, registry_address, [token], deposit, ) payment_network_identifier = app0.raiden.default_registry.address token_network_identifier = views.get_token_network_identifier_by_token_address( views.state_from_app(app0), payment_network_identifier, token, ) transfer = app0.raiden.mediated_transfer_async( token_network_identifier=token_network_identifier, amount=1, target=app4.raiden.address, identifier=1, ) assert transfer.wait()
def run_test_regression_unfiltered_routes( raiden_network, token_addresses, settle_timeout, deposit, ): app0, app1, app2, app3, app4 = raiden_network token = token_addresses[0] registry_address = app0.raiden.default_registry.address # Topology: # # 0 -> 1 -> 2 -> 4 # | ^ # +--> 3 ---+ app_channels = [ (app0, app1), (app1, app2), (app1, app3), (app3, app4), (app2, app4), ] greenlets = [] for first_app, second_app in app_channels: greenlets.append( gevent.spawn( payment_channel_open_and_deposit, first_app, second_app, token, deposit, settle_timeout, )) gevent.wait(greenlets) wait_for_channels( app_channels, registry_address, [token], deposit, ) payment_network_identifier = app0.raiden.default_registry.address token_network_identifier = views.get_token_network_identifier_by_token_address( views.state_from_app(app0), payment_network_identifier, token, ) payment_status = app0.raiden.mediated_transfer_async( token_network_identifier=token_network_identifier, amount=1, target=app4.raiden.address, identifier=1, ) assert payment_status.payment_done.wait()
def open_and_wait_for_channels(app_channels, registry_address, token, deposit, settle_timeout): greenlets = set() for first_app, second_app in app_channels: greenlets.add( gevent.spawn( payment_channel_open_and_deposit, first_app, second_app, token, deposit, settle_timeout, )) gevent.joinall(greenlets, raise_error=True) wait_for_channels(app_channels, registry_address, [token], deposit)
def open_and_wait_for_channels(app_channels, registry_address, token, deposit, settle_timeout): greenlets = [] for first_app, second_app in app_channels: greenlets.append( gevent.spawn( payment_channel_open_and_deposit, first_app, second_app, token, deposit, settle_timeout, )) gevent.wait(greenlets) wait_for_channels(app_channels, registry_address, [token], deposit)