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_reset.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

80 lines
2.8 KiB
Python

"""Test fixup systemd unit execute reset."""
from unittest.mock import AsyncMock, patch
from supervisor.coresys import CoreSys
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_reset import (
FixupSystemdUnitExecuteReset,
)
ISSUE = Issue(IssueType.SYSTEMD_UNIT_FAILED, ContextType.SYSTEM, reference="a.service")
SUGGESTION = Suggestion(
SuggestionType.EXECUTE_RESET,
ContextType.SYSTEM,
reference="a.service",
)
async def test_fixup_reset_success(coresys: CoreSys):
"""Test reset fixup succeeds and cleans issue/suggestion."""
systemd_unit_execute_reset = FixupSystemdUnitExecuteReset(coresys)
assert systemd_unit_execute_reset.suggestion == SuggestionType.EXECUTE_RESET
assert systemd_unit_execute_reset.context == ContextType.SYSTEM
assert systemd_unit_execute_reset.issues == [IssueType.SYSTEMD_UNIT_FAILED]
assert systemd_unit_execute_reset.auto is False
coresys.resolution.add_suggestion(SUGGESTION)
coresys.resolution.add_issue(ISSUE)
with patch.object(
coresys.dbus.systemd,
"reset_failed_unit",
new_callable=AsyncMock,
) as reset_failed_unit:
await systemd_unit_execute_reset()
reset_failed_unit.assert_awaited_once_with("a.service")
assert not coresys.resolution.suggestions
assert not coresys.resolution.issues
async def test_fixup_reset_no_such_unit(coresys: CoreSys):
"""Test no-such-unit is tolerated and clears issue/suggestion."""
systemd_unit_execute_reset = FixupSystemdUnitExecuteReset(coresys)
coresys.resolution.add_suggestion(SUGGESTION)
coresys.resolution.add_issue(ISSUE)
with patch.object(
coresys.dbus.systemd,
"reset_failed_unit",
new_callable=AsyncMock,
side_effect=DBusSystemdNoSuchUnit("missing"),
) as reset_failed_unit:
await systemd_unit_execute_reset()
reset_failed_unit.assert_awaited_once_with("a.service")
assert not coresys.resolution.suggestions
assert not coresys.resolution.issues
async def test_fixup_reset_dbus_error_keeps_issue(coresys: CoreSys):
"""Test DBus error keeps issue/suggestion in place."""
systemd_unit_execute_reset = FixupSystemdUnitExecuteReset(coresys)
coresys.resolution.add_suggestion(SUGGESTION)
coresys.resolution.add_issue(ISSUE)
with patch.object(
coresys.dbus.systemd,
"reset_failed_unit",
new_callable=AsyncMock,
side_effect=DBusError("boom"),
) as reset_failed_unit:
await systemd_unit_execute_reset()
reset_failed_unit.assert_awaited_once_with("a.service")
assert ISSUE in coresys.resolution.issues
assert SUGGESTION in coresys.resolution.suggestions