mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-12-26 13:37:06 +00:00
* Improve connection settings fixture Make the connection settings fixture behave more closely to the actual NetworkManager. The behavior has been tested with NetworkManager 1.42.4 (Debian 12) and 1.44.2 (HAOS 13.1). This likely behaves similar in older versions too. * Introduce separate skeleton and settings for wireless Instead of having a combined network settings object which has Ethernet and Wirless settings, create a separate settings object for wireless. * Handle addresses/address-data property like NetworkManager * Address ruff check * Improve network API test Add a test which changes from "static" to "auto". Validate that settings are updated accordingly. Specifically, today this does clear the DNS setting (by not providing the property). * ruff format * ruff check * Complete TEST_INTERFACE rename * Add partial network update as test case
99 lines
3.4 KiB
Python
99 lines
3.4 KiB
Python
"""Test connection object."""
|
|
|
|
from dbus_fast.aio.message_bus import MessageBus
|
|
import pytest
|
|
|
|
from supervisor.dbus.const import ConnectionStateFlags
|
|
from supervisor.dbus.network import NetworkManager
|
|
from supervisor.dbus.network.connection import NetworkConnection
|
|
|
|
from tests.const import TEST_INTERFACE_ETH_NAME
|
|
from tests.dbus_service_mocks.base import DBusServiceMock
|
|
from tests.dbus_service_mocks.network_active_connection import (
|
|
ActiveConnection as ActiveConnectionService,
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="active_connection_service", autouse=True)
|
|
async def fixture_active_connection_service(
|
|
network_manager_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
|
) -> ActiveConnectionService:
|
|
"""Mock Active Connection service."""
|
|
yield network_manager_services["network_active_connection"]
|
|
|
|
|
|
async def test_active_connection(
|
|
active_connection_service: ActiveConnectionService, dbus_session_bus: MessageBus
|
|
):
|
|
"""Test active connection."""
|
|
active_connection = NetworkConnection(
|
|
"/org/freedesktop/NetworkManager/ActiveConnection/1"
|
|
)
|
|
|
|
assert active_connection.id is None
|
|
|
|
await active_connection.connect(dbus_session_bus)
|
|
|
|
assert active_connection.id == "Wired connection 1"
|
|
assert active_connection.uuid == "0c23631e-2118-355c-bbb0-8943229cb0d6"
|
|
assert active_connection.state_flags == {
|
|
ConnectionStateFlags.LIFETIME_BOUND_TO_PROFILE_VISIBILITY,
|
|
ConnectionStateFlags.IP6_READY,
|
|
ConnectionStateFlags.IP4_READY,
|
|
ConnectionStateFlags.LAYER2_READY,
|
|
}
|
|
|
|
active_connection_service.emit_properties_changed({"Id": "Wired connection 2"})
|
|
await active_connection_service.ping()
|
|
assert active_connection.id == "Wired connection 2"
|
|
|
|
active_connection_service.emit_properties_changed({}, ["Id"])
|
|
await active_connection_service.ping()
|
|
await active_connection_service.ping()
|
|
assert active_connection.id == "Wired connection 1"
|
|
|
|
|
|
async def test_old_ipv4_disconnect(
|
|
network_manager: NetworkManager, active_connection_service: ActiveConnectionService
|
|
):
|
|
"""Test old ipv4 disconnects on ipv4 change."""
|
|
connection = network_manager.get(TEST_INTERFACE_ETH_NAME).connection
|
|
ipv4 = connection.ipv4
|
|
assert ipv4.is_connected is True
|
|
|
|
active_connection_service.emit_properties_changed({"Ip4Config": "/"})
|
|
await active_connection_service.ping()
|
|
|
|
assert connection.ipv4 is None
|
|
assert ipv4.is_connected is False
|
|
|
|
|
|
async def test_old_ipv6_disconnect(
|
|
network_manager: NetworkManager, active_connection_service: ActiveConnectionService
|
|
):
|
|
"""Test old ipv6 disconnects on ipv6 change."""
|
|
connection = network_manager.get(TEST_INTERFACE_ETH_NAME).connection
|
|
ipv6 = connection.ipv6
|
|
assert ipv6.is_connected is True
|
|
|
|
active_connection_service.emit_properties_changed({"Ip6Config": "/"})
|
|
await active_connection_service.ping()
|
|
|
|
assert connection.ipv6 is None
|
|
assert ipv6.is_connected is False
|
|
|
|
|
|
async def test_old_settings_disconnect(
|
|
network_manager: NetworkManager, active_connection_service: ActiveConnectionService
|
|
):
|
|
"""Test old settings disconnects on settings change."""
|
|
connection = network_manager.get(TEST_INTERFACE_ETH_NAME).connection
|
|
settings = connection.settings
|
|
assert settings.is_connected is True
|
|
|
|
active_connection_service.emit_properties_changed({"Connection": "/"})
|
|
await active_connection_service.ping()
|
|
|
|
assert connection.settings is None
|
|
assert settings.is_connected is False
|