mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-06-08 11:06:29 +00:00

* Return list of possible data disk targets * fix path * fix tests * Add test * Fix tests * Add tests * Add more tests * Remove debug * Address comments * more clear
199 lines
4.6 KiB
Python
199 lines
4.6 KiB
Python
"""Test HardwareManager Module."""
|
|
from pathlib import Path
|
|
|
|
from supervisor.hardware.const import PolicyGroup
|
|
from supervisor.hardware.data import Device
|
|
|
|
# pylint: disable=protected-access
|
|
|
|
|
|
def test_device_policy(coresys):
|
|
"""Test device cgroup policy."""
|
|
device = Device(
|
|
"ttyACM0",
|
|
Path("/dev/ttyACM0"),
|
|
Path("/sys/bus/usb/001"),
|
|
"tty",
|
|
None,
|
|
[],
|
|
{"MAJOR": "5", "MINOR": "10"},
|
|
[],
|
|
)
|
|
|
|
assert coresys.hardware.policy.get_cgroups_rule(device) == "c 5:10 rwm"
|
|
|
|
disk = Device(
|
|
"sda0",
|
|
Path("/dev/sda0"),
|
|
Path("/sys/bus/usb/001"),
|
|
"block",
|
|
None,
|
|
[],
|
|
{"MAJOR": "5", "MINOR": "10"},
|
|
[],
|
|
)
|
|
|
|
assert coresys.hardware.policy.get_cgroups_rule(disk) == "b 5:10 rwm"
|
|
|
|
|
|
def test_policy_group(coresys):
|
|
"""Test policy group generator."""
|
|
assert coresys.hardware.policy.get_cgroups_rules(PolicyGroup.VIDEO) == [
|
|
"c 29:* rwm",
|
|
"c 81:* rwm",
|
|
"c 226:* rwm",
|
|
]
|
|
|
|
|
|
def test_device_in_policy(coresys):
|
|
"""Test device cgroup policy."""
|
|
device = Device(
|
|
"ttyACM0",
|
|
Path("/dev/ttyACM0"),
|
|
Path("/sys/bus/usb/001"),
|
|
"tty",
|
|
None,
|
|
[],
|
|
{"MAJOR": "204", "MINOR": "10"},
|
|
[],
|
|
)
|
|
|
|
assert coresys.hardware.policy.is_match_cgroup(PolicyGroup.UART, device)
|
|
assert not coresys.hardware.policy.is_match_cgroup(PolicyGroup.GPIO, device)
|
|
|
|
|
|
def test_allowed_access(coresys):
|
|
"""Test if is allow to access for device."""
|
|
|
|
disk = Device(
|
|
"sda0",
|
|
Path("/dev/sda0"),
|
|
Path("/sys/bus/usb/001"),
|
|
"block",
|
|
None,
|
|
[],
|
|
{"MAJOR": "5", "MINOR": "10", "ID_FS_LABEL": "hassos-overlay"},
|
|
[],
|
|
)
|
|
|
|
assert not coresys.hardware.policy.allowed_for_access(disk)
|
|
|
|
device = Device(
|
|
"ttyACM0",
|
|
Path("/dev/ttyACM0"),
|
|
Path("/sys/bus/usb/001"),
|
|
"tty",
|
|
None,
|
|
[],
|
|
{"MAJOR": "204", "MINOR": "10"},
|
|
[],
|
|
)
|
|
|
|
assert coresys.hardware.policy.allowed_for_access(device)
|
|
|
|
|
|
def test_dynamic_group_alloc_minor(coresys):
|
|
"""Test dynamic cgroup generation based on minor."""
|
|
for device in (
|
|
Device(
|
|
"ttyACM0",
|
|
Path("/dev/ttyACM0"),
|
|
Path("/sys/bus/usb/001"),
|
|
"tty",
|
|
None,
|
|
[],
|
|
{"MAJOR": "204", "MINOR": "10"},
|
|
[],
|
|
),
|
|
Device(
|
|
"ttyUSB0",
|
|
Path("/dev/ttyUSB0"),
|
|
Path("/sys/bus/usb/000"),
|
|
"tty",
|
|
None,
|
|
[Path("/dev/ttyS1"), Path("/dev/serial/by-id/xyx")],
|
|
{"MAJOR": "188", "MINOR": "10"},
|
|
[],
|
|
),
|
|
Device(
|
|
"ttyS0",
|
|
Path("/dev/ttyS0"),
|
|
Path("/sys/bus/usb/002"),
|
|
"tty",
|
|
None,
|
|
[],
|
|
{"MAJOR": "4", "MINOR": "65"},
|
|
[],
|
|
),
|
|
Device(
|
|
"video1",
|
|
Path("/dev/video1"),
|
|
Path("/sys/bus/usb/003"),
|
|
"misc",
|
|
None,
|
|
[],
|
|
{"MAJOR": "38", "MINOR": "10"},
|
|
[],
|
|
),
|
|
):
|
|
coresys.hardware.update_device(device)
|
|
|
|
assert coresys.hardware.policy.get_cgroups_rules(PolicyGroup.UART) == [
|
|
"c 204:* rwm",
|
|
"c 188:* rwm",
|
|
"c 166:* rwm",
|
|
"c 4:65 rwm",
|
|
]
|
|
|
|
|
|
def test_dynamic_group_alloc_major(coresys):
|
|
"""Test dynamic cgroup generation based on minor."""
|
|
for device in (
|
|
Device(
|
|
"gpio16",
|
|
Path("/dev/gpio16"),
|
|
Path("/sys/bus/usb/001"),
|
|
"gpio",
|
|
None,
|
|
[],
|
|
{"MAJOR": "254", "MINOR": "10"},
|
|
[],
|
|
),
|
|
Device(
|
|
"gpiomem",
|
|
Path("/dev/gpiomem"),
|
|
Path("/sys/bus/usb/000"),
|
|
"gpiomem",
|
|
None,
|
|
[Path("/dev/ttyS1"), Path("/dev/serial/by-id/xyx")],
|
|
{"MAJOR": "239", "MINOR": "10"},
|
|
[],
|
|
),
|
|
Device(
|
|
"ttyS0",
|
|
Path("/dev/ttyS0"),
|
|
Path("/sys/bus/usb/002"),
|
|
"tty",
|
|
None,
|
|
[],
|
|
{"MAJOR": "4", "MINOR": "65"},
|
|
[],
|
|
),
|
|
Device(
|
|
"video1",
|
|
Path("/dev/video1"),
|
|
Path("/sys/bus/usb/003"),
|
|
"misc",
|
|
None,
|
|
[],
|
|
{"MAJOR": "38", "MINOR": "10"},
|
|
[],
|
|
),
|
|
):
|
|
coresys.hardware.update_device(device)
|
|
|
|
assert coresys.hardware.policy.get_cgroups_rules(PolicyGroup.GPIO) == [
|
|
"c 254:* rwm",
|
|
"c 239:* rwm",
|
|
]
|