supervisor/tests/dbus/network/test_ip_configuration.py
Mike Degatano 0ddce4d9bc
Use session dbus for network tests (#4191)
* Use session dbus for network tests

* Don't use session dbus for coresys yet
2023-03-17 14:26:41 +01:00

92 lines
3.1 KiB
Python

"""Test Network Manager IP configuration object."""
from ipaddress import IPv4Address, IPv6Address
from dbus_fast.aio.message_bus import MessageBus
import pytest
from supervisor.dbus.network.ip_configuration import IpConfiguration
from tests.common import mock_dbus_services
from tests.dbus_service_mocks.network_ip4config import IP4Config as IP4ConfigService
from tests.dbus_service_mocks.network_ip6config import IP6Config as IP6ConfigService
@pytest.fixture(name="ip4config_service")
async def fixture_ip4config_service(dbus_session_bus: MessageBus) -> IP4ConfigService:
"""Mock IP4Config service."""
yield (await mock_dbus_services({"network_ip4config": None}, dbus_session_bus))[
"network_ip4config"
]
@pytest.fixture(name="ip6config_service")
async def fixture_ip6config_service(dbus_session_bus: MessageBus) -> IP4ConfigService:
"""Mock IP6Config service."""
yield (await mock_dbus_services({"network_ip6config": None}, dbus_session_bus))[
"network_ip6config"
]
async def test_ipv4_configuration(
ip4config_service: IP4ConfigService, dbus_session_bus: MessageBus
):
"""Test ipv4 configuration object."""
ip4 = IpConfiguration("/org/freedesktop/NetworkManager/IP4Config/1")
assert ip4.gateway is None
assert ip4.nameservers is None
await ip4.connect(dbus_session_bus)
assert ip4.gateway == IPv4Address("192.168.2.1")
assert ip4.nameservers == [IPv4Address("192.168.2.2")]
ip4config_service.emit_properties_changed({"Gateway": "192.168.100.1"})
await ip4config_service.ping()
assert ip4.gateway == IPv4Address("192.168.100.1")
ip4config_service.emit_properties_changed({}, ["Gateway"])
await ip4config_service.ping()
await ip4config_service.ping()
assert ip4.gateway == IPv4Address("192.168.2.1")
async def test_ipv6_configuration(
ip6config_service: IP6ConfigService, dbus_session_bus: MessageBus
):
"""Test ipv4 configuration object."""
ip6 = IpConfiguration("/org/freedesktop/NetworkManager/IP6Config/1", ip4=False)
assert ip6.gateway is None
assert ip6.nameservers is None
await ip6.connect(dbus_session_bus)
assert ip6.gateway == IPv6Address("fe80::da58:d7ff:fe00:9c69")
assert ip6.nameservers == [
IPv6Address("2001:1620:2777:1::10"),
IPv6Address("2001:1620:2777:2::20"),
]
ip6config_service.emit_properties_changed({"Gateway": "2001:1620:2777:1::10"})
await ip6config_service.ping()
assert ip6.gateway == IPv6Address("2001:1620:2777:1::10")
ip6config_service.emit_properties_changed({}, ["Gateway"])
await ip6config_service.ping()
await ip6config_service.ping()
assert ip6.gateway == IPv6Address("fe80::da58:d7ff:fe00:9c69")
async def test_gateway_empty_string(
ip4config_service: IP4ConfigService, dbus_session_bus: MessageBus
):
"""Test empty string in gateway returns None."""
ip4 = IpConfiguration("/org/freedesktop/NetworkManager/IP4Config/1", ip4=True)
await ip4.connect(dbus_session_bus)
ip4config_service.emit_properties_changed({"Gateway": ""})
await ip4config_service.ping()
assert ip4.gateway is None