mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-26 22:27:15 +00:00
372 lines
10 KiB
Python
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."""
|