diff --git a/tests/host/test_configuration.py b/tests/host/test_configuration.py index 17b87bb0a..ea7eb52cd 100644 --- a/tests/host/test_configuration.py +++ b/tests/host/test_configuration.py @@ -7,8 +7,8 @@ import pytest from supervisor.coresys import CoreSys from supervisor.dbus.const import DeviceType -from supervisor.host.configuration import Interface, VlanConfig -from supervisor.host.const import InterfaceType +from supervisor.host.configuration import Interface, VlanConfig, WifiConfig +from supervisor.host.const import AuthMethod, InterfaceType, WifiMode from tests.dbus_service_mocks.base import DBusServiceMock from tests.dbus_service_mocks.network_connection_settings import ( @@ -291,3 +291,237 @@ async def test_equals_dbus_interface_eth0_10_real( # Test should pass with matching VLAN config assert test_vlan_interface.equals_dbus_interface(network_interface) is True + + +def test_map_nm_wifi_non_wireless_interface(): + """Test _map_nm_wifi returns None for non-wireless interface.""" + # Mock non-wireless interface + mock_interface = Mock() + mock_interface.type = DeviceType.ETHERNET + mock_interface.settings = Mock() + + result = Interface._map_nm_wifi(mock_interface) + assert result is None + + +def test_map_nm_wifi_no_settings(): + """Test _map_nm_wifi returns None when interface has no settings.""" + # Mock wireless interface without settings + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = None + + result = Interface._map_nm_wifi(mock_interface) + assert result is None + + +def test_map_nm_wifi_open_authentication(): + """Test _map_nm_wifi with open authentication (no security).""" + # Mock wireless interface with open authentication + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "TestSSID" + mock_interface.settings.wireless.mode = "infrastructure" + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert isinstance(result, WifiConfig) + assert result.mode == WifiMode.INFRASTRUCTURE + assert result.ssid == "TestSSID" + assert result.auth == AuthMethod.OPEN + assert result.psk is None + assert result.signal is None + + +def test_map_nm_wifi_wep_authentication(): + """Test _map_nm_wifi with WEP authentication.""" + # Mock wireless interface with WEP authentication + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = Mock() + mock_interface.settings.wireless_security.key_mgmt = "none" + mock_interface.settings.wireless_security.psk = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "WEPNetwork" + mock_interface.settings.wireless.mode = "infrastructure" + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert isinstance(result, WifiConfig) + assert result.auth == AuthMethod.WEP + assert result.ssid == "WEPNetwork" + assert result.psk is None + + +def test_map_nm_wifi_wpa_psk_authentication(): + """Test _map_nm_wifi with WPA-PSK authentication.""" + # Mock wireless interface with WPA-PSK authentication + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = Mock() + mock_interface.settings.wireless_security.key_mgmt = "wpa-psk" + mock_interface.settings.wireless_security.psk = "SecretPassword123" + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "SecureNetwork" + mock_interface.settings.wireless.mode = "infrastructure" + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert isinstance(result, WifiConfig) + assert result.auth == AuthMethod.WPA_PSK + assert result.ssid == "SecureNetwork" + assert result.psk == "SecretPassword123" + + +def test_map_nm_wifi_unsupported_authentication(): + """Test _map_nm_wifi returns None for unsupported authentication method.""" + # Mock wireless interface with unsupported authentication + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = Mock() + mock_interface.settings.wireless_security.key_mgmt = "wpa-eap" # Unsupported + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "EnterpriseNetwork" + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is None + + +def test_map_nm_wifi_different_modes(): + """Test _map_nm_wifi with different wifi modes.""" + modes_to_test = [ + ("infrastructure", WifiMode.INFRASTRUCTURE), + ("mesh", WifiMode.MESH), + ("adhoc", WifiMode.ADHOC), + ("ap", WifiMode.AP), + ] + + for mode_value, expected_mode in modes_to_test: + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "TestSSID" + mock_interface.settings.wireless.mode = mode_value + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert result.mode == expected_mode + + +def test_map_nm_wifi_with_signal(): + """Test _map_nm_wifi with wireless signal strength.""" + # Mock wireless interface with active connection and signal + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "TestSSID" + mock_interface.settings.wireless.mode = "infrastructure" + mock_interface.wireless = Mock() + mock_interface.wireless.active = Mock() + mock_interface.wireless.active.strength = 75 + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert result.signal == 75 + + +def test_map_nm_wifi_without_signal(): + """Test _map_nm_wifi without wireless signal (no active connection).""" + # Mock wireless interface without active connection + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "TestSSID" + mock_interface.settings.wireless.mode = "infrastructure" + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert result.signal is None + + +def test_map_nm_wifi_wireless_no_active_ap(): + """Test _map_nm_wifi with wireless object but no active access point.""" + # Mock wireless interface with wireless object but no active AP + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "TestSSID" + mock_interface.settings.wireless.mode = "infrastructure" + mock_interface.wireless = Mock() + mock_interface.wireless.active = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert result.signal is None + + +def test_map_nm_wifi_no_wireless_settings(): + """Test _map_nm_wifi when wireless settings are missing.""" + # Mock wireless interface without wireless settings + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = None + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert result.ssid == "" + assert result.mode == WifiMode.INFRASTRUCTURE # Default mode + + +def test_map_nm_wifi_no_wireless_mode(): + """Test _map_nm_wifi when wireless mode is not specified.""" + # Mock wireless interface without mode specified + mock_interface = Mock() + mock_interface.type = DeviceType.WIRELESS + mock_interface.settings = Mock() + mock_interface.settings.wireless_security = None + mock_interface.settings.wireless = Mock() + mock_interface.settings.wireless.ssid = "TestSSID" + mock_interface.settings.wireless.mode = None + mock_interface.wireless = None + mock_interface.interface_name = "wlan0" + + result = Interface._map_nm_wifi(mock_interface) + + assert result is not None + assert result.mode == WifiMode.INFRASTRUCTURE # Default mode