virt-manager/tests/conftest.py
Cole Robinson f6c6f033d9 tests: Move checkprops.py magic skipping to pytest
We want to skip these tests if previous tests failed or were skipped,
but current impl depends on unittest specifics. Move it to pytest

Signed-off-by: Cole Robinson <crobinso@redhat.com>
2020-07-17 16:47:58 -04:00

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()