mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-11-09 10:59:43 +00:00
Add comprehensive test coverage for _map_nm_wifi method
Co-authored-by: agners <34061+agners@users.noreply.github.com>
This commit is contained in:
@@ -7,8 +7,8 @@ import pytest
|
|||||||
|
|
||||||
from supervisor.coresys import CoreSys
|
from supervisor.coresys import CoreSys
|
||||||
from supervisor.dbus.const import DeviceType
|
from supervisor.dbus.const import DeviceType
|
||||||
from supervisor.host.configuration import Interface, VlanConfig
|
from supervisor.host.configuration import Interface, VlanConfig, WifiConfig
|
||||||
from supervisor.host.const import InterfaceType
|
from supervisor.host.const import AuthMethod, InterfaceType, WifiMode
|
||||||
|
|
||||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||||
from tests.dbus_service_mocks.network_connection_settings import (
|
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
|
# Test should pass with matching VLAN config
|
||||||
assert test_vlan_interface.equals_dbus_interface(network_interface) is True
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user