Fix addons always unknown after install (#3746)

This commit is contained in:
Mike Degatano 2022-07-18 15:11:55 -04:00 committed by GitHub
parent fd998155c2
commit 48c5dd064c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 1 deletions

View File

@ -167,6 +167,7 @@ class AddonManager(CoreSysAttributes):
self.data.install(store) self.data.install(store)
addon = Addon(self.coresys, slug) addon = Addon(self.coresys, slug)
await addon.load()
if not addon.path_data.is_dir(): if not addon.path_data.is_dir():
_LOGGER.info( _LOGGER.info(

View File

@ -1,7 +1,9 @@
"""Test Home Assistant Add-ons.""" """Test Home Assistant Add-ons."""
import asyncio 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.addons.addon import Addon
from supervisor.const import AddonState, BusEvent from supervisor.const import AddonState, BusEvent
@ -243,3 +245,35 @@ async def test_addon_watchdog_rebuild_on_failure(
await asyncio.sleep(0) await asyncio.sleep(0)
start.assert_called_once() start.assert_called_once()
rebuild.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