🧪 Add tests for 'primary_interface_ip' in netinfo.py (#14)

* 🧪 Add tests for primary_interface_ip

Added unit tests to fully cover `primary_interface_ip` in `netinfo.py`, handling IPv4, IPv6 and error conditions using mock sockets.
Coverage for `primary_interface_ip` is now 100%.

Co-authored-by: Horizontal42 <75383519+Horizontal42@users.noreply.github.com>

* drop redundant pytest-cov dep addition

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
This commit is contained in:
Horizontal42 2026-08-19 17:37:03 +03:00 • committed by GitHub
parent 45ce7509d2
commit 7418816c6d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -111,7 +111,9 @@ def test_degradation_note_on_windows_mentions_the_api_rather_than_sysctl():
import pytest
from netsleuth.netinfo import iface_for_ip, is_tunnel_iface, mtu_anomaly
from unittest.mock import patch
from netsleuth.netinfo import iface_for_ip, is_tunnel_iface, mtu_anomaly, primary_interface_ip
def test_iface_for_ip_matches_the_owning_adapter():
@ -155,6 +157,35 @@ def test_mtu_anomaly_flags_unusually_small_links_generically():
assert mtu_anomaly(1200) == "small"
@patch("socket.socket")
def test_primary_interface_ip_ipv4_success(mock_socket):
mock_sock_instance = mock_socket.return_value
mock_sock_instance.getsockname.return_value = ("192.168.1.100", 12345)
assert primary_interface_ip(target="8.8.8.8", family=socket.AF_INET) == "192.168.1.100"
mock_socket.assert_called_once_with(socket.AF_INET, socket.SOCK_DGRAM)
mock_sock_instance.connect.assert_called_once_with(("8.8.8.8", 53))
@patch("socket.socket")
def test_primary_interface_ip_ipv6_success(mock_socket):
mock_sock_instance = mock_socket.return_value
mock_sock_instance.getsockname.return_value = ("2001:db8::1", 12345, 0, 0)
assert primary_interface_ip(family=socket.AF_INET6) == "2001:db8::1"
mock_socket.assert_called_once_with(socket.AF_INET6, socket.SOCK_DGRAM)
# The default probe target for IPv6 is "2606:4700:4700::1111"
mock_sock_instance.connect.assert_called_once_with(("2606:4700:4700::1111", 53))
@patch("socket.socket")
def test_primary_interface_ip_oserror(mock_socket):
mock_sock_instance = mock_socket.return_value
mock_sock_instance.connect.side_effect = OSError("Network is unreachable")
assert primary_interface_ip() is None
import socket
from netsleuth.netinfo import _parse_windows_default_gateway