From 48c5dd064c43b75dae23eb9b2ca26db6b0f68f2e Mon Sep 17 00:00:00 2001 From: Mike Degatano Date: Mon, 18 Jul 2022 15:11:55 -0400 Subject: [PATCH] Fix addons always unknown after install (#3746) --- supervisor/addons/__init__.py | 1 + tests/addons/test_addon.py | 36 ++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/supervisor/addons/__init__.py b/supervisor/addons/__init__.py index 6aa396b76..b7663af87 100644 --- a/supervisor/addons/__init__.py +++ b/supervisor/addons/__init__.py @@ -167,6 +167,7 @@ class AddonManager(CoreSysAttributes): self.data.install(store) addon = Addon(self.coresys, slug) + await addon.load() if not addon.path_data.is_dir(): _LOGGER.info( diff --git a/tests/addons/test_addon.py b/tests/addons/test_addon.py index 1cb854268..e9b45d14f 100644 --- a/tests/addons/test_addon.py +++ b/tests/addons/test_addon.py @@ -1,7 +1,9 @@ """Test Home Assistant Add-ons.""" import asyncio -from unittest.mock import patch +from unittest.mock import MagicMock, PropertyMock, patch + +from docker.errors import DockerException from supervisor.addons.addon import Addon from supervisor.const import AddonState, BusEvent @@ -243,3 +245,35 @@ async def test_addon_watchdog_rebuild_on_failure( await asyncio.sleep(0) start.assert_called_once() rebuild.assert_called_once() + + +async def test_listener_attached_on_install(coresys: CoreSys, repository): + """Test events listener attached on addon install.""" + container_collection = MagicMock() + container_collection.get.side_effect = DockerException() + with patch( + "supervisor.arch.CpuArch.supported", new=PropertyMock(return_value=["amd64"]) + ), patch( + "supervisor.docker.manager.DockerAPI.containers", + new=PropertyMock(return_value=container_collection), + ), patch( + "pathlib.Path.is_dir", return_value=True + ), patch( + "supervisor.addons.addon.Addon.need_build", new=PropertyMock(return_value=False) + ), patch( + "supervisor.addons.model.AddonModel.with_ingress", + new=PropertyMock(return_value=False), + ): + await coresys.addons.install.__wrapped__(coresys.addons, TEST_ADDON_SLUG) + + coresys.bus.fire_event( + BusEvent.DOCKER_CONTAINER_STATE_CHANGE, + DockerContainerStateEvent( + name=f"addon_{TEST_ADDON_SLUG}", + state=ContainerState.RUNNING, + id="abc123", + time=1, + ), + ) + await asyncio.sleep(0) + assert coresys.addons.get(TEST_ADDON_SLUG).state == AddonState.STARTED