supervisor/tests/dbus_service_mocks/network_active_connection.py
Mike Degatano 7fd6dce55f
Migrate to Ruff for lint and format (#4852)
* Migrate to Ruff for lint and format

* Fix pylint issues

* DBus property sets into normal awaitable methods

* Fix tests relying on separate tasks in connect

* Fixes from feedback
2024-02-05 11:37:39 -05:00

153 lines
4.5 KiB
Python

"""Mock of Network Manager Active Connection service."""
from dataclasses import dataclass, field
from dbus_fast.service import PropertyAccess, dbus_property, signal
from .base import DBusServiceMock
BUS_NAME = "org.freedesktop.NetworkManager"
DEFAULT_OBJECT_PATH = "/org/freedesktop/NetworkManager/ActiveConnection/1"
def setup(object_path: str | None = None) -> DBusServiceMock:
"""Create dbus mock object."""
return ActiveConnection(object_path if object_path else DEFAULT_OBJECT_PATH)
@dataclass(slots=True)
class ActiveConnectionFixture:
"""Active Connection fixture."""
connection: str = "/org/freedesktop/NetworkManager/Settings/1"
specific_object: str = "/"
id: str = "Wired connection 1"
uuid: str = "0c23631e-2118-355c-bbb0-8943229cb0d6"
type: str = "802-3-ethernet"
devices: list[str] = field(
default_factory=lambda: ["/org/freedesktop/NetworkManager/Devices/1"]
)
state: int = 2
state_flags: int = 92
default: bool = True
ip4_config: str = "/org/freedesktop/NetworkManager/IP4Config/1"
dhcp4_config: str = "/org/freedesktop/NetworkManager/DHCP4Config/1"
default6: bool = False
ip6_config: str = "/org/freedesktop/NetworkManager/IP6Config/1"
dhcp6_config: str = "/"
vpn: bool = False
master: str = "/"
FIXTURES: dict[str, ActiveConnectionFixture] = {
DEFAULT_OBJECT_PATH: ActiveConnectionFixture(),
"/org/freedesktop/NetworkManager/ActiveConnection/2": ActiveConnectionFixture(
connection="/org/freedesktop/NetworkManager/Settings/2",
devices=[
"/org/freedesktop/NetworkManager/Devices/4",
"/org/freedesktop/NetworkManager/Devices/5",
],
),
}
class ActiveConnection(DBusServiceMock):
"""Active Connection mock.
gdbus introspect --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/ActiveConnection/1
"""
interface = "org.freedesktop.NetworkManager.Connection.Active"
object_path = "/org/freedesktop/NetworkManager/ActiveConnection/1"
def __init__(self, object_path: str):
"""Initialize object."""
super().__init__()
self.object_path = object_path
self.fixture = FIXTURES[object_path]
@dbus_property(access=PropertyAccess.READ)
def Connection(self) -> "o":
"""Get Connection."""
return self.fixture.connection
@dbus_property(access=PropertyAccess.READ)
def SpecificObject(self) -> "o":
"""Get SpecificObject."""
return self.fixture.specific_object
@dbus_property(access=PropertyAccess.READ)
def Id(self) -> "s":
"""Get Id."""
return self.fixture.id
@dbus_property(access=PropertyAccess.READ)
def Uuid(self) -> "s":
"""Get Uuid."""
return self.fixture.uuid
@dbus_property(access=PropertyAccess.READ)
def Type(self) -> "s":
"""Get Type."""
return self.fixture.type
@dbus_property(access=PropertyAccess.READ)
def Devices(self) -> "ao":
"""Get Devices."""
return self.fixture.devices
@dbus_property(access=PropertyAccess.READ)
def State(self) -> "u":
"""Get State."""
return self.fixture.state
@dbus_property(access=PropertyAccess.READ)
def StateFlags(self) -> "u":
"""Get StateFlags."""
return self.fixture.state_flags
@dbus_property(access=PropertyAccess.READ)
def Default(self) -> "b":
"""Get Default."""
return self.fixture.default
@dbus_property(access=PropertyAccess.READ)
def Ip4Config(self) -> "o":
"""Get Ip4Config."""
return self.fixture.ip4_config
@dbus_property(access=PropertyAccess.READ)
def Dhcp4Config(self) -> "o":
"""Get Dhcp4Config."""
return self.fixture.dhcp4_config
@dbus_property(access=PropertyAccess.READ)
def Default6(self) -> "b":
"""Get Default6."""
return self.fixture.default6
@dbus_property(access=PropertyAccess.READ)
def Ip6Config(self) -> "o":
"""Get Ip6Config."""
return self.fixture.ip6_config
@dbus_property(access=PropertyAccess.READ)
def Dhcp6Config(self) -> "o":
"""Get Dhcp6Config."""
return self.fixture.dhcp6_config
@dbus_property(access=PropertyAccess.READ)
def Vpn(self) -> "b":
"""Get Vpn."""
return self.fixture.vpn
@dbus_property(access=PropertyAccess.READ)
def Master(self) -> "o":
"""Get Master."""
return self.fixture.master
@signal()
def StateChanged(self) -> "uu":
"""Signal StateChanged."""
return [2, 0]