mirror of
https://github.com/home-assistant/supervisor.git
synced 2026-08-20 21:27:46 +01:00
* tests: enable flake8-pytest-style (PT) ruff rules Enable the `PT` ruff rule set and fix the resulting violations across the test suite: - PT006: pass parametrize argument names as tuples instead of a single comma-separated string. - PT022: switch fixtures that have no teardown from `yield` to `return` so the lack of cleanup is obvious at a glance. - PT011: add `match=` to broad `pytest.raises(ValueError)` blocks so the expected error is anchored to a specific message. - PT012: hoist setup (patches, branching) out of `pytest.raises()` blocks so only the call that is expected to raise remains inside. - PT013: replace `from pytest import X` with `import pytest` and access attributes via the module. - PT015: replace `try/except` + `assert False` patterns with `pytest.raises(...)`. - PT017: replace `assert` on exceptions inside `except` blocks with `pytest.raises(...) as exc_info` and assert on `exc_info.value`. No behavioral changes to the tests; the full suite still passes. * tests: address review feedback on PT ruff rule enablement - Fix fixture return-type annotations after switching `yield` to `return` in tests/conftest.py: drop the `Generator[...]`/`AsyncGenerator[...]` wrapper for `dns_manager_service`, `supervisor_internet`, `websession`, and `mock_update_data` so the annotation matches what the fixture actually returns. - Correct the return-type annotation of `fixture_ip6config_service` from `IP4ConfigService` to `IP6ConfigService`. - Fix recurring "excepiton" typo in tests/utils/test_exception_helper.py. * tests: verify backup cleanup on permission error After `test_new_backup_permission_error` raises `BackupPermissionError`, assert that no tarfile was left behind and `tmp_path` is empty. The previous version only checked that the exception was raised, which missed any regression where a partial tarfile would survive the failed create. * tests: rename DNS_GOOD_V6 to DNS_V6_UNSUPPORTED The constant was named "good" but its tests assert that the URLs are rejected by the DNS validator. The IPv6 URLs are well-formed but currently rejected because IPv6 doesn't work with the Docker network (see `dns_url` in supervisor/validate.py). Rename the constant and the related test to make the intent obvious.
87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
"""Test OSAgent dbus interface."""
|
|
|
|
# pylint: disable=import-error
|
|
from dbus_fast.aio.message_bus import MessageBus
|
|
import pytest
|
|
|
|
from supervisor.dbus.agent import OSAgent
|
|
|
|
from tests.common import mock_dbus_services
|
|
from tests.dbus_service_mocks.base import DBusServiceMock
|
|
from tests.dbus_service_mocks.os_agent import OSAgent as OSAgentService
|
|
|
|
|
|
@pytest.fixture(name="os_agent_service")
|
|
async def fixture_os_agent_service(
|
|
os_agent_services: dict[str, DBusServiceMock],
|
|
) -> OSAgentService:
|
|
"""Mock OS Agent dbus service."""
|
|
return os_agent_services["os_agent"]
|
|
|
|
|
|
async def test_dbus_osagent(
|
|
os_agent_service: OSAgentService, dbus_session_bus: MessageBus
|
|
):
|
|
"""Test OS Agent properties."""
|
|
os_agent = OSAgent()
|
|
|
|
assert os_agent.version is None
|
|
assert os_agent.diagnostics is None
|
|
|
|
await os_agent.connect(dbus_session_bus)
|
|
|
|
assert os_agent.version == "1.1.0"
|
|
assert os_agent.diagnostics
|
|
|
|
os_agent_service.emit_properties_changed({"Diagnostics": False})
|
|
await os_agent_service.ping()
|
|
assert os_agent.diagnostics is False
|
|
|
|
os_agent_service.emit_properties_changed({}, ["Diagnostics"])
|
|
await os_agent_service.ping()
|
|
await os_agent_service.ping()
|
|
assert os_agent.diagnostics is True
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("skip_service", "error"),
|
|
[
|
|
("os_agent", "No OS-Agent support on the host"),
|
|
(
|
|
"agent_apparmor",
|
|
"Can't load OS Agent dbus interface io.hass.os /io/hass/os/AppArmor",
|
|
),
|
|
(
|
|
"agent_datadisk",
|
|
"Can't load OS Agent dbus interface io.hass.os /io/hass/os/DataDisk",
|
|
),
|
|
],
|
|
)
|
|
async def test_dbus_osagent_connect_error(
|
|
skip_service: str,
|
|
error: str,
|
|
dbus_session_bus: MessageBus,
|
|
caplog: pytest.LogCaptureFixture,
|
|
):
|
|
"""Test OS Agent errors during connect."""
|
|
os_agent_services = {
|
|
"os_agent": None,
|
|
"agent_apparmor": None,
|
|
"agent_cgroup": None,
|
|
"agent_datadisk": None,
|
|
"agent_swap": None,
|
|
"agent_system": None,
|
|
"agent_boards": None,
|
|
"agent_boards_yellow": None,
|
|
}
|
|
os_agent_services.pop(skip_service)
|
|
await mock_dbus_services(
|
|
os_agent_services,
|
|
dbus_session_bus,
|
|
)
|
|
|
|
os_agent = OSAgent()
|
|
await os_agent.connect(dbus_session_bus)
|
|
|
|
assert error in caplog.text
|