mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-06-20 17:06:30 +00:00

* Use Systemd Journal API for all logs endpoints in API Replace all logs endpoints using container logs with wrapped advanced_logs function, adding possibility to get logs from previous boots and following the logs. Supervisor logs are an excetion where Docker logs are still used - in case an exception is raised while accessing the Systemd logs, they're used as fallback - otherwise we wouldn't have an easy way to see what went wrong. * Refactor testing of advanced logs endpoints to a common method * Send error while fetching Supervisor logs to Sentry; minor cleanup * Properly handle errors and use consistent content type in logs endpoints * Replace api_process_custom with reworked api_process_raw per @mdegat01 suggestion
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
"""Test homeassistant api."""
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from aiohttp.test_utils import TestClient
|
|
import pytest
|
|
|
|
from supervisor.coresys import CoreSys
|
|
from supervisor.homeassistant.module import HomeAssistant
|
|
|
|
from tests.api import common_test_api_advanced_logs
|
|
from tests.common import load_json_fixture
|
|
|
|
|
|
@pytest.mark.parametrize("legacy_route", [True, False])
|
|
async def test_api_core_logs(
|
|
api_client: TestClient, journald_logs: MagicMock, legacy_route: bool
|
|
):
|
|
"""Test core logs."""
|
|
await common_test_api_advanced_logs(
|
|
f"/{'homeassistant' if legacy_route else 'core'}",
|
|
"homeassistant",
|
|
api_client,
|
|
journald_logs,
|
|
)
|
|
|
|
|
|
async def test_api_stats(api_client: TestClient, coresys: CoreSys):
|
|
"""Test stats."""
|
|
coresys.docker.containers.get.return_value.status = "running"
|
|
coresys.docker.containers.get.return_value.stats.return_value = load_json_fixture(
|
|
"container_stats.json"
|
|
)
|
|
|
|
resp = await api_client.get("/homeassistant/stats")
|
|
assert resp.status == 200
|
|
result = await resp.json()
|
|
assert result["data"]["cpu_percent"] == 90.0
|
|
assert result["data"]["memory_usage"] == 59700000
|
|
assert result["data"]["memory_limit"] == 4000000000
|
|
assert result["data"]["memory_percent"] == 1.49
|
|
|
|
|
|
async def test_api_set_options(api_client: TestClient, coresys: CoreSys):
|
|
"""Test setting options for homeassistant."""
|
|
resp = await api_client.get("/homeassistant/info")
|
|
assert resp.status == 200
|
|
result = await resp.json()
|
|
assert result["data"]["watchdog"] is True
|
|
assert result["data"]["backups_exclude_database"] is False
|
|
|
|
with patch.object(HomeAssistant, "save_data") as save_data:
|
|
resp = await api_client.post(
|
|
"/homeassistant/options",
|
|
json={"backups_exclude_database": True, "watchdog": False},
|
|
)
|
|
assert resp.status == 200
|
|
save_data.assert_called_once()
|
|
|
|
resp = await api_client.get("/homeassistant/info")
|
|
assert resp.status == 200
|
|
result = await resp.json()
|
|
assert result["data"]["watchdog"] is False
|
|
assert result["data"]["backups_exclude_database"] is True
|