mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-19 10:47:15 +00:00

* 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
353 lines
10 KiB
Python
353 lines
10 KiB
Python
"""Mock of UDisks2 Drive service."""
|
|
|
|
from ctypes import c_int32, c_uint32, c_uint64
|
|
from dataclasses import dataclass
|
|
|
|
from dbus_fast import Variant
|
|
from dbus_fast.service import PropertyAccess, dbus_property
|
|
|
|
from .base import DBusServiceMock, dbus_method
|
|
|
|
BUS_NAME = "org.freedesktop.UDisks2"
|
|
DEFAULT_OBJECT_PATH = "/org/freedesktop/UDisks2/drives/SSK_SSK_Storage_DF56419883D56"
|
|
|
|
|
|
def setup(object_path: str | None = None) -> DBusServiceMock:
|
|
"""Create dbus mock object."""
|
|
return Drive(object_path if object_path else DEFAULT_OBJECT_PATH)
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class DriveFixture:
|
|
"""Drive fixture."""
|
|
|
|
Vendor: str
|
|
Model: str
|
|
Revision: str
|
|
Serial: str
|
|
WWN: str
|
|
Id: str
|
|
Configuration: dict[str, Variant]
|
|
Media: str
|
|
MediaCompatibility: list[str]
|
|
MediaRemovable: bool
|
|
MediaAvailable: bool
|
|
MediaChangeDetected: bool
|
|
Size: c_uint64
|
|
TimeDetected: c_uint64
|
|
TimeMediaDetected: c_uint64
|
|
Optical: bool
|
|
OpticalBlank: bool
|
|
OpticalNumTracks: c_uint32
|
|
OpticalNumAudioTracks: c_uint32
|
|
OpticalNumDataTracks: c_uint32
|
|
OpticalNumSessions: c_uint32
|
|
RotationRate: c_int32
|
|
ConnectionBus: str
|
|
Seat: str
|
|
Removable: bool
|
|
Ejectable: bool
|
|
SortKey: str
|
|
CanPowerOff: bool
|
|
SiblingId: str
|
|
|
|
|
|
FIXTURES: dict[str, DriveFixture] = {
|
|
"/org/freedesktop/UDisks2/drives/BJTD4R_0x97cde291": DriveFixture(
|
|
Vendor="",
|
|
Model="BJTD4R",
|
|
Revision="",
|
|
Serial="0x97cde291",
|
|
WWN="",
|
|
Id="BJTD4R-0x97cde291",
|
|
Configuration={},
|
|
Media="flash_mmc",
|
|
MediaCompatibility=["flash_mmc"],
|
|
MediaRemovable=False,
|
|
MediaAvailable=True,
|
|
MediaChangeDetected=True,
|
|
Size=31268536320,
|
|
TimeDetected=1673981760067475,
|
|
TimeMediaDetected=1673981760067475,
|
|
Optical=False,
|
|
OpticalBlank=False,
|
|
OpticalNumTracks=0,
|
|
OpticalNumAudioTracks=0,
|
|
OpticalNumDataTracks=0,
|
|
OpticalNumSessions=0,
|
|
RotationRate=0,
|
|
ConnectionBus="sdio",
|
|
Seat="seat0",
|
|
Removable=False,
|
|
Ejectable=False,
|
|
SortKey="00coldplug/00fixed/mmcblk1",
|
|
CanPowerOff=False,
|
|
SiblingId="",
|
|
),
|
|
"/org/freedesktop/UDisks2/drives/Generic_Flash_Disk_61BCDDB6": DriveFixture(
|
|
Vendor="Generic",
|
|
Model="Flash Disk",
|
|
Revision="8.07",
|
|
Serial="61BCDDB6",
|
|
WWN="",
|
|
Id="Generic-Flash-Disk-61BCDDB6",
|
|
Configuration={},
|
|
Media="",
|
|
MediaCompatibility=[],
|
|
MediaRemovable=True,
|
|
MediaAvailable=True,
|
|
MediaChangeDetected=True,
|
|
Size=8054112256,
|
|
TimeDetected=1675972756688073,
|
|
TimeMediaDetected=1675972756688073,
|
|
Optical=False,
|
|
OpticalBlank=False,
|
|
OpticalNumTracks=0,
|
|
OpticalNumAudioTracks=0,
|
|
OpticalNumDataTracks=0,
|
|
OpticalNumSessions=0,
|
|
RotationRate=-1,
|
|
ConnectionBus="usb",
|
|
Seat="seat0",
|
|
Removable=True,
|
|
Ejectable=True,
|
|
SortKey="01hotplug/1675972756688073",
|
|
CanPowerOff=True,
|
|
SiblingId="/sys/devices/platform/soc/ffe09000.usb/ff500000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.2/1-1.2:1.0",
|
|
),
|
|
"/org/freedesktop/UDisks2/drives/SSK_SSK_Storage_DF56419883D56": DriveFixture(
|
|
Vendor="SSK",
|
|
Model="SSK Storage",
|
|
Revision="0206",
|
|
Serial="DF56419883D56",
|
|
WWN="",
|
|
Id="SSK-SSK-Storage-DF56419883D56",
|
|
Configuration={},
|
|
Media="",
|
|
MediaCompatibility=[],
|
|
MediaRemovable=False,
|
|
MediaAvailable=True,
|
|
MediaChangeDetected=True,
|
|
Size=250059350016,
|
|
TimeDetected=1675897304240492,
|
|
TimeMediaDetected=1675897304240492,
|
|
Optical=False,
|
|
OpticalBlank=False,
|
|
OpticalNumTracks=0,
|
|
OpticalNumAudioTracks=0,
|
|
OpticalNumDataTracks=0,
|
|
OpticalNumSessions=0,
|
|
RotationRate=0,
|
|
ConnectionBus="usb",
|
|
Seat="seat0",
|
|
Removable=True,
|
|
Ejectable=False,
|
|
SortKey="01hotplug/1675897304240492",
|
|
CanPowerOff=True,
|
|
SiblingId="/sys/devices/platform/soc/ffe09000.usb/ff500000.usb/xhci-hcd.1.auto/usb2/2-1/2-1.4/2-1.4:1.0",
|
|
),
|
|
"/org/freedesktop/UDisks2/drives/Test_Multiple_Partition_Tables_123456789": DriveFixture(
|
|
Vendor="Test",
|
|
Model="Multiple Partition Tables",
|
|
Revision="",
|
|
Serial="123456789",
|
|
WWN="",
|
|
Id="Test-Multiple-Partition-Tables-123456789",
|
|
Configuration={},
|
|
Media="",
|
|
MediaCompatibility=[],
|
|
MediaRemovable=False,
|
|
MediaAvailable=True,
|
|
MediaChangeDetected=True,
|
|
Size=0,
|
|
TimeDetected=0,
|
|
TimeMediaDetected=0,
|
|
Optical=False,
|
|
OpticalBlank=False,
|
|
OpticalNumTracks=0,
|
|
OpticalNumAudioTracks=0,
|
|
OpticalNumDataTracks=0,
|
|
OpticalNumSessions=0,
|
|
RotationRate=0,
|
|
ConnectionBus="usb",
|
|
Seat="seat0",
|
|
Removable=True,
|
|
Ejectable=False,
|
|
SortKey="",
|
|
CanPowerOff=True,
|
|
SiblingId="",
|
|
),
|
|
}
|
|
|
|
|
|
class Drive(DBusServiceMock):
|
|
"""Drive mock.
|
|
|
|
gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/id
|
|
"""
|
|
|
|
interface = "org.freedesktop.UDisks2.Drive"
|
|
|
|
def __init__(self, object_path: str):
|
|
"""Initialize object."""
|
|
super().__init__()
|
|
self.object_path = object_path
|
|
self.fixture: DriveFixture = FIXTURES[object_path]
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Vendor(self) -> "s":
|
|
"""Get Vendor."""
|
|
return self.fixture.Vendor
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Model(self) -> "s":
|
|
"""Get Model."""
|
|
return self.fixture.Model
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Revision(self) -> "s":
|
|
"""Get Revision."""
|
|
return self.fixture.Revision
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Serial(self) -> "s":
|
|
"""Get Serial."""
|
|
return self.fixture.Serial
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def WWN(self) -> "s":
|
|
"""Get WWN."""
|
|
return self.fixture.WWN
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Id(self) -> "s":
|
|
"""Get Id."""
|
|
return self.fixture.Id
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Configuration(self) -> "a{sv}":
|
|
"""Get Configuration."""
|
|
return self.fixture.Configuration
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Media(self) -> "s":
|
|
"""Get Media."""
|
|
return self.fixture.Media
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def MediaCompatibility(self) -> "as":
|
|
"""Get MediaCompatibility."""
|
|
return self.fixture.MediaCompatibility
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def MediaRemovable(self) -> "b":
|
|
"""Get MediaRemovable."""
|
|
return self.fixture.MediaRemovable
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def MediaAvailable(self) -> "b":
|
|
"""Get MediaAvailable."""
|
|
return self.fixture.MediaAvailable
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def MediaChangeDetected(self) -> "b":
|
|
"""Get MediaChangeDetected."""
|
|
return self.fixture.MediaChangeDetected
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Size(self) -> "t":
|
|
"""Get Size."""
|
|
return self.fixture.Size
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def TimeDetected(self) -> "t":
|
|
"""Get TimeDetected."""
|
|
return self.fixture.TimeDetected
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def TimeMediaDetected(self) -> "t":
|
|
"""Get TimeMediaDetected."""
|
|
return self.fixture.TimeMediaDetected
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Optical(self) -> "b":
|
|
"""Get Optical."""
|
|
return self.fixture.Optical
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def OpticalBlank(self) -> "b":
|
|
"""Get OpticalBlank."""
|
|
return self.fixture.OpticalBlank
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def OpticalNumTracks(self) -> "u":
|
|
"""Get OpticalNumTracks."""
|
|
return self.fixture.OpticalNumTracks
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def OpticalNumAudioTracks(self) -> "u":
|
|
"""Get OpticalNumAudioTracks."""
|
|
return self.fixture.OpticalNumAudioTracks
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def OpticalNumDataTracks(self) -> "u":
|
|
"""Get OpticalNumDataTracks."""
|
|
return self.fixture.OpticalNumDataTracks
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def OpticalNumSessions(self) -> "u":
|
|
"""Get OpticalNumSessions."""
|
|
return self.fixture.OpticalNumSessions
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def RotationRate(self) -> "i":
|
|
"""Get RotationRate."""
|
|
return self.fixture.RotationRate
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def ConnectionBus(self) -> "s":
|
|
"""Get ConnectionBus."""
|
|
return self.fixture.ConnectionBus
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Seat(self) -> "s":
|
|
"""Get Seat."""
|
|
return self.fixture.Seat
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Removable(self) -> "b":
|
|
"""Get Removable."""
|
|
return self.fixture.Removable
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Ejectable(self) -> "b":
|
|
"""Get Ejectable."""
|
|
return self.fixture.Ejectable
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def SortKey(self) -> "s":
|
|
"""Get SortKey."""
|
|
return self.fixture.SortKey
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def CanPowerOff(self) -> "b":
|
|
"""Get CanPowerOff."""
|
|
return self.fixture.CanPowerOff
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def SiblingId(self) -> "s":
|
|
"""Get SiblingId."""
|
|
return self.fixture.SiblingId
|
|
|
|
@dbus_method()
|
|
def Eject(self, options: "a{sv}") -> None:
|
|
"""Do Eject method."""
|
|
|
|
@dbus_method()
|
|
def SetConfiguration(self, value: "a{sv}", options: "a{sv}") -> None:
|
|
"""Do SetConfiguration method."""
|
|
|
|
@dbus_method()
|
|
def PowerOff(self, options: "a{sv}") -> None:
|
|
"""Do PowerOff method."""
|