supervisor/tests/hardware/test_policy.py
Pascal Vizeli 04f36e92e1
Return list of possible data disk targets (#3133)
* 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
2021-09-21 14:51:58 +02:00

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