Files
supervisor/tests/dbus/network/test_interface.py
2022-10-04 20:17:30 +02:00

105 lines
3.9 KiB
Python

"""Test NetwrokInterface."""
import asyncio
from ipaddress import IPv4Address, IPv4Interface, IPv6Address, IPv6Interface
import pytest
from supervisor.dbus.const import DeviceType, InterfaceMethod
from supervisor.dbus.network import NetworkManager
from supervisor.dbus.network.interface import NetworkInterface
from tests.common import fire_property_change_signal
from tests.const import TEST_INTERFACE, TEST_INTERFACE_WLAN
@pytest.mark.asyncio
async def test_network_interface_ethernet(network_manager: NetworkManager):
"""Test network interface."""
interface = network_manager.interfaces[TEST_INTERFACE]
assert interface.sync_properties is True
assert interface.name == TEST_INTERFACE
assert interface.type == DeviceType.ETHERNET
assert interface.connection.state == 2
assert interface.connection.uuid == "0c23631e-2118-355c-bbb0-8943229cb0d6"
assert interface.connection.ipv4.address == [IPv4Interface("192.168.2.148/24")]
assert interface.connection.ipv6.address == [
IPv6Interface("2a03:169:3df5:0:6be9:2588:b26a:a679/64"),
IPv6Interface("fd14:949b:c9cc:0:522b:8108:8ff8:cca3/64"),
IPv6Interface("2a03:169:3df5::2f1/128"),
IPv6Interface("fd14:949b:c9cc::2f1/128"),
IPv6Interface("fe80::ffe3:319e:c630:9f51/64"),
]
assert interface.connection.ipv4.gateway == IPv4Address("192.168.2.1")
assert interface.connection.ipv6.gateway == IPv6Address("fe80::da58:d7ff:fe00:9c69")
assert interface.connection.ipv4.nameservers == [IPv4Address("192.168.2.2")]
assert interface.connection.ipv6.nameservers == [
IPv6Address("2001:1620:2777:1::10"),
IPv6Address("2001:1620:2777:2::20"),
]
assert interface.settings.ipv4.method == InterfaceMethod.AUTO
assert interface.settings.ipv6.method == InterfaceMethod.AUTO
assert interface.settings.connection.id == "Wired connection 1"
fire_property_change_signal(interface.connection, {"State": 4})
await asyncio.sleep(0)
assert interface.connection.state == 4
fire_property_change_signal(interface.connection, {}, ["State"])
await asyncio.sleep(0)
assert interface.connection.state == 2
@pytest.mark.asyncio
async def test_network_interface_wlan(network_manager: NetworkManager):
"""Test network interface."""
interface = network_manager.interfaces[TEST_INTERFACE_WLAN]
assert interface.sync_properties is True
assert interface.name == TEST_INTERFACE_WLAN
assert interface.type == DeviceType.WIRELESS
async def test_old_connection_disconnect(network_manager: NetworkManager):
"""Test old connection disconnects on connection change."""
interface = network_manager.interfaces[TEST_INTERFACE]
connection = interface.connection
assert connection.is_connected is True
fire_property_change_signal(interface, {"ActiveConnection": "/"})
await asyncio.sleep(0)
assert interface.connection is None
assert connection.is_connected is False
async def test_old_wireless_disconnect(network_manager: NetworkManager):
"""Test old wireless disconnects on type change."""
interface = network_manager.interfaces[TEST_INTERFACE_WLAN]
wireless = interface.wireless
assert wireless.is_connected is True
fire_property_change_signal(interface, {"DeviceType": DeviceType.ETHERNET})
await asyncio.sleep(0)
assert interface.wireless is None
assert wireless.is_connected is False
async def test_unmanaged_interface(network_manager: NetworkManager):
"""Test unmanaged interfaces don't sync properties."""
interface = NetworkInterface(
network_manager.dbus, "/org/freedesktop/NetworkManager/Devices/35"
)
await interface.connect(network_manager.dbus.bus)
assert interface.managed is False
assert interface.connection is None
assert interface.driver == "veth"
assert interface.sync_properties is False
with pytest.raises(AssertionError):
fire_property_change_signal(interface, {"Driver": "test"})