mirror of
https://github.com/home-assistant/core.git
synced 2025-12-27 14:31:13 +00:00
Ensure async_get_system_info does not fail if supervisor is unavailable (#96492)
* Ensure async_get_system_info does not fail if supervisor is unavailable fixes #96470 * fix i/o in the event loop * fix tests * handle some more failure cases * more I/O here * coverage * coverage * Update homeassistant/helpers/system_info.py Co-authored-by: Paulus Schoutsen <balloob@gmail.com> * remove supervisor detection fallback * Update tests/helpers/test_system_info.py --------- Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
@@ -1,10 +1,23 @@
|
||||
"""Tests for the system info helper."""
|
||||
import json
|
||||
import os
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.const import __version__ as current_version
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.system_info import async_get_system_info
|
||||
from homeassistant.helpers.system_info import async_get_system_info, is_official_image
|
||||
|
||||
|
||||
async def test_is_official_image() -> None:
|
||||
"""Test is_official_image."""
|
||||
is_official_image.cache_clear()
|
||||
with patch("homeassistant.helpers.system_info.os.path.isfile", return_value=True):
|
||||
assert is_official_image() is True
|
||||
is_official_image.cache_clear()
|
||||
with patch("homeassistant.helpers.system_info.os.path.isfile", return_value=False):
|
||||
assert is_official_image() is False
|
||||
|
||||
|
||||
async def test_get_system_info(hass: HomeAssistant) -> None:
|
||||
@@ -16,23 +29,77 @@ async def test_get_system_info(hass: HomeAssistant) -> None:
|
||||
assert json.dumps(info) is not None
|
||||
|
||||
|
||||
async def test_get_system_info_supervisor_not_available(
|
||||
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||
) -> None:
|
||||
"""Test the get system info when supervisor is not available."""
|
||||
hass.config.components.add("hassio")
|
||||
with patch("platform.system", return_value="Linux"), patch(
|
||||
"homeassistant.helpers.system_info.is_docker_env", return_value=True
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.is_official_image", return_value=True
|
||||
), patch(
|
||||
"homeassistant.components.hassio.is_hassio", return_value=True
|
||||
), patch(
|
||||
"homeassistant.components.hassio.get_info", return_value=None
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.cached_get_user", return_value="root"
|
||||
):
|
||||
info = await async_get_system_info(hass)
|
||||
assert isinstance(info, dict)
|
||||
assert info["version"] == current_version
|
||||
assert info["user"] is not None
|
||||
assert json.dumps(info) is not None
|
||||
assert info["installation_type"] == "Home Assistant Supervised"
|
||||
assert "No Home Assistant Supervisor info available" in caplog.text
|
||||
|
||||
|
||||
async def test_get_system_info_supervisor_not_loaded(hass: HomeAssistant) -> None:
|
||||
"""Test the get system info when supervisor is not loaded."""
|
||||
with patch("platform.system", return_value="Linux"), patch(
|
||||
"homeassistant.helpers.system_info.is_docker_env", return_value=True
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.is_official_image", return_value=True
|
||||
), patch(
|
||||
"homeassistant.components.hassio.get_info", return_value=None
|
||||
), patch.dict(
|
||||
os.environ, {"SUPERVISOR": "127.0.0.1"}
|
||||
):
|
||||
info = await async_get_system_info(hass)
|
||||
assert isinstance(info, dict)
|
||||
assert info["version"] == current_version
|
||||
assert info["user"] is not None
|
||||
assert json.dumps(info) is not None
|
||||
assert info["installation_type"] == "Unsupported Third Party Container"
|
||||
|
||||
|
||||
async def test_container_installationtype(hass: HomeAssistant) -> None:
|
||||
"""Test container installation type."""
|
||||
with patch("platform.system", return_value="Linux"), patch(
|
||||
"os.path.isfile", return_value=True
|
||||
), patch("homeassistant.helpers.system_info.getuser", return_value="root"):
|
||||
"homeassistant.helpers.system_info.is_docker_env", return_value=True
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.is_official_image", return_value=True
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.cached_get_user", return_value="root"
|
||||
):
|
||||
info = await async_get_system_info(hass)
|
||||
assert info["installation_type"] == "Home Assistant Container"
|
||||
|
||||
with patch("platform.system", return_value="Linux"), patch(
|
||||
"os.path.isfile", side_effect=lambda file: file == "/.dockerenv"
|
||||
), patch("homeassistant.helpers.system_info.getuser", return_value="user"):
|
||||
"homeassistant.helpers.system_info.is_docker_env", return_value=True
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.is_official_image", return_value=False
|
||||
), patch(
|
||||
"homeassistant.helpers.system_info.cached_get_user", return_value="user"
|
||||
):
|
||||
info = await async_get_system_info(hass)
|
||||
assert info["installation_type"] == "Unsupported Third Party Container"
|
||||
|
||||
|
||||
async def test_getuser_keyerror(hass: HomeAssistant) -> None:
|
||||
"""Test getuser keyerror."""
|
||||
with patch("homeassistant.helpers.system_info.getuser", side_effect=KeyError):
|
||||
with patch(
|
||||
"homeassistant.helpers.system_info.cached_get_user", side_effect=KeyError
|
||||
):
|
||||
info = await async_get_system_info(hass)
|
||||
assert info["user"] is None
|
||||
|
||||
Reference in New Issue
Block a user