Skip to content

Commit a8b7923

Browse files
Copilotagners
andauthored
Add test coverage for _map_nm_wifi method (#6275)
* Initial plan * Add comprehensive test coverage for _map_nm_wifi method Co-authored-by: agners <[email protected]> --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: agners <[email protected]>
1 parent b3b7bc2 commit a8b7923

File tree

1 file changed

+236
-2
lines changed

1 file changed

+236
-2
lines changed

tests/host/test_configuration.py

Lines changed: 236 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
from supervisor.coresys import CoreSys
99
from supervisor.dbus.const import DeviceType
10-
from supervisor.host.configuration import Interface, VlanConfig
11-
from supervisor.host.const import InterfaceType
10+
from supervisor.host.configuration import Interface, VlanConfig, WifiConfig
11+
from supervisor.host.const import AuthMethod, InterfaceType, WifiMode
1212

1313
from tests.dbus_service_mocks.base import DBusServiceMock
1414
from tests.dbus_service_mocks.network_connection_settings import (
@@ -291,3 +291,237 @@ async def test_equals_dbus_interface_eth0_10_real(
291291

292292
# Test should pass with matching VLAN config
293293
assert test_vlan_interface.equals_dbus_interface(network_interface) is True
294+
295+
296+
def test_map_nm_wifi_non_wireless_interface():
297+
"""Test _map_nm_wifi returns None for non-wireless interface."""
298+
# Mock non-wireless interface
299+
mock_interface = Mock()
300+
mock_interface.type = DeviceType.ETHERNET
301+
mock_interface.settings = Mock()
302+
303+
result = Interface._map_nm_wifi(mock_interface)
304+
assert result is None
305+
306+
307+
def test_map_nm_wifi_no_settings():
308+
"""Test _map_nm_wifi returns None when interface has no settings."""
309+
# Mock wireless interface without settings
310+
mock_interface = Mock()
311+
mock_interface.type = DeviceType.WIRELESS
312+
mock_interface.settings = None
313+
314+
result = Interface._map_nm_wifi(mock_interface)
315+
assert result is None
316+
317+
318+
def test_map_nm_wifi_open_authentication():
319+
"""Test _map_nm_wifi with open authentication (no security)."""
320+
# Mock wireless interface with open authentication
321+
mock_interface = Mock()
322+
mock_interface.type = DeviceType.WIRELESS
323+
mock_interface.settings = Mock()
324+
mock_interface.settings.wireless_security = None
325+
mock_interface.settings.wireless = Mock()
326+
mock_interface.settings.wireless.ssid = "TestSSID"
327+
mock_interface.settings.wireless.mode = "infrastructure"
328+
mock_interface.wireless = None
329+
mock_interface.interface_name = "wlan0"
330+
331+
result = Interface._map_nm_wifi(mock_interface)
332+
333+
assert result is not None
334+
assert isinstance(result, WifiConfig)
335+
assert result.mode == WifiMode.INFRASTRUCTURE
336+
assert result.ssid == "TestSSID"
337+
assert result.auth == AuthMethod.OPEN
338+
assert result.psk is None
339+
assert result.signal is None
340+
341+
342+
def test_map_nm_wifi_wep_authentication():
343+
"""Test _map_nm_wifi with WEP authentication."""
344+
# Mock wireless interface with WEP authentication
345+
mock_interface = Mock()
346+
mock_interface.type = DeviceType.WIRELESS
347+
mock_interface.settings = Mock()
348+
mock_interface.settings.wireless_security = Mock()
349+
mock_interface.settings.wireless_security.key_mgmt = "none"
350+
mock_interface.settings.wireless_security.psk = None
351+
mock_interface.settings.wireless = Mock()
352+
mock_interface.settings.wireless.ssid = "WEPNetwork"
353+
mock_interface.settings.wireless.mode = "infrastructure"
354+
mock_interface.wireless = None
355+
mock_interface.interface_name = "wlan0"
356+
357+
result = Interface._map_nm_wifi(mock_interface)
358+
359+
assert result is not None
360+
assert isinstance(result, WifiConfig)
361+
assert result.auth == AuthMethod.WEP
362+
assert result.ssid == "WEPNetwork"
363+
assert result.psk is None
364+
365+
366+
def test_map_nm_wifi_wpa_psk_authentication():
367+
"""Test _map_nm_wifi with WPA-PSK authentication."""
368+
# Mock wireless interface with WPA-PSK authentication
369+
mock_interface = Mock()
370+
mock_interface.type = DeviceType.WIRELESS
371+
mock_interface.settings = Mock()
372+
mock_interface.settings.wireless_security = Mock()
373+
mock_interface.settings.wireless_security.key_mgmt = "wpa-psk"
374+
mock_interface.settings.wireless_security.psk = "SecretPassword123"
375+
mock_interface.settings.wireless = Mock()
376+
mock_interface.settings.wireless.ssid = "SecureNetwork"
377+
mock_interface.settings.wireless.mode = "infrastructure"
378+
mock_interface.wireless = None
379+
mock_interface.interface_name = "wlan0"
380+
381+
result = Interface._map_nm_wifi(mock_interface)
382+
383+
assert result is not None
384+
assert isinstance(result, WifiConfig)
385+
assert result.auth == AuthMethod.WPA_PSK
386+
assert result.ssid == "SecureNetwork"
387+
assert result.psk == "SecretPassword123"
388+
389+
390+
def test_map_nm_wifi_unsupported_authentication():
391+
"""Test _map_nm_wifi returns None for unsupported authentication method."""
392+
# Mock wireless interface with unsupported authentication
393+
mock_interface = Mock()
394+
mock_interface.type = DeviceType.WIRELESS
395+
mock_interface.settings = Mock()
396+
mock_interface.settings.wireless_security = Mock()
397+
mock_interface.settings.wireless_security.key_mgmt = "wpa-eap" # Unsupported
398+
mock_interface.settings.wireless = Mock()
399+
mock_interface.settings.wireless.ssid = "EnterpriseNetwork"
400+
mock_interface.interface_name = "wlan0"
401+
402+
result = Interface._map_nm_wifi(mock_interface)
403+
404+
assert result is None
405+
406+
407+
def test_map_nm_wifi_different_modes():
408+
"""Test _map_nm_wifi with different wifi modes."""
409+
modes_to_test = [
410+
("infrastructure", WifiMode.INFRASTRUCTURE),
411+
("mesh", WifiMode.MESH),
412+
("adhoc", WifiMode.ADHOC),
413+
("ap", WifiMode.AP),
414+
]
415+
416+
for mode_value, expected_mode in modes_to_test:
417+
mock_interface = Mock()
418+
mock_interface.type = DeviceType.WIRELESS
419+
mock_interface.settings = Mock()
420+
mock_interface.settings.wireless_security = None
421+
mock_interface.settings.wireless = Mock()
422+
mock_interface.settings.wireless.ssid = "TestSSID"
423+
mock_interface.settings.wireless.mode = mode_value
424+
mock_interface.wireless = None
425+
mock_interface.interface_name = "wlan0"
426+
427+
result = Interface._map_nm_wifi(mock_interface)
428+
429+
assert result is not None
430+
assert result.mode == expected_mode
431+
432+
433+
def test_map_nm_wifi_with_signal():
434+
"""Test _map_nm_wifi with wireless signal strength."""
435+
# Mock wireless interface with active connection and signal
436+
mock_interface = Mock()
437+
mock_interface.type = DeviceType.WIRELESS
438+
mock_interface.settings = Mock()
439+
mock_interface.settings.wireless_security = None
440+
mock_interface.settings.wireless = Mock()
441+
mock_interface.settings.wireless.ssid = "TestSSID"
442+
mock_interface.settings.wireless.mode = "infrastructure"
443+
mock_interface.wireless = Mock()
444+
mock_interface.wireless.active = Mock()
445+
mock_interface.wireless.active.strength = 75
446+
mock_interface.interface_name = "wlan0"
447+
448+
result = Interface._map_nm_wifi(mock_interface)
449+
450+
assert result is not None
451+
assert result.signal == 75
452+
453+
454+
def test_map_nm_wifi_without_signal():
455+
"""Test _map_nm_wifi without wireless signal (no active connection)."""
456+
# Mock wireless interface without active connection
457+
mock_interface = Mock()
458+
mock_interface.type = DeviceType.WIRELESS
459+
mock_interface.settings = Mock()
460+
mock_interface.settings.wireless_security = None
461+
mock_interface.settings.wireless = Mock()
462+
mock_interface.settings.wireless.ssid = "TestSSID"
463+
mock_interface.settings.wireless.mode = "infrastructure"
464+
mock_interface.wireless = None
465+
mock_interface.interface_name = "wlan0"
466+
467+
result = Interface._map_nm_wifi(mock_interface)
468+
469+
assert result is not None
470+
assert result.signal is None
471+
472+
473+
def test_map_nm_wifi_wireless_no_active_ap():
474+
"""Test _map_nm_wifi with wireless object but no active access point."""
475+
# Mock wireless interface with wireless object but no active AP
476+
mock_interface = Mock()
477+
mock_interface.type = DeviceType.WIRELESS
478+
mock_interface.settings = Mock()
479+
mock_interface.settings.wireless_security = None
480+
mock_interface.settings.wireless = Mock()
481+
mock_interface.settings.wireless.ssid = "TestSSID"
482+
mock_interface.settings.wireless.mode = "infrastructure"
483+
mock_interface.wireless = Mock()
484+
mock_interface.wireless.active = None
485+
mock_interface.interface_name = "wlan0"
486+
487+
result = Interface._map_nm_wifi(mock_interface)
488+
489+
assert result is not None
490+
assert result.signal is None
491+
492+
493+
def test_map_nm_wifi_no_wireless_settings():
494+
"""Test _map_nm_wifi when wireless settings are missing."""
495+
# Mock wireless interface without wireless settings
496+
mock_interface = Mock()
497+
mock_interface.type = DeviceType.WIRELESS
498+
mock_interface.settings = Mock()
499+
mock_interface.settings.wireless_security = None
500+
mock_interface.settings.wireless = None
501+
mock_interface.wireless = None
502+
mock_interface.interface_name = "wlan0"
503+
504+
result = Interface._map_nm_wifi(mock_interface)
505+
506+
assert result is not None
507+
assert result.ssid == ""
508+
assert result.mode == WifiMode.INFRASTRUCTURE # Default mode
509+
510+
511+
def test_map_nm_wifi_no_wireless_mode():
512+
"""Test _map_nm_wifi when wireless mode is not specified."""
513+
# Mock wireless interface without mode specified
514+
mock_interface = Mock()
515+
mock_interface.type = DeviceType.WIRELESS
516+
mock_interface.settings = Mock()
517+
mock_interface.settings.wireless_security = None
518+
mock_interface.settings.wireless = Mock()
519+
mock_interface.settings.wireless.ssid = "TestSSID"
520+
mock_interface.settings.wireless.mode = None
521+
mock_interface.wireless = None
522+
mock_interface.interface_name = "wlan0"
523+
524+
result = Interface._map_nm_wifi(mock_interface)
525+
526+
assert result is not None
527+
assert result.mode == WifiMode.INFRASTRUCTURE # Default mode

0 commit comments

Comments
 (0)