ha-supervisor/tests/dbus/test_timedate.py

82 lines
2.4 KiB
Python

"""Test TimeDate dbus interface."""
# pylint: disable=import-error
from datetime import datetime, timezone
from dbus_fast.aio.message_bus import MessageBus
import pytest
from supervisor.dbus.timedate import TimeDate
from supervisor.exceptions import DBusNotConnectedError
from tests.common import mock_dbus_services
from tests.dbus_service_mocks.timedate import TimeDate as TimeDateService
@pytest.fixture(name="timedate_service", autouse=True)
async def fixture_timedate_service(dbus_session_bus: MessageBus) -> TimeDateService:
"""Mock timedate dbus service."""
yield (await mock_dbus_services({"timedate": None}, dbus_session_bus))["timedate"]
async def test_timedate_info(
timedate_service: TimeDateService, dbus_session_bus: MessageBus
):
"""Test timedate properties."""
timedate = TimeDate()
assert timedate.dt_utc is None
assert timedate.ntp is None
await timedate.connect(dbus_session_bus)
assert timedate.dt_utc == datetime(
2021, 5, 19, 8, 36, 54, 405718, tzinfo=timezone.utc
)
assert timedate.ntp is True
assert timedate.dt_utc.isoformat() == "2021-05-19T08:36:54.405718+00:00"
timedate_service.emit_properties_changed({"NTP": False})
await timedate_service.ping()
assert timedate.ntp is False
timedate_service.emit_properties_changed({}, ["NTP"])
await timedate_service.ping()
await timedate_service.ping() # To process the follow-up get all properties call
assert timedate.ntp is True
async def test_dbus_settime(
timedate_service: TimeDateService, dbus_session_bus: MessageBus
):
"""Set timestamp on backend."""
timedate = TimeDate()
test_dt = datetime(2021, 5, 19, 8, 36, 54, 405718, tzinfo=timezone.utc)
with pytest.raises(DBusNotConnectedError):
await timedate.set_time(test_dt)
await timedate.connect(dbus_session_bus)
assert await timedate.set_time(test_dt) is None
assert timedate_service.SetTime.calls == [(1621413414405718, False, False)]
async def test_dbus_setntp(
timedate_service: TimeDateService, dbus_session_bus: MessageBus
):
"""Disable NTP on backend."""
timedate = TimeDate()
with pytest.raises(DBusNotConnectedError):
await timedate.set_ntp(False)
await timedate.connect(dbus_session_bus)
assert timedate.ntp is True
assert await timedate.set_ntp(False) is None
assert timedate_service.SetNTP.calls == [(False, False)]
await timedate_service.ping()
assert timedate.ntp is False