mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-06-19 00:16:29 +00:00
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
"""Test core version check."""
|
|
|
|
# pylint: disable=import-error,protected-access
|
|
from datetime import timedelta
|
|
from unittest.mock import patch
|
|
|
|
from supervisor.backups.backup import Backup
|
|
from supervisor.const import ATTR_DATE, CoreState
|
|
from supervisor.coresys import CoreSys
|
|
from supervisor.resolution.checks.backups import CheckBackups
|
|
from supervisor.resolution.const import IssueType
|
|
from supervisor.utils.dt import utcnow
|
|
|
|
|
|
async def test_base(coresys: CoreSys):
|
|
"""Test check basics."""
|
|
core_security = CheckBackups(coresys)
|
|
assert core_security.slug == "backups"
|
|
assert core_security.enabled
|
|
|
|
|
|
async def test_check_no_backups(coresys: CoreSys):
|
|
"""Test check creates issue with no backups."""
|
|
backups = CheckBackups(coresys)
|
|
await coresys.core.set_state(CoreState.RUNNING)
|
|
|
|
assert len(coresys.resolution.issues) == 0
|
|
await backups.run_check()
|
|
assert coresys.resolution.issues[-1].type == IssueType.NO_CURRENT_BACKUP
|
|
assert await backups.approve_check()
|
|
|
|
|
|
async def test_check_only_partial_backups(
|
|
coresys: CoreSys, mock_partial_backup: Backup
|
|
):
|
|
"""Test check creates issue with only partial backups."""
|
|
backups = CheckBackups(coresys)
|
|
await coresys.core.set_state(CoreState.RUNNING)
|
|
|
|
assert len(coresys.resolution.issues) == 0
|
|
await backups.run_check()
|
|
assert coresys.resolution.issues[-1].type == IssueType.NO_CURRENT_BACKUP
|
|
assert await backups.approve_check()
|
|
|
|
|
|
async def test_check_with_backup(coresys: CoreSys, mock_full_backup: Backup):
|
|
"""Test check only creates issue if full backup not current."""
|
|
backups = CheckBackups(coresys)
|
|
await coresys.core.set_state(CoreState.RUNNING)
|
|
|
|
assert len(coresys.resolution.issues) == 0
|
|
await backups.run_check()
|
|
assert len(coresys.resolution.issues) == 0
|
|
assert not await backups.approve_check()
|
|
|
|
mock_full_backup._data[ATTR_DATE] = (utcnow() - timedelta(days=30)).isoformat()
|
|
await backups.run_check()
|
|
assert coresys.resolution.issues[-1].type == IssueType.NO_CURRENT_BACKUP
|
|
assert await backups.approve_check()
|
|
|
|
|
|
async def test_did_run(coresys: CoreSys):
|
|
"""Test that the check ran as expected."""
|
|
backups = CheckBackups(coresys)
|
|
should_run = backups.states
|
|
should_not_run = [state for state in CoreState if state not in should_run]
|
|
assert len(should_run) != 0
|
|
assert len(should_not_run) != 0
|
|
|
|
with patch(
|
|
"supervisor.resolution.checks.backups.CheckBackups.run_check",
|
|
return_value=False,
|
|
) as check:
|
|
for state in should_run:
|
|
await coresys.core.set_state(state)
|
|
await backups()
|
|
check.assert_called_once()
|
|
check.reset_mock()
|
|
|
|
for state in should_not_run:
|
|
await coresys.core.set_state(state)
|
|
await backups()
|
|
check.assert_not_called()
|
|
check.reset_mock()
|