1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-02-15 07:27:13 +00:00
Files
supervisor/tests/plugins/test_observer.py
Stefan Agner 79f9afb4c2 Fix port conflict tests for aiodocker 0.25.0 compatibility (#6519)
The aiodocker 0.25.0 upgrade (PR #6448) changed how DockerError handles
the message parameter. The library now extracts the message string from
Docker API JSON responses before passing it to DockerError, rather than
passing the entire dict.

The port conflict detection tests were written before this change and
incorrectly passed dicts to DockerError. This caused TypeErrors when
the port conflict detection code tried to match err.message with a
regex, expecting a string but receiving a dict.

Update both test_addon_start_port_conflict_error and
test_observer_start_port_conflict to pass message strings directly,
matching the real aiodocker 0.25.0 behavior.

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 10:34:47 +01:00

31 lines
1.1 KiB
Python

"""Test observer plugin."""
from http import HTTPStatus
import aiodocker
import pytest
from supervisor.coresys import CoreSys
from supervisor.exceptions import ObserverPortConflict
@pytest.mark.usefixtures("container", "tmp_supervisor_data", "path_extern")
async def test_observer_start_port_conflict(
coresys: CoreSys, caplog: pytest.LogCaptureFixture
):
"""Test port conflict error when trying to start observer."""
coresys.docker.containers.create.return_value.start.side_effect = aiodocker.DockerError(
HTTPStatus.INTERNAL_SERVER_ERROR,
"failed to set up container networking: driver failed programming external connectivity on endpoint hassio_observer (ea4d0fdaa72cf86f2c9199a04208e3eaf0c5a0d6fd34b3c7f4fab2daadb1f3a9): failed to bind host port for 0.0.0.0:4357:172.30.33.4:80/tcp: address already in use",
)
await coresys.plugins.observer.load()
caplog.clear()
with pytest.raises(ObserverPortConflict):
await coresys.plugins.observer.start()
assert (
"Cannot start container hassio_observer because port 4357 is already in use"
in caplog.text
)