mirror of
https://github.com/home-assistant/supervisor.git
synced 2026-07-06 21:35:10 +01:00
5c65da8a19
* 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
68 lines
2.3 KiB
Python
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
|
|
)
|