Clean up remaining backup manager tests (#136335)

This commit is contained in:
Martin Hjelmare 2025-01-23 15:23:44 +01:00 committed by GitHub
parent 5dfafd9f2e
commit dabcc6d55a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -27,7 +27,6 @@ from homeassistant.components.backup import (
DOMAIN, DOMAIN,
AgentBackup, AgentBackup,
BackupAgentPlatformProtocol, BackupAgentPlatformProtocol,
BackupManager,
BackupReaderWriterError, BackupReaderWriterError,
Folder, Folder,
LocalBackupAgent, LocalBackupAgent,
@ -38,8 +37,6 @@ from homeassistant.components.backup.const import DATA_MANAGER
from homeassistant.components.backup.manager import ( from homeassistant.components.backup.manager import (
BackupManagerError, BackupManagerError,
BackupManagerState, BackupManagerState,
CoreBackupReaderWriter,
CreateBackupEvent,
CreateBackupStage, CreateBackupStage,
CreateBackupState, CreateBackupState,
NewBackup, NewBackup,
@ -140,23 +137,31 @@ async def test_async_create_backup(
) )
async def test_async_create_backup_when_backing_up(hass: HomeAssistant) -> None: @pytest.mark.usefixtures("mock_backup_generation")
"""Test generate backup.""" async def test_create_backup_when_busy(
manager = BackupManager(hass, CoreBackupReaderWriter(hass)) hass: HomeAssistant,
manager.last_event = CreateBackupEvent( hass_ws_client: WebSocketGenerator,
stage=None, state=CreateBackupState.IN_PROGRESS ) -> None:
"""Test generate backup with busy manager."""
assert await async_setup_component(hass, DOMAIN, {})
await hass.async_block_till_done()
ws_client = await hass_ws_client(hass)
await ws_client.send_json_auto_id(
{"type": "backup/generate", "agent_ids": [LOCAL_AGENT_ID]}
) )
with pytest.raises(HomeAssistantError, match="Backup manager busy"): result = await ws_client.receive_json()
await manager.async_create_backup(
agent_ids=[LOCAL_AGENT_ID], assert result["success"] is True
include_addons=[],
include_all_addons=False, await ws_client.send_json_auto_id(
include_database=True, {"type": "backup/generate", "agent_ids": [LOCAL_AGENT_ID]}
include_folders=[], )
include_homeassistant=True, result = await ws_client.receive_json()
name=None,
password=None, assert result["success"] is False
) assert result["error"]["code"] == "home_assistant_error"
assert result["error"]["message"] == "Backup manager busy: create_backup"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -223,10 +228,9 @@ async def test_create_backup_wrong_parameters(
{"password": "pass123"}, {"password": "pass123"},
], ],
) )
async def test_async_initiate_backup( async def test_initiate_backup(
hass: HomeAssistant, hass: HomeAssistant,
hass_ws_client: WebSocketGenerator, hass_ws_client: WebSocketGenerator,
caplog: pytest.LogCaptureFixture,
mocked_json_bytes: Mock, mocked_json_bytes: Mock,
mocked_tarfile: Mock, mocked_tarfile: Mock,
generate_backup_id: MagicMock, generate_backup_id: MagicMock,
@ -239,10 +243,7 @@ async def test_async_initiate_backup(
"""Test generate backup.""" """Test generate backup."""
local_agent = local_backup_platform.CoreLocalBackupAgent(hass) local_agent = local_backup_platform.CoreLocalBackupAgent(hass)
remote_agent = BackupAgentTest("remote", backups=[]) remote_agent = BackupAgentTest("remote", backups=[])
agents = {
f"backup.{local_agent.name}": local_agent,
f"test.{remote_agent.name}": remote_agent,
}
with patch( with patch(
"homeassistant.components.backup.backup.async_get_backup_agents" "homeassistant.components.backup.backup.async_get_backup_agents"
) as core_get_backup_agents: ) as core_get_backup_agents:
@ -349,7 +350,7 @@ async def test_async_initiate_backup(
}, },
"name": name, "name": name,
"protected": bool(password), "protected": bool(password),
"slug": ANY, "slug": backup_id,
"type": "partial", "type": "partial",
"version": 2, "version": 2,
} }
@ -365,7 +366,7 @@ async def test_async_initiate_backup(
assert backup_agent_ids == agent_ids assert backup_agent_ids == agent_ids
assert backup_data == { assert backup_data == {
"addons": [], "addons": [],
"backup_id": ANY, "backup_id": backup_id,
"database_included": include_database, "database_included": include_database,
"date": ANY, "date": ANY,
"failed_agent_ids": [], "failed_agent_ids": [],
@ -378,16 +379,6 @@ async def test_async_initiate_backup(
"with_automatic_settings": False, "with_automatic_settings": False,
} }
for agent_id in agent_ids:
agent = agents[agent_id]
assert len(agent._backups) == 1
agent_backup = agent._backups[backup_data["backup_id"]]
assert agent_backup.backup_id == backup_data["backup_id"]
assert agent_backup.date == backup_data["date"]
assert agent_backup.name == backup_data["name"]
assert agent_backup.protected == backup_data["protected"]
assert agent_backup.size == backup_data["size"]
outer_tar = mocked_tarfile.return_value outer_tar = mocked_tarfile.return_value
core_tar = outer_tar.create_inner_tar.return_value.__enter__.return_value core_tar = outer_tar.create_inner_tar.return_value.__enter__.return_value
expected_files = [call(hass.config.path(), arcname="data", recursive=False)] + [ expected_files = [call(hass.config.path(), arcname="data", recursive=False)] + [
@ -398,12 +389,12 @@ async def test_async_initiate_backup(
tar_file_path = str(mocked_tarfile.call_args_list[0][0][0]) tar_file_path = str(mocked_tarfile.call_args_list[0][0][0])
backup_directory = hass.config.path(backup_directory) backup_directory = hass.config.path(backup_directory)
assert tar_file_path == f"{backup_directory}/{backup_data['backup_id']}.tar" assert tar_file_path == f"{backup_directory}/{backup_id}.tar"
@pytest.mark.usefixtures("mock_backup_generation") @pytest.mark.usefixtures("mock_backup_generation")
@pytest.mark.parametrize("exception", [BackupAgentError("Boom!"), Exception("Boom!")]) @pytest.mark.parametrize("exception", [BackupAgentError("Boom!"), Exception("Boom!")])
async def test_async_initiate_backup_with_agent_error( async def test_initiate_backup_with_agent_error(
hass: HomeAssistant, hass: HomeAssistant,
hass_ws_client: WebSocketGenerator, hass_ws_client: WebSocketGenerator,
generate_backup_id: MagicMock, generate_backup_id: MagicMock,
@ -845,7 +836,7 @@ async def test_create_backup_failure_raises_issue(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"exception", [BackupReaderWriterError("Boom!"), BaseException("Boom!")] "exception", [BackupReaderWriterError("Boom!"), BaseException("Boom!")]
) )
async def test_async_initiate_backup_non_agent_upload_error( async def test_initiate_backup_non_agent_upload_error(
hass: HomeAssistant, hass: HomeAssistant,
hass_ws_client: WebSocketGenerator, hass_ws_client: WebSocketGenerator,
generate_backup_id: MagicMock, generate_backup_id: MagicMock,
@ -954,7 +945,7 @@ async def test_async_initiate_backup_non_agent_upload_error(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"exception", [BackupReaderWriterError("Boom!"), Exception("Boom!")] "exception", [BackupReaderWriterError("Boom!"), Exception("Boom!")]
) )
async def test_async_initiate_backup_with_task_error( async def test_initiate_backup_with_task_error(
hass: HomeAssistant, hass: HomeAssistant,
hass_ws_client: WebSocketGenerator, hass_ws_client: WebSocketGenerator,
generate_backup_id: MagicMock, generate_backup_id: MagicMock,
@ -1173,35 +1164,6 @@ async def test_initiate_backup_file_error(
assert unlink_mock.call_count == unlink_call_count assert unlink_mock.call_count == unlink_call_count
async def test_loading_platforms(
hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test loading backup platforms."""
manager = BackupManager(hass, CoreBackupReaderWriter(hass))
assert not manager.platforms
get_agents_mock = AsyncMock(return_value=[])
await setup_backup_platform(
hass,
domain="test",
platform=Mock(
async_pre_backup=AsyncMock(),
async_post_backup=AsyncMock(),
async_get_backup_agents=get_agents_mock,
),
)
await manager.load_platforms()
await hass.async_block_till_done()
assert len(manager.platforms) == 1
assert "Loaded 1 platforms" in caplog.text
get_agents_mock.assert_called_once_with(hass)
class LocalBackupAgentTest(BackupAgentTest, LocalBackupAgent): class LocalBackupAgentTest(BackupAgentTest, LocalBackupAgent):
"""Local backup agent.""" """Local backup agent."""