mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-19 18:57:16 +00:00

* Fix some expected boot slot fields are optional * Move stuff around to make pylint happy
213 lines
7.1 KiB
Python
213 lines
7.1 KiB
Python
"""Mock of rauc dbus service."""
|
|
|
|
from dbus_fast import DBusError, Variant
|
|
from dbus_fast.service import PropertyAccess, dbus_property, signal
|
|
|
|
from .base import DBusServiceMock, dbus_method
|
|
|
|
BUS_NAME = "de.pengutronix.rauc"
|
|
|
|
SLOT_STATUS_FIXTURE: list[tuple[str | dict[str, Variant]]] = [
|
|
(
|
|
"kernel.0",
|
|
{
|
|
"activated.count": Variant("u", 9),
|
|
"activated.timestamp": Variant("s", "2022-08-23T21:03:22Z"),
|
|
"boot-status": Variant("s", "good"),
|
|
"bundle.compatible": Variant("s", "haos-odroid-n2"),
|
|
"sha256": Variant(
|
|
"s",
|
|
"c624db648b8401fae37ee5bb1a6ec90bdf4183aef364b33314a73c7198e49d5b",
|
|
),
|
|
"state": Variant("s", "inactive"),
|
|
"size": Variant("t", 10371072),
|
|
"installed.count": Variant("u", 9),
|
|
"class": Variant("s", "kernel"),
|
|
"device": Variant("s", "/dev/disk/by-partlabel/hassos-kernel0"),
|
|
"type": Variant("s", "raw"),
|
|
"bootname": Variant("s", "A"),
|
|
"bundle.version": Variant("s", "9.0.dev20220818"),
|
|
"installed.timestamp": Variant("s", "2022-08-23T21:03:16Z"),
|
|
"status": Variant("s", "ok"),
|
|
},
|
|
),
|
|
(
|
|
"boot.0",
|
|
{
|
|
"bundle.compatible": Variant("s", "haos-odroid-n2"),
|
|
"sha256": Variant(
|
|
"s",
|
|
"a5019b335f33be2cf89c96bb2d0695030adb72c1d13d650a5bbe1806dd76d6cc",
|
|
),
|
|
"state": Variant("s", "inactive"),
|
|
"size": Variant("t", 25165824),
|
|
"installed.count": Variant("u", 19),
|
|
"class": Variant("s", "boot"),
|
|
"device": Variant("s", "/dev/disk/by-partlabel/hassos-boot"),
|
|
"type": Variant("s", "vfat"),
|
|
"status": Variant("s", "ok"),
|
|
"bundle.version": Variant("s", "9.0.dev20220824"),
|
|
"installed.timestamp": Variant("s", "2022-08-25T21:11:46Z"),
|
|
},
|
|
),
|
|
(
|
|
"rootfs.0",
|
|
{
|
|
"bundle.compatible": Variant("s", "haos-odroid-n2"),
|
|
"parent": Variant("s", "kernel.0"),
|
|
"state": Variant("s", "inactive"),
|
|
"size": Variant("t", 117456896),
|
|
"sha256": Variant(
|
|
"s",
|
|
"7d908b4d578d072b1b0f75de8250fd97b6e119bff09518a96fffd6e4aec61721",
|
|
),
|
|
"class": Variant("s", "rootfs"),
|
|
"device": Variant("s", "/dev/disk/by-partlabel/hassos-system0"),
|
|
"type": Variant("s", "raw"),
|
|
"status": Variant("s", "ok"),
|
|
"bundle.version": Variant("s", "9.0.dev20220818"),
|
|
"installed.timestamp": Variant("s", "2022-08-23T21:03:21Z"),
|
|
"installed.count": Variant("u", 9),
|
|
},
|
|
),
|
|
(
|
|
"spl.0",
|
|
{
|
|
"bundle.compatible": Variant("s", "haos-odroid-n2"),
|
|
"sha256": Variant(
|
|
"s",
|
|
"9856a94df1d6abbc672adaf95746ec76abd3a8191f9d08288add6bb39e63ef45",
|
|
),
|
|
"state": Variant("s", "inactive"),
|
|
"size": Variant("t", 8388608),
|
|
"installed.count": Variant("u", 19),
|
|
"class": Variant("s", "spl"),
|
|
"device": Variant("s", "/dev/disk/by-partlabel/hassos-boot"),
|
|
"type": Variant("s", "raw"),
|
|
"status": Variant("s", "ok"),
|
|
"bundle.version": Variant("s", "9.0.dev20220824"),
|
|
"installed.timestamp": Variant("s", "2022-08-25T21:11:51Z"),
|
|
},
|
|
),
|
|
(
|
|
"kernel.1",
|
|
{
|
|
"activated.count": Variant("u", 10),
|
|
"activated.timestamp": Variant("s", "2022-08-25T21:11:52Z"),
|
|
"boot-status": Variant("s", "good"),
|
|
"bundle.compatible": Variant("s", "haos-odroid-n2"),
|
|
"sha256": Variant(
|
|
"s",
|
|
"f57e354b8bd518022721e71fafaf278972af966d8f6cbefb4610db13785801c8",
|
|
),
|
|
"state": Variant("s", "booted"),
|
|
"size": Variant("t", 10371072),
|
|
"installed.count": Variant("u", 10),
|
|
"class": Variant("s", "kernel"),
|
|
"device": Variant("s", "/dev/disk/by-partlabel/hassos-kernel1"),
|
|
"type": Variant("s", "raw"),
|
|
"bootname": Variant("s", "B"),
|
|
"bundle.version": Variant("s", "9.0.dev20220824"),
|
|
"installed.timestamp": Variant("s", "2022-08-25T21:11:46Z"),
|
|
"status": Variant("s", "ok"),
|
|
},
|
|
),
|
|
(
|
|
"rootfs.1",
|
|
{
|
|
"bundle.compatible": Variant("s", "haos-odroid-n2"),
|
|
"parent": Variant("s", "kernel.1"),
|
|
"state": Variant("s", "active"),
|
|
"size": Variant("t", 117456896),
|
|
"sha256": Variant(
|
|
"s",
|
|
"55936b64d391954ae1aed24dd1460e191e021e78655470051fa7939d12fff68a",
|
|
),
|
|
"class": Variant("s", "rootfs"),
|
|
"device": Variant("s", "/dev/disk/by-partlabel/hassos-system1"),
|
|
"type": Variant("s", "raw"),
|
|
"status": Variant("s", "ok"),
|
|
"bundle.version": Variant("s", "9.0.dev20220824"),
|
|
"installed.timestamp": Variant("s", "2022-08-25T21:11:51Z"),
|
|
"installed.count": Variant("u", 10),
|
|
},
|
|
),
|
|
]
|
|
|
|
|
|
def setup(object_path: str | None = None) -> DBusServiceMock:
|
|
"""Create dbus mock object."""
|
|
return Rauc()
|
|
|
|
|
|
class Rauc(DBusServiceMock):
|
|
"""Rauc mock.
|
|
|
|
gdbus introspect --system --dest de.pengutronix.rauc --object-path /
|
|
"""
|
|
|
|
object_path = "/"
|
|
interface = "de.pengutronix.rauc.Installer"
|
|
response_mark: list[str] | DBusError = ["kernel.1", "marked slot kernel.1 as good"]
|
|
response_get_slot_status = SLOT_STATUS_FIXTURE
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Operation(self) -> "s":
|
|
"""Return operation."""
|
|
return "idle"
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def LastError(self) -> "s":
|
|
"""Return last error."""
|
|
return ""
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Progress(self) -> "(isi)":
|
|
"""Return progress."""
|
|
return [0, "", 0]
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Compatible(self) -> "s":
|
|
"""Return compatible."""
|
|
return "haos-odroid-n2"
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def Variant(self) -> "s":
|
|
"""Return variant."""
|
|
return ""
|
|
|
|
@dbus_property(access=PropertyAccess.READ)
|
|
def BootSlot(self) -> "s":
|
|
"""Return boot slot."""
|
|
return "B"
|
|
|
|
@signal()
|
|
def Completed(self) -> "i":
|
|
"""Signal completed."""
|
|
return 0
|
|
|
|
@dbus_method()
|
|
def Install(self, source: "s"):
|
|
"""Install source."""
|
|
self.Completed()
|
|
|
|
@dbus_method()
|
|
def InstallBundle(self, source: "s", arg: "a{sv}"):
|
|
"""Install source bundle."""
|
|
self.Completed()
|
|
|
|
@dbus_method()
|
|
def Mark(self, state: "s", slot_identifier: "s") -> "ss":
|
|
"""Mark slot."""
|
|
return self.response_mark
|
|
|
|
@dbus_method()
|
|
def GetPrimary(self) -> "s":
|
|
"""Get primary slot."""
|
|
return "kernel.0"
|
|
|
|
@dbus_method()
|
|
def GetSlotStatus(self) -> "a(sa{sv})":
|
|
"""Get slot status."""
|
|
return self.response_get_slot_status
|