supervisor/tests/dbus_service_mocks/network_device.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

372 lines
10 KiB
Python

"""Mock of Network Manager Device service."""
from ctypes import c_uint32
from dataclasses import dataclass
from dbus_fast import Variant
from dbus_fast.service import PropertyAccess, dbus_property, signal
from .base import DBusServiceMock, dbus_method
BUS_NAME = "org.freedesktop.NetworkManager"
DEFAULT_OBJECT_PATH = "/org/freedesktop/NetworkManager/Devices/1"
def setup(object_path: str | None = None) -> DBusServiceMock:
"""Create dbus mock object."""
return Device(object_path if object_path else DEFAULT_OBJECT_PATH)
# pylint: disable=invalid-name
@dataclass(slots=True)
class DeviceFixture:
"""Device fixture."""
Udi: str
Path: str
Interface: str
IpInterface: str
Driver: str
DriverVersion: str
FirmwareVersion: str
Capabilities: c_uint32
Ip4Address: c_uint32
State: c_uint32
StateReason: list[c_uint32]
ActiveConnection: str
Ip4Config: str
Dhcp4Config: str
Ip6Config: str
Dhcp6Config: str
Managed: bool
Autoconnect: bool
FirmwareMissing: bool
NmPluginMissing: bool
DeviceType: c_uint32
AvailableConnections: list[str]
PhysicalPortId: str
Mtu: c_uint32
Metered: c_uint32
LldpNeighbors: list[dict[str, Variant]]
Real: bool
Ip4Connectivity: c_uint32
Ip6Connectivity: c_uint32
InterfaceFlags: c_uint32
HwAddress: str
Ports: list[str]
FIXTURES: dict[str, DeviceFixture] = {
"/org/freedesktop/NetworkManager/Devices/1": DeviceFixture(
Udi="/sys/devices/pci0000:00/0000:00:1f.6/net/eth0",
Path="platform-ff3f0000.ethernet",
Interface="eth0",
IpInterface="eth0",
Driver="e1000e",
DriverVersion="3.2.6-k",
FirmwareVersion="0.7-4",
Capabilities=3,
Ip4Address=2499979456,
State=100,
StateReason=[100, 0],
ActiveConnection="/org/freedesktop/NetworkManager/ActiveConnection/1",
Ip4Config="/org/freedesktop/NetworkManager/IP4Config/1",
Dhcp4Config="/org/freedesktop/NetworkManager/DHCP4Config/1",
Ip6Config="/org/freedesktop/NetworkManager/IP6Config/1",
Dhcp6Config="/",
Managed=True,
Autoconnect=True,
FirmwareMissing=False,
NmPluginMissing=False,
DeviceType=1,
AvailableConnections=["/org/freedesktop/NetworkManager/Settings/1"],
PhysicalPortId="",
Mtu=1500,
Metered=4,
LldpNeighbors=[],
Real=True,
Ip4Connectivity=4,
Ip6Connectivity=3,
InterfaceFlags=65539,
HwAddress="AA:BB:CC:DD:EE:FF",
Ports=[],
),
"/org/freedesktop/NetworkManager/Devices/3": DeviceFixture(
Udi="/sys/devices/platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0",
Path="platform.fe300000.mmcnr",
Interface="wlan0",
IpInterface="",
Driver="brcmfmac",
DriverVersion="7.45.154",
FirmwareVersion="01-4fbe0b04",
Capabilities=1,
Ip4Address=0,
State=30,
StateReason=[30, 42],
ActiveConnection="/",
Ip4Config="/",
Dhcp4Config="/",
Ip6Config="/",
Dhcp6Config="/",
Managed=True,
Autoconnect=True,
FirmwareMissing=False,
NmPluginMissing=False,
DeviceType=2,
AvailableConnections=[],
PhysicalPortId="",
Mtu=1500,
Metered=0,
LldpNeighbors=[],
Real=True,
Ip4Connectivity=1,
Ip6Connectivity=1,
InterfaceFlags=65539,
HwAddress="FF:EE:DD:CC:BB:AA",
Ports=[],
),
"/org/freedesktop/NetworkManager/Devices/35": DeviceFixture(
Udi="/sys/devices/virtual/net/veth87bd238'",
Path="",
Interface="veth87bd238",
IpInterface="veth87bd238",
Driver="veth",
DriverVersion="1.0",
FirmwareVersion="",
Capabilities=7,
Ip4Address=0,
State=10,
StateReason=[10, 0],
ActiveConnection="/",
Ip4Config="/",
Dhcp4Config="/",
Ip6Config="/",
Dhcp6Config="/",
Managed=False,
Autoconnect=True,
FirmwareMissing=False,
NmPluginMissing=False,
DeviceType=20,
AvailableConnections=[],
PhysicalPortId="",
Mtu=1500,
Metered=0,
LldpNeighbors=[],
Real=True,
Ip4Connectivity=0,
Ip6Connectivity=0,
InterfaceFlags=65539,
HwAddress="9A:4B:E3:9A:F8:D3",
Ports=[],
),
}
class Device(DBusServiceMock):
"""Device mock.
gdbus introspect --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/Devices/1
"""
interface = "org.freedesktop.NetworkManager.Device"
def __init__(self, object_path: str):
"""Initialize object."""
super().__init__()
self.object_path = object_path
self.fixture: DeviceFixture = FIXTURES[object_path]
@dbus_property(access=PropertyAccess.READ)
def Udi(self) -> "s":
"""Get Udi."""
return self.fixture.Udi
@dbus_property(access=PropertyAccess.READ)
def Path(self) -> "s":
"""Get Path."""
return self.fixture.Path
@dbus_property(access=PropertyAccess.READ)
def Interface(self) -> "s":
"""Get Interface."""
return self.fixture.Interface
@dbus_property(access=PropertyAccess.READ)
def IpInterface(self) -> "s":
"""Get IpInterface."""
return self.fixture.IpInterface
@dbus_property(access=PropertyAccess.READ)
def Driver(self) -> "s":
"""Get Driver."""
return self.fixture.Driver
@dbus_property(access=PropertyAccess.READ)
def DriverVersion(self) -> "s":
"""Get DriverVersion."""
return self.fixture.DriverVersion
@dbus_property(access=PropertyAccess.READ)
def FirmwareVersion(self) -> "s":
"""Get FirmwareVersion."""
return self.fixture.FirmwareVersion
@dbus_property(access=PropertyAccess.READ)
def Capabilities(self) -> "u":
"""Get Capabilities."""
return self.fixture.Capabilities
@dbus_property(access=PropertyAccess.READ)
def Ip4Address(self) -> "u":
"""Get Ip4Address."""
return self.fixture.Ip4Address
@dbus_property(access=PropertyAccess.READ)
def State(self) -> "u":
"""Get State."""
return self.fixture.State
@dbus_property(access=PropertyAccess.READ)
def StateReason(self) -> "(uu)":
"""Get StateReason."""
return self.fixture.StateReason
@dbus_property(access=PropertyAccess.READ)
def ActiveConnection(self) -> "o":
"""Get ActiveConnection."""
return self.fixture.ActiveConnection
@dbus_property(access=PropertyAccess.READ)
def Ip4Config(self) -> "o":
"""Get Ip4Config."""
return self.fixture.Ip4Config
@dbus_property(access=PropertyAccess.READ)
def Dhcp4Config(self) -> "o":
"""Get Dhcp4Config."""
return self.fixture.Dhcp4Config
@dbus_property(access=PropertyAccess.READ)
def Ip6Config(self) -> "o":
"""Get Ip6Config."""
return self.fixture.Ip6Config
@dbus_property(access=PropertyAccess.READ)
def Dhcp6Config(self) -> "o":
"""Get Dhcp6Config."""
return self.fixture.Dhcp6Config
@dbus_property()
def Managed(self) -> "b":
"""Get Managed."""
return self.fixture.Managed
@Managed.setter
def Managed(self, value: "b"):
"""Set Managed."""
self.emit_properties_changed({"Managed": value})
@dbus_property()
def Autoconnect(self) -> "b":
"""Get Autoconnect."""
return self.fixture.Autoconnect
@Autoconnect.setter
def Autoconnect(self, value: "b"):
"""Set Autoconnect."""
self.emit_properties_changed({"Autoconnect": value})
@dbus_property(access=PropertyAccess.READ)
def FirmwareMissing(self) -> "b":
"""Get FirmwareMissing."""
return self.fixture.FirmwareMissing
@dbus_property(access=PropertyAccess.READ)
def NmPluginMissing(self) -> "b":
"""Get NmPluginMissing."""
return self.fixture.NmPluginMissing
@dbus_property(access=PropertyAccess.READ)
def DeviceType(self) -> "u":
"""Get DeviceType."""
return self.fixture.DeviceType
@dbus_property(access=PropertyAccess.READ)
def AvailableConnections(self) -> "ao":
"""Get AvailableConnections."""
return self.fixture.AvailableConnections
@dbus_property(access=PropertyAccess.READ)
def PhysicalPortId(self) -> "s":
"""Get PhysicalPortId."""
return self.fixture.PhysicalPortId
@dbus_property(access=PropertyAccess.READ)
def Mtu(self) -> "u":
"""Get Mtu."""
return self.fixture.Mtu
@dbus_property(access=PropertyAccess.READ)
def Metered(self) -> "u":
"""Get Metered."""
return self.fixture.Metered
@dbus_property(access=PropertyAccess.READ)
def LldpNeighbors(self) -> "aa{sv}":
"""Get LldpNeighbors."""
return self.fixture.LldpNeighbors
@dbus_property(access=PropertyAccess.READ)
def Real(self) -> "b":
"""Get Real."""
return self.fixture.Real
@dbus_property(access=PropertyAccess.READ)
def Ip4Connectivity(self) -> "u":
"""Get Ip4Connectivity."""
return self.fixture.Ip4Connectivity
@dbus_property(access=PropertyAccess.READ)
def Ip6Connectivity(self) -> "u":
"""Get Ip6Connectivity."""
return self.fixture.Ip6Connectivity
@dbus_property(access=PropertyAccess.READ)
def InterfaceFlags(self) -> "u":
"""Get InterfaceFlags."""
return self.fixture.InterfaceFlags
@dbus_property(access=PropertyAccess.READ)
def HwAddress(self) -> "s":
"""Get HwAddress."""
return self.fixture.HwAddress
@dbus_property(access=PropertyAccess.READ)
def Ports(self) -> "ao":
"""Get Ports."""
return self.fixture.Ports
@signal()
def StateChanged(self) -> "uuu":
"""Signal StateChanged."""
return [120, 100, 1]
@dbus_method()
def Reapply(self, connection: "a{sa{sv}}", version_id: "t", flags: "u") -> None:
"""Do Reapply method."""
@dbus_method()
def GetAppliedConnection(self, flags: "u") -> "a{sa{sv}}t":
"""Do GetAppliedConnection method."""
return [{}, 0]
@dbus_method()
def Disconnect(self) -> None:
"""Do Disconnect method."""
@dbus_method()
def Delete(self) -> None:
"""Do Delete method."""