1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-07-06 21:35:10 +01:00
Files
supervisor/tests/resolution/evaluations/test_container.py
T
Mike Degatano 5c65da8a19 Refine Docker timeout handling and add regression tests (#6970)
* Refine Docker timeout handling and add regression tests

* Add network exception path tests for Docker manager

* Add timeout-path tests for Docker app and network

* Remove unnecessary timeout=None overrides from pull calls and tests
2026-06-26 15:15:10 +02:00

68 lines
2.3 KiB
Python

"""Tests for EvaluateContainer."""
from unittest.mock import AsyncMock, MagicMock
import aiodocker
from aiodocker.containers import DockerContainer
import pytest
from supervisor.const import CoreState
from supervisor.coresys import CoreSys
from supervisor.resolution.const import IssueType
from supervisor.resolution.evaluations.container import EvaluateContainer
async def test_evaluate_container_list_timeout(
coresys: CoreSys, caplog: pytest.LogCaptureFixture
):
"""Test evaluate returns False and logs on containers.list timeout, no corrupt issue."""
await coresys.core.set_state(CoreState.RUNNING)
coresys.docker.containers.list.side_effect = TimeoutError()
evaluation = EvaluateContainer(coresys)
result = await evaluation.evaluate()
assert result is False
assert "Timeout while evaluating docker containers" in caplog.text
# A timeout is not a sign of corrupt Docker; no issue should be created
assert not any(
issue.type == IssueType.CORRUPT_DOCKER for issue in coresys.resolution.issues
)
async def test_evaluate_container_show_timeout(
coresys: CoreSys, caplog: pytest.LogCaptureFixture
):
"""Test evaluate returns False and logs when container.show times out, no corrupt issue."""
await coresys.core.set_state(CoreState.RUNNING)
mock_container = MagicMock(spec=DockerContainer)
mock_container.show = AsyncMock(side_effect=TimeoutError())
coresys.docker.containers.list.return_value = [mock_container]
evaluation = EvaluateContainer(coresys)
result = await evaluation.evaluate()
assert result is False
assert "Timeout while evaluating docker containers" in caplog.text
assert not any(
issue.type == IssueType.CORRUPT_DOCKER for issue in coresys.resolution.issues
)
async def test_evaluate_container_docker_error_creates_corrupt_issue(
coresys: CoreSys,
):
"""Test evaluate creates CORRUPT_DOCKER issue on DockerError (original behavior)."""
await coresys.core.set_state(CoreState.RUNNING)
coresys.docker.containers.list.side_effect = aiodocker.DockerError(
500, {"message": "overlayfs error"}
)
evaluation = EvaluateContainer(coresys)
result = await evaluation.evaluate()
assert result is False
assert any(
issue.type == IssueType.CORRUPT_DOCKER for issue in coresys.resolution.issues
)