mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 17:27:10 +00:00
Don't blow up when a backup doesn't exist on supervisor (#136907)
This commit is contained in:
parent
63af407f8f
commit
ec53b08e09
@ -198,7 +198,10 @@ class SupervisorBackupAgent(BackupAgent):
|
|||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> AgentBackup | None:
|
) -> AgentBackup | None:
|
||||||
"""Return a backup."""
|
"""Return a backup."""
|
||||||
|
try:
|
||||||
details = await self._client.backups.backup_info(backup_id)
|
details = await self._client.backups.backup_info(backup_id)
|
||||||
|
except SupervisorNotFoundError:
|
||||||
|
return None
|
||||||
if self.location not in details.locations:
|
if self.location not in details.locations:
|
||||||
return None
|
return None
|
||||||
return _backup_details_to_agent_backup(details, self.location)
|
return _backup_details_to_agent_backup(details, self.location)
|
||||||
@ -212,10 +215,6 @@ class SupervisorBackupAgent(BackupAgent):
|
|||||||
location={self.location}
|
location={self.location}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
except SupervisorBadRequestError as err:
|
|
||||||
if err.args[0] != "Backup does not exist":
|
|
||||||
raise
|
|
||||||
_LOGGER.debug("Backup %s does not exist", backup_id)
|
|
||||||
except SupervisorNotFoundError:
|
except SupervisorNotFoundError:
|
||||||
_LOGGER.debug("Backup %s does not exist", backup_id)
|
_LOGGER.debug("Backup %s does not exist", backup_id)
|
||||||
|
|
||||||
|
@ -544,7 +544,7 @@ async def test_agent_download(
|
|||||||
hass_client: ClientSessionGenerator,
|
hass_client: ClientSessionGenerator,
|
||||||
supervisor_client: AsyncMock,
|
supervisor_client: AsyncMock,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test agent download backup, when cloud user is logged in."""
|
"""Test agent download backup."""
|
||||||
client = await hass_client()
|
client = await hass_client()
|
||||||
backup_id = "abc123"
|
backup_id = "abc123"
|
||||||
supervisor_client.backups.list.return_value = [TEST_BACKUP]
|
supervisor_client.backups.list.return_value = [TEST_BACKUP]
|
||||||
@ -568,7 +568,7 @@ async def test_agent_download_unavailable_backup(
|
|||||||
hass_client: ClientSessionGenerator,
|
hass_client: ClientSessionGenerator,
|
||||||
supervisor_client: AsyncMock,
|
supervisor_client: AsyncMock,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test agent download backup, when cloud user is logged in."""
|
"""Test agent download backup which does not exist."""
|
||||||
client = await hass_client()
|
client = await hass_client()
|
||||||
backup_id = "abc123"
|
backup_id = "abc123"
|
||||||
supervisor_client.backups.list.return_value = [TEST_BACKUP_3]
|
supervisor_client.backups.list.return_value = [TEST_BACKUP_3]
|
||||||
@ -630,6 +630,91 @@ async def test_agent_upload(
|
|||||||
supervisor_client.backups.remove_backup.assert_not_called()
|
supervisor_client.backups.remove_backup.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("hassio_client", "setup_integration")
|
||||||
|
async def test_agent_get_backup(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_ws_client: WebSocketGenerator,
|
||||||
|
supervisor_client: AsyncMock,
|
||||||
|
) -> None:
|
||||||
|
"""Test agent get backup."""
|
||||||
|
client = await hass_ws_client(hass)
|
||||||
|
supervisor_client.backups.backup_info.return_value = TEST_BACKUP_DETAILS
|
||||||
|
backup_id = "abc123"
|
||||||
|
|
||||||
|
await client.send_json_auto_id(
|
||||||
|
{
|
||||||
|
"type": "backup/details",
|
||||||
|
"backup_id": backup_id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
response = await client.receive_json()
|
||||||
|
|
||||||
|
assert response["success"]
|
||||||
|
assert response["result"] == {
|
||||||
|
"agent_errors": {},
|
||||||
|
"backup": {
|
||||||
|
"addons": [
|
||||||
|
{"name": "Terminal & SSH", "slug": "core_ssh", "version": "9.14.0"}
|
||||||
|
],
|
||||||
|
"agents": {"hassio.local": {"protected": False, "size": 1048576}},
|
||||||
|
"backup_id": "abc123",
|
||||||
|
"database_included": True,
|
||||||
|
"date": "1970-01-01T00:00:00+00:00",
|
||||||
|
"failed_agent_ids": [],
|
||||||
|
"folders": ["share"],
|
||||||
|
"homeassistant_included": True,
|
||||||
|
"homeassistant_version": "2024.12.0",
|
||||||
|
"name": "Test",
|
||||||
|
"with_automatic_settings": None,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
supervisor_client.backups.backup_info.assert_called_once_with(backup_id)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("hassio_client", "setup_integration")
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("backup_info_side_effect", "expected_response"),
|
||||||
|
[
|
||||||
|
(
|
||||||
|
SupervisorBadRequestError("blah"),
|
||||||
|
{
|
||||||
|
"success": False,
|
||||||
|
"error": {"code": "unknown_error", "message": "Unknown error"},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
SupervisorNotFoundError(),
|
||||||
|
{
|
||||||
|
"success": True,
|
||||||
|
"result": {"agent_errors": {}, "backup": None},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_agent_get_backup_with_error(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_ws_client: WebSocketGenerator,
|
||||||
|
supervisor_client: AsyncMock,
|
||||||
|
backup_info_side_effect: Exception,
|
||||||
|
expected_response: dict[str, Any],
|
||||||
|
) -> None:
|
||||||
|
"""Test agent get backup."""
|
||||||
|
client = await hass_ws_client(hass)
|
||||||
|
backup_id = "abc123"
|
||||||
|
|
||||||
|
supervisor_client.backups.backup_info.side_effect = backup_info_side_effect
|
||||||
|
await client.send_json_auto_id(
|
||||||
|
{
|
||||||
|
"type": "backup/details",
|
||||||
|
"backup_id": backup_id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
response = await client.receive_json()
|
||||||
|
|
||||||
|
assert response == {"id": 1, "type": "result"} | expected_response
|
||||||
|
supervisor_client.backups.backup_info.assert_called_once_with(backup_id)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("hassio_client", "setup_integration")
|
@pytest.mark.usefixtures("hassio_client", "setup_integration")
|
||||||
async def test_agent_delete_backup(
|
async def test_agent_delete_backup(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
@ -666,13 +751,6 @@ async def test_agent_delete_backup(
|
|||||||
"error": {"code": "unknown_error", "message": "Unknown error"},
|
"error": {"code": "unknown_error", "message": "Unknown error"},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
|
||||||
SupervisorBadRequestError("Backup does not exist"),
|
|
||||||
{
|
|
||||||
"success": True,
|
|
||||||
"result": {"agent_errors": {}},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
SupervisorNotFoundError(),
|
SupervisorNotFoundError(),
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user