95 lines · 2.8 KB · Python
RawDownload
#!/bin/env python3# SPDX-License-Identifier: GPL-2.0# -*- coding: utf-8 -*-## Copyright (c) 2017 Benjamin Tissoires <benjamin.tissoires@gmail.com># Copyright (c) 2017 Red Hat, Inc. from packaging.version import Versionimport platformimport pytestimport reimport resourceimport subprocessfrom .base import HIDTestUdevRulefrom pathlib import Path  @pytest.fixture(autouse=True)def hidtools_version_check():    HIDTOOLS_VERSION = "0.12"    try:        import hidtools         version = hidtools.__version__  # type: ignore        if Version(version) < Version(HIDTOOLS_VERSION):            pytest.skip(reason=f"have hidtools {version}, require >={HIDTOOLS_VERSION}")    except Exception:        pytest.skip(reason=f"hidtools >={HIDTOOLS_VERSION} required")  # See the comment in HIDTestUdevRule, this doesn't set up but it will clean# up once the last test exited.@pytest.fixture(autouse=True, scope="session")def udev_rules_session_setup():    with HIDTestUdevRule.instance():        yield  @pytest.fixture(autouse=True, scope="session")def setup_rlimit():    resource.setrlimit(resource.RLIMIT_CORE, (0, 0))  @pytest.fixture(autouse=True, scope="session")def start_udevd(pytestconfig):    if pytestconfig.getoption("udevd"):        import subprocess         with subprocess.Popen("/usr/lib/systemd/systemd-udevd") as proc:            yield            proc.kill()    else:        yield  def pytest_configure(config):    config.addinivalue_line(        "markers",        "skip_if_uhdev(condition, message): mark test to skip if the condition on the uhdev device is met",    )  # Generate the list of modules and modaliases# for the tests that need to be parametrized with thosedef pytest_generate_tests(metafunc):    if "usbVidPid" in metafunc.fixturenames:        modules = (            Path("/lib/modules/")            / platform.uname().release            / "kernel"            / "drivers"            / "hid"        )         modalias_re = re.compile(r"alias:\s+hid:b0003g.*v([0-9a-fA-F]+)p([0-9a-fA-F]+)")         params = []        ids = []        for module in modules.glob("*.ko"):            p = subprocess.run(                ["modinfo", module], capture_output=True, check=True, encoding="utf-8"            )            for line in p.stdout.split("\n"):                m = modalias_re.match(line)                if m is not None:                    vid, pid = m.groups()                    vid = int(vid, 16)                    pid = int(pid, 16)                    params.append([module.name.replace(".ko", ""), vid, pid])                    ids.append(f"{module.name} {vid:04x}:{pid:04x}")        metafunc.parametrize("usbVidPid", params, ids=ids)  def pytest_addoption(parser):    parser.addoption("--udevd", action="store_true", default=False)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t