107 lines
3.6 KiB
Python
107 lines
3.6 KiB
Python
# This work is licensed under the GNU GPLv2 or later.
|
|
# See the COPYING file in the top-level directory.
|
|
|
|
import os
|
|
|
|
import pytest
|
|
|
|
import tests
|
|
from tests.utils import TESTCONFIG
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
parser.addoption("--uitests", action="store_true", default=False,
|
|
help="Run dogtail UI tests")
|
|
|
|
parser.addoption("--regenerate-output",
|
|
action="store_true", default=False,
|
|
help="Regenerate test output")
|
|
|
|
# test_urls options
|
|
parser.addoption('--urls-skip-libosinfo',
|
|
action="store_true", default=False,
|
|
help=("For test_urls.py, "
|
|
"Don't use libosinfo for media/tree detection, "
|
|
"Use our internal detection logic."))
|
|
parser.addoption("--urls-force-libosinfo",
|
|
action="store_true", default=False,
|
|
help=("For test_urls.py, Only use libosinfo for "
|
|
"media/tree detection. This will skip "
|
|
"some cases that are known not to work, "
|
|
"like debian/ubuntu tree detection."))
|
|
parser.addoption("--urls-iso-only",
|
|
action="store_true", default=False,
|
|
help=("For test_urls.py, Only run iso tests."))
|
|
parser.addoption("--urls-url-only",
|
|
action="store_true", default=False,
|
|
help=("For test_urls.py, Only run url tests"))
|
|
|
|
|
|
def pytest_ignore_collect(path, config):
|
|
uitests_requested = config.getoption("--uitests")
|
|
|
|
# Unless explicitly requested, ignore these tests
|
|
if "test_dist.py" in str(path):
|
|
return True
|
|
if "test_urls.py" in str(path):
|
|
return True
|
|
if "test_inject.py" in str(path):
|
|
return True
|
|
|
|
uitest_file = "tests/uitests" in str(path)
|
|
if uitest_file and not uitests_requested:
|
|
return True
|
|
if not uitest_file and uitests_requested:
|
|
return True
|
|
|
|
|
|
def pytest_collection_modifyitems(config, items):
|
|
def find_items(basename):
|
|
return [i for i in items
|
|
if os.path.basename(i.fspath) == basename]
|
|
|
|
# Move test_cli cases to the end, because they are slow
|
|
# Move test_checkprops to the very end, because it needs to run
|
|
# after everything else to give proper results
|
|
cliitems = find_items("test_cli.py")
|
|
chkitems = find_items("test_checkprops.py")
|
|
|
|
for i in cliitems + chkitems:
|
|
items.remove(i)
|
|
items.append(i)
|
|
|
|
if not find_items("test_urls.py"):
|
|
# Don't setup urlfetcher mocking for test_urls.py
|
|
# All other tests need it
|
|
from tests import urlfetcher_mock
|
|
urlfetcher_mock.setup_mock()
|
|
|
|
if find_items("test_inject.py"):
|
|
if not config.getoption("--capture") == "no":
|
|
pytest.fail("test_inject.py requires `pytest --capture=no`")
|
|
|
|
|
|
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
|
|
def pytest_runtest_makereport(item, call):
|
|
"""
|
|
Hooks into test reporting so we can track if any tests didn't
|
|
pass, so we can skip checkprops checks which require everything to pass.
|
|
"""
|
|
ignore = item
|
|
ignore = call
|
|
outcome = yield
|
|
testreport = outcome.get_result()
|
|
if not testreport.passed:
|
|
TESTCONFIG.skip_checkprops = True
|
|
|
|
|
|
def pytest_configure(config):
|
|
TESTCONFIG.url_iso_only = config.getoption("--urls-iso-only")
|
|
TESTCONFIG.url_only = config.getoption("--urls-url-only")
|
|
TESTCONFIG.url_skip_libosinfo = config.getoption("--urls-skip-libosinfo")
|
|
TESTCONFIG.url_force_libosinfo = config.getoption("--urls-force-libosinfo")
|
|
TESTCONFIG.regenerate_output = config.getoption("--regenerate-output")
|
|
|
|
TESTCONFIG.debug = config.getoption("--log-level") == "debug"
|
|
tests.setup_logging()
|