def test_get_external_ip_from_known_nodes_with_one_known_node(mock_requests): sensor = FleetSensor(domain=MOCK_NETWORK) sensor.record_node(Dummy(b'deadbeefdeadbeefdead')) sensor.record_fleet_state() assert len(sensor) == 1 get_external_ip_from_known_nodes(known_nodes=sensor) # skipped because there are too few known nodes mock_requests.assert_not_called()
def test_get_external_ip_cascade_failure(mocker, mock_requests): first = mocker.patch('nucypher.utilities.networking.get_external_ip_from_known_nodes', return_value=None) second = mocker.patch('nucypher.utilities.networking.get_external_ip_from_default_teacher', return_value=None) third = mocker.patch('nucypher.utilities.networking.get_external_ip_from_centralized_source', return_value=None) sensor = FleetSensor(domain=MOCK_NETWORK) sensor.record_node(Dummy('0xdeadbeef')) sensor.record_fleet_state() with pytest.raises(UnknownIPAddress, match='External IP address detection failed'): determine_external_ip_address(network=MOCK_NETWORK, known_nodes=sensor) first.assert_called_once() second.assert_called_once() third.assert_called_once()
def test_get_external_ip_from_known_nodes(mock_client): # Setup FleetSensor sensor = FleetSensor(domain=MOCK_NETWORK) sample_size = 3 sensor.record_node(Dummy('0xdeadbeef')) sensor.record_node(Dummy('0xdeadllama')) sensor.record_node(Dummy('0xdeadmouse')) sensor.record_fleet_state() assert len(sensor) == sample_size # First sampled node replies get_external_ip_from_known_nodes(known_nodes=sensor, sample_size=sample_size) assert mock_client.call_count == 1 mock_client.call_count = 0 # reset # All sampled nodes dont respond mock_client.return_value = Dummy.BadResponse get_external_ip_from_known_nodes(known_nodes=sensor, sample_size=sample_size) assert mock_client.call_count == sample_size
def test_get_external_ip_from_known_nodes_client(mocker, mock_client): # Setup FleetSensor sensor = FleetSensor(domain=MOCK_NETWORK) sample_size = 3 sensor.record_node(Dummy('0xdeadbeef')) sensor.record_node(Dummy('0xdeadllama')) sensor.record_node(Dummy('0xdeadmouse')) sensor.record_fleet_state() assert len(sensor) == sample_size # Setup HTTP Client mocker.patch.object(Ursula, 'from_teacher_uri', return_value=Dummy('0xdeadpork')) teacher_uri = RestMiddleware.TEACHER_NODES[MOCK_NETWORK][0] get_external_ip_from_known_nodes(known_nodes=sensor, sample_size=sample_size) assert mock_client.call_count == 1 # first node responded function, endpoint = mock_client.call_args[0] assert function.__name__ == 'get' assert endpoint == f'https://{teacher_uri}/ping'