mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-19 10:47:15 +00:00

* Migrate to Ruff for lint and format * Fix pylint issues * DBus property sets into normal awaitable methods * Fix tests relying on separate tasks in connect * Fixes from feedback
93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
"""Test AppArmor/Agent dbus interface."""
|
|
# pylint: disable=import-error
|
|
from pathlib import Path
|
|
|
|
from dbus_fast.aio.message_bus import MessageBus
|
|
import pytest
|
|
|
|
from supervisor.dbus.agent import OSAgent
|
|
from supervisor.exceptions import DBusNotConnectedError
|
|
|
|
from tests.dbus_service_mocks.agent_apparmor import AppArmor as AppArmorService
|
|
from tests.dbus_service_mocks.base import DBusServiceMock
|
|
|
|
|
|
@pytest.fixture(name="apparmor_service", autouse=True)
|
|
async def fixture_apparmor_service(
|
|
os_agent_services: dict[str, DBusServiceMock],
|
|
) -> AppArmorService:
|
|
"""Mock AppArmor dbus service."""
|
|
yield os_agent_services["agent_apparmor"]
|
|
|
|
|
|
async def test_dbus_osagent_apparmor(
|
|
apparmor_service: AppArmorService, dbus_session_bus: MessageBus
|
|
):
|
|
"""Test AppArmor properties."""
|
|
os_agent = OSAgent()
|
|
|
|
assert os_agent.apparmor.version is None
|
|
|
|
await os_agent.connect(dbus_session_bus)
|
|
|
|
assert os_agent.apparmor.version == "2.13.2"
|
|
|
|
apparmor_service.emit_properties_changed({"ParserVersion": "1.0.0"})
|
|
await apparmor_service.ping()
|
|
assert os_agent.apparmor.version == "1.0.0"
|
|
|
|
apparmor_service.emit_properties_changed({}, ["ParserVersion"])
|
|
await apparmor_service.ping()
|
|
await apparmor_service.ping()
|
|
assert os_agent.apparmor.version == "2.13.2"
|
|
|
|
|
|
async def test_dbus_osagent_apparmor_load(
|
|
apparmor_service: AppArmorService, dbus_session_bus: MessageBus
|
|
):
|
|
"""Load AppArmor Profile on host."""
|
|
apparmor_service.LoadProfile.calls.clear()
|
|
os_agent = OSAgent()
|
|
|
|
with pytest.raises(DBusNotConnectedError):
|
|
await os_agent.apparmor.load_profile(
|
|
Path("/data/apparmor/profile"), Path("/data/apparmor/cache")
|
|
)
|
|
|
|
await os_agent.connect(dbus_session_bus)
|
|
|
|
assert (
|
|
await os_agent.apparmor.load_profile(
|
|
Path("/data/apparmor/profile"), Path("/data/apparmor/cache")
|
|
)
|
|
is None
|
|
)
|
|
assert apparmor_service.LoadProfile.calls == [
|
|
("/data/apparmor/profile", "/data/apparmor/cache")
|
|
]
|
|
|
|
|
|
async def test_dbus_osagent_apparmor_unload(
|
|
apparmor_service: AppArmorService, dbus_session_bus: MessageBus
|
|
):
|
|
"""Unload AppArmor Profile on host."""
|
|
apparmor_service.UnloadProfile.calls.clear()
|
|
os_agent = OSAgent()
|
|
|
|
with pytest.raises(DBusNotConnectedError):
|
|
await os_agent.apparmor.unload_profile(
|
|
Path("/data/apparmor/profile"), Path("/data/apparmor/cache")
|
|
)
|
|
|
|
await os_agent.connect(dbus_session_bus)
|
|
|
|
assert (
|
|
await os_agent.apparmor.unload_profile(
|
|
Path("/data/apparmor/profile"), Path("/data/apparmor/cache")
|
|
)
|
|
is None
|
|
)
|
|
assert apparmor_service.UnloadProfile.calls == [
|
|
("/data/apparmor/profile", "/data/apparmor/cache")
|
|
]
|