]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/conftest.py
routing: add multipath pytest tests
[FreeBSD/FreeBSD.git] / tests / conftest.py
1 import pytest
2 from atf_python.atf_pytest import ATFHandler
3
4
5 PLUGIN_ENABLED = False
6 DEFAULT_HANDLER = None
7
8
9 def get_handler():
10     global DEFAULT_HANDLER
11     if DEFAULT_HANDLER is None:
12         DEFAULT_HANDLER = ATFHandler()
13     return DEFAULT_HANDLER
14
15
16 def pytest_addoption(parser):
17     """Add file output"""
18     # Add meta-values
19     group = parser.getgroup("general", "Running and selection options")
20     group.addoption("--atf-var", dest="atf_vars", action="append", default=[])
21     group.addoption(
22         "--atf-source-dir",
23         type=str,
24         dest="atf_source_dir",
25         help="Path to the test source directory",
26     )
27     group.addoption(
28         "--atf-cleanup",
29         default=False,
30         action="store_true",
31         dest="atf_cleanup",
32         help="Call cleanup procedure for a given test",
33     )
34     group = parser.getgroup("terminal reporting", "reporting", after="general")
35     group.addoption(
36         "--atf",
37         default=False,
38         action="store_true",
39         help="Enable test listing/results output in atf format",
40     )
41     group.addoption(
42         "--atf-file",
43         type=str,
44         dest="atf_file",
45         help="Path to the status file provided by atf runtime",
46     )
47
48
49 @pytest.mark.trylast
50 def pytest_configure(config):
51     if config.option.help:
52         return
53
54     # Register markings anyway to avoid warnings
55     config.addinivalue_line("markers", "require_user(name): user to run the test with")
56     config.addinivalue_line(
57         "markers", "require_arch(names): List[str] of support archs"
58     )
59     # config.addinivalue_line("markers", "require_config(config): List[Tuple[str,Any]] of k=v pairs")
60     config.addinivalue_line(
61         "markers", "require_diskspace(amount): str with required diskspace"
62     )
63     config.addinivalue_line(
64         "markers", "require_files(space): List[str] with file paths"
65     )
66     config.addinivalue_line(
67         "markers", "require_machine(names): List[str] of support machine types"
68     )
69     config.addinivalue_line(
70         "markers", "require_memory(amount): str with required memory"
71     )
72     config.addinivalue_line(
73         "markers", "require_progs(space): List[str] with file paths"
74     )
75     config.addinivalue_line(
76         "markers", "timeout(dur): int/float with max duration in sec"
77     )
78
79     global PLUGIN_ENABLED
80     PLUGIN_ENABLED = config.option.atf
81     if not PLUGIN_ENABLED:
82         return
83     get_handler()
84
85     if config.option.collectonly:
86         # Need to output list of tests to stdout, hence override
87         # standard reporter plugin
88         reporter = config.pluginmanager.getplugin("terminalreporter")
89         if reporter:
90             config.pluginmanager.unregister(reporter)
91
92
93 def pytest_collection_modifyitems(session, config, items):
94     """If cleanup is requested, replace collected tests with their cleanups (if any)"""
95     if PLUGIN_ENABLED and config.option.atf_cleanup:
96         new_items = []
97         handler = get_handler()
98         for obj in items:
99             if handler.has_object_cleanup(obj):
100                 handler.override_runtest(obj)
101                 new_items.append(obj)
102         items.clear()
103         items.extend(new_items)
104
105
106 def pytest_collection_finish(session):
107     if PLUGIN_ENABLED and session.config.option.collectonly:
108         handler = get_handler()
109         handler.list_tests(session.items)
110
111
112 def pytest_runtest_logreport(report):
113     if PLUGIN_ENABLED:
114         handler = get_handler()
115         handler.add_report(report)
116
117
118 def pytest_unconfigure(config):
119     if PLUGIN_ENABLED and config.option.atf_file:
120         handler = get_handler()
121         handler.write_report(config.option.atf_file)