1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-07-05 12:55:01 +01:00
Files
supervisor/tests/docker/test_supervisor.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

72 lines
2.8 KiB
Python

"""Test Supervisor Docker container timeout handling."""
from awesomeversion import AwesomeVersion
import pytest
from supervisor.coresys import CoreSys
from supervisor.exceptions import DockerTimeoutError
async def test_supervisor_attach_get_timeout(coresys: CoreSys):
"""Test DockerSupervisor.attach raises DockerTimeoutError when containers.get times out."""
coresys.docker.containers.get.side_effect = TimeoutError()
with pytest.raises(
DockerTimeoutError, match="Timeout getting supervisor container"
):
await coresys.supervisor.instance.attach(
coresys.supervisor.version or AwesomeVersion("2025.1.0")
)
async def test_supervisor_retag_get_timeout(coresys: CoreSys):
"""Test DockerSupervisor.retag raises DockerTimeoutError when containers.get times out."""
coresys.docker.containers.get.side_effect = TimeoutError()
with pytest.raises(
DockerTimeoutError, match="Timeout getting Supervisor container for retag"
):
await coresys.supervisor.instance.retag()
async def test_supervisor_retag_tag_timeout(coresys: CoreSys):
"""Test DockerSupervisor.retag raises DockerTimeoutError when images.tag times out."""
# Attach first to initialize metadata via the public API.
coresys.docker.containers.get.return_value.show.return_value = {
"ImageID": "sha256:abc123",
"Image": "sha256:abc123",
"Config": {
"Image": "ghcr.io/home-assistant/amd64-hassio-supervisor:latest",
"Labels": {"io.hass.version": "2025.1.0"},
},
}
await coresys.supervisor.instance.attach(AwesomeVersion("2025.1.0"))
coresys.docker.images.tag.side_effect = TimeoutError()
with pytest.raises(
DockerTimeoutError, match="Timeout retagging Supervisor version"
):
await coresys.supervisor.instance.retag()
async def test_supervisor_update_start_tag_get_timeout(coresys: CoreSys):
"""Test update_start_tag raises DockerTimeoutError when containers.get times out."""
coresys.docker.containers.get.side_effect = TimeoutError()
with pytest.raises(
DockerTimeoutError, match="Timeout getting container to fix start tag"
):
await coresys.supervisor.instance.update_start_tag(
"ghcr.io/home-assistant/amd64-hassio-supervisor",
AwesomeVersion("2025.1.0"),
)
async def test_supervisor_update_start_tag_inspect_timeout(coresys: CoreSys):
"""Test update_start_tag raises DockerTimeoutError when images.inspect times out."""
coresys.docker.images.inspect.side_effect = TimeoutError()
with pytest.raises(
DockerTimeoutError, match="Timeout getting image metadata to fix start tag"
):
await coresys.supervisor.instance.update_start_tag(
"ghcr.io/home-assistant/amd64-hassio-supervisor",
AwesomeVersion("2025.1.0"),
)