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

95 lines
2.8 KiB
Python

"""Mock of UDisks2 Partition Table service."""
from dataclasses import dataclass
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/block_devices/sda"
def setup(object_path: str | None = None) -> DBusServiceMock:
"""Create dbus mock object."""
return PartitionTable(object_path if object_path else DEFAULT_OBJECT_PATH)
@dataclass(slots=True)
class PartitionTableFixture:
"""PartitionTable fixture."""
Partitions: list[str]
Type: str
FIXTURES: dict[str, PartitionTableFixture] = {
"/org/freedesktop/UDisks2/block_devices/mmcblk1": PartitionTableFixture(
Partitions=[
"/org/freedesktop/UDisks2/block_devices/mmcblk1p1",
"/org/freedesktop/UDisks2/block_devices/mmcblk1p2",
"/org/freedesktop/UDisks2/block_devices/mmcblk1p3",
],
Type="dos",
),
"/org/freedesktop/UDisks2/block_devices/sda": PartitionTableFixture(
Partitions=["/org/freedesktop/UDisks2/block_devices/sda1"], Type="gpt"
),
"/org/freedesktop/UDisks2/block_devices/sdb": PartitionTableFixture(
Partitions=["/org/freedesktop/UDisks2/block_devices/sdb1"], Type="gpt"
),
"/org/freedesktop/UDisks2/block_devices/multi_part_table1": PartitionTableFixture(
Partitions=[], Type="gpt"
),
"/org/freedesktop/UDisks2/block_devices/multi_part_table2": PartitionTableFixture(
Partitions=[], Type="gpt"
),
}
class PartitionTable(DBusServiceMock):
"""PartitionTable mock.
gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/block_devices/sda
"""
interface = "org.freedesktop.UDisks2.PartitionTable"
new_partition = "/org/freedesktop/UDisks2/block_devices/sda1"
def __init__(self, object_path: str):
"""Initialize object."""
super().__init__()
self.object_path = object_path
self.fixture: PartitionTableFixture = FIXTURES[object_path]
@dbus_property(access=PropertyAccess.READ)
def Partitions(self) -> "ao":
"""Get Partitions."""
return self.fixture.Partitions
@dbus_property(access=PropertyAccess.READ)
def Type(self) -> "s":
"""Get Type."""
return self.fixture.Type
@dbus_method()
def CreatePartition(
self, offset: "t", size: "t", type_: "s", name: "s", options: "a{sv}"
) -> "o":
"""Do CreatePartition method."""
return self.new_partition
@dbus_method()
def CreatePartitionAndFormat(
self,
offset: "t",
size: "t",
type_: "s",
name: "s",
options: "a{sv}",
format_type_: "s",
format_options: "a{sv}",
) -> "o":
"""Do CreatePartitionAndFormat method."""
return self.new_partition