Path: blob/master/tools/testing/selftests/hid/tests/conftest.py
26308 views
#!/bin/env python31# SPDX-License-Identifier: GPL-2.02# -*- coding: utf-8 -*-3#4# Copyright (c) 2017 Benjamin Tissoires <[email protected]>5# Copyright (c) 2017 Red Hat, Inc.67import platform8import pytest9import re10import resource11import subprocess12from .base import HIDTestUdevRule13from pathlib import Path141516# See the comment in HIDTestUdevRule, this doesn't set up but it will clean17# up once the last test exited.18@pytest.fixture(autouse=True, scope="session")19def udev_rules_session_setup():20with HIDTestUdevRule.instance():21yield222324@pytest.fixture(autouse=True, scope="session")25def setup_rlimit():26resource.setrlimit(resource.RLIMIT_CORE, (0, 0))272829@pytest.fixture(autouse=True, scope="session")30def start_udevd(pytestconfig):31if pytestconfig.getoption("udevd"):32import subprocess3334with subprocess.Popen("/usr/lib/systemd/systemd-udevd") as proc:35yield36proc.kill()37else:38yield394041def pytest_configure(config):42config.addinivalue_line(43"markers",44"skip_if_uhdev(condition, message): mark test to skip if the condition on the uhdev device is met",45)464748# Generate the list of modules and modaliases49# for the tests that need to be parametrized with those50def pytest_generate_tests(metafunc):51if "usbVidPid" in metafunc.fixturenames:52modules = (53Path("/lib/modules/")54/ platform.uname().release55/ "kernel"56/ "drivers"57/ "hid"58)5960modalias_re = re.compile(r"alias:\s+hid:b0003g.*v([0-9a-fA-F]+)p([0-9a-fA-F]+)")6162params = []63ids = []64for module in modules.glob("*.ko"):65p = subprocess.run(66["modinfo", module], capture_output=True, check=True, encoding="utf-8"67)68for line in p.stdout.split("\n"):69m = modalias_re.match(line)70if m is not None:71vid, pid = m.groups()72vid = int(vid, 16)73pid = int(pid, 16)74params.append([module.name.replace(".ko", ""), vid, pid])75ids.append(f"{module.name} {vid:04x}:{pid:04x}")76metafunc.parametrize("usbVidPid", params, ids=ids)777879def pytest_addoption(parser):80parser.addoption("--udevd", action="store_true", default=False)818283