mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-19 10:47:15 +00:00
Use session dbus mocks for all tests (#4198)
* Use session dbus mocks for all tests * func instead of fn for pylint
This commit is contained in:
parent
c6ddc8e427
commit
a6caccd845
@ -1,46 +1,46 @@
|
||||
"""Test DNS API."""
|
||||
from unittest.mock import MagicMock, PropertyMock, patch
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from aiohttp.test_utils import TestClient
|
||||
|
||||
from supervisor.coresys import CoreSys
|
||||
from supervisor.dbus.const import MulticastProtocolEnabled
|
||||
from supervisor.dbus.resolved import Resolved
|
||||
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
from tests.dbus_service_mocks.resolved import Resolved as ResolvedService
|
||||
|
||||
|
||||
async def test_llmnr_mdns_info(
|
||||
api_client: TestClient, coresys: CoreSys, dbus_is_connected: PropertyMock
|
||||
api_client: TestClient,
|
||||
coresys: CoreSys,
|
||||
all_dbus_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
||||
):
|
||||
"""Test llmnr and mdns in info api."""
|
||||
coresys.host.sys_dbus.resolved.is_connected = False
|
||||
resolved_service: ResolvedService = all_dbus_services["resolved"]
|
||||
|
||||
# pylint: disable=protected-access
|
||||
coresys.host.sys_dbus._resolved = Resolved()
|
||||
# pylint: enable=protected-access
|
||||
|
||||
resp = await api_client.get("/dns/info")
|
||||
result = await resp.json()
|
||||
assert result["data"]["llmnr"] is False
|
||||
assert result["data"]["mdns"] is False
|
||||
|
||||
coresys.host.sys_dbus.resolved.is_connected = True
|
||||
with patch.object(
|
||||
type(coresys.host.sys_dbus.resolved),
|
||||
"llmnr",
|
||||
PropertyMock(return_value=MulticastProtocolEnabled.NO),
|
||||
), patch.object(
|
||||
type(coresys.host.sys_dbus.resolved),
|
||||
"multicast_dns",
|
||||
PropertyMock(return_value=MulticastProtocolEnabled.NO),
|
||||
):
|
||||
resp = await api_client.get("/dns/info")
|
||||
result = await resp.json()
|
||||
assert result["data"]["llmnr"] is False
|
||||
assert result["data"]["mdns"] is False
|
||||
|
||||
await coresys.dbus.resolved.connect(coresys.dbus.bus)
|
||||
await coresys.dbus.resolved.update()
|
||||
|
||||
resp = await api_client.get("/dns/info")
|
||||
result = await resp.json()
|
||||
assert result["data"]["llmnr"] is True
|
||||
assert result["data"]["mdns"] is True
|
||||
|
||||
resolved_service.emit_properties_changed({"LLMNR": "no", "MulticastDNS": "no"})
|
||||
await resolved_service.ping()
|
||||
|
||||
resp = await api_client.get("/dns/info")
|
||||
result = await resp.json()
|
||||
assert result["data"]["llmnr"] is False
|
||||
assert result["data"]["mdns"] is False
|
||||
|
||||
|
||||
async def test_options(api_client: TestClient, coresys: CoreSys):
|
||||
"""Test options api."""
|
||||
|
@ -6,6 +6,7 @@ from aiohttp.test_utils import TestClient
|
||||
import pytest
|
||||
|
||||
from supervisor.coresys import CoreSys
|
||||
from supervisor.dbus.resolved import Resolved
|
||||
|
||||
DEFAULT_RANGE = "entries=:-100:"
|
||||
# pylint: disable=protected-access
|
||||
@ -107,13 +108,12 @@ async def test_api_host_features(
|
||||
assert "disk" in result["data"]["features"]
|
||||
|
||||
|
||||
async def test_api_llmnr_mdns_info(
|
||||
api_client: TestClient, coresys_disk_info: CoreSys, dbus_is_connected
|
||||
):
|
||||
async def test_api_llmnr_mdns_info(api_client: TestClient, coresys_disk_info: CoreSys):
|
||||
"""Test llmnr and mdns details in info."""
|
||||
coresys = coresys_disk_info
|
||||
|
||||
coresys.host.sys_dbus.resolved.is_connected = False
|
||||
# pylint: disable=protected-access
|
||||
coresys.host.sys_dbus._resolved = Resolved()
|
||||
# pylint: enable=protected-access
|
||||
|
||||
resp = await api_client.get("/host/info")
|
||||
result = await resp.json()
|
||||
@ -121,9 +121,7 @@ async def test_api_llmnr_mdns_info(
|
||||
assert result["data"]["broadcast_mdns"] is None
|
||||
assert result["data"]["llmnr_hostname"] is None
|
||||
|
||||
coresys.host.sys_dbus.resolved.is_connected = True
|
||||
await coresys.dbus.resolved.connect(coresys.dbus.bus)
|
||||
await coresys.dbus.resolved.update()
|
||||
|
||||
resp = await api_client.get("/host/info")
|
||||
result = await resp.json()
|
||||
|
@ -1,15 +1,22 @@
|
||||
"""Test NetwrokInterface API."""
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import pytest
|
||||
from dbus_fast import Variant
|
||||
|
||||
from supervisor.const import DOCKER_NETWORK, DOCKER_NETWORK_MASK
|
||||
from supervisor.coresys import CoreSys
|
||||
|
||||
from tests.const import TEST_INTERFACE, TEST_INTERFACE_WLAN
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
from tests.dbus_service_mocks.network_connection_settings import (
|
||||
ConnectionSettings as ConnectionSettingsService,
|
||||
)
|
||||
from tests.dbus_service_mocks.network_manager import (
|
||||
NetworkManager as NetworkManagerService,
|
||||
)
|
||||
from tests.dbus_service_mocks.network_settings import Settings as SettingsService
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_info(api_client, coresys: CoreSys):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.get("/network/info")
|
||||
@ -48,7 +55,6 @@ async def test_api_network_info(api_client, coresys: CoreSys):
|
||||
assert result["data"]["docker"]["gateway"] == str(coresys.docker.network.gateway)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_info(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.get(f"/network/interface/{TEST_INTERFACE}/info")
|
||||
@ -60,10 +66,7 @@ async def test_api_network_interface_info(api_client):
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][0] == "2a03:169:3df5:0:6be9:2588:b26a:a679/64"
|
||||
)
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][1]
|
||||
== "fd14:949b:c9cc:0:522b:8108:8ff8:cca3/64"
|
||||
)
|
||||
assert result["data"]["ipv6"]["address"][1] == "2a03:169:3df5::2f1/128"
|
||||
assert result["data"]["ipv6"]["gateway"] == "fe80::da58:d7ff:fe00:9c69"
|
||||
assert result["data"]["ipv6"]["nameservers"] == [
|
||||
"2001:1620:2777:1::10",
|
||||
@ -73,7 +76,6 @@ async def test_api_network_interface_info(api_client):
|
||||
assert result["data"]["interface"] == TEST_INTERFACE
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_info_default(api_client):
|
||||
"""Test network manager default api."""
|
||||
resp = await api_client.get("/network/interface/default/info")
|
||||
@ -85,10 +87,7 @@ async def test_api_network_interface_info_default(api_client):
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][0] == "2a03:169:3df5:0:6be9:2588:b26a:a679/64"
|
||||
)
|
||||
assert (
|
||||
result["data"]["ipv6"]["address"][1]
|
||||
== "fd14:949b:c9cc:0:522b:8108:8ff8:cca3/64"
|
||||
)
|
||||
assert result["data"]["ipv6"]["address"][1] == "2a03:169:3df5::2f1/128"
|
||||
assert result["data"]["ipv6"]["gateway"] == "fe80::da58:d7ff:fe00:9c69"
|
||||
assert result["data"]["ipv6"]["nameservers"] == [
|
||||
"2001:1620:2777:1::10",
|
||||
@ -98,12 +97,19 @@ async def test_api_network_interface_info_default(api_client):
|
||||
assert result["data"]["interface"] == TEST_INTERFACE
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_update(
|
||||
api_client, coresys: CoreSys, dbus: list[str]
|
||||
api_client,
|
||||
coresys: CoreSys,
|
||||
network_manager_service: NetworkManagerService,
|
||||
connection_settings_service: ConnectionSettingsService,
|
||||
):
|
||||
"""Test network manager api."""
|
||||
dbus.clear()
|
||||
network_manager_service.CheckConnectivity.calls.clear()
|
||||
connection_settings_service.Update.calls.clear()
|
||||
assert (
|
||||
coresys.dbus.network.interfaces[TEST_INTERFACE].settings.ipv4.method == "auto"
|
||||
)
|
||||
|
||||
resp = await api_client.post(
|
||||
f"/network/interface/{TEST_INTERFACE}/update",
|
||||
json={
|
||||
@ -117,13 +123,16 @@ async def test_api_network_interface_update(
|
||||
)
|
||||
result = await resp.json()
|
||||
assert result["result"] == "ok"
|
||||
assert network_manager_service.CheckConnectivity.calls == [tuple()]
|
||||
assert len(connection_settings_service.Update.calls) == 1
|
||||
|
||||
await connection_settings_service.ping()
|
||||
await connection_settings_service.ping()
|
||||
assert (
|
||||
"/org/freedesktop/NetworkManager-org.freedesktop.NetworkManager.CheckConnectivity"
|
||||
in dbus
|
||||
coresys.dbus.network.interfaces[TEST_INTERFACE].settings.ipv4.method == "manual"
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_update_wifi(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.post(
|
||||
@ -143,7 +152,6 @@ async def test_api_network_interface_update_wifi(api_client):
|
||||
assert result["result"] == "ok"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_update_remove(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.post(
|
||||
@ -154,7 +162,6 @@ async def test_api_network_interface_update_remove(api_client):
|
||||
assert result["result"] == "ok"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_info_invalid(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.get("/network/interface/invalid/info")
|
||||
@ -164,7 +171,6 @@ async def test_api_network_interface_info_invalid(api_client):
|
||||
assert result["result"] == "error"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_interface_update_invalid(api_client):
|
||||
"""Test network manager api."""
|
||||
resp = await api_client.post("/network/interface/invalid/update", json={})
|
||||
@ -186,7 +192,6 @@ async def test_api_network_interface_update_invalid(api_client):
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_wireless_scan(api_client):
|
||||
"""Test network manager api."""
|
||||
with patch("asyncio.sleep", return_value=AsyncMock()):
|
||||
@ -201,30 +206,47 @@ async def test_api_network_wireless_scan(api_client):
|
||||
assert [47, 63] == [ap["signal"] for ap in result["data"]["accesspoints"]]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_network_reload(api_client, coresys, dbus: list[str]):
|
||||
async def test_api_network_reload(
|
||||
api_client, coresys, network_manager_service: NetworkManagerService
|
||||
):
|
||||
"""Test network manager reload api."""
|
||||
dbus.clear()
|
||||
network_manager_service.CheckConnectivity.calls.clear()
|
||||
resp = await api_client.post("/network/reload")
|
||||
result = await resp.json()
|
||||
|
||||
assert result["result"] == "ok"
|
||||
# Check that we forced NM to do an immediate connectivity check
|
||||
assert (
|
||||
"/org/freedesktop/NetworkManager-org.freedesktop.NetworkManager.CheckConnectivity"
|
||||
in dbus
|
||||
)
|
||||
assert network_manager_service.CheckConnectivity.calls == [tuple()]
|
||||
|
||||
|
||||
async def test_api_network_vlan(api_client, coresys: CoreSys, dbus: list[str]):
|
||||
async def test_api_network_vlan(
|
||||
api_client,
|
||||
coresys: CoreSys,
|
||||
network_manager_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
||||
):
|
||||
"""Test creating a vlan."""
|
||||
dbus.clear()
|
||||
settings_service: SettingsService = network_manager_services["network_settings"]
|
||||
settings_service.AddConnection.calls.clear()
|
||||
resp = await api_client.post(
|
||||
f"/network/interface/{TEST_INTERFACE}/vlan/1", json={"ipv4": {"method": "auto"}}
|
||||
)
|
||||
result = await resp.json()
|
||||
assert result["result"] == "ok"
|
||||
assert (
|
||||
"/org/freedesktop/NetworkManager/Settings-org.freedesktop.NetworkManager.Settings.AddConnection"
|
||||
in dbus
|
||||
)
|
||||
assert len(settings_service.AddConnection.calls) == 1
|
||||
|
||||
connection = settings_service.AddConnection.calls[0][0]
|
||||
assert "uuid" in connection["connection"]
|
||||
assert connection["connection"] == {
|
||||
"id": Variant("s", "Supervisor .1"),
|
||||
"type": Variant("s", "vlan"),
|
||||
"llmnr": Variant("i", 2),
|
||||
"mdns": Variant("i", 2),
|
||||
"autoconnect": Variant("b", True),
|
||||
"uuid": connection["connection"]["uuid"],
|
||||
}
|
||||
assert connection["ipv4"] == {"method": Variant("s", "auto")}
|
||||
assert connection["ipv6"] == {"method": Variant("s", "auto")}
|
||||
assert connection["vlan"] == {
|
||||
"id": Variant("u", 1),
|
||||
"parent": Variant("s", "eth0"),
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
"""Test OS API."""
|
||||
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
from unittest.mock import PropertyMock, patch
|
||||
|
||||
@ -8,16 +7,27 @@ from aiohttp.test_utils import TestClient
|
||||
import pytest
|
||||
|
||||
from supervisor.coresys import CoreSys
|
||||
from supervisor.dbus.agent.boards import BoardManager
|
||||
from supervisor.hardware.data import Device
|
||||
from supervisor.os.manager import OSManager
|
||||
from supervisor.resolution.const import ContextType, IssueType, SuggestionType
|
||||
from supervisor.resolution.data import Issue, Suggestion
|
||||
|
||||
from tests.common import mock_dbus_services
|
||||
from tests.dbus_service_mocks.agent_boards import Boards as BoardsService
|
||||
from tests.dbus_service_mocks.agent_boards_yellow import Yellow as YellowService
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
|
||||
# pylint: disable=protected-access
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.fixture(name="boards_service")
|
||||
async def fixture_boards_service(
|
||||
os_agent_services: dict[str, DBusServiceMock]
|
||||
) -> BoardsService:
|
||||
"""Return mock Boards service."""
|
||||
yield os_agent_services["agent_boards"]
|
||||
|
||||
|
||||
async def test_api_os_info(api_client: TestClient):
|
||||
"""Test docker info api."""
|
||||
resp = await api_client.get("/os/info")
|
||||
@ -34,23 +44,16 @@ async def test_api_os_info(api_client: TestClient):
|
||||
assert attr in result["data"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_os_info_with_agent(api_client: TestClient, coresys: CoreSys):
|
||||
"""Test docker info api."""
|
||||
await coresys.dbus.agent.connect(coresys.dbus.bus)
|
||||
await coresys.dbus.agent.update()
|
||||
|
||||
resp = await api_client.get("/os/info")
|
||||
result = await resp.json()
|
||||
|
||||
assert result["data"]["data_disk"] == "/dev/sda"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_os_datadisk_move(api_client: TestClient, coresys: CoreSys):
|
||||
"""Test datadisk move without exists disk."""
|
||||
await coresys.dbus.agent.connect(coresys.dbus.bus)
|
||||
await coresys.dbus.agent.update()
|
||||
coresys.os._available = True
|
||||
|
||||
resp = await api_client.post("/os/datadisk/move", json={"device": "/dev/sdaaaa"})
|
||||
@ -59,12 +62,8 @@ async def test_api_os_datadisk_move(api_client: TestClient, coresys: CoreSys):
|
||||
assert result["message"] == "'/dev/sdaaaa' don't exists on the host!"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_os_datadisk_list(api_client: TestClient, coresys: CoreSys):
|
||||
"""Test datadisk list function."""
|
||||
await coresys.dbus.agent.connect(coresys.dbus.bus)
|
||||
await coresys.dbus.agent.update()
|
||||
|
||||
coresys.hardware.update_device(
|
||||
Device(
|
||||
"sda",
|
||||
@ -98,8 +97,6 @@ async def test_api_os_datadisk_list(api_client: TestClient, coresys: CoreSys):
|
||||
|
||||
async def test_api_board_yellow_info(api_client: TestClient, coresys: CoreSys):
|
||||
"""Test yellow board info."""
|
||||
await coresys.dbus.agent.board.connect(coresys.dbus.bus)
|
||||
|
||||
resp = await api_client.get("/os/boards/yellow")
|
||||
assert resp.status == 200
|
||||
|
||||
@ -113,25 +110,27 @@ async def test_api_board_yellow_info(api_client: TestClient, coresys: CoreSys):
|
||||
|
||||
|
||||
async def test_api_board_yellow_options(
|
||||
api_client: TestClient, coresys: CoreSys, dbus: list[str]
|
||||
api_client: TestClient,
|
||||
coresys: CoreSys,
|
||||
os_agent_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
||||
):
|
||||
"""Test yellow board options."""
|
||||
await coresys.dbus.agent.board.connect(coresys.dbus.bus)
|
||||
yellow_service: YellowService = os_agent_services["agent_boards_yellow"]
|
||||
|
||||
assert coresys.dbus.agent.board.yellow.disk_led is True
|
||||
assert coresys.dbus.agent.board.yellow.heartbeat_led is True
|
||||
assert coresys.dbus.agent.board.yellow.power_led is True
|
||||
assert len(coresys.resolution.issues) == 0
|
||||
dbus.clear()
|
||||
resp = await api_client.post(
|
||||
"/os/boards/yellow",
|
||||
json={"disk_led": False, "heartbeat_led": False, "power_led": False},
|
||||
)
|
||||
assert resp.status == 200
|
||||
|
||||
await asyncio.sleep(0)
|
||||
assert dbus == [
|
||||
"/io/hass/os/Boards/Yellow-io.hass.os.Boards.Yellow.DiskLED",
|
||||
"/io/hass/os/Boards/Yellow-io.hass.os.Boards.Yellow.HeartbeatLED",
|
||||
"/io/hass/os/Boards/Yellow-io.hass.os.Boards.Yellow.PowerLED",
|
||||
]
|
||||
await yellow_service.ping()
|
||||
assert coresys.dbus.agent.board.yellow.disk_led is False
|
||||
assert coresys.dbus.agent.board.yellow.heartbeat_led is False
|
||||
assert coresys.dbus.agent.board.yellow.power_led is False
|
||||
|
||||
assert (
|
||||
Issue(IssueType.REBOOT_REQUIRED, ContextType.SYSTEM)
|
||||
@ -143,13 +142,15 @@ async def test_api_board_yellow_options(
|
||||
)
|
||||
|
||||
|
||||
async def test_api_board_supervised_info(api_client: TestClient, coresys: CoreSys):
|
||||
async def test_api_board_supervised_info(
|
||||
api_client: TestClient, coresys: CoreSys, boards_service: BoardsService
|
||||
):
|
||||
"""Test supervised board info."""
|
||||
with patch(
|
||||
"supervisor.os.manager.CPE.get_product", return_value=["not-hassos"]
|
||||
), patch.object(BoardManager, "board", new=PropertyMock(return_value="Supervised")):
|
||||
await coresys.dbus.agent.board.connect(coresys.dbus.bus)
|
||||
await coresys.dbus.hostname.connect(coresys.dbus.bus)
|
||||
await mock_dbus_services({"agent_boards_supervised": None}, coresys.dbus.bus)
|
||||
boards_service.board = "Supervised"
|
||||
await coresys.dbus.agent.board.update()
|
||||
|
||||
with patch("supervisor.os.manager.CPE.get_product", return_value=["not-hassos"]):
|
||||
await coresys.os.load()
|
||||
|
||||
assert (await api_client.get("/os/boards/supervised")).status == 200
|
||||
@ -158,13 +159,14 @@ async def test_api_board_supervised_info(api_client: TestClient, coresys: CoreSy
|
||||
assert (await api_client.get("/os/boards/not-real")).status == 400
|
||||
|
||||
|
||||
async def test_api_board_other_info(api_client: TestClient, coresys: CoreSys):
|
||||
async def test_api_board_other_info(
|
||||
api_client: TestClient, coresys: CoreSys, boards_service: BoardsService
|
||||
):
|
||||
"""Test info for other board without dbus object."""
|
||||
with patch.object(
|
||||
BoardManager, "board", new=PropertyMock(return_value="not-real")
|
||||
), patch.object(OSManager, "board", new=PropertyMock(return_value="not-real")):
|
||||
await coresys.dbus.agent.board.connect(coresys.dbus.bus)
|
||||
boards_service.board = "not-real"
|
||||
await coresys.dbus.agent.board.update()
|
||||
|
||||
with patch.object(OSManager, "board", new=PropertyMock(return_value="not-real")):
|
||||
assert (await api_client.get("/os/boards/not-real")).status == 200
|
||||
assert (await api_client.post("/os/boards/not-real", json={})).status == 405
|
||||
assert (await api_client.get("/os/boards/yellow")).status == 400
|
||||
|
@ -2,15 +2,12 @@
|
||||
# pylint: disable=protected-access
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
import pytest
|
||||
|
||||
from supervisor.api.const import ATTR_AVAILABLE_UPDATES
|
||||
from supervisor.coresys import CoreSys
|
||||
|
||||
from tests.const import TEST_ADDON_SLUG
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_info(api_client):
|
||||
"""Test docker info api."""
|
||||
resp = await api_client.get("/info")
|
||||
@ -21,10 +18,9 @@ async def test_api_info(api_client):
|
||||
assert result["data"]["supported"] is True
|
||||
assert result["data"]["channel"] == "stable"
|
||||
assert result["data"]["logging"] == "info"
|
||||
assert result["data"]["timezone"] == "UTC"
|
||||
assert result["data"]["timezone"] == "Etc/UTC"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_available_updates(
|
||||
install_addon_ssh,
|
||||
api_client,
|
||||
@ -70,7 +66,6 @@ async def test_api_available_updates(
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_refresh_updates(api_client, coresys: CoreSys):
|
||||
"""Test docker info api."""
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
"""Test Supervisor API."""
|
||||
# pylint: disable=protected-access
|
||||
import asyncio
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from aiohttp.test_utils import TestClient
|
||||
@ -10,10 +9,12 @@ from supervisor.coresys import CoreSys
|
||||
from supervisor.exceptions import StoreGitError, StoreNotFound
|
||||
from supervisor.store.repository import Repository
|
||||
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
from tests.dbus_service_mocks.os_agent import OSAgent as OSAgentService
|
||||
|
||||
REPO_URL = "https://github.com/awesome-developer/awesome-repo"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_api_supervisor_options_debug(api_client: TestClient, coresys: CoreSys):
|
||||
"""Test security options force security."""
|
||||
assert not coresys.config.debug
|
||||
@ -118,11 +119,15 @@ async def test_api_supervisor_options_auto_update(
|
||||
|
||||
|
||||
async def test_api_supervisor_options_diagnostics(
|
||||
api_client: TestClient, coresys: CoreSys, dbus: list[str]
|
||||
api_client: TestClient,
|
||||
coresys: CoreSys,
|
||||
os_agent_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
||||
):
|
||||
"""Test changing diagnostics."""
|
||||
await coresys.dbus.agent.connect(coresys.dbus.bus)
|
||||
dbus.clear()
|
||||
os_agent_service: OSAgentService = os_agent_services["os_agent"]
|
||||
os_agent_service.Diagnostics = False
|
||||
await os_agent_service.ping()
|
||||
assert coresys.dbus.agent.diagnostics is False
|
||||
|
||||
with patch("supervisor.utils.sentry.sentry_sdk.init") as sentry_init:
|
||||
response = await api_client.post(
|
||||
@ -131,10 +136,9 @@ async def test_api_supervisor_options_diagnostics(
|
||||
assert response.status == 200
|
||||
sentry_init.assert_called_once()
|
||||
|
||||
await asyncio.sleep(0)
|
||||
assert dbus == ["/io/hass/os-io.hass.os.Diagnostics"]
|
||||
await os_agent_service.ping()
|
||||
assert coresys.dbus.agent.diagnostics is True
|
||||
|
||||
dbus.clear()
|
||||
with patch("supervisor.api.supervisor.close_sentry") as close_sentry:
|
||||
response = await api_client.post(
|
||||
"/supervisor/options", json={"diagnostics": False}
|
||||
@ -142,8 +146,8 @@ async def test_api_supervisor_options_diagnostics(
|
||||
assert response.status == 200
|
||||
close_sentry.assert_called_once()
|
||||
|
||||
await asyncio.sleep(0)
|
||||
assert dbus == ["/io/hass/os-io.hass.os.Diagnostics"]
|
||||
await os_agent_service.ping()
|
||||
assert coresys.dbus.agent.diagnostics is False
|
||||
|
||||
|
||||
async def test_api_supervisor_logs(api_client: TestClient, docker_logs: MagicMock):
|
||||
|
@ -1,76 +1,18 @@
|
||||
"""Common test functions."""
|
||||
import asyncio
|
||||
|
||||
from importlib import import_module
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from dbus_fast.aio.message_bus import MessageBus
|
||||
from dbus_fast.introspection import Method, Property, Signal
|
||||
|
||||
from supervisor.dbus.interface import DBusInterface, DBusInterfaceProxy
|
||||
from supervisor.resolution.validate import get_valid_modules
|
||||
from supervisor.utils.dbus import DBUS_INTERFACE_PROPERTIES
|
||||
from supervisor.utils.yaml import read_yaml_file
|
||||
|
||||
from .dbus_service_mocks.base import DBusServiceMock
|
||||
|
||||
|
||||
def get_dbus_name(intr_list: list[Method | Property | Signal], snake_case: str) -> str:
|
||||
"""Find name in introspection list, fallback to ignore case match."""
|
||||
name = "".join([part.capitalize() for part in snake_case.split("_")])
|
||||
names = [item.name for item in intr_list]
|
||||
if name in names:
|
||||
return name
|
||||
|
||||
# Acronyms like NTP can't be easily converted back to camel case. Fallback to ignore case match
|
||||
lower_name = name.lower()
|
||||
for val in names:
|
||||
if lower_name == val.lower():
|
||||
return val
|
||||
|
||||
raise AttributeError(f"Could not find match for {name} in D-Bus introspection!")
|
||||
|
||||
|
||||
def fire_watched_signal(dbus: DBusInterface, signal: str, data: list[Any] | str):
|
||||
"""Test firing a watched signal."""
|
||||
if isinstance(data, str) and exists_fixture(data):
|
||||
data = load_json_fixture(data)
|
||||
|
||||
if not isinstance(data, list):
|
||||
raise ValueError("Data must be a list!")
|
||||
|
||||
signal_parts = signal.split(".")
|
||||
interface = ".".join(signal_parts[:-1])
|
||||
name = signal_parts[-1]
|
||||
|
||||
# pylint: disable=protected-access
|
||||
assert interface in dbus.dbus._signal_monitors
|
||||
|
||||
signals = dbus.dbus._proxies[interface].introspection.signals
|
||||
signal_monitors = {
|
||||
get_dbus_name(signals, k): v
|
||||
for k, v in dbus.dbus._signal_monitors[interface].items()
|
||||
}
|
||||
assert name in signal_monitors
|
||||
|
||||
for coro in [callback(*data) for callback in signal_monitors[name]]:
|
||||
asyncio.create_task(coro)
|
||||
|
||||
|
||||
def fire_property_change_signal(
|
||||
dbus: DBusInterfaceProxy,
|
||||
changed: dict[str, Any] | None = None,
|
||||
invalidated: list[str] | None = None,
|
||||
):
|
||||
"""Fire a property change signal for an interface proxy."""
|
||||
fire_watched_signal(
|
||||
dbus,
|
||||
f"{DBUS_INTERFACE_PROPERTIES}.PropertiesChanged",
|
||||
[dbus.properties_interface, changed or {}, invalidated or []],
|
||||
)
|
||||
|
||||
|
||||
def get_fixture_path(filename: str) -> Path:
|
||||
"""Get path for fixture."""
|
||||
return Path(Path(__file__).parent.joinpath("fixtures"), filename)
|
||||
|
@ -3,9 +3,7 @@ from functools import partial
|
||||
from inspect import unwrap
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
from typing import Any
|
||||
from unittest.mock import AsyncMock, MagicMock, Mock, PropertyMock, patch
|
||||
from uuid import uuid4
|
||||
|
||||
@ -14,7 +12,6 @@ from aiohttp.test_utils import TestClient
|
||||
from awesomeversion import AwesomeVersion
|
||||
from dbus_fast import BusType
|
||||
from dbus_fast.aio.message_bus import MessageBus
|
||||
from dbus_fast.aio.proxy_object import ProxyInterface, ProxyObject
|
||||
import pytest
|
||||
from securetar import SecureTarFile
|
||||
|
||||
@ -41,30 +38,15 @@ from supervisor.const import (
|
||||
REQUEST_FROM,
|
||||
)
|
||||
from supervisor.coresys import CoreSys
|
||||
from supervisor.dbus.agent import OSAgent
|
||||
from supervisor.dbus.const import (
|
||||
DBUS_OBJECT_BASE,
|
||||
DBUS_SIGNAL_NM_CONNECTION_ACTIVE_CHANGED,
|
||||
DBUS_SIGNAL_RAUC_INSTALLER_COMPLETED,
|
||||
)
|
||||
from supervisor.dbus.hostname import Hostname
|
||||
from supervisor.dbus.interface import DBusInterface
|
||||
from supervisor.dbus.network import NetworkManager
|
||||
from supervisor.dbus.resolved import Resolved
|
||||
from supervisor.dbus.systemd import Systemd
|
||||
from supervisor.dbus.timedate import TimeDate
|
||||
from supervisor.dbus.udisks2 import UDisks2
|
||||
from supervisor.docker.manager import DockerAPI
|
||||
from supervisor.docker.monitor import DockerMonitor
|
||||
from supervisor.host.logs import LogsControl
|
||||
from supervisor.store.addon import AddonStore
|
||||
from supervisor.store.repository import Repository
|
||||
from supervisor.utils.dbus import DBUS_INTERFACE_PROPERTIES, DBus
|
||||
from supervisor.utils.dt import utcnow
|
||||
|
||||
from .common import (
|
||||
exists_fixture,
|
||||
get_dbus_name,
|
||||
load_binary_fixture,
|
||||
load_fixture,
|
||||
load_json_fixture,
|
||||
@ -72,6 +54,10 @@ from .common import (
|
||||
)
|
||||
from .const import TEST_ADDON_SLUG
|
||||
from .dbus_service_mocks.base import DBusServiceMock
|
||||
from .dbus_service_mocks.network_connection_settings import (
|
||||
ConnectionSettings as ConnectionSettingsService,
|
||||
)
|
||||
from .dbus_service_mocks.network_manager import NetworkManager as NetworkManagerService
|
||||
|
||||
# pylint: disable=redefined-outer-name, protected-access
|
||||
|
||||
@ -117,14 +103,6 @@ def docker() -> DockerAPI:
|
||||
yield docker_obj
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def dbus_bus() -> MessageBus:
|
||||
"""Message bus mock."""
|
||||
bus = AsyncMock(spec=MessageBus)
|
||||
setattr(bus, "_name_owners", {})
|
||||
yield bus
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def dbus_session() -> None:
|
||||
"""Start a dbus session."""
|
||||
@ -144,178 +122,6 @@ async def dbus_session_bus(dbus_session) -> MessageBus:
|
||||
bus.disconnect()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def dbus_services(
|
||||
request: pytest.FixtureRequest, dbus_session: MessageBus
|
||||
) -> dict[str, dict[str, DBusServiceMock] | DBusServiceMock]:
|
||||
"""Mock specified dbus services on session bus.
|
||||
|
||||
Wrapper on mock_dbus_services intended to be used indirectly.
|
||||
Request param passed to it as to_mock and output returned as fixture value.
|
||||
"""
|
||||
with patch("supervisor.dbus.manager.MessageBus.connect", return_value=dbus_session):
|
||||
yield await mock_dbus_services(request.param, dbus_session)
|
||||
|
||||
|
||||
def _process_pseudo_variant(data: dict[str, Any]) -> Any:
|
||||
"""Process pseudo variant into value."""
|
||||
if data["_type"] == "ay":
|
||||
return bytearray(data["_value"], encoding="utf-8")
|
||||
if data["_type"] == "aay":
|
||||
return [bytearray(i, encoding="utf-8") for i in data["_value"]]
|
||||
|
||||
# Unknown type, return as is
|
||||
return data
|
||||
|
||||
|
||||
def process_dbus_json(data: Any) -> Any:
|
||||
"""Replace pseudo-variants with values of unsupported json types as necessary."""
|
||||
if not isinstance(data, dict):
|
||||
return data
|
||||
|
||||
if len(data.keys()) == 2 and "_type" in data and "_value" in data:
|
||||
return _process_pseudo_variant(data)
|
||||
|
||||
return {k: process_dbus_json(v) for k, v in data.items()}
|
||||
|
||||
|
||||
def mock_get_properties(object_path: str, interface: str) -> str:
|
||||
"""Mock get dbus properties."""
|
||||
base, _, latest = object_path.rpartition("/")
|
||||
fixture = interface.replace(".", "_")
|
||||
|
||||
if latest.isnumeric() or base in [
|
||||
"/org/freedesktop/UDisks2/block_devices",
|
||||
"/org/freedesktop/UDisks2/drives",
|
||||
]:
|
||||
fixture = f"{fixture}_{latest}"
|
||||
|
||||
return process_dbus_json(load_json_fixture(f"{fixture}.json"))
|
||||
|
||||
|
||||
async def mock_init_proxy(self):
|
||||
"""Mock init dbus proxy."""
|
||||
filetype = "xml"
|
||||
fixture = (
|
||||
self.object_path.replace("/", "_")[1:]
|
||||
if self.object_path != DBUS_OBJECT_BASE
|
||||
else self.bus_name.replace(".", "_")
|
||||
)
|
||||
|
||||
if not exists_fixture(f"{fixture}.{filetype}"):
|
||||
fixture = re.sub(r"_[0-9]+$", "", fixture)
|
||||
|
||||
# special case
|
||||
if exists_fixture(f"{fixture}_~.{filetype}"):
|
||||
fixture = f"{fixture}_~"
|
||||
|
||||
# Use dbus-next infrastructure to parse introspection xml
|
||||
self._proxy_obj = ProxyObject(
|
||||
self.bus_name,
|
||||
self.object_path,
|
||||
load_fixture(f"{fixture}.{filetype}"),
|
||||
self._bus,
|
||||
)
|
||||
self._add_interfaces()
|
||||
|
||||
if DBUS_INTERFACE_PROPERTIES in self._proxies:
|
||||
setattr(
|
||||
self._proxies[DBUS_INTERFACE_PROPERTIES],
|
||||
"call_get_all",
|
||||
lambda interface: mock_get_properties(self.object_path, interface),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def dbus(dbus_bus: MessageBus) -> list[str]:
|
||||
"""Mock DBUS."""
|
||||
dbus_commands = []
|
||||
|
||||
async def mock_wait_for_signal(self):
|
||||
if (
|
||||
self._interface + "." + self._member
|
||||
== DBUS_SIGNAL_NM_CONNECTION_ACTIVE_CHANGED
|
||||
):
|
||||
return [2, 0]
|
||||
|
||||
if self._interface + "." + self._member == DBUS_SIGNAL_RAUC_INSTALLER_COMPLETED:
|
||||
return [0]
|
||||
|
||||
async def mock_signal___aenter__(self):
|
||||
return self
|
||||
|
||||
async def mock_signal___aexit__(self, exc_t, exc_v, exc_tb):
|
||||
pass
|
||||
|
||||
async def mock_call_dbus(
|
||||
proxy_interface: ProxyInterface,
|
||||
method: str,
|
||||
*args,
|
||||
unpack_variants: bool = True,
|
||||
):
|
||||
if (
|
||||
proxy_interface.introspection.name == DBUS_INTERFACE_PROPERTIES
|
||||
and method == "call_get_all"
|
||||
):
|
||||
return mock_get_properties(proxy_interface.path, args[0])
|
||||
|
||||
[dbus_type, dbus_name] = method.split("_", 1)
|
||||
|
||||
if dbus_type in ["get", "set"]:
|
||||
dbus_name = get_dbus_name(
|
||||
proxy_interface.introspection.properties, dbus_name
|
||||
)
|
||||
dbus_commands.append(
|
||||
f"{proxy_interface.path}-{proxy_interface.introspection.name}.{dbus_name}"
|
||||
)
|
||||
|
||||
if dbus_type == "set":
|
||||
return
|
||||
|
||||
return mock_get_properties(
|
||||
proxy_interface.path, proxy_interface.introspection.name
|
||||
)[dbus_name]
|
||||
|
||||
dbus_name = get_dbus_name(proxy_interface.introspection.methods, dbus_name)
|
||||
dbus_commands.append(
|
||||
f"{proxy_interface.path}-{proxy_interface.introspection.name}.{dbus_name}"
|
||||
)
|
||||
|
||||
if proxy_interface.path != DBUS_OBJECT_BASE:
|
||||
fixture = proxy_interface.path.replace("/", "_")[1:]
|
||||
fixture = f"{fixture}-{dbus_name}"
|
||||
else:
|
||||
fixture = (
|
||||
f'{proxy_interface.introspection.name.replace(".", "_")}_{dbus_name}'
|
||||
)
|
||||
|
||||
if exists_fixture(f"{fixture}.json"):
|
||||
return process_dbus_json(load_json_fixture(f"{fixture}.json"))
|
||||
|
||||
with patch("supervisor.utils.dbus.DBus.call_dbus", new=mock_call_dbus), patch(
|
||||
"supervisor.utils.dbus.DBus._init_proxy", new=mock_init_proxy
|
||||
), patch(
|
||||
"supervisor.utils.dbus.DBusSignalWrapper.__aenter__", new=mock_signal___aenter__
|
||||
), patch(
|
||||
"supervisor.utils.dbus.DBusSignalWrapper.__aexit__", new=mock_signal___aexit__
|
||||
), patch(
|
||||
"supervisor.utils.dbus.DBusSignalWrapper.wait_for_signal",
|
||||
new=mock_wait_for_signal,
|
||||
), patch(
|
||||
"supervisor.dbus.manager.MessageBus.connect", return_value=dbus_bus
|
||||
):
|
||||
yield dbus_commands
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def dbus_minimal(dbus_bus: MessageBus) -> MessageBus:
|
||||
"""Mock DBus without mocking call_dbus or signals but handle properties fixture."""
|
||||
with patch("supervisor.utils.dbus.DBus._init_proxy", new=mock_init_proxy), patch(
|
||||
"supervisor.dbus.manager.MessageBus.connect", return_value=dbus_bus
|
||||
):
|
||||
yield dbus_bus
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def dbus_is_connected():
|
||||
"""Mock DBusInterface.is_connected for tests."""
|
||||
@ -365,6 +171,22 @@ async def network_manager(
|
||||
yield nm_obj
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def network_manager_service(
|
||||
network_manager_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]]
|
||||
) -> NetworkManagerService:
|
||||
"""Return Network Manager service mock."""
|
||||
yield network_manager_services["network_manager"]
|
||||
|
||||
|
||||
@pytest.fixture(name="connection_settings_service")
|
||||
async def fixture_connection_settings_service(
|
||||
network_manager_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]]
|
||||
) -> ConnectionSettingsService:
|
||||
"""Return mock connection settings service."""
|
||||
yield network_manager_services["network_connection_settings"]
|
||||
|
||||
|
||||
@pytest.fixture(name="udisks2_services")
|
||||
async def fixture_udisks2_services(
|
||||
dbus_session_bus: MessageBus,
|
||||
@ -415,54 +237,51 @@ async def fixture_udisks2_services(
|
||||
)
|
||||
|
||||
|
||||
async def mock_dbus_interface(
|
||||
dbus: DBus, dbus_bus: MessageBus, instance: DBusInterface
|
||||
) -> DBusInterface:
|
||||
"""Mock dbus for a DBusInterface instance."""
|
||||
instance.dbus = dbus
|
||||
await instance.connect(dbus_bus)
|
||||
return instance
|
||||
@pytest.fixture(name="os_agent_services")
|
||||
async def fixture_os_agent_services(
|
||||
dbus_session_bus: MessageBus,
|
||||
) -> dict[str, DBusServiceMock]:
|
||||
"""Mock all services os agent connects to."""
|
||||
yield await mock_dbus_services(
|
||||
{
|
||||
"os_agent": None,
|
||||
"agent_apparmor": None,
|
||||
"agent_cgroup": None,
|
||||
"agent_datadisk": None,
|
||||
"agent_system": None,
|
||||
"agent_boards": None,
|
||||
"agent_boards_yellow": None,
|
||||
},
|
||||
dbus_session_bus,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def hostname(dbus: DBus, dbus_bus: MessageBus) -> Hostname:
|
||||
"""Mock Hostname."""
|
||||
yield await mock_dbus_interface(dbus, dbus_bus, Hostname())
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def timedate(dbus: DBus, dbus_bus: MessageBus) -> TimeDate:
|
||||
"""Mock Timedate."""
|
||||
yield await mock_dbus_interface(dbus, dbus_bus, TimeDate())
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def systemd(dbus: DBus, dbus_bus: MessageBus) -> Systemd:
|
||||
"""Mock Systemd."""
|
||||
yield await mock_dbus_interface(dbus, dbus_bus, Systemd())
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def os_agent(dbus: DBus, dbus_bus: MessageBus) -> OSAgent:
|
||||
"""Mock OSAgent."""
|
||||
yield await mock_dbus_interface(dbus, dbus_bus, OSAgent())
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def resolved(dbus: DBus, dbus_bus: MessageBus) -> Resolved:
|
||||
"""Mock REsolved."""
|
||||
yield await mock_dbus_interface(dbus, dbus_bus, Resolved())
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def udisks2(dbus: DBus, dbus_bus: MessageBus) -> UDisks2:
|
||||
"""Mock UDisks2."""
|
||||
yield await mock_dbus_interface(dbus, dbus_bus, UDisks2())
|
||||
@pytest.fixture(name="all_dbus_services")
|
||||
async def fixture_all_dbus_services(
|
||||
dbus_session_bus: MessageBus,
|
||||
network_manager_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
||||
udisks2_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
|
||||
os_agent_services: dict[str, DBusServiceMock],
|
||||
) -> dict[str, DBusServiceMock | dict[str, DBusServiceMock]]:
|
||||
"""Mock all dbus services supervisor uses."""
|
||||
yield (
|
||||
await mock_dbus_services(
|
||||
{
|
||||
"hostname": None,
|
||||
"logind": None,
|
||||
"rauc": None,
|
||||
"resolved": None,
|
||||
"systemd": None,
|
||||
"timedate": None,
|
||||
},
|
||||
dbus_session_bus,
|
||||
)
|
||||
) | network_manager_services | udisks2_services | os_agent_services
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def coresys(
|
||||
event_loop, docker, dbus, dbus_bus, aiohttp_client, run_dir
|
||||
event_loop, docker, dbus_session_bus, all_dbus_services, aiohttp_client, run_dir
|
||||
) -> CoreSys:
|
||||
"""Create a CoreSys Mock."""
|
||||
with patch("supervisor.bootstrap.initialize_system"), patch(
|
||||
@ -486,11 +305,13 @@ async def coresys(
|
||||
coresys_obj._machine_id = uuid4()
|
||||
|
||||
# Mock host communication
|
||||
coresys_obj._dbus._bus = dbus_bus
|
||||
network_manager = NetworkManager()
|
||||
network_manager.dbus = dbus
|
||||
await network_manager.connect(dbus_bus)
|
||||
coresys_obj._dbus._network = network_manager
|
||||
with patch("supervisor.dbus.manager.MessageBus") as message_bus, patch(
|
||||
"supervisor.dbus.manager.SOCKET_DBUS"
|
||||
):
|
||||
message_bus.return_value.connect = AsyncMock(return_value=dbus_session_bus)
|
||||
await coresys_obj._dbus.load()
|
||||
# coresys_obj._dbus._bus = dbus_session_bus
|
||||
# coresys_obj._dbus._network = network_manager
|
||||
|
||||
# Mock docker
|
||||
coresys_obj._docker = docker
|
||||
|
@ -7,18 +7,20 @@ from supervisor.dbus.agent.boards import BoardManager
|
||||
from supervisor.exceptions import BoardInvalidError
|
||||
|
||||
from tests.common import mock_dbus_services
|
||||
from tests.dbus_service_mocks.boards import Boards as BoardsService
|
||||
from tests.dbus_service_mocks.agent_boards import Boards as BoardsService
|
||||
|
||||
|
||||
@pytest.fixture(name="boards_service", autouse=True)
|
||||
async def fixture_boards_service(dbus_session_bus: MessageBus) -> BoardsService:
|
||||
"""Mock Boards dbus service."""
|
||||
yield (await mock_dbus_services({"boards": None}, dbus_session_bus))["boards"]
|
||||
yield (await mock_dbus_services({"agent_boards": None}, dbus_session_bus))[
|
||||
"agent_boards"
|
||||
]
|
||||
|
||||
|
||||
async def test_dbus_board(dbus_session_bus: MessageBus):
|
||||
"""Test DBus Board load."""
|
||||
await mock_dbus_services({"boards_yellow": None}, dbus_session_bus)
|
||||
await mock_dbus_services({"agent_boards_yellow": None}, dbus_session_bus)
|
||||
|
||||
board = BoardManager()
|
||||
await board.connect(dbus_session_bus)
|
||||
@ -34,7 +36,7 @@ async def test_dbus_board_supervised(
|
||||
boards_service: BoardsService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test DBus Board load with supervised board."""
|
||||
await mock_dbus_services({"boards_supervised": None}, dbus_session_bus)
|
||||
await mock_dbus_services({"agent_boards_supervised": None}, dbus_session_bus)
|
||||
boards_service.board = "Supervised"
|
||||
|
||||
board = BoardManager()
|
||||
|
@ -8,14 +8,14 @@ import pytest
|
||||
from supervisor.dbus.agent.boards.yellow import Yellow
|
||||
|
||||
from tests.common import mock_dbus_services
|
||||
from tests.dbus_service_mocks.boards_yellow import Yellow as YellowService
|
||||
from tests.dbus_service_mocks.agent_boards_yellow import Yellow as YellowService
|
||||
|
||||
|
||||
@pytest.fixture(name="yellow_service", autouse=True)
|
||||
async def fixture_yellow_service(dbus_session_bus: MessageBus) -> YellowService:
|
||||
"""Mock Yellow Board dbus service."""
|
||||
yield (await mock_dbus_services({"boards_yellow": None}, dbus_session_bus))[
|
||||
"boards_yellow"
|
||||
yield (await mock_dbus_services({"agent_boards_yellow": None}, dbus_session_bus))[
|
||||
"agent_boards_yellow"
|
||||
]
|
||||
|
||||
|
||||
|
@ -1,24 +0,0 @@
|
||||
"""Shared fixtures for OS Agent tests."""
|
||||
|
||||
from dbus_fast.aio.message_bus import MessageBus
|
||||
import pytest
|
||||
|
||||
from tests.common import mock_dbus_services
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def os_agent_services(dbus_session_bus: MessageBus) -> dict[str, DBusServiceMock]:
|
||||
"""Mock all services os agent connects to."""
|
||||
yield await mock_dbus_services(
|
||||
{
|
||||
"os_agent": None,
|
||||
"apparmor": None,
|
||||
"cgroup": None,
|
||||
"datadisk": None,
|
||||
"system": None,
|
||||
"boards": None,
|
||||
"boards_yellow": None,
|
||||
},
|
||||
dbus_session_bus,
|
||||
)
|
@ -8,7 +8,7 @@ import pytest
|
||||
from supervisor.dbus.agent import OSAgent
|
||||
from supervisor.exceptions import DBusNotConnectedError
|
||||
|
||||
from tests.dbus_service_mocks.apparmor import AppArmor as AppArmorService
|
||||
from tests.dbus_service_mocks.agent_apparmor import AppArmor as AppArmorService
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ async def fixture_apparmor_service(
|
||||
os_agent_services: dict[str, DBusServiceMock]
|
||||
) -> AppArmorService:
|
||||
"""Mock AppArmor dbus service."""
|
||||
yield os_agent_services["apparmor"]
|
||||
yield os_agent_services["agent_apparmor"]
|
||||
|
||||
|
||||
async def test_dbus_osagent_apparmor(
|
||||
@ -46,6 +46,7 @@ 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):
|
||||
@ -70,6 +71,7 @@ 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):
|
||||
|
@ -6,8 +6,8 @@ import pytest
|
||||
from supervisor.dbus.agent import OSAgent
|
||||
from supervisor.exceptions import DBusNotConnectedError
|
||||
|
||||
from tests.dbus_service_mocks.agent_cgroup import CGroup as CGroupService
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
from tests.dbus_service_mocks.cgroup import CGroup as CGroupService
|
||||
|
||||
|
||||
@pytest.fixture(name="cgroup_service", autouse=True)
|
||||
@ -15,13 +15,14 @@ async def fixture_cgroup_service(
|
||||
os_agent_services: dict[str, DBusServiceMock]
|
||||
) -> CGroupService:
|
||||
"""Mock CGroup dbus service."""
|
||||
yield os_agent_services["cgroup"]
|
||||
yield os_agent_services["agent_cgroup"]
|
||||
|
||||
|
||||
async def test_dbus_osagent_cgroup_add_devices(
|
||||
cgroup_service: CGroupService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test wipe data partition on host."""
|
||||
cgroup_service.AddDevicesAllowed.calls.clear()
|
||||
os_agent = OSAgent()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -8,8 +8,8 @@ import pytest
|
||||
from supervisor.dbus.agent import OSAgent
|
||||
from supervisor.exceptions import DBusNotConnectedError
|
||||
|
||||
from tests.dbus_service_mocks.agent_datadisk import DataDisk as DataDiskService
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
from tests.dbus_service_mocks.datadisk import DataDisk as DataDiskService
|
||||
|
||||
|
||||
@pytest.fixture(name="datadisk_service", autouse=True)
|
||||
@ -17,7 +17,7 @@ async def fixture_datadisk_service(
|
||||
os_agent_services: dict[str, DBusServiceMock]
|
||||
) -> DataDiskService:
|
||||
"""Mock DataDisk dbus service."""
|
||||
yield os_agent_services["datadisk"]
|
||||
yield os_agent_services["agent_datadisk"]
|
||||
|
||||
|
||||
async def test_dbus_osagent_datadisk(
|
||||
@ -46,6 +46,7 @@ async def test_dbus_osagent_datadisk_change_device(
|
||||
datadisk_service: DataDiskService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Change datadisk on device."""
|
||||
datadisk_service.ChangeDevice.calls.clear()
|
||||
os_agent = OSAgent()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -61,6 +62,7 @@ async def test_dbus_osagent_datadisk_reload_device(
|
||||
datadisk_service: DataDiskService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Change datadisk on device."""
|
||||
datadisk_service.ReloadDevice.calls.clear()
|
||||
os_agent = OSAgent()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -6,8 +6,8 @@ import pytest
|
||||
from supervisor.dbus.agent import OSAgent
|
||||
from supervisor.exceptions import DBusNotConnectedError
|
||||
|
||||
from tests.dbus_service_mocks.agent_system import System as SystemService
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
from tests.dbus_service_mocks.system import System as SystemService
|
||||
|
||||
|
||||
@pytest.fixture(name="system_service", autouse=True)
|
||||
@ -15,13 +15,14 @@ async def fixture_system_service(
|
||||
os_agent_services: dict[str, DBusServiceMock]
|
||||
) -> SystemService:
|
||||
"""Mock System dbus service."""
|
||||
yield os_agent_services["system"]
|
||||
yield os_agent_services["agent_system"]
|
||||
|
||||
|
||||
async def test_dbus_osagent_system_wipe(
|
||||
system_service: SystemService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test wipe data partition on host."""
|
||||
system_service.ScheduleWipeDevice.calls.clear()
|
||||
os_agent = OSAgent()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -37,6 +37,8 @@ async def test_update(
|
||||
connection_settings_service: ConnectionSettingsService,
|
||||
):
|
||||
"""Test network manager update."""
|
||||
connection_settings_service.Update.calls.clear()
|
||||
|
||||
interface = Interface.from_dbus_interface(dbus_interface)
|
||||
conn = get_connection_from_interface(
|
||||
interface,
|
||||
|
@ -81,6 +81,7 @@ async def test_activate_connection(
|
||||
network_manager_service: NetworkManagerService, network_manager: NetworkManager
|
||||
):
|
||||
"""Test activate connection."""
|
||||
network_manager_service.ActivateConnection.calls.clear()
|
||||
connection = await network_manager.activate_connection(
|
||||
"/org/freedesktop/NetworkManager/Settings/1",
|
||||
"/org/freedesktop/NetworkManager/Devices/1",
|
||||
|
@ -26,6 +26,7 @@ async def test_add_connection(
|
||||
settings_service: SettingsService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test adding settings connection."""
|
||||
settings_service.AddConnection.calls.clear()
|
||||
settings = NetworkManagerSettings()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -44,6 +45,7 @@ async def test_reload_connections(
|
||||
settings_service: SettingsService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test reload connections."""
|
||||
settings_service.ReloadConnections.calls.clear()
|
||||
settings = NetworkManagerSettings()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -48,6 +48,7 @@ async def test_dbus_sethostname(
|
||||
hostname_service: HostnameService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Set hostname on backend."""
|
||||
hostname_service.SetStaticHostname.calls.clear()
|
||||
hostname = Hostname()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -1,160 +1,215 @@
|
||||
"""Test dbus interface."""
|
||||
|
||||
import asyncio
|
||||
from dataclasses import dataclass
|
||||
from unittest.mock import MagicMock
|
||||
from unittest.mock import patch
|
||||
|
||||
from dbus_fast.aio.message_bus import MessageBus
|
||||
from dbus_fast.service import PropertyAccess, dbus_property, signal
|
||||
import pytest
|
||||
|
||||
from supervisor.dbus.const import DBUS_OBJECT_BASE
|
||||
from supervisor.dbus.interface import DBusInterface, DBusInterfaceProxy
|
||||
from supervisor.exceptions import DBusInterfaceError
|
||||
from supervisor.exceptions import DBusInterfaceError, DBusNotConnectedError
|
||||
from supervisor.utils.dbus import DBus
|
||||
|
||||
from tests.common import fire_property_change_signal, fire_watched_signal
|
||||
from tests.common import load_fixture
|
||||
from tests.dbus_service_mocks.base import DBusServiceMock
|
||||
|
||||
|
||||
@dataclass
|
||||
class DBusInterfaceProxyMock:
|
||||
"""DBus Interface and signalling mocks."""
|
||||
class TestInterface(DBusServiceMock):
|
||||
"""Test interface."""
|
||||
|
||||
obj: DBusInterfaceProxy
|
||||
on_device_added: MagicMock = MagicMock()
|
||||
off_device_added: MagicMock = MagicMock()
|
||||
interface = "service.test.TestInterface"
|
||||
|
||||
def __init__(self, object_path: str = "/service/test/TestInterface"):
|
||||
"""Initialize object."""
|
||||
super().__init__()
|
||||
self.object_path = object_path
|
||||
|
||||
@signal(name="TestSignal")
|
||||
def test_signal(self, value: str) -> "s": # noqa: F821
|
||||
"""Send test signal."""
|
||||
return value
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ, name="TestProp")
|
||||
def test_prop(self) -> "u": # noqa: F821
|
||||
"""Get test property."""
|
||||
return 4
|
||||
|
||||
|
||||
@pytest.fixture(name="test_service")
|
||||
async def fixture_test_service(dbus_session_bus: MessageBus) -> TestInterface:
|
||||
"""Export test interface on dbus."""
|
||||
await dbus_session_bus.request_name("service.test.TestInterface")
|
||||
service = TestInterface()
|
||||
service.export(dbus_session_bus)
|
||||
yield service
|
||||
|
||||
|
||||
@pytest.fixture(name="proxy")
|
||||
async def fixture_proxy(
|
||||
request: pytest.FixtureRequest, dbus_bus: MessageBus, dbus
|
||||
) -> DBusInterfaceProxyMock:
|
||||
request: pytest.FixtureRequest,
|
||||
test_service: TestInterface,
|
||||
dbus_session_bus: MessageBus,
|
||||
) -> DBusInterfaceProxy:
|
||||
"""Get a proxy."""
|
||||
proxy = DBusInterfaceProxy()
|
||||
proxy.bus_name = "org.freedesktop.NetworkManager"
|
||||
proxy.object_path = "/org/freedesktop/NetworkManager"
|
||||
proxy.properties_interface = "org.freedesktop.NetworkManager"
|
||||
proxy.bus_name = "service.test.TestInterface"
|
||||
proxy.object_path = "/service/test/TestInterface"
|
||||
proxy.properties_interface = "service.test.TestInterface"
|
||||
proxy.sync_properties = request.param
|
||||
|
||||
await proxy.connect(dbus_bus)
|
||||
|
||||
# pylint: disable=protected-access
|
||||
nm_proxy = proxy.dbus._proxies["org.freedesktop.NetworkManager"]
|
||||
|
||||
mock = DBusInterfaceProxyMock(proxy)
|
||||
setattr(nm_proxy, "on_device_added", mock.on_device_added)
|
||||
setattr(nm_proxy, "off_device_added", mock.off_device_added)
|
||||
|
||||
yield mock
|
||||
await proxy.connect(dbus_session_bus)
|
||||
yield proxy
|
||||
|
||||
|
||||
@pytest.mark.parametrize("proxy", [True], indirect=True)
|
||||
async def test_dbus_proxy_connect(proxy: DBusInterfaceProxyMock):
|
||||
async def test_dbus_proxy_connect(
|
||||
proxy: DBusInterfaceProxy, test_service: TestInterface
|
||||
):
|
||||
"""Test dbus proxy connect."""
|
||||
assert proxy.obj.is_connected
|
||||
assert proxy.obj.properties["Connectivity"] == 4
|
||||
assert proxy.is_connected
|
||||
assert proxy.properties["TestProp"] == 4
|
||||
|
||||
fire_property_change_signal(proxy.obj, {"Connectivity": 1})
|
||||
await asyncio.sleep(0)
|
||||
assert proxy.obj.properties["Connectivity"] == 1
|
||||
test_service.emit_properties_changed({"TestProp": 1})
|
||||
await test_service.ping()
|
||||
assert proxy.properties["TestProp"] == 1
|
||||
|
||||
test_service.emit_properties_changed({}, ["TestProp"])
|
||||
await test_service.ping()
|
||||
await test_service.ping()
|
||||
assert proxy.properties["TestProp"] == 4
|
||||
|
||||
|
||||
@pytest.mark.parametrize("proxy", [False], indirect=True)
|
||||
async def test_dbus_proxy_connect_no_sync(proxy: DBusInterfaceProxyMock):
|
||||
async def test_dbus_proxy_connect_no_sync(
|
||||
proxy: DBusInterfaceProxy, test_service: TestInterface
|
||||
):
|
||||
"""Test dbus proxy connect with no properties sync."""
|
||||
assert proxy.obj.is_connected
|
||||
assert proxy.obj.properties["Connectivity"] == 4
|
||||
assert proxy.is_connected
|
||||
assert proxy.properties["TestProp"] == 4
|
||||
|
||||
with pytest.raises(AssertionError):
|
||||
fire_property_change_signal(proxy.obj, {"Connectivity": 1})
|
||||
test_service.emit_properties_changed({"TestProp": 1})
|
||||
await test_service.ping()
|
||||
assert proxy.properties["TestProp"] == 4
|
||||
|
||||
|
||||
@pytest.mark.parametrize("proxy", [False], indirect=True)
|
||||
async def test_signal_listener_disconnect(proxy: DBusInterfaceProxyMock):
|
||||
async def test_signal_listener_disconnect(
|
||||
proxy: DBusInterfaceProxy, test_service: TestInterface
|
||||
):
|
||||
"""Test disconnect/delete unattaches signal listeners."""
|
||||
assert proxy.obj.is_connected
|
||||
device = None
|
||||
value = None
|
||||
|
||||
async def callback(dev: str):
|
||||
nonlocal device
|
||||
device = dev
|
||||
async def callback(val: str):
|
||||
nonlocal value
|
||||
value = val
|
||||
|
||||
proxy.obj.dbus.on_device_added(callback)
|
||||
proxy.on_device_added.assert_called_once_with(callback, unpack_variants=True)
|
||||
assert proxy.is_connected
|
||||
proxy.dbus.on_test_signal(callback)
|
||||
|
||||
fire_watched_signal(
|
||||
proxy.obj, "org.freedesktop.NetworkManager.DeviceAdded", ["/test/obj/1"]
|
||||
)
|
||||
await asyncio.sleep(0)
|
||||
assert device == "/test/obj/1"
|
||||
test_service.test_signal("hello")
|
||||
await test_service.ping()
|
||||
assert value == "hello"
|
||||
|
||||
proxy.obj.disconnect()
|
||||
proxy.off_device_added.assert_called_once_with(callback, unpack_variants=True)
|
||||
proxy.disconnect()
|
||||
test_service.test_signal("goodbye")
|
||||
await test_service.ping()
|
||||
assert value == "hello"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("proxy", [False], indirect=True)
|
||||
async def test_dbus_proxy_shutdown_pending_task(proxy: DBusInterfaceProxyMock):
|
||||
"""Test pending task does not raise DBusNotConnectedError after shutdown."""
|
||||
assert proxy.obj.is_connected
|
||||
device = None
|
||||
async def test_dbus_connected_no_raise_after_shutdown(
|
||||
test_service: TestInterface, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test dbus connected methods do not raise DBusNotConnectedError after shutdown."""
|
||||
proxy = DBusInterfaceProxy()
|
||||
proxy.bus_name = "service.test.TestInterface"
|
||||
proxy.object_path = "/service/test/TestInterface"
|
||||
proxy.properties_interface = "service.test.TestInterface"
|
||||
proxy.sync_properties = False
|
||||
|
||||
async def callback(dev: str):
|
||||
nonlocal device
|
||||
await proxy.obj.update()
|
||||
device = dev
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
await proxy.update()
|
||||
|
||||
proxy.obj.dbus.on_device_added(callback)
|
||||
fire_watched_signal(
|
||||
proxy.obj, "org.freedesktop.NetworkManager.DeviceAdded", ["/test/obj/1"]
|
||||
)
|
||||
proxy.obj.shutdown()
|
||||
await asyncio.sleep(0)
|
||||
assert device == "/test/obj/1"
|
||||
await proxy.connect(dbus_session_bus)
|
||||
assert proxy.is_connected
|
||||
|
||||
proxy.shutdown()
|
||||
assert proxy.is_shutdown
|
||||
assert await proxy.update() is None
|
||||
|
||||
|
||||
async def test_proxy_missing_properties_interface(dbus_bus: MessageBus):
|
||||
async def test_proxy_missing_properties_interface(dbus_session_bus: MessageBus):
|
||||
"""Test proxy instance disconnects and errors when missing properties interface."""
|
||||
proxy = DBusInterfaceProxy()
|
||||
proxy.bus_name = "test.no.properties.interface"
|
||||
proxy.object_path = DBUS_OBJECT_BASE
|
||||
proxy.properties_interface = "test.no.properties.interface"
|
||||
|
||||
with pytest.raises(DBusInterfaceError):
|
||||
await proxy.connect(dbus_bus)
|
||||
assert proxy.is_connected is False
|
||||
async def mock_introspect(*args, **kwargs):
|
||||
"""Return introspection without properties."""
|
||||
return load_fixture("test_no_properties_interface.xml")
|
||||
|
||||
|
||||
async def test_initialize(dbus_bus: MessageBus):
|
||||
"""Test initialize for reusing connected dbus object."""
|
||||
proxy = DBusInterface()
|
||||
proxy.bus_name = "org.freedesktop.UDisks2"
|
||||
proxy.object_path = "/org/freedesktop/UDisks2/block_devices/sda"
|
||||
with patch.object(MessageBus, "introspect", new=mock_introspect), pytest.raises(
|
||||
DBusInterfaceError
|
||||
):
|
||||
await proxy.connect(dbus_session_bus)
|
||||
|
||||
assert proxy.is_connected is False
|
||||
|
||||
|
||||
async def test_initialize(test_service: TestInterface, dbus_session_bus: MessageBus):
|
||||
"""Test initialize for reusing connected dbus object."""
|
||||
proxy = DBusInterface()
|
||||
proxy.bus_name = "service.test.TestInterface"
|
||||
proxy.object_path = "/service/test/TestInterface"
|
||||
|
||||
assert proxy.is_connected is False
|
||||
|
||||
# Not connected
|
||||
with pytest.raises(ValueError, match="must be a connected DBus object"):
|
||||
await proxy.initialize(
|
||||
DBus(
|
||||
dbus_bus,
|
||||
"org.freedesktop.UDisks2",
|
||||
"/org/freedesktop/UDisks2/block_devices/sda",
|
||||
dbus_session_bus,
|
||||
"service.test.TestInterface",
|
||||
"/service/test/TestInterface",
|
||||
)
|
||||
)
|
||||
|
||||
# Connected to wrong bus
|
||||
await dbus_session_bus.request_name("service.test.TestInterface2")
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match="must be a DBus object connected to bus org.freedesktop.UDisks2 and object /org/freedesktop/UDisks2/block_devices/sda",
|
||||
match="must be a DBus object connected to bus service.test.TestInterface and object /service/test/TestInterface",
|
||||
):
|
||||
await proxy.initialize(
|
||||
await DBus.connect(
|
||||
dbus_bus, "org.freedesktop.hostname1", "/org/freedesktop/hostname1"
|
||||
dbus_session_bus,
|
||||
"service.test.TestInterface2",
|
||||
"/service/test/TestInterface",
|
||||
)
|
||||
)
|
||||
|
||||
# Connected to wrong object
|
||||
test_service_2 = TestInterface("/service/test/TestInterface/2")
|
||||
test_service_2.export(dbus_session_bus)
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match="must be a DBus object connected to bus service.test.TestInterface and object /service/test/TestInterface",
|
||||
):
|
||||
await proxy.initialize(
|
||||
await DBus.connect(
|
||||
dbus_session_bus,
|
||||
"service.test.TestInterface",
|
||||
"/service/test/TestInterface/2",
|
||||
)
|
||||
)
|
||||
|
||||
# Connected to correct object on the correct bus
|
||||
await proxy.initialize(
|
||||
await DBus.connect(
|
||||
dbus_bus,
|
||||
"org.freedesktop.UDisks2",
|
||||
"/org/freedesktop/UDisks2/block_devices/sda",
|
||||
dbus_session_bus,
|
||||
"service.test.TestInterface",
|
||||
"/service/test/TestInterface",
|
||||
)
|
||||
)
|
||||
assert proxy.is_connected is True
|
||||
|
@ -18,6 +18,7 @@ async def fixture_logind_service(dbus_session_bus: MessageBus) -> LogindService:
|
||||
|
||||
async def test_reboot(logind_service: LogindService, dbus_session_bus: MessageBus):
|
||||
"""Test reboot."""
|
||||
logind_service.Reboot.calls.clear()
|
||||
logind = Logind()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -31,6 +32,7 @@ async def test_reboot(logind_service: LogindService, dbus_session_bus: MessageBu
|
||||
|
||||
async def test_power_off(logind_service: LogindService, dbus_session_bus: MessageBus):
|
||||
"""Test power off."""
|
||||
logind_service.PowerOff.calls.clear()
|
||||
logind = Logind()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -31,6 +31,7 @@ async def test_dbus_systemd_info(dbus_session_bus: MessageBus):
|
||||
|
||||
async def test_reboot(systemd_service: SystemdService, dbus_session_bus: MessageBus):
|
||||
"""Test reboot."""
|
||||
systemd_service.Reboot.calls.clear()
|
||||
systemd = Systemd()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -44,6 +45,7 @@ async def test_reboot(systemd_service: SystemdService, dbus_session_bus: Message
|
||||
|
||||
async def test_power_off(systemd_service: SystemdService, dbus_session_bus: MessageBus):
|
||||
"""Test power off."""
|
||||
systemd_service.PowerOff.calls.clear()
|
||||
systemd = Systemd()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -59,6 +61,7 @@ async def test_start_unit(
|
||||
systemd_service: SystemdService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test start unit."""
|
||||
systemd_service.StartUnit.calls.clear()
|
||||
systemd = Systemd()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -75,6 +78,7 @@ async def test_start_unit(
|
||||
|
||||
async def test_stop_unit(systemd_service: SystemdService, dbus_session_bus: MessageBus):
|
||||
"""Test stop unit."""
|
||||
systemd_service.StopUnit.calls.clear()
|
||||
systemd = Systemd()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -93,6 +97,7 @@ async def test_restart_unit(
|
||||
systemd_service: SystemdService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test restart unit."""
|
||||
systemd_service.RestartUnit.calls.clear()
|
||||
systemd = Systemd()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
@ -111,6 +116,7 @@ async def test_reload_unit(
|
||||
systemd_service: SystemdService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test reload unit."""
|
||||
systemd_service.ReloadOrRestartUnit.calls.clear()
|
||||
systemd = Systemd()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -50,6 +50,7 @@ async def test_dbus_settime(
|
||||
timedate_service: TimeDateService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Set timestamp on backend."""
|
||||
timedate_service.SetTime.calls.clear()
|
||||
timedate = TimeDate()
|
||||
|
||||
test_dt = datetime(2021, 5, 19, 8, 36, 54, 405718, tzinfo=timezone.utc)
|
||||
@ -67,6 +68,7 @@ async def test_dbus_setntp(
|
||||
timedate_service: TimeDateService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Disable NTP on backend."""
|
||||
timedate_service.SetNTP.calls.clear()
|
||||
timedate = TimeDate()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -93,6 +93,7 @@ async def test_block_device_info(
|
||||
|
||||
async def test_format(block_sda_service: BlockService, dbus_session_bus: MessageBus):
|
||||
"""Test formatting block device."""
|
||||
block_sda_service.Format.calls.clear()
|
||||
sda = UDisks2Block("/org/freedesktop/UDisks2/block_devices/sda")
|
||||
await sda.connect(dbus_session_bus)
|
||||
|
||||
|
@ -76,6 +76,7 @@ async def test_eject(
|
||||
drive_flash_disk_service: DriveService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test eject."""
|
||||
drive_flash_disk_service.Eject.calls.clear()
|
||||
flash = UDisks2Drive("/org/freedesktop/UDisks2/drives/Generic_Flash_Disk_61BCDDB6")
|
||||
await flash.connect(dbus_session_bus)
|
||||
|
||||
|
@ -92,6 +92,7 @@ async def test_mount(
|
||||
sda1: UDisks2Filesystem, filesystem_sda1_service: FilesystemService
|
||||
):
|
||||
"""Test mount."""
|
||||
filesystem_sda1_service.Mount.calls.clear()
|
||||
assert await sda1.mount(MountOptions(fstype="gpt")) == "/run/media/dev/hassos_data"
|
||||
assert filesystem_sda1_service.Mount.calls == [
|
||||
(
|
||||
@ -107,6 +108,7 @@ async def test_unmount(
|
||||
sda1: UDisks2Filesystem, filesystem_sda1_service: FilesystemService
|
||||
):
|
||||
"""Test unmount."""
|
||||
filesystem_sda1_service.Unmount.calls.clear()
|
||||
await sda1.unmount(UnmountOptions(force=True))
|
||||
assert filesystem_sda1_service.Unmount.calls == [
|
||||
({"force": Variant("b", True), "auth.no_user_interaction": Variant("b", True)},)
|
||||
@ -117,6 +119,7 @@ async def test_check(
|
||||
sda1: UDisks2Filesystem, filesystem_sda1_service: FilesystemService
|
||||
):
|
||||
"""Test check."""
|
||||
filesystem_sda1_service.Check.calls.clear()
|
||||
assert await sda1.check() is True
|
||||
assert filesystem_sda1_service.Check.calls == [
|
||||
({"auth.no_user_interaction": Variant("b", True)},)
|
||||
@ -127,6 +130,7 @@ async def test_repair(
|
||||
sda1: UDisks2Filesystem, filesystem_sda1_service: FilesystemService
|
||||
):
|
||||
"""Test repair."""
|
||||
filesystem_sda1_service.Repair.calls.clear()
|
||||
assert await sda1.repair() is True
|
||||
assert filesystem_sda1_service.Repair.calls == [
|
||||
({"auth.no_user_interaction": Variant("b", True)},)
|
||||
|
@ -122,6 +122,7 @@ async def test_resolve_device(
|
||||
udisks2_manager_service: UDisks2ManagerService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test resolve device."""
|
||||
udisks2_manager_service.ResolveDevice.calls.clear()
|
||||
udisks2 = UDisks2()
|
||||
|
||||
with pytest.raises(DBusNotConnectedError):
|
||||
|
@ -100,6 +100,7 @@ async def test_create_partition(
|
||||
partition_table_sda_service: PartitionTableService, dbus_session_bus: MessageBus
|
||||
):
|
||||
"""Test create partition."""
|
||||
partition_table_sda_service.CreatePartition.calls.clear()
|
||||
sda = UDisks2PartitionTable("/org/freedesktop/UDisks2/block_devices/sda")
|
||||
await sda.connect(dbus_session_bus)
|
||||
|
||||
|
@ -8,8 +8,6 @@ from dbus_fast import Message
|
||||
from dbus_fast.aio.message_bus import MessageBus
|
||||
from dbus_fast.service import ServiceInterface, method
|
||||
|
||||
# pylint: disable=invalid-name
|
||||
|
||||
|
||||
def dbus_method(name: str = None, disabled: bool = False):
|
||||
"""Make DBus method with call tracking.
|
||||
@ -21,13 +19,13 @@ def dbus_method(name: str = None, disabled: bool = False):
|
||||
orig_decorator = method(name=name, disabled=disabled)
|
||||
|
||||
@no_type_check_decorator
|
||||
def decorator(fn):
|
||||
def decorator(func):
|
||||
calls: list[list[Any]] = []
|
||||
|
||||
@wraps(fn)
|
||||
@wraps(func)
|
||||
def track_calls(self, *args):
|
||||
calls.append(args)
|
||||
return fn(self, *args)
|
||||
return func(self, *args)
|
||||
|
||||
wrapped = orig_decorator(track_calls)
|
||||
wrapped.__dict__["calls"] = calls
|
||||
|
@ -107,4 +107,4 @@ class ActiveConnection(DBusServiceMock):
|
||||
@signal()
|
||||
def StateChanged(self) -> "uu":
|
||||
"""Signal StateChanged."""
|
||||
return [0, 0]
|
||||
return [2, 0]
|
||||
|
@ -80,6 +80,7 @@ class ConnectionSettings(DBusServiceMock):
|
||||
|
||||
interface = "org.freedesktop.NetworkManager.Settings.Connection"
|
||||
object_path = "/org/freedesktop/NetworkManager/Settings/1"
|
||||
settings = SETTINGS_FIXTURE
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def Unsaved(self) -> "b":
|
||||
@ -107,6 +108,7 @@ class ConnectionSettings(DBusServiceMock):
|
||||
@dbus_method()
|
||||
def Update(self, properties: "a{sa{sv}}") -> None:
|
||||
"""Do Update method."""
|
||||
self.settings = properties
|
||||
self.Updated()
|
||||
|
||||
@dbus_method()
|
||||
@ -121,7 +123,7 @@ class ConnectionSettings(DBusServiceMock):
|
||||
@dbus_method()
|
||||
def GetSettings(self) -> "a{sa{sv}}":
|
||||
"""Do GetSettings method."""
|
||||
return SETTINGS_FIXTURE
|
||||
return self.settings
|
||||
|
||||
@dbus_method()
|
||||
def GetSecrets(self, setting_name: "s") -> "a{sa{sv}}":
|
||||
@ -140,5 +142,5 @@ class ConnectionSettings(DBusServiceMock):
|
||||
@dbus_method()
|
||||
def Update2(self, settings: "a{sa{sv}}", flags: "u", args: "a{sv}") -> "a{sv}":
|
||||
"""Do Update2 method."""
|
||||
self.Updated()
|
||||
self.Update(settings)
|
||||
return {}
|
||||
|
@ -23,6 +23,10 @@ class DeviceWireless(DBusServiceMock):
|
||||
|
||||
interface = "org.freedesktop.NetworkManager.Device.Wireless"
|
||||
object_path = "/org/freedesktop/NetworkManager/Devices/3"
|
||||
all_access_points = [
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/43099",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/43100",
|
||||
]
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def HwAddress(self) -> "s":
|
||||
@ -92,10 +96,7 @@ class DeviceWireless(DBusServiceMock):
|
||||
@dbus_method()
|
||||
def GetAllAccessPoints(self) -> "ao":
|
||||
"""Do GetAllAccessPoints method."""
|
||||
return [
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/43099",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/43100",
|
||||
]
|
||||
return self.all_access_points
|
||||
|
||||
@dbus_method()
|
||||
def RequestScan(self, options: "a{sv}") -> None:
|
||||
|
@ -24,6 +24,7 @@ class NetworkManager(DBusServiceMock):
|
||||
interface = "org.freedesktop.NetworkManager"
|
||||
object_path = "/org/freedesktop/NetworkManager"
|
||||
version = "1.22.10"
|
||||
connectivity = 4
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def Devices(self) -> "ao":
|
||||
@ -145,7 +146,7 @@ class NetworkManager(DBusServiceMock):
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def Connectivity(self) -> "u":
|
||||
"""Get Connectivity."""
|
||||
return 4
|
||||
return self.connectivity
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def ConnectivityCheckAvailable(self) -> "b":
|
||||
@ -300,7 +301,7 @@ class NetworkManager(DBusServiceMock):
|
||||
@dbus_method()
|
||||
def CheckConnectivity(self) -> "u":
|
||||
"""Do CheckConnectivity method."""
|
||||
return 4
|
||||
return self.Connectivity
|
||||
|
||||
@dbus_method()
|
||||
def state(self) -> "u":
|
||||
|
@ -29,7 +29,12 @@ class OSAgent(DBusServiceMock):
|
||||
"""Get Version."""
|
||||
return "1.1.0"
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@dbus_property()
|
||||
def Diagnostics(self) -> "b":
|
||||
"""Get Diagnostics."""
|
||||
return True
|
||||
|
||||
@Diagnostics.setter
|
||||
def Diagnostics(self, value: "b"):
|
||||
"""Set Diagnostics."""
|
||||
self.emit_properties_changed({"Diagnostics": value})
|
||||
|
@ -23,6 +23,12 @@ class Systemd(DBusServiceMock):
|
||||
|
||||
object_path = "/org/freedesktop/systemd1"
|
||||
interface = "org.freedesktop.systemd1.Manager"
|
||||
log_level = "info"
|
||||
log_target = "journal-or-kmsg"
|
||||
runtime_watchdog_usec = 0
|
||||
reboot_watchdog_usec = 600000000
|
||||
kexec_watchdog_usec = 0
|
||||
service_watchdogs = True
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def Version(self) -> "s":
|
||||
@ -229,15 +235,25 @@ class Systemd(DBusServiceMock):
|
||||
"""Get InitRDUnitsLoadFinishTimestampMonotonic."""
|
||||
return 0
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@dbus_property()
|
||||
def LogLevel(self) -> "s":
|
||||
"""Get LogLevel."""
|
||||
return "info"
|
||||
return self.log_level
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@LogLevel.setter
|
||||
def LogLevel(self, value: "s"):
|
||||
"""Set LogLevel. Does not emit prop change."""
|
||||
self.log_level = value
|
||||
|
||||
@dbus_property()
|
||||
def LogTarget(self) -> "s":
|
||||
"""Get LogTarget."""
|
||||
return "journal-or-kmsg"
|
||||
return self.log_target
|
||||
|
||||
@LogTarget.setter
|
||||
def LogTarget(self, value: "s"):
|
||||
"""Set LogTarget. Does not emit prop change."""
|
||||
self.log_target = value
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def NNames(self) -> "u":
|
||||
@ -325,25 +341,45 @@ class Systemd(DBusServiceMock):
|
||||
"""Get DefaultStandardError."""
|
||||
return "journal"
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@dbus_property()
|
||||
def RuntimeWatchdogUSec(self) -> "t":
|
||||
"""Get RuntimeWatchdogUSec."""
|
||||
return 0
|
||||
return self.runtime_watchdog_usec
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@RuntimeWatchdogUSec.setter
|
||||
def RuntimeWatchdogUSec(self, value: "t"):
|
||||
"""Set RuntimeWatchdogUSec. Does not emit prop change."""
|
||||
self.runtime_watchdog_usec = value
|
||||
|
||||
@dbus_property()
|
||||
def RebootWatchdogUSec(self) -> "t":
|
||||
"""Get RebootWatchdogUSec."""
|
||||
return 600000000
|
||||
return self.reboot_watchdog_usec
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@RebootWatchdogUSec.setter
|
||||
def RebootWatchdogUSec(self, value: "t"):
|
||||
"""Set RebootWatchdogUSec. Does not emit prop change."""
|
||||
self.RebootWatchdogUSec = value
|
||||
|
||||
@dbus_property()
|
||||
def KExecWatchdogUSec(self) -> "t":
|
||||
"""Get KExecWatchdogUSec."""
|
||||
return 0
|
||||
return self.kexec_watchdog_usec
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
@KExecWatchdogUSec.setter
|
||||
def KExecWatchdogUSec(self, value: "t"):
|
||||
"""Set KExecWatchdogUSec. Does not emit prop change."""
|
||||
self.KExecWatchdogUSec = value
|
||||
|
||||
@dbus_property()
|
||||
def ServiceWatchdogs(self) -> "b":
|
||||
"""Get ServiceWatchdogs."""
|
||||
return True
|
||||
return self.service_watchdogs
|
||||
|
||||
@ServiceWatchdogs.setter
|
||||
def ServiceWatchdogs(self, value: "b"):
|
||||
"""Set ServiceWatchdogs. Does not emit prop change."""
|
||||
self.service_watchdogs = value
|
||||
|
||||
@dbus_property(access=PropertyAccess.READ)
|
||||
def ControlGroup(self) -> "s":
|
||||
@ -629,7 +665,7 @@ class Systemd(DBusServiceMock):
|
||||
return "/org/freedesktop/systemd1/job/7623"
|
||||
|
||||
@dbus_method()
|
||||
def list_units(
|
||||
def ListUnits(
|
||||
self,
|
||||
) -> "a(ssssssouso)":
|
||||
"""Return a list of available services."""
|
||||
|
74
tests/fixtures/de_pengutronix_rauc.xml
vendored
74
tests/fixtures/de_pengutronix_rauc.xml
vendored
@ -1,74 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="de.pengutronix.rauc.Installer">
|
||||
<method name="Install">
|
||||
<arg type="s" name="source" direction="in"/>
|
||||
</method>
|
||||
<method name="InstallBundle">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
|
||||
<arg type="s" name="source" direction="in"/>
|
||||
<arg type="a{sv}" name="args" direction="in"/>
|
||||
</method>
|
||||
<method name="Info">
|
||||
<arg type="s" name="bundle" direction="in"/>
|
||||
<arg type="s" name="compatible" direction="out"/>
|
||||
<arg type="s" name="version" direction="out"/>
|
||||
</method>
|
||||
<method name="Mark">
|
||||
<arg type="s" name="state" direction="in"/>
|
||||
<arg type="s" name="slot_identifier" direction="in"/>
|
||||
<arg type="s" name="slot_name" direction="out"/>
|
||||
<arg type="s" name="message" direction="out"/>
|
||||
</method>
|
||||
<method name="GetSlotStatus">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="RaucSlotStatusArray"/>
|
||||
<arg type="a(sa{sv})" name="slot_status_array" direction="out"/>
|
||||
</method>
|
||||
<method name="GetPrimary">
|
||||
<arg type="s" name="primary" direction="out"/>
|
||||
</method>
|
||||
<signal name="Completed">
|
||||
<arg type="i" name="result"/>
|
||||
</signal>
|
||||
<property type="s" name="Operation" access="read"/>
|
||||
<property type="s" name="LastError" access="read"/>
|
||||
<property type="(isi)" name="Progress" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="RaucProgress"/>
|
||||
</property>
|
||||
<property type="s" name="Compatible" access="read"/>
|
||||
<property type="s" name="Variant" access="read"/>
|
||||
<property type="s" name="BootSlot" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"Operation": "idle",
|
||||
"LastError": "",
|
||||
"Progress": [0, "", 0],
|
||||
"Compatible": "haos-odroid-n2",
|
||||
"Variant": "",
|
||||
"BootSlot": "B"
|
||||
}
|
@ -1,108 +0,0 @@
|
||||
[
|
||||
[
|
||||
"kernel.0",
|
||||
{
|
||||
"activated.count": 9,
|
||||
"activated.timestamp": "2022-08-23T21:03:22Z",
|
||||
"boot-status": "good",
|
||||
"bundle.compatible": "haos-odroid-n2",
|
||||
"sha256": "c624db648b8401fae37ee5bb1a6ec90bdf4183aef364b33314a73c7198e49d5b",
|
||||
"state": "inactive",
|
||||
"size": 10371072,
|
||||
"installed.count": 9,
|
||||
"class": "kernel",
|
||||
"device": "/dev/disk/by-partlabel/hassos-kernel0",
|
||||
"type": "raw",
|
||||
"bootname": "A",
|
||||
"bundle.version": "9.0.dev20220818",
|
||||
"installed.timestamp": "2022-08-23T21:03:16Z",
|
||||
"status": "ok"
|
||||
}
|
||||
],
|
||||
[
|
||||
"boot.0",
|
||||
{
|
||||
"bundle.compatible": "haos-odroid-n2",
|
||||
"sha256": "a5019b335f33be2cf89c96bb2d0695030adb72c1d13d650a5bbe1806dd76d6cc",
|
||||
"state": "inactive",
|
||||
"size": 25165824,
|
||||
"installed.count": 19,
|
||||
"class": "boot",
|
||||
"device": "/dev/disk/by-partlabel/hassos-boot",
|
||||
"type": "vfat",
|
||||
"status": "ok",
|
||||
"bundle.version": "9.0.dev20220824",
|
||||
"installed.timestamp": "2022-08-25T21:11:46Z"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rootfs.0",
|
||||
{
|
||||
"bundle.compatible": "haos-odroid-n2",
|
||||
"parent": "kernel.0",
|
||||
"state": "inactive",
|
||||
"size": 117456896,
|
||||
"sha256": "7d908b4d578d072b1b0f75de8250fd97b6e119bff09518a96fffd6e4aec61721",
|
||||
"class": "rootfs",
|
||||
"device": "/dev/disk/by-partlabel/hassos-system0",
|
||||
"type": "raw",
|
||||
"status": "ok",
|
||||
"bundle.version": "9.0.dev20220818",
|
||||
"installed.timestamp": "2022-08-23T21:03:21Z",
|
||||
"installed.count": 9
|
||||
}
|
||||
],
|
||||
[
|
||||
"spl.0",
|
||||
{
|
||||
"bundle.compatible": "haos-odroid-n2",
|
||||
"sha256": "9856a94df1d6abbc672adaf95746ec76abd3a8191f9d08288add6bb39e63ef45",
|
||||
"state": "inactive",
|
||||
"size": 8388608,
|
||||
"installed.count": 19,
|
||||
"class": "spl",
|
||||
"device": "/dev/disk/by-partlabel/hassos-boot",
|
||||
"type": "raw",
|
||||
"status": "ok",
|
||||
"bundle.version": "9.0.dev20220824",
|
||||
"installed.timestamp": "2022-08-25T21:11:51Z"
|
||||
}
|
||||
],
|
||||
[
|
||||
"kernel.1",
|
||||
{
|
||||
"activated.count": 10,
|
||||
"activated.timestamp": "2022-08-25T21:11:52Z",
|
||||
"boot-status": "good",
|
||||
"bundle.compatible": "haos-odroid-n2",
|
||||
"sha256": "f57e354b8bd518022721e71fafaf278972af966d8f6cbefb4610db13785801c8",
|
||||
"state": "booted",
|
||||
"size": 10371072,
|
||||
"installed.count": 10,
|
||||
"class": "kernel",
|
||||
"device": "/dev/disk/by-partlabel/hassos-kernel1",
|
||||
"type": "raw",
|
||||
"bootname": "B",
|
||||
"bundle.version": "9.0.dev20220824",
|
||||
"installed.timestamp": "2022-08-25T21:11:46Z",
|
||||
"status": "ok"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rootfs.1",
|
||||
{
|
||||
"bundle.compatible": "haos-odroid-n2",
|
||||
"parent": "kernel.1",
|
||||
"state": "active",
|
||||
"size": 117456896,
|
||||
"sha256": "55936b64d391954ae1aed24dd1460e191e021e78655470051fa7939d12fff68a",
|
||||
"class": "rootfs",
|
||||
"device": "/dev/disk/by-partlabel/hassos-system1",
|
||||
"type": "raw",
|
||||
"status": "ok",
|
||||
"bundle.version": "9.0.dev20220824",
|
||||
"installed.timestamp": "2022-08-25T21:11:51Z",
|
||||
"installed.count": 10
|
||||
}
|
||||
]
|
||||
]
|
@ -1 +0,0 @@
|
||||
["kernel.1", "marked slot kernel.1 as good"]
|
1
tests/fixtures/io_hass_os.json
vendored
1
tests/fixtures/io_hass_os.json
vendored
@ -1 +0,0 @@
|
||||
{ "Version": "1.1.0", "Diagnostics": true }
|
51
tests/fixtures/io_hass_os.xml
vendored
51
tests/fixtures/io_hass_os.xml
vendored
@ -1,51 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="props" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="in">
|
||||
</arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out">
|
||||
</arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out">
|
||||
</arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os">
|
||||
<property name="Version" type="s" access="read">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates">
|
||||
</annotation>
|
||||
</property>
|
||||
<property name="Diagnostics" type="b" access="readwrite">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true">
|
||||
</annotation>
|
||||
</property>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
true
|
@ -1 +0,0 @@
|
||||
true
|
1
tests/fixtures/io_hass_os_AppArmor.json
vendored
1
tests/fixtures/io_hass_os_AppArmor.json
vendored
@ -1 +0,0 @@
|
||||
{ "ParserVersion": "2.13.2" }
|
63
tests/fixtures/io_hass_os_AppArmor.xml
vendored
63
tests/fixtures/io_hass_os_AppArmor.xml
vendored
@ -1,63 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/AppArmor">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="props" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="in">
|
||||
</arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out">
|
||||
</arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out">
|
||||
</arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.AppArmor">
|
||||
<method name="LoadProfile">
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="UnloadProfile">
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<property name="ParserVersion" type="s" access="read">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates">
|
||||
</annotation>
|
||||
</property>
|
||||
</interface>
|
||||
</node>
|
3
tests/fixtures/io_hass_os_Boards.json
vendored
3
tests/fixtures/io_hass_os_Boards.json
vendored
@ -1,3 +0,0 @@
|
||||
{
|
||||
"Board": "Yellow"
|
||||
}
|
35
tests/fixtures/io_hass_os_Boards.xml
vendored
35
tests/fixtures/io_hass_os_Boards.xml
vendored
@ -1,35 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/Boards">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out"></arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="property" type="s" direction="in"></arg>
|
||||
<arg name="value" type="v" direction="out"></arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="props" type="a{sv}" direction="out"></arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="property" type="s" direction="in"></arg>
|
||||
<arg name="value" type="v" direction="in"></arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out"></arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out"></arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out"></arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.Boards">
|
||||
<property name="Board" type="s" access="read">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"></annotation>
|
||||
</property>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
{}
|
31
tests/fixtures/io_hass_os_Boards_Supervised.xml
vendored
31
tests/fixtures/io_hass_os_Boards_Supervised.xml
vendored
@ -1,31 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/Boards/Supervised">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out"></arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="property" type="s" direction="in"></arg>
|
||||
<arg name="value" type="v" direction="out"></arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="props" type="a{sv}" direction="out"></arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="property" type="s" direction="in"></arg>
|
||||
<arg name="value" type="v" direction="in"></arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out"></arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out"></arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out"></arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.Boards.Supervised"></interface>
|
||||
</node>
|
5
tests/fixtures/io_hass_os_Boards_Yellow.json
vendored
5
tests/fixtures/io_hass_os_Boards_Yellow.json
vendored
@ -1,5 +0,0 @@
|
||||
{
|
||||
"HeartbeatLED": true,
|
||||
"PowerLED": true,
|
||||
"DiskLED": true
|
||||
}
|
41
tests/fixtures/io_hass_os_Boards_Yellow.xml
vendored
41
tests/fixtures/io_hass_os_Boards_Yellow.xml
vendored
@ -1,41 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/Boards/Yellow">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out"></arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="property" type="s" direction="in"></arg>
|
||||
<arg name="value" type="v" direction="out"></arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="props" type="a{sv}" direction="out"></arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in"></arg>
|
||||
<arg name="property" type="s" direction="in"></arg>
|
||||
<arg name="value" type="v" direction="in"></arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out"></arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out"></arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out"></arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.Boards.Yellow">
|
||||
<property name="HeartbeatLED" type="b" access="readwrite">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"></annotation>
|
||||
</property>
|
||||
<property name="PowerLED" type="b" access="readwrite">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"></annotation>
|
||||
</property>
|
||||
<property name="DiskLED" type="b" access="readwrite">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"></annotation>
|
||||
</property>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
true
|
51
tests/fixtures/io_hass_os_CGroup.xml
vendored
51
tests/fixtures/io_hass_os_CGroup.xml
vendored
@ -1,51 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/CGroup">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="props" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="in">
|
||||
</arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out">
|
||||
</arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out">
|
||||
</arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.CGroup">
|
||||
<method name="AddDevicesAllowed">
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
true
|
@ -1 +0,0 @@
|
||||
true
|
1
tests/fixtures/io_hass_os_DataDisk.json
vendored
1
tests/fixtures/io_hass_os_DataDisk.json
vendored
@ -1 +0,0 @@
|
||||
{ "CurrentDevice": "/dev/sda" }
|
57
tests/fixtures/io_hass_os_DataDisk.xml
vendored
57
tests/fixtures/io_hass_os_DataDisk.xml
vendored
@ -1,57 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/DataDisk">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="props" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="in">
|
||||
</arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out">
|
||||
</arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out">
|
||||
</arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.DataDisk">
|
||||
<method name="ChangeDevice">
|
||||
<arg type="s" direction="in">
|
||||
</arg>
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="ReloadDevice">
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<property name="CurrentDevice" type="s" access="read">
|
||||
<annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true">
|
||||
</annotation>
|
||||
</property>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
true
|
51
tests/fixtures/io_hass_os_System.xml
vendored
51
tests/fixtures/io_hass_os_System.xml
vendored
@ -1,51 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/io/hass/os/System">
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg name="out" type="s" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="props" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg name="interface" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="property" type="s" direction="in">
|
||||
</arg>
|
||||
<arg name="value" type="v" direction="in">
|
||||
</arg>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg name="interface" type="s" direction="out">
|
||||
</arg>
|
||||
<arg name="changed_properties" type="a{sv}" direction="out">
|
||||
</arg>
|
||||
<arg name="invalidates_properties" type="as" direction="out">
|
||||
</arg>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="io.hass.os.System">
|
||||
<method name="ScheduleWipeDevice">
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
<method name="WipeDevice">
|
||||
<arg type="b" direction="out">
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
"/org/freedesktop/NetworkManager/ActiveConnection/1"
|
@ -1 +0,0 @@
|
||||
[ "/org/freedesktop/NetworkManager/Settings/1", "/org/freedesktop/NetworkManager/ActiveConnection/1" ]
|
@ -1 +0,0 @@
|
||||
4
|
@ -1,33 +0,0 @@
|
||||
{
|
||||
"Devices": [
|
||||
"/org/freedesktop/NetworkManager/Devices/1",
|
||||
"/org/freedesktop/NetworkManager/Devices/3"
|
||||
],
|
||||
"AllDevices": [
|
||||
"/org/freedesktop/NetworkManager/Devices/1",
|
||||
"/org/freedesktop/NetworkManager/Devices/2",
|
||||
"/org/freedesktop/NetworkManager/Devices/3"
|
||||
],
|
||||
"Checkpoints": [],
|
||||
"NetworkingEnabled": true,
|
||||
"WirelessEnabled": true,
|
||||
"WirelessHardwareEnabled": true,
|
||||
"WwanEnabled": true,
|
||||
"WwanHardwareEnabled": true,
|
||||
"WimaxEnabled": false,
|
||||
"WimaxHardwareEnabled": false,
|
||||
"ActiveConnections": ["/org/freedesktop/NetworkManager/ActiveConnection/1"],
|
||||
"PrimaryConnection": "/org/freedesktop/NetworkManager/ActiveConnection/1",
|
||||
"PrimaryConnectionType": "802-3-ethernet",
|
||||
"Metered": 4,
|
||||
"ActivatingConnection": "/",
|
||||
"Startup": false,
|
||||
"Version": "1.22.10",
|
||||
"Capabilities": [1],
|
||||
"State": 70,
|
||||
"Connectivity": 4,
|
||||
"ConnectivityCheckAvailable": true,
|
||||
"ConnectivityCheckEnabled": true,
|
||||
"ConnectivityCheckUri": "http://connectivity-check.ubuntu.com/",
|
||||
"GlobalDnsConfiguration": {}
|
||||
}
|
162
tests/fixtures/org_freedesktop_NetworkManager.xml
vendored
162
tests/fixtures/org_freedesktop_NetworkManager.xml
vendored
@ -1,162 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.64.3 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager">
|
||||
<method name="Reload">
|
||||
<arg type="u" name="flags" direction="in"/>
|
||||
</method>
|
||||
<method name="GetDevices">
|
||||
<arg type="ao" name="devices" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAllDevices">
|
||||
<arg type="ao" name="devices" direction="out"/>
|
||||
</method>
|
||||
<method name="GetDeviceByIpIface">
|
||||
<arg type="s" name="iface" direction="in"/>
|
||||
<arg type="o" name="device" direction="out"/>
|
||||
</method>
|
||||
<method name="ActivateConnection">
|
||||
<arg type="o" name="connection" direction="in"/>
|
||||
<arg type="o" name="device" direction="in"/>
|
||||
<arg type="o" name="specific_object" direction="in"/>
|
||||
<arg type="o" name="active_connection" direction="out"/>
|
||||
</method>
|
||||
<method name="AddAndActivateConnection">
|
||||
<arg type="a{sa{sv}}" name="connection" direction="in"/>
|
||||
<arg type="o" name="device" direction="in"/>
|
||||
<arg type="o" name="specific_object" direction="in"/>
|
||||
<arg type="o" name="path" direction="out"/>
|
||||
<arg type="o" name="active_connection" direction="out"/>
|
||||
</method>
|
||||
<method name="AddAndActivateConnection2">
|
||||
<arg type="a{sa{sv}}" name="connection" direction="in"/>
|
||||
<arg type="o" name="device" direction="in"/>
|
||||
<arg type="o" name="specific_object" direction="in"/>
|
||||
<arg type="a{sv}" name="options" direction="in"/>
|
||||
<arg type="o" name="path" direction="out"/>
|
||||
<arg type="o" name="active_connection" direction="out"/>
|
||||
<arg type="a{sv}" name="result" direction="out"/>
|
||||
</method>
|
||||
<method name="DeactivateConnection">
|
||||
<arg type="o" name="active_connection" direction="in"/>
|
||||
</method>
|
||||
<method name="Sleep">
|
||||
<arg type="b" name="sleep" direction="in"/>
|
||||
</method>
|
||||
<method name="Enable">
|
||||
<arg type="b" name="enable" direction="in"/>
|
||||
</method>
|
||||
<method name="GetPermissions">
|
||||
<arg type="a{ss}" name="permissions" direction="out"/>
|
||||
</method>
|
||||
<method name="SetLogging">
|
||||
<arg type="s" name="level" direction="in"/>
|
||||
<arg type="s" name="domains" direction="in"/>
|
||||
</method>
|
||||
<method name="GetLogging">
|
||||
<arg type="s" name="level" direction="out"/>
|
||||
<arg type="s" name="domains" direction="out"/>
|
||||
</method>
|
||||
<method name="CheckConnectivity">
|
||||
<arg type="u" name="connectivity" direction="out"/>
|
||||
</method>
|
||||
<method name="state">
|
||||
<arg type="u" name="state" direction="out"/>
|
||||
</method>
|
||||
<method name="CheckpointCreate">
|
||||
<arg type="ao" name="devices" direction="in"/>
|
||||
<arg type="u" name="rollback_timeout" direction="in"/>
|
||||
<arg type="u" name="flags" direction="in"/>
|
||||
<arg type="o" name="checkpoint" direction="out"/>
|
||||
</method>
|
||||
<method name="CheckpointDestroy">
|
||||
<arg type="o" name="checkpoint" direction="in"/>
|
||||
</method>
|
||||
<method name="CheckpointRollback">
|
||||
<arg type="o" name="checkpoint" direction="in"/>
|
||||
<arg type="a{su}" name="result" direction="out"/>
|
||||
</method>
|
||||
<method name="CheckpointAdjustRollbackTimeout">
|
||||
<arg type="o" name="checkpoint" direction="in"/>
|
||||
<arg type="u" name="add_timeout" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<signal name="CheckPermissions"/>
|
||||
<signal name="StateChanged">
|
||||
<arg type="u" name="state"/>
|
||||
</signal>
|
||||
<signal name="DeviceAdded">
|
||||
<arg type="o" name="device_path"/>
|
||||
</signal>
|
||||
<signal name="DeviceRemoved">
|
||||
<arg type="o" name="device_path"/>
|
||||
</signal>
|
||||
<property type="ao" name="Devices" access="read"/>
|
||||
<property type="ao" name="AllDevices" access="read"/>
|
||||
<property type="ao" name="Checkpoints" access="read"/>
|
||||
<property type="b" name="NetworkingEnabled" access="read"/>
|
||||
<property type="b" name="WirelessEnabled" access="readwrite"/>
|
||||
<property type="b" name="WirelessHardwareEnabled" access="read"/>
|
||||
<property type="b" name="WwanEnabled" access="readwrite"/>
|
||||
<property type="b" name="WwanHardwareEnabled" access="read"/>
|
||||
<property type="b" name="WimaxEnabled" access="readwrite"/>
|
||||
<property type="b" name="WimaxHardwareEnabled" access="read"/>
|
||||
<property type="ao" name="ActiveConnections" access="read"/>
|
||||
<property type="o" name="PrimaryConnection" access="read"/>
|
||||
<property type="s" name="PrimaryConnectionType" access="read"/>
|
||||
<property type="u" name="Metered" access="read"/>
|
||||
<property type="o" name="ActivatingConnection" access="read"/>
|
||||
<property type="b" name="Startup" access="read"/>
|
||||
<property type="s" name="Version" access="read"/>
|
||||
<property type="u" name="Capabilities" access="read"/>
|
||||
<property type="u" name="State" access="read"/>
|
||||
<property type="u" name="Connectivity" access="read"/>
|
||||
<property type="b" name="ConnectivityCheckAvailable" access="read"/>
|
||||
<property type="b" name="ConnectivityCheckEnabled" access="readwrite"/>
|
||||
<property type="s" name="ConnectivityCheckUri" access="read"/>
|
||||
<property type="a{sv}" name="GlobalDnsConfiguration" access="readwrite"/>
|
||||
</interface>
|
||||
<node name="IP4Config"/>
|
||||
<node name="ActiveConnection"/>
|
||||
<node name="AgentManager"/>
|
||||
<node name="Devices"/>
|
||||
<node name="DHCP4Config"/>
|
||||
<node name="DnsManager"/>
|
||||
<node name="IP6Config"/>
|
||||
<node name="Settings"/>
|
||||
</node>
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"Flags": 3,
|
||||
"WpaFlags": 0,
|
||||
"RsnFlags": 392,
|
||||
"Ssid": [85, 80, 67, 52, 56, 49, 52, 52, 54, 54],
|
||||
"Frequency": 2462,
|
||||
"HwAddress": "E4:57:40:A9:D7:DE",
|
||||
"Mode": 2,
|
||||
"MaxBitrate": 195000,
|
||||
"Strength": 47,
|
||||
"LastSeen": 1398776
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"Flags": 1,
|
||||
"WpaFlags": 0,
|
||||
"RsnFlags": 392,
|
||||
"Ssid": [86, 81, 64, 51, 53, 40, 53, 53, 55, 50, 48],
|
||||
"Frequency": 5660,
|
||||
"HwAddress": "18:4B:0D:23:A1:9C",
|
||||
"Mode": 2,
|
||||
"MaxBitrate": 540000,
|
||||
"Strength": 63,
|
||||
"LastSeen": 1398839
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.62.5 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.AccessPoint">
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<property type="u" name="Flags" access="read"/>
|
||||
<property type="u" name="WpaFlags" access="read"/>
|
||||
<property type="u" name="RsnFlags" access="read"/>
|
||||
<property type="ay" name="Ssid" access="read"/>
|
||||
<property type="u" name="Frequency" access="read"/>
|
||||
<property type="s" name="HwAddress" access="read"/>
|
||||
<property type="u" name="Mode" access="read"/>
|
||||
<property type="u" name="MaxBitrate" access="read"/>
|
||||
<property type="y" name="Strength" access="read"/>
|
||||
<property type="i" name="LastSeen" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,62 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.64.3 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.Connection.Active">
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<signal name="StateChanged">
|
||||
<arg type="u" name="state"/>
|
||||
<arg type="u" name="reason"/>
|
||||
</signal>
|
||||
<property type="o" name="Connection" access="read"/>
|
||||
<property type="o" name="SpecificObject" access="read"/>
|
||||
<property type="s" name="Id" access="read"/>
|
||||
<property type="s" name="Uuid" access="read"/>
|
||||
<property type="s" name="Type" access="read"/>
|
||||
<property type="ao" name="Devices" access="read"/>
|
||||
<property type="u" name="State" access="read"/>
|
||||
<property type="u" name="StateFlags" access="read"/>
|
||||
<property type="b" name="Default" access="read"/>
|
||||
<property type="o" name="Ip4Config" access="read"/>
|
||||
<property type="o" name="Dhcp4Config" access="read"/>
|
||||
<property type="b" name="Default6" access="read"/>
|
||||
<property type="o" name="Ip6Config" access="read"/>
|
||||
<property type="o" name="Dhcp6Config" access="read"/>
|
||||
<property type="b" name="Vpn" access="read"/>
|
||||
<property type="o" name="Master" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"Connection": "/org/freedesktop/NetworkManager/Settings/1",
|
||||
"SpecificObject": "/",
|
||||
"Id": "Wired connection 1",
|
||||
"Uuid": "0c23631e-2118-355c-bbb0-8943229cb0d6",
|
||||
"Type": "802-3-ethernet",
|
||||
"Devices": ["/org/freedesktop/NetworkManager/Devices/1"],
|
||||
"State": 2,
|
||||
"StateFlags": 92,
|
||||
"Default": true,
|
||||
"Ip4Config": "/org/freedesktop/NetworkManager/IP4Config/1",
|
||||
"Dhcp4Config": "/org/freedesktop/NetworkManager/DHCP4Config/1",
|
||||
"Default6": false,
|
||||
"Ip6Config": "/org/freedesktop/NetworkManager/IP6Config/1",
|
||||
"Dhcp6Config": "/",
|
||||
"Vpn": false,
|
||||
"Master": "/"
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
{
|
||||
"Udi": "/sys/devices/pci0000:00/0000:00:1f.6/net/eth0",
|
||||
"Interface": "eth0",
|
||||
"IpInterface": "eth0",
|
||||
"Driver": "e1000e",
|
||||
"DriverVersion": "3.2.6-k",
|
||||
"FirmwareVersion": "0.7-4",
|
||||
"Capabilities": 3,
|
||||
"Ip4Address": 2499979456,
|
||||
"State": 100,
|
||||
"StateReason": [100, 0],
|
||||
"ActiveConnection": "/org/freedesktop/NetworkManager/ActiveConnection/1",
|
||||
"Ip4Config": "/org/freedesktop/NetworkManager/IP4Config/1",
|
||||
"Dhcp4Config": "/org/freedesktop/NetworkManager/DHCP4Config/1",
|
||||
"Ip6Config": "/org/freedesktop/NetworkManager/IP6Config/1",
|
||||
"Dhcp6Config": "/",
|
||||
"Managed": true,
|
||||
"Autoconnect": true,
|
||||
"FirmwareMissing": false,
|
||||
"NmPluginMissing": false,
|
||||
"DeviceType": 1,
|
||||
"AvailableConnections": ["/org/freedesktop/NetworkManager/Settings/1"],
|
||||
"PhysicalPortId": "",
|
||||
"Mtu": 1500,
|
||||
"Metered": 4,
|
||||
"LldpNeighbors": [],
|
||||
"Real": true,
|
||||
"Ip4Connectivity": 4,
|
||||
"Ip6Connectivity": 3,
|
||||
"InterfaceFlags": 65539
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
{
|
||||
"Udi": "/sys/devices/platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0",
|
||||
"Interface": "wlan0",
|
||||
"IpInterface": "",
|
||||
"Driver": "brcmfmac",
|
||||
"DriverVersion": "7.45.154",
|
||||
"FirmwareVersion": "01-4fbe0b04",
|
||||
"Capabilities": 1,
|
||||
"Ip4Address": 0,
|
||||
"State": 30,
|
||||
"StateReason": [30, 42],
|
||||
"ActiveConnection": "/",
|
||||
"Ip4Config": "/",
|
||||
"Dhcp4Config": "/",
|
||||
"Ip6Config": "/",
|
||||
"Dhcp6Config": "/",
|
||||
"Managed": true,
|
||||
"Autoconnect": true,
|
||||
"FirmwareMissing": false,
|
||||
"NmPluginMissing": false,
|
||||
"DeviceType": 2,
|
||||
"AvailableConnections": [],
|
||||
"PhysicalPortId": "",
|
||||
"Mtu": 1500,
|
||||
"Metered": 0,
|
||||
"LldpNeighbors": [],
|
||||
"Real": true,
|
||||
"Ip4Connectivity": 1,
|
||||
"Ip6Connectivity": 1
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
{
|
||||
"Udi": "/sys/devices/virtual/net/veth87bd238'",
|
||||
"Path": "",
|
||||
"Interface": "veth87bd238",
|
||||
"IpInterface": "veth87bd238",
|
||||
"Driver": "veth",
|
||||
"DriverVersion": "1.0",
|
||||
"FirmwareVersion": "",
|
||||
"Capabilities": 7,
|
||||
"Ip4Address": 0,
|
||||
"State": 10,
|
||||
"StateReason": [10, 0],
|
||||
"ActiveConnection": "/",
|
||||
"Ip4Config": "/",
|
||||
"Dhcp4Config": "/",
|
||||
"Ip6Config": "/",
|
||||
"Dhcp6Config": "/",
|
||||
"Managed": false,
|
||||
"Autoconnect": true,
|
||||
"FirmwareMissing": false,
|
||||
"NmPluginMissing": false,
|
||||
"DeviceType": 20,
|
||||
"AvailableConnections": [],
|
||||
"PhysicalPortId": "",
|
||||
"Mtu": 1500,
|
||||
"Metered": 0,
|
||||
"LldpNeighbors": [],
|
||||
"Real": true,
|
||||
"Ip4Connectivity": 0,
|
||||
"Ip6Connectivity": 0,
|
||||
"InterfaceFlags": 65539,
|
||||
"HwAddress": "9A:4B:E3:9A:F8:D3",
|
||||
"Ports": []
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
{
|
||||
"HwAddress": "EA:3C:50:4C:B8:82",
|
||||
"PermHwAddress": "DC:A6:32:02:BA:21",
|
||||
"Mode": 2,
|
||||
"Bitrate": 0,
|
||||
"AccessPoints": [
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41533",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41534",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41535",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41536",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41537",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41538",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41539",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41540",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/41541"
|
||||
],
|
||||
"ActiveAccessPoint": "/",
|
||||
"WirelessCapabilities": 2047,
|
||||
"LastScan": 1343924585
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
[
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/43099",
|
||||
"/org/freedesktop/NetworkManager/AccessPoint/43100"
|
||||
]
|
@ -1,120 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.62.5 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.Device.Statistics">
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<property type="u" name="RefreshRateMs" access="readwrite"/>
|
||||
<property type="t" name="TxBytes" access="read"/>
|
||||
<property type="t" name="RxBytes" access="read"/>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.Device.Wireless">
|
||||
<method name="GetAccessPoints">
|
||||
<arg type="ao" name="access_points" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAllAccessPoints">
|
||||
<arg type="ao" name="access_points" direction="out"/>
|
||||
</method>
|
||||
<method name="RequestScan">
|
||||
<arg type="a{sv}" name="options" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<signal name="AccessPointAdded">
|
||||
<arg type="o" name="access_point"/>
|
||||
</signal>
|
||||
<signal name="AccessPointRemoved">
|
||||
<arg type="o" name="access_point"/>
|
||||
</signal>
|
||||
<property type="s" name="HwAddress" access="read"/>
|
||||
<property type="s" name="PermHwAddress" access="read"/>
|
||||
<property type="u" name="Mode" access="read"/>
|
||||
<property type="u" name="Bitrate" access="read"/>
|
||||
<property type="ao" name="AccessPoints" access="read"/>
|
||||
<property type="o" name="ActiveAccessPoint" access="read"/>
|
||||
<property type="u" name="WirelessCapabilities" access="read"/>
|
||||
<property type="x" name="LastScan" access="read"/>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.Device">
|
||||
<method name="Reapply">
|
||||
<arg type="a{sa{sv}}" name="connection" direction="in"/>
|
||||
<arg type="t" name="version_id" direction="in"/>
|
||||
<arg type="u" name="flags" direction="in"/>
|
||||
</method>
|
||||
<method name="GetAppliedConnection">
|
||||
<arg type="u" name="flags" direction="in"/>
|
||||
<arg type="a{sa{sv}}" name="connection" direction="out"/>
|
||||
<arg type="t" name="version_id" direction="out"/>
|
||||
</method>
|
||||
<method name="Disconnect"/>
|
||||
<method name="Delete"/>
|
||||
<signal name="StateChanged">
|
||||
<arg type="u" name="new_state"/>
|
||||
<arg type="u" name="old_state"/>
|
||||
<arg type="u" name="reason"/>
|
||||
</signal>
|
||||
<property type="s" name="Udi" access="read"/>
|
||||
<property type="s" name="Interface" access="read"/>
|
||||
<property type="s" name="IpInterface" access="read"/>
|
||||
<property type="s" name="Driver" access="read"/>
|
||||
<property type="s" name="DriverVersion" access="read"/>
|
||||
<property type="s" name="FirmwareVersion" access="read"/>
|
||||
<property type="u" name="Capabilities" access="read"/>
|
||||
<property type="u" name="Ip4Address" access="read"/>
|
||||
<property type="u" name="State" access="read"/>
|
||||
<property type="(uu)" name="StateReason" access="read"/>
|
||||
<property type="o" name="ActiveConnection" access="read"/>
|
||||
<property type="o" name="Ip4Config" access="read"/>
|
||||
<property type="o" name="Dhcp4Config" access="read"/>
|
||||
<property type="o" name="Ip6Config" access="read"/>
|
||||
<property type="o" name="Dhcp6Config" access="read"/>
|
||||
<property type="b" name="Managed" access="readwrite"/>
|
||||
<property type="b" name="Autoconnect" access="readwrite"/>
|
||||
<property type="b" name="FirmwareMissing" access="read"/>
|
||||
<property type="b" name="NmPluginMissing" access="read"/>
|
||||
<property type="u" name="DeviceType" access="read"/>
|
||||
<property type="ao" name="AvailableConnections" access="read"/>
|
||||
<property type="s" name="PhysicalPortId" access="read"/>
|
||||
<property type="u" name="Mtu" access="read"/>
|
||||
<property type="u" name="Metered" access="read"/>
|
||||
<property type="aa{sv}" name="LldpNeighbors" access="read"/>
|
||||
<property type="b" name="Real" access="read"/>
|
||||
<property type="u" name="Ip4Connectivity" access="read"/>
|
||||
<property type="u" name="Ip6Connectivity" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"Mode": "default",
|
||||
"RcManager": "file",
|
||||
"Configuration": [
|
||||
{
|
||||
"nameservers": ["192.168.30.1"],
|
||||
"domains": ["syshack.ch"],
|
||||
"interface": "eth0",
|
||||
"priority": 100,
|
||||
"vpn": false
|
||||
}
|
||||
]
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.64.3 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.DnsManager">
|
||||
<property type="s" name="Mode" access="read"/>
|
||||
<property type="s" name="RcManager" access="read"/>
|
||||
<property type="aa{sv}" name="Configuration" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,22 +0,0 @@
|
||||
{
|
||||
"Addresses": [[2499979456, 24, 16951488]],
|
||||
"AddressData": [{ "address": "192.168.2.148", "prefix": 24 }],
|
||||
"Gateway": "192.168.2.1",
|
||||
"Routes": [
|
||||
[174272, 24, 0, 100],
|
||||
[65193, 16, 0, 1000]
|
||||
],
|
||||
"RouteData": [
|
||||
{ "dest": "192.168.2.0", "prefix": 24, "metric": 100 },
|
||||
{ "dest": "169.254.0.0", "prefix": 16, "metric": 1000 },
|
||||
{ "dest": "0.0.0.0", "prefix": 0, "next-hop": "192.168.2.1", "metric": 100 }
|
||||
],
|
||||
"NameserverData": [{ "address": "192.168.2.2" }],
|
||||
"Nameservers": [16951488],
|
||||
"Domains": [],
|
||||
"Searches": [],
|
||||
"DnsOptions": [],
|
||||
"DnsPriority": 100,
|
||||
"WinsServerData": [],
|
||||
"WinsServers": []
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.64.3 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.IP4Config">
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<property type="aau" name="Addresses" access="read"/>
|
||||
<property type="aa{sv}" name="AddressData" access="read"/>
|
||||
<property type="s" name="Gateway" access="read"/>
|
||||
<property type="aau" name="Routes" access="read"/>
|
||||
<property type="aa{sv}" name="RouteData" access="read"/>
|
||||
<property type="aa{sv}" name="NameserverData" access="read"/>
|
||||
<property type="au" name="Nameservers" access="read"/>
|
||||
<property type="as" name="Domains" access="read"/>
|
||||
<property type="as" name="Searches" access="read"/>
|
||||
<property type="as" name="DnsOptions" access="read"/>
|
||||
<property type="i" name="DnsPriority" access="read"/>
|
||||
<property type="as" name="WinsServerData" access="read"/>
|
||||
<property type="au" name="WinsServers" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,115 +0,0 @@
|
||||
{
|
||||
"Addresses": [
|
||||
[
|
||||
[42, 3, 1, 105, 61, 245, 0, 0, 107, 233, 37, 136, 178, 106, 166, 121],
|
||||
64,
|
||||
[254, 128, 0, 0, 0, 0, 0, 0, 218, 88, 215, 255, 254, 0, 256, 105]
|
||||
],
|
||||
[
|
||||
[253, 20, 148, 255, 201, 204, 0, 0, 82, 43, 129, 8, 143, 248, 204, 163],
|
||||
64,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
],
|
||||
[
|
||||
[42, 3, 1, 105, 61, 245, 0, 0, 0, 0, 0, 0, 0, 0, 2, 241],
|
||||
128,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
],
|
||||
[
|
||||
[253, 20, 148, 255, 201, 204, 0, 0, 0, 0, 0, 0, 0, 0, 2, 241],
|
||||
128,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
],
|
||||
[
|
||||
[254, 128, 0, 0, 0, 0, 0, 0, 255, 227, 49, 158, 198, 48, 159, 81],
|
||||
64,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
],
|
||||
"AddressData": [
|
||||
{ "address": "2a03:169:3df5:0:6be9:2588:b26a:a679", "prefix": 64 },
|
||||
{ "address": "fd14:949b:c9cc:0:522b:8108:8ff8:cca3", "prefix": 64 },
|
||||
{ "address": "2a03:169:3df5::2f1", "prefix": 128 },
|
||||
{ "address": "fd14:949b:c9cc::2f1", "prefix": 128 },
|
||||
{ "address": "fe80::ffe3:319e:c630:9f51", "prefix": 64 }
|
||||
],
|
||||
"Gateway": "fe80::da58:d7ff:fe00:9c69",
|
||||
"Routes": [
|
||||
[
|
||||
[253, 20, 148, 255, 201, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
48,
|
||||
[254, 128, 0, 0, 0, 0, 0, 0, 218, 88, 215, 255, 254, 0, 256, 105],
|
||||
100
|
||||
],
|
||||
[
|
||||
[42, 3, 1, 105, 61, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
48,
|
||||
[254, 128, 0, 0, 0, 0, 0, 0, 218, 88, 215, 255, 254, 0, 256, 105],
|
||||
100
|
||||
],
|
||||
[
|
||||
[253, 20, 148, 255, 201, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
64,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
100
|
||||
],
|
||||
[
|
||||
[42, 3, 1, 105, 61, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
64,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
100
|
||||
],
|
||||
[
|
||||
[42, 3, 1, 105, 61, 245, 0, 0, 0, 0, 0, 0, 0, 0, 2, 241],
|
||||
128,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
100
|
||||
],
|
||||
[
|
||||
[253, 20, 148, 255, 201, 204, 0, 0, 0, 0, 0, 0, 0, 0, 2, 241],
|
||||
128,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
100
|
||||
],
|
||||
[
|
||||
[254, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
64,
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
100
|
||||
]
|
||||
],
|
||||
"RouteData": [
|
||||
{
|
||||
"dest": "fd14:949b:c9cc::",
|
||||
"prefix": 48,
|
||||
"next-hop": "fe80::da58:d7ff:fe00:9c69",
|
||||
"metric": 100
|
||||
},
|
||||
{
|
||||
"dest": "2a03:169:3df5::",
|
||||
"prefix": 48,
|
||||
"next-hop": "fe80::da58:d7ff:fe00:9c69",
|
||||
"metric": 100
|
||||
},
|
||||
{ "dest": "fd14:949b:c9cc::", "prefix": 64, "metric": 100 },
|
||||
{ "dest": "2a03:169:3df5::", "prefix": 64, "metric": 100 },
|
||||
{
|
||||
"dest": "::",
|
||||
"prefix": 0,
|
||||
"next-hop": "fe80::da58:d7ff:fe00:9c69",
|
||||
"metric": 100
|
||||
},
|
||||
{ "dest": "2a03:169:3df5::2f1", "prefix": 128, "metric": 100 },
|
||||
{ "dest": "fd14:949b:c9cc::2f1", "prefix": 128, "metric": 100 },
|
||||
{ "dest": "fe80::", "prefix": 64, "metric": 100 },
|
||||
{ "dest": "ff00::", "prefix": 8, "metric": 256, "table": 255 }
|
||||
],
|
||||
"Nameservers": [
|
||||
[32, 1, 22, 32, 39, 119, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16],
|
||||
[32, 1, 22, 32, 39, 119, 0, 2, 0, 0, 0, 0, 0, 0, 0, 32]
|
||||
],
|
||||
"Domains": [],
|
||||
"Searches": [],
|
||||
"DnsOptions": [],
|
||||
"DnsPriority": 100
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.62.5 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.IP6Config">
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<property type="a(ayuay)" name="Addresses" access="read"/>
|
||||
<property type="aa{sv}" name="AddressData" access="read"/>
|
||||
<property type="s" name="Gateway" access="read"/>
|
||||
<property type="a(ayuayu)" name="Routes" access="read"/>
|
||||
<property type="aa{sv}" name="RouteData" access="read"/>
|
||||
<property type="aay" name="Nameservers" access="read"/>
|
||||
<property type="as" name="Domains" access="read"/>
|
||||
<property type="as" name="Searches" access="read"/>
|
||||
<property type="as" name="DnsOptions" access="read"/>
|
||||
<property type="i" name="DnsPriority" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1 +0,0 @@
|
||||
"/org/freedesktop/NetworkManager/Settings/1"
|
@ -1 +0,0 @@
|
||||
true
|
@ -1,85 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.62.5 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.Settings">
|
||||
<method name="ListConnections">
|
||||
<arg type="ao" name="connections" direction="out"/>
|
||||
</method>
|
||||
<method name="GetConnectionByUuid">
|
||||
<arg type="s" name="uuid" direction="in"/>
|
||||
<arg type="o" name="connection" direction="out"/>
|
||||
</method>
|
||||
<method name="AddConnection">
|
||||
<arg type="a{sa{sv}}" name="connection" direction="in"/>
|
||||
<arg type="o" name="path" direction="out"/>
|
||||
</method>
|
||||
<method name="AddConnectionUnsaved">
|
||||
<arg type="a{sa{sv}}" name="connection" direction="in"/>
|
||||
<arg type="o" name="path" direction="out"/>
|
||||
</method>
|
||||
<method name="AddConnection2">
|
||||
<arg type="a{sa{sv}}" name="settings" direction="in"/>
|
||||
<arg type="u" name="flags" direction="in"/>
|
||||
<arg type="a{sv}" name="args" direction="in"/>
|
||||
<arg type="o" name="path" direction="out"/>
|
||||
<arg type="a{sv}" name="result" direction="out"/>
|
||||
</method>
|
||||
<method name="LoadConnections">
|
||||
<arg type="as" name="filenames" direction="in"/>
|
||||
<arg type="b" name="status" direction="out"/>
|
||||
<arg type="as" name="failures" direction="out"/>
|
||||
</method>
|
||||
<method name="ReloadConnections">
|
||||
<arg type="b" name="status" direction="out"/>
|
||||
</method>
|
||||
<method name="SaveHostname">
|
||||
<arg type="s" name="hostname" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<signal name="NewConnection">
|
||||
<arg type="o" name="connection"/>
|
||||
</signal>
|
||||
<signal name="ConnectionRemoved">
|
||||
<arg type="o" name="connection"/>
|
||||
</signal>
|
||||
<property type="ao" name="Connections" access="read"/>
|
||||
<property type="s" name="Hostname" access="read"/>
|
||||
<property type="b" name="CanModify" access="read"/>
|
||||
</interface>
|
||||
<node name="1"/>
|
||||
</node>
|
@ -1,39 +0,0 @@
|
||||
{
|
||||
"connection": {
|
||||
"id": "Wired connection 1",
|
||||
"interface-name": "eth0",
|
||||
"permissions": [],
|
||||
"timestamp": 1598125548,
|
||||
"type": "802-3-ethernet",
|
||||
"uuid": "0c23631e-2118-355c-bbb0-8943229cb0d6"
|
||||
},
|
||||
"ipv4": {
|
||||
"address-data": [{ "address": "192.168.2.148", "prefix": 24 }],
|
||||
"addresses": [[2483202240, 24, 16951488]],
|
||||
"dns": [16951488],
|
||||
"dns-search": [],
|
||||
"gateway": "192.168.2.1",
|
||||
"method": "auto",
|
||||
"route-data": [
|
||||
{ "dest": "192.168.122.0", "prefix": 24, "next-hop": "10.10.10.1" }
|
||||
],
|
||||
"routes": [[8038592, 24, 17435146, 0]]
|
||||
},
|
||||
"ipv6": {
|
||||
"address-data": [],
|
||||
"addresses": [],
|
||||
"dns": [],
|
||||
"dns-search": [],
|
||||
"method": "auto",
|
||||
"route-data": [],
|
||||
"routes": [],
|
||||
"addr-gen-mode": 0
|
||||
},
|
||||
"proxy": {},
|
||||
"802-3-ethernet": {
|
||||
"auto-negotiate": false,
|
||||
"mac-address-blacklist": [],
|
||||
"s390-options": {}
|
||||
},
|
||||
"802-11-wireless": { "ssid": [78, 69, 84, 84] }
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<!-- GDBus 2.64.3 -->
|
||||
<node>
|
||||
<interface name="org.freedesktop.DBus.Properties">
|
||||
<method name="Get">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="out"/>
|
||||
</method>
|
||||
<method name="GetAll">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="a{sv}" name="properties" direction="out"/>
|
||||
</method>
|
||||
<method name="Set">
|
||||
<arg type="s" name="interface_name" direction="in"/>
|
||||
<arg type="s" name="property_name" direction="in"/>
|
||||
<arg type="v" name="value" direction="in"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="s" name="interface_name"/>
|
||||
<arg type="a{sv}" name="changed_properties"/>
|
||||
<arg type="as" name="invalidated_properties"/>
|
||||
</signal>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Introspectable">
|
||||
<method name="Introspect">
|
||||
<arg type="s" name="xml_data" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.DBus.Peer">
|
||||
<method name="Ping"/>
|
||||
<method name="GetMachineId">
|
||||
<arg type="s" name="machine_uuid" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.freedesktop.NetworkManager.Settings.Connection">
|
||||
<method name="Update">
|
||||
<arg type="a{sa{sv}}" name="properties" direction="in"/>
|
||||
</method>
|
||||
<method name="UpdateUnsaved">
|
||||
<arg type="a{sa{sv}}" name="properties" direction="in"/>
|
||||
</method>
|
||||
<method name="Delete"/>
|
||||
<method name="GetSettings">
|
||||
<arg type="a{sa{sv}}" name="settings" direction="out"/>
|
||||
</method>
|
||||
<method name="GetSecrets">
|
||||
<arg type="s" name="setting_name" direction="in"/>
|
||||
<arg type="a{sa{sv}}" name="secrets" direction="out"/>
|
||||
</method>
|
||||
<method name="ClearSecrets"/>
|
||||
<method name="Save"/>
|
||||
<method name="Update2">
|
||||
<arg type="a{sa{sv}}" name="settings" direction="in"/>
|
||||
<arg type="u" name="flags" direction="in"/>
|
||||
<arg type="a{sv}" name="args" direction="in"/>
|
||||
<arg type="a{sv}" name="result" direction="out"/>
|
||||
</method>
|
||||
<signal name="PropertiesChanged">
|
||||
<arg type="a{sv}" name="properties"/>
|
||||
</signal>
|
||||
<signal name="Updated"/>
|
||||
<signal name="Removed"/>
|
||||
<property type="b" name="Unsaved" access="read"/>
|
||||
<property type="u" name="Flags" access="read"/>
|
||||
<property type="s" name="Filename" access="read"/>
|
||||
</interface>
|
||||
</node>
|
@ -1,27 +0,0 @@
|
||||
{
|
||||
"Device": { "_type": "ay", "_value": "/dev/loop0" },
|
||||
"PreferredDevice": { "_type": "ay", "_value": "/dev/loop0" },
|
||||
"Symlinks": [],
|
||||
"DeviceNumber": 1792,
|
||||
"Id": "",
|
||||
"Size": 0,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "",
|
||||
"IdType": "",
|
||||
"IdVersion": "",
|
||||
"IdLabel": "",
|
||||
"IdUUID": "",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": true,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": false,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
{
|
||||
"Device": { "_type": "ay", "_value": "/dev/mmcblk1" },
|
||||
"PreferredDevice": { "_type": "ay", "_value": "/dev/mmcblk1" },
|
||||
"Symlinks": {
|
||||
"_type": "aay",
|
||||
"_value": [
|
||||
"/dev/disk/by-id/mmc-BJTD4R_0x97cde291",
|
||||
"/dev/disk/by-path/platform-ffe07000.mmc"
|
||||
]
|
||||
},
|
||||
"DeviceNumber": 45824,
|
||||
"Id": "by-id-mmc-BJTD4R_0x97cde291",
|
||||
"Size": 31268536320,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/org/freedesktop/UDisks2/drives/BJTD4R_0x97cde291",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "",
|
||||
"IdType": "",
|
||||
"IdVersion": "",
|
||||
"IdLabel": "",
|
||||
"IdUUID": "",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": true,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": false,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"Device": { "_type": "ay", "_value": "/dev/mmcblk1p1" },
|
||||
"PreferredDevice": { "_type": "ay", "_value": "/dev/mmcblk1p1" },
|
||||
"Symlinks": {
|
||||
"_type": "aay",
|
||||
"_value": [
|
||||
"/dev/disk/by-id/mmc-BJTD4R_0x97cde291-part1",
|
||||
"/dev/disk/by-label/hassos-boot",
|
||||
"/dev/disk/by-partlabel/hassos-boot",
|
||||
"/dev/disk/by-partuuid/48617373-01",
|
||||
"/dev/disk/by-path/platform-ffe07000.mmc-part1",
|
||||
"/dev/disk/by-uuid/16DD-EED4"
|
||||
]
|
||||
},
|
||||
"DeviceNumber": 45825,
|
||||
"Id": "by-id-mmc-BJTD4R_0x97cde291-part1",
|
||||
"Size": 25165824,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/org/freedesktop/UDisks2/drives/BJTD4R_0x97cde291",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "filesystem",
|
||||
"IdType": "vfat",
|
||||
"IdVersion": "FAT16",
|
||||
"IdLabel": "hassos-boot",
|
||||
"IdUUID": "16DD-EED4",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": true,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": false,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
{
|
||||
"Device": { "_type": "ay", "_value": "/dev/mmcblk1p2" },
|
||||
"PreferredDevice": { "_type": "ay", "_value": "/dev/mmcblk1p2" },
|
||||
"Symlinks": {
|
||||
"_type": "aay",
|
||||
"_value": [
|
||||
"/dev/disk/by-id/mmc-BJTD4R_0x97cde291-part2",
|
||||
"/dev/disk/by-partuuid/48617373-02",
|
||||
"/dev/disk/by-path/platform-ffe07000.mmc-part2"
|
||||
]
|
||||
},
|
||||
"DeviceNumber": 45826,
|
||||
"Id": "by-id-mmc-BJTD4R_0x97cde291-part2",
|
||||
"Size": 1024,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/org/freedesktop/UDisks2/drives/BJTD4R_0x97cde291",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "",
|
||||
"IdType": "",
|
||||
"IdVersion": "",
|
||||
"IdLabel": "",
|
||||
"IdUUID": "",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": true,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": false,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
{
|
||||
"Device": { "_type": "ay", "_value": "/dev/mmcblk1p3" },
|
||||
"PreferredDevice": { "_type": "ay", "_value": "/dev/mmcblk1p3" },
|
||||
"Symlinks": {
|
||||
"_type": "aay",
|
||||
"_value": [
|
||||
"/dev/disk/by-id/mmc-BJTD4R_0x97cde291-part3",
|
||||
"/dev/disk/by-label/hassos-overlay",
|
||||
"/dev/disk/by-partuuid/48617373-03",
|
||||
"/dev/disk/by-path/platform-ffe07000.mmc-part3",
|
||||
"/dev/disk/by-uuid/0cd0d026-8c69-484e-bbf1-8197019fa7df"
|
||||
]
|
||||
},
|
||||
"DeviceNumber": 45827,
|
||||
"Id": "by-id-mmc-BJTD4R_0x97cde291-part3",
|
||||
"Size": 100663296,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/org/freedesktop/UDisks2/drives/BJTD4R_0x97cde291",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "filesystem",
|
||||
"IdType": "ext4",
|
||||
"IdVersion": "1.0",
|
||||
"IdLabel": "hassos-overlay",
|
||||
"IdUUID": "0cd0d026-8c69-484e-bbf1-8197019fa7df",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": true,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": false,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
{
|
||||
"Device": {
|
||||
"_type": "ay",
|
||||
"_value": "/dev/sda"
|
||||
},
|
||||
"PreferredDevice": {
|
||||
"_type": "ay",
|
||||
"_value": "/dev/sda"
|
||||
},
|
||||
"Symlinks": {
|
||||
"_type": "aay",
|
||||
"_value": [
|
||||
"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0",
|
||||
"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0"
|
||||
]
|
||||
},
|
||||
"DeviceNumber": 2048,
|
||||
"Id": "by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0",
|
||||
"Size": 250059350016,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/org/freedesktop/UDisks2/drives/SSK_SSK_Storage_DF56419883D56",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "",
|
||||
"IdType": "",
|
||||
"IdVersion": "",
|
||||
"IdLabel": "",
|
||||
"IdUUID": "",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": false,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": true,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"Device": { "_type": "ay", "_value": "/dev/sda1" },
|
||||
"PreferredDevice": { "_type": "ay", "_value": "/dev/sda1" },
|
||||
"Symlinks": {
|
||||
"_type": "aay",
|
||||
"_value": [
|
||||
"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0-part1",
|
||||
"/dev/disk/by-label/hassos-data",
|
||||
"/dev/disk/by-partlabel/hassos-data-external",
|
||||
"/dev/disk/by-partuuid/6f3f99f4-4d34-476b-b051-77886da57fa9",
|
||||
"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0-part1",
|
||||
"/dev/disk/by-uuid/b82b23cb-0c47-4bbb-acf5-2a2afa8894a2"
|
||||
]
|
||||
},
|
||||
"DeviceNumber": 2049,
|
||||
"Id": "by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0-part1",
|
||||
"Size": 250058113024,
|
||||
"ReadOnly": false,
|
||||
"Drive": "/org/freedesktop/UDisks2/drives/SSK_SSK_Storage_DF56419883D56",
|
||||
"MDRaid": "/",
|
||||
"MDRaidMember": "/",
|
||||
"IdUsage": "filesystem",
|
||||
"IdType": "ext4",
|
||||
"IdVersion": "1.0",
|
||||
"IdLabel": "hassos-data",
|
||||
"IdUUID": "b82b23cb-0c47-4bbb-acf5-2a2afa8894a2",
|
||||
"Configuration": [],
|
||||
"CryptoBackingDevice": "/",
|
||||
"HintPartitionable": true,
|
||||
"HintSystem": false,
|
||||
"HintIgnore": false,
|
||||
"HintAuto": true,
|
||||
"HintName": "",
|
||||
"HintIconName": "",
|
||||
"HintSymbolicIconName": "",
|
||||
"UserspaceMountOptions": []
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user