def test_transport_presence_updates(raiden_network, restart_node, retry_timeout): """ Create transports and test that matrix delivers presence updates in the presence of filters which ignore all event updates from matrix for broadcast rooms except for the presence events. """ app0, app1, app2 = raiden_network app0.raiden.transport.immediate_health_check_for(app1.raiden.address) app0.raiden.transport.immediate_health_check_for(app2.raiden.address) app1.raiden.transport.immediate_health_check_for(app0.raiden.address) app1.raiden.transport.immediate_health_check_for(app2.raiden.address) app2.raiden.transport.immediate_health_check_for(app0.raiden.address) app2.raiden.transport.immediate_health_check_for(app1.raiden.address) wait_for_network_state(app0.raiden, app1.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app0.raiden, app2.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app1.raiden, app0.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app1.raiden, app2.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app2.raiden, app0.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app2.raiden, app1.raiden.address, NetworkState.REACHABLE, retry_timeout) # Stop app0 app0.stop() wait_for_network_state( app1.raiden, app0.raiden.address, NetworkState.UNREACHABLE, retry_timeout ) wait_for_network_state( app2.raiden, app0.raiden.address, NetworkState.UNREACHABLE, retry_timeout ) # Restart app0 restart_node(app0) app0.raiden.transport.immediate_health_check_for(app1.raiden.address) app0.raiden.transport.immediate_health_check_for(app2.raiden.address) wait_for_network_state(app1.raiden, app0.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app2.raiden, app0.raiden.address, NetworkState.REACHABLE, retry_timeout) # Stop app1 app1.stop() wait_for_network_state( app0.raiden, app1.raiden.address, NetworkState.UNREACHABLE, retry_timeout ) wait_for_network_state( app2.raiden, app1.raiden.address, NetworkState.UNREACHABLE, retry_timeout ) # Restart app1 restart_node(app1) app1.raiden.transport.immediate_health_check_for(app0.raiden.address) app1.raiden.transport.immediate_health_check_for(app2.raiden.address) wait_for_network_state(app0.raiden, app1.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app2.raiden, app1.raiden.address, NetworkState.REACHABLE, retry_timeout) # Stop app2 app2.stop() wait_for_network_state( app0.raiden, app2.raiden.address, NetworkState.UNREACHABLE, retry_timeout ) wait_for_network_state( app1.raiden, app2.raiden.address, NetworkState.UNREACHABLE, retry_timeout ) # Restart app0 app2.start() app2.raiden.transport.immediate_health_check_for(app0.raiden.address) app2.raiden.transport.immediate_health_check_for(app1.raiden.address) wait_for_network_state(app0.raiden, app2.raiden.address, NetworkState.REACHABLE, retry_timeout) wait_for_network_state(app1.raiden, app2.raiden.address, NetworkState.REACHABLE, retry_timeout)
def test_recovery_happy_case( raiden_network, number_of_nodes, deposit, token_addresses, network_wait ): app0, app1, app2 = raiden_network token_address = token_addresses[0] chain_state = views.state_from_app(app0) token_network_registry_address = app0.raiden.default_registry.address token_network_address = views.get_token_network_address_by_token_address( chain_state, token_network_registry_address, token_address ) assert token_network_address # make a few transfers from app0 to app2 amount = PaymentAmount(1) spent_amount = deposit - 2 for identifier in range(spent_amount): transfer_and_assert_path( path=raiden_network, token_address=token_address, amount=amount, identifier=PaymentID(identifier), timeout=network_wait * number_of_nodes, ) app0.stop() waiting.wait_for_network_state( app1.raiden, app0.raiden.address, NetworkState.UNREACHABLE, network_wait ) app0.start() assert_synced_channel_state( token_network_address, app0, deposit - spent_amount, [], app1, deposit + spent_amount, [] ) assert_synced_channel_state( token_network_address, app1, deposit - spent_amount, [], app2, deposit + spent_amount, [] ) # wait for the nodes' healthcheck to update the network statuses waiting.wait_for_healthy(app0.raiden, app1.raiden.address, network_wait) waiting.wait_for_healthy(app1.raiden, app0.raiden.address, network_wait) transfer_and_assert_path( path=raiden_network[::-1], token_address=token_address, amount=amount, identifier=create_default_identifier(), timeout=network_wait * number_of_nodes, ) transfer_and_assert_path( path=raiden_network, token_address=token_address, amount=amount, identifier=create_default_identifier(), timeout=network_wait * number_of_nodes, ) assert_succeeding_transfer_invariants( token_network_address, app0, deposit - spent_amount, [], app1, deposit + spent_amount, [] ) assert_succeeding_transfer_invariants( token_network_address, app1, deposit - spent_amount, [], app2, deposit + spent_amount, [] )