1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-07-08 06:13:47 +01:00
Files
supervisor/tests/resolution/fixup/test_systemd_unit_execute_restart.py
T
Mike Degatano a2fdcd43a4 Add unhealthy reasons for fsck failures and issues for other systemd failures (#6976)
* Add systemd ListUnitsFiltered support

* Add unhealthy reasons for fsck failures and issues for other systemd failures
2026-06-30 14:49:08 +02:00

81 lines
2.9 KiB
Python

"""Test fixup systemd unit execute restart."""
from unittest.mock import AsyncMock, patch
from supervisor.coresys import CoreSys
from supervisor.dbus.const import StartUnitMode
from supervisor.exceptions import DBusError, DBusSystemdNoSuchUnit
from supervisor.resolution.const import ContextType, IssueType, SuggestionType
from supervisor.resolution.data import Issue, Suggestion
from supervisor.resolution.fixups.systemd_unit_execute_restart import (
FixupSystemdUnitExecuteRestart,
)
ISSUE = Issue(IssueType.SYSTEMD_UNIT_FAILED, ContextType.SYSTEM, reference="a.service")
SUGGESTION = Suggestion(
SuggestionType.EXECUTE_RESTART,
ContextType.SYSTEM,
reference="a.service",
)
async def test_fixup_restart_success(coresys: CoreSys):
"""Test restart fixup succeeds and cleans issue/suggestion."""
systemd_unit_execute_restart = FixupSystemdUnitExecuteRestart(coresys)
assert systemd_unit_execute_restart.suggestion == SuggestionType.EXECUTE_RESTART
assert systemd_unit_execute_restart.context == ContextType.SYSTEM
assert systemd_unit_execute_restart.issues == [IssueType.SYSTEMD_UNIT_FAILED]
assert systemd_unit_execute_restart.auto is False
coresys.resolution.add_suggestion(SUGGESTION)
coresys.resolution.add_issue(ISSUE)
with patch.object(
coresys.dbus.systemd,
"restart_unit",
new_callable=AsyncMock,
) as restart_unit:
await systemd_unit_execute_restart()
restart_unit.assert_awaited_once_with("a.service", StartUnitMode.REPLACE)
assert not coresys.resolution.suggestions
assert not coresys.resolution.issues
async def test_fixup_restart_no_such_unit(coresys: CoreSys):
"""Test no-such-unit is tolerated and clears issue/suggestion."""
systemd_unit_execute_restart = FixupSystemdUnitExecuteRestart(coresys)
coresys.resolution.add_suggestion(SUGGESTION)
coresys.resolution.add_issue(ISSUE)
with patch.object(
coresys.dbus.systemd,
"restart_unit",
new_callable=AsyncMock,
side_effect=DBusSystemdNoSuchUnit("missing"),
) as restart_unit:
await systemd_unit_execute_restart()
restart_unit.assert_awaited_once_with("a.service", StartUnitMode.REPLACE)
assert not coresys.resolution.suggestions
assert not coresys.resolution.issues
async def test_fixup_restart_dbus_error_keeps_issue(coresys: CoreSys):
"""Test DBus error keeps issue/suggestion in place."""
systemd_unit_execute_restart = FixupSystemdUnitExecuteRestart(coresys)
coresys.resolution.add_suggestion(SUGGESTION)
coresys.resolution.add_issue(ISSUE)
with patch.object(
coresys.dbus.systemd,
"restart_unit",
new_callable=AsyncMock,
side_effect=DBusError("boom"),
) as restart_unit:
await systemd_unit_execute_restart()
restart_unit.assert_awaited_once_with("a.service", StartUnitMode.REPLACE)
assert ISSUE in coresys.resolution.issues
assert SUGGESTION in coresys.resolution.suggestions