mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-24 21:27:15 +00:00

It seems that the codebase is not formatted with the latest ruff version. This PR reformats the codebase with ruff 0.5.7.
97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
"""Testing handling with CoreState."""
|
|
|
|
# pylint: disable=W0212
|
|
import datetime
|
|
import errno
|
|
from unittest.mock import AsyncMock, PropertyMock, patch
|
|
|
|
from pytest import LogCaptureFixture
|
|
|
|
from supervisor.const import CoreState
|
|
from supervisor.coresys import CoreSys
|
|
from supervisor.exceptions import WhoamiSSLError
|
|
from supervisor.host.control import SystemControl
|
|
from supervisor.host.info import InfoCenter
|
|
from supervisor.supervisor import Supervisor
|
|
from supervisor.utils.whoami import WhoamiData
|
|
|
|
|
|
def test_write_state(run_dir, coresys: CoreSys):
|
|
"""Test write corestate to /run/supervisor."""
|
|
coresys.core.state = CoreState.RUNNING
|
|
|
|
assert run_dir.read_text() == CoreState.RUNNING
|
|
|
|
coresys.core.state = CoreState.SHUTDOWN
|
|
|
|
assert run_dir.read_text() == CoreState.SHUTDOWN
|
|
|
|
|
|
async def test_adjust_system_datetime(coresys: CoreSys):
|
|
"""Test _adjust_system_datetime method with successful retrieve_whoami."""
|
|
utc_ts = datetime.datetime.now().replace(tzinfo=datetime.UTC)
|
|
with patch(
|
|
"supervisor.core.retrieve_whoami",
|
|
new_callable=AsyncMock,
|
|
side_effect=[WhoamiData("Europe/Zurich", utc_ts)],
|
|
) as mock_retrieve_whoami:
|
|
await coresys.core._adjust_system_datetime()
|
|
mock_retrieve_whoami.assert_called_once()
|
|
assert coresys.core.sys_config.timezone == "Europe/Zurich"
|
|
|
|
# Validate we don't retrieve whoami once timezone has been set
|
|
mock_retrieve_whoami.reset_mock()
|
|
await coresys.core._adjust_system_datetime()
|
|
mock_retrieve_whoami.assert_not_called()
|
|
|
|
|
|
async def test_adjust_system_datetime_without_ssl(coresys: CoreSys):
|
|
"""Test _adjust_system_datetime method when retrieve_whoami raises WhoamiSSLError."""
|
|
utc_ts = datetime.datetime.now().replace(tzinfo=datetime.UTC)
|
|
with patch(
|
|
"supervisor.core.retrieve_whoami",
|
|
new_callable=AsyncMock,
|
|
side_effect=[WhoamiSSLError("SSL error"), WhoamiData("Europe/Zurich", utc_ts)],
|
|
) as mock_retrieve_whoami:
|
|
await coresys.core._adjust_system_datetime()
|
|
assert mock_retrieve_whoami.call_count == 2
|
|
assert mock_retrieve_whoami.call_args_list[0].args[1]
|
|
assert not mock_retrieve_whoami.call_args_list[1].args[1]
|
|
assert coresys.core.sys_config.timezone == "Europe/Zurich"
|
|
|
|
|
|
async def test_adjust_system_datetime_if_time_behind(coresys: CoreSys):
|
|
"""Test _adjust_system_datetime method when current time is ahead more than 3 days."""
|
|
utc_ts = datetime.datetime.now().replace(tzinfo=datetime.UTC) + datetime.timedelta(
|
|
days=4
|
|
)
|
|
with (
|
|
patch(
|
|
"supervisor.core.retrieve_whoami",
|
|
new_callable=AsyncMock,
|
|
side_effect=[WhoamiData("Europe/Zurich", utc_ts)],
|
|
) as mock_retrieve_whoami,
|
|
patch.object(SystemControl, "set_datetime") as mock_set_datetime,
|
|
patch.object(
|
|
InfoCenter, "dt_synchronized", new=PropertyMock(return_value=False)
|
|
),
|
|
patch.object(Supervisor, "check_connectivity") as mock_check_connectivity,
|
|
):
|
|
await coresys.core._adjust_system_datetime()
|
|
mock_retrieve_whoami.assert_called_once()
|
|
mock_set_datetime.assert_called_once()
|
|
mock_check_connectivity.assert_called_once()
|
|
|
|
|
|
def test_write_state_failure(run_dir, coresys: CoreSys, caplog: LogCaptureFixture):
|
|
"""Test failure to write corestate to /run/supervisor."""
|
|
with patch(
|
|
"supervisor.core.RUN_SUPERVISOR_STATE.write_text",
|
|
side_effect=(err := OSError()),
|
|
):
|
|
err.errno = errno.EBADMSG
|
|
coresys.core.state = CoreState.RUNNING
|
|
|
|
assert "Can't update the Supervisor state" in caplog.text
|
|
assert coresys.core.healthy is True
|