ha-supervisor/tests/dbus/udisks2/test_drive.py

87 lines
2.6 KiB
Python

"""Test UDisks2 Drive."""
from datetime import datetime, timezone
from dbus_fast import Variant
from dbus_fast.aio.message_bus import MessageBus
import pytest
from supervisor.dbus.udisks2.drive import UDisks2Drive
from tests.common import mock_dbus_services
from tests.dbus_service_mocks.udisks2_drive import Drive as DriveService
@pytest.fixture(name="drive_ssk_storage_service")
async def fixture_drive_ssk_storage_service(
dbus_session_bus: MessageBus,
) -> DriveService:
"""Mock SSK Storage Drive service."""
yield (
await mock_dbus_services(
{
"udisks2_drive": "/org/freedesktop/UDisks2/drives/SSK_SSK_Storage_DF56419883D56"
},
dbus_session_bus,
)
)["udisks2_drive"]
@pytest.fixture(name="drive_flash_disk_service")
async def fixture_drive_flash_disk_service(
dbus_session_bus: MessageBus,
) -> DriveService:
"""Mock Flash Disk Drive service."""
yield (
await mock_dbus_services(
{
"udisks2_drive": "/org/freedesktop/UDisks2/drives/Generic_Flash_Disk_61BCDDB6"
},
dbus_session_bus,
)
)["udisks2_drive"]
async def test_drive_info(
drive_ssk_storage_service: DriveService, dbus_session_bus: MessageBus
):
"""Test drive info."""
ssk = UDisks2Drive("/org/freedesktop/UDisks2/drives/SSK_SSK_Storage_DF56419883D56")
assert ssk.vendor is None
assert ssk.model is None
assert ssk.size is None
assert ssk.time_detected is None
assert ssk.ejectable is None
await ssk.connect(dbus_session_bus)
assert ssk.vendor == "SSK"
assert ssk.model == "SSK Storage"
assert ssk.size == 250059350016
assert ssk.time_detected == datetime(2023, 2, 8, 23, 1, 44, 240492, timezone.utc)
assert ssk.ejectable is False
drive_ssk_storage_service.emit_properties_changed({"Ejectable": True})
await drive_ssk_storage_service.ping()
assert ssk.ejectable is True
drive_ssk_storage_service.emit_properties_changed({}, ["Ejectable"])
await drive_ssk_storage_service.ping()
await drive_ssk_storage_service.ping()
assert ssk.ejectable is False
async def test_eject(
drive_flash_disk_service: DriveService, dbus_session_bus: MessageBus
):
"""Test eject."""
drive_flash_disk_service.Eject.calls.clear()
flash = UDisks2Drive("/org/freedesktop/UDisks2/drives/Generic_Flash_Disk_61BCDDB6")
await flash.connect(dbus_session_bus)
await flash.eject()
assert drive_flash_disk_service.Eject.calls == [
({"auth.no_user_interaction": Variant("b", True)},)
]