|
7 | 7 |
|
8 | 8 | from supervisor.coresys import CoreSys |
9 | 9 | 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 |
12 | 12 |
|
13 | 13 | from tests.dbus_service_mocks.base import DBusServiceMock |
14 | 14 | from tests.dbus_service_mocks.network_connection_settings import ( |
@@ -291,3 +291,237 @@ async def test_equals_dbus_interface_eth0_10_real( |
291 | 291 |
|
292 | 292 | # Test should pass with matching VLAN config |
293 | 293 | 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