def test_sort_servers_closest(monkeypatch): cnt = 0 def random_or_none(url): nonlocal cnt cnt += 1 return random.random() if cnt % 3 else None mock_get_http_rtt = Mock( spec=raiden.network.transport.matrix.utils.get_http_rtt, side_effect=random_or_none, ) monkeypatch.setattr(raiden.network.transport.matrix.utils, 'get_http_rtt', mock_get_http_rtt) with pytest.raises(TransportError): sort_servers_closest(['ftp://server1.com', 'server2.com']) server_count = 9 sorted_servers = sort_servers_closest( [f'https://server{i}.xyz' for i in range(server_count)]) rtts = [rtt for (_, rtt) in sorted_servers] assert len(sorted_servers) <= server_count assert all(rtts) and rtts == sorted(rtts)
def test_sort_servers_closest(monkeypatch): cnt = 0 def random_or_none(url): # pylint: disable=unused-argument nonlocal cnt cnt += 1 return random.random() if cnt % 3 else None mock_get_http_rtt = Mock( spec=raiden.network.transport.matrix.utils.get_http_rtt, side_effect=random_or_none) monkeypatch.setattr(raiden.network.transport.matrix.utils, "get_http_rtt", mock_get_http_rtt) with pytest.raises(TransportError): sort_servers_closest(["ftp://server1.com", "server2.com"]) server_count = 9 sorted_servers = sort_servers_closest( [f"https://server{i}.xyz" for i in range(server_count)]) rtts = list(sorted_servers.values()) assert len(sorted_servers) <= server_count assert all(rtts) and rtts == sorted(rtts)
def test_sort_servers_closest(requests_responses): with pytest.raises(TransportError): # `ftp://` is not a valid scheme sort_servers_closest(["ftp://server1.com"]) def make_dummy_response(response_times: List[float]): response_time_iter = cycle(response_times) def response(_): gevent.sleep(next(response_time_iter)) return 200, {}, "" return response # Average response time := 0.1 requests_responses.add_callback(responses.HEAD, "http://url0", callback=make_dummy_response( [0.05, 0.05, 0.2])) # Average response time := 0.05 requests_responses.add_callback(responses.HEAD, "http://url1", callback=make_dummy_response( [0.05, 0.05, 0.05])) # Exceeds 0.3 max timeout defined below requests_responses.add_callback(responses.HEAD, "http://url2", callback=make_dummy_response( [0.5, 0.5, 0.5])) # Raises an exception requests_responses.add(responses.HEAD, "http://url3", body=requests.RequestException()) sorted_servers = sort_servers_closest( ["http://url0", "http://url1", "http://url2", "http://url3"], max_timeout=0.3) rtts = [round(rtt, 2) for rtt in sorted_servers.values()] assert len(sorted_servers) == 2 assert all(rtts) and rtts == sorted(rtts) assert rtts == [0.05, 0.10] with pytest.raises(TransportError): # Only invalid servers sort_servers_closest(["http://url2", "http://url3"], max_timeout=0.3)