supervisor/tests/hardware/test_policy.py
Stefan Agner f6faa18409
Bump pre-commit ruff to 0.5.7 and reformat (#5242)
It seems that the codebase is not formatted with the latest ruff
version. This PR reformats the codebase with ruff 0.5.7.
2024-08-13 20:53:56 +02:00

200 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",
]