Fix backup strategy retention filter (#133060)

* Fix lint

* Update tests

* Fix backup strategy retention filter
This commit is contained in:
Martin Hjelmare 2024-12-12 18:47:37 +01:00 committed by GitHub
parent e7a43cfe09
commit 39e4719a43
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 275 additions and 41 deletions

View File

@ -423,7 +423,14 @@ async def _delete_filtered_backups(
get_agent_errors, get_agent_errors,
) )
LOGGER.debug("Total backups: %s", backups) # only delete backups that are created by the backup strategy
backups = {
backup_id: backup
for backup_id, backup in backups.items()
if backup.with_strategy_settings
}
LOGGER.debug("Total strategy backups: %s", backups)
filtered_backups = backup_filter(backups) filtered_backups = backup_filter(backups)

View File

@ -14,6 +14,7 @@ from homeassistant.components.backup.const import DATA_MANAGER, DOMAIN
from homeassistant.components.backup.manager import ( from homeassistant.components.backup.manager import (
CreateBackupEvent, CreateBackupEvent,
CreateBackupState, CreateBackupState,
ManagerBackup,
NewBackup, NewBackup,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -42,7 +43,7 @@ BACKUP_CALL = call(
on_progress=ANY, on_progress=ANY,
) )
DEFAULT_STORAGE_DATA = { DEFAULT_STORAGE_DATA: dict[str, Any] = {
"backups": {}, "backups": {},
"config": { "config": {
"create_backup": { "create_backup": {
@ -1248,9 +1249,26 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-12T04:45:00+01:00"), with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1270,9 +1288,26 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-12T04:45:00+01:00"), with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1292,10 +1327,31 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-09T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-10T04:45:00+01:00"), date="2024-11-09T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-11T04:45:00+01:00"), with_strategy_settings=True,
"backup-4": MagicMock(date="2024-11-12T04:45:00+01:00"), spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-5": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1315,10 +1371,31 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-09T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-10T04:45:00+01:00"), date="2024-11-09T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-11T04:45:00+01:00"), with_strategy_settings=True,
"backup-4": MagicMock(date="2024-11-12T04:45:00+01:00"), spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-5": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1338,9 +1415,26 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-12T04:45:00+01:00"), with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{"test-agent": BackupAgentError("Boom!")}, {"test-agent": BackupAgentError("Boom!")},
{}, {},
@ -1360,9 +1454,26 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-12T04:45:00+01:00"), with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{"test-agent": BackupAgentError("Boom!")}, {"test-agent": BackupAgentError("Boom!")},
@ -1382,10 +1493,31 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-09T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-10T04:45:00+01:00"), date="2024-11-09T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-11T04:45:00+01:00"), with_strategy_settings=True,
"backup-4": MagicMock(date="2024-11-12T04:45:00+01:00"), spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-5": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1405,7 +1537,16 @@ async def test_config_schedule_logic(
"schedule": "daily", "schedule": "daily",
}, },
{ {
"backup-1": MagicMock(date="2024-11-12T04:45:00+01:00"), "backup-1": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-12T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1518,8 +1659,21 @@ async def test_config_retention_copies_logic(
"schedule": "never", "schedule": "never",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1538,8 +1692,21 @@ async def test_config_retention_copies_logic(
"schedule": "never", "schedule": "never",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1558,9 +1725,26 @@ async def test_config_retention_copies_logic(
"schedule": "never", "schedule": "never",
}, },
{ {
"backup-1": MagicMock(date="2024-11-09T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-10T04:45:00+01:00"), date="2024-11-09T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-11T04:45:00+01:00"), with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},
@ -1579,8 +1763,21 @@ async def test_config_retention_copies_logic(
"schedule": "never", "schedule": "never",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{"test-agent": BackupAgentError("Boom!")}, {"test-agent": BackupAgentError("Boom!")},
{}, {},
@ -1599,8 +1796,21 @@ async def test_config_retention_copies_logic(
"schedule": "never", "schedule": "never",
}, },
{ {
"backup-1": MagicMock(date="2024-11-10T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-11T04:45:00+01:00"), date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{"test-agent": BackupAgentError("Boom!")}, {"test-agent": BackupAgentError("Boom!")},
@ -1619,9 +1829,26 @@ async def test_config_retention_copies_logic(
"schedule": "never", "schedule": "never",
}, },
{ {
"backup-1": MagicMock(date="2024-11-09T04:45:00+01:00"), "backup-1": MagicMock(
"backup-2": MagicMock(date="2024-11-10T04:45:00+01:00"), date="2024-11-09T04:45:00+01:00",
"backup-3": MagicMock(date="2024-11-11T04:45:00+01:00"), with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-2": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-3": MagicMock(
date="2024-11-11T04:45:00+01:00",
with_strategy_settings=True,
spec=ManagerBackup,
),
"backup-4": MagicMock(
date="2024-11-10T04:45:00+01:00",
with_strategy_settings=False,
spec=ManagerBackup,
),
}, },
{}, {},
{}, {},