diff options
Diffstat (limited to 'tests/conftest.py')
-rw-r--r-- | tests/conftest.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000000..8e3c004b74d6 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,136 @@ +import pytest +from atf_python.atf_pytest import ATFHandler +from typing import Dict + + +PLUGIN_ENABLED = False +DEFAULT_HANDLER = None + + +def set_handler(config): + global DEFAULT_HANDLER, PLUGIN_ENABLED + DEFAULT_HANDLER = ATFHandler(report_file_name=config.option.atf_file) + PLUGIN_ENABLED = True + return DEFAULT_HANDLER + + +def get_handler(): + return DEFAULT_HANDLER + + +def pytest_addoption(parser): + """Add file output""" + # Add meta-values + group = parser.getgroup("general", "Running and selection options") + group.addoption( + "--atf-source-dir", + type=str, + dest="atf_source_dir", + help="Path to the test source directory", + ) + group.addoption( + "--atf-cleanup", + default=False, + action="store_true", + dest="atf_cleanup", + help="Call cleanup procedure for a given test", + ) + group = parser.getgroup("terminal reporting", "reporting", after="general") + group.addoption( + "--atf", + default=False, + action="store_true", + help="Enable test listing/results output in atf format", + ) + group.addoption( + "--atf-file", + type=str, + dest="atf_file", + help="Path to the status file provided by atf runtime", + ) + + +@pytest.fixture(autouse=True, scope="session") +def atf_vars() -> Dict[str, str]: + return ATFHandler.get_atf_vars() + + +@pytest.hookimpl(trylast=True) +def pytest_configure(config): + if config.option.help: + return + + # Register markings anyway to avoid warnings + config.addinivalue_line("markers", "require_user(name): user to run the test with") + config.addinivalue_line( + "markers", "require_arch(names): List[str] of support archs" + ) + # config.addinivalue_line("markers", "require_config(config): List[Tuple[str,Any]] of k=v pairs") + config.addinivalue_line( + "markers", "require_diskspace(amount): str with required diskspace" + ) + config.addinivalue_line( + "markers", "require_files(space): List[str] with file paths" + ) + config.addinivalue_line( + "markers", "require_machine(names): List[str] of support machine types" + ) + config.addinivalue_line( + "markers", "require_memory(amount): str with required memory" + ) + config.addinivalue_line( + "markers", "require_progs(space): List[str] with file paths" + ) + config.addinivalue_line( + "markers", "timeout(dur): int/float with max duration in sec" + ) + + if not config.option.atf: + return + handler = set_handler(config) + + if config.option.collectonly: + # Need to output list of tests to stdout, hence override + # standard reporter plugin + reporter = config.pluginmanager.getplugin("terminalreporter") + if reporter: + config.pluginmanager.unregister(reporter) + else: + handler.setup_configure() + + +def pytest_pycollect_makeitem(collector, name, obj): + if PLUGIN_ENABLED: + handler = get_handler() + return handler.expand_tests(collector, name, obj) + + +def pytest_collection_modifyitems(session, config, items): + """If cleanup is requested, replace collected tests with their cleanups (if any)""" + if PLUGIN_ENABLED: + handler = get_handler() + handler.modify_tests(items, config) + + +def pytest_collection_finish(session): + if PLUGIN_ENABLED and session.config.option.collectonly: + handler = get_handler() + handler.list_tests(session.items) + + +def pytest_runtest_setup(item): + if PLUGIN_ENABLED: + handler = get_handler() + handler.setup_method_pre(item) + + +def pytest_runtest_logreport(report): + if PLUGIN_ENABLED: + handler = get_handler() + handler.add_report(report) + + +def pytest_unconfigure(config): + if PLUGIN_ENABLED and config.option.atf_file: + handler = get_handler() + handler.write_report() |