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>
This commit is contained in:
Cole Robinson 2020-07-17 15:59:11 -04:00
parent 61a947d667
commit f6c6f033d9
3 changed files with 67 additions and 69 deletions

View File

@ -5,6 +5,9 @@ import os
import pytest import pytest
import tests
from tests.utils import TESTCONFIG
def pytest_addoption(parser): def pytest_addoption(parser):
parser.addoption("--uitests", action="store_true", default=False, parser.addoption("--uitests", action="store_true", default=False,
@ -70,18 +73,29 @@ def pytest_collection_modifyitems(config, items):
if not find_items("test_urls.py"): if not find_items("test_urls.py"):
# Don't setup urlfetcher mocking for test_urls.py # Don't setup urlfetcher mocking for test_urls.py
# All other tests need it # All other tests need it
import tests.urlfetcher_mock from tests import urlfetcher_mock
tests.urlfetcher_mock.setup_mock() urlfetcher_mock.setup_mock()
if find_items("test_inject.py"): if find_items("test_inject.py"):
if not config.getoption("--capture") == "no": if not config.getoption("--capture") == "no":
pytest.fail("test_inject.py requires `pytest --capture=no`") pytest.fail("test_inject.py requires `pytest --capture=no`")
def pytest_configure(config): @pytest.hookimpl(tryfirst=True, hookwrapper=True)
import tests def pytest_runtest_makereport(item, call):
from tests.utils import TESTCONFIG """
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_iso_only = config.getoption("--urls-iso-only")
TESTCONFIG.url_only = config.getoption("--urls-url-only") TESTCONFIG.url_only = config.getoption("--urls-url-only")
TESTCONFIG.url_skip_libosinfo = config.getoption("--urls-skip-libosinfo") TESTCONFIG.url_skip_libosinfo = config.getoption("--urls-skip-libosinfo")

View File

@ -2,38 +2,20 @@
# See the COPYING file in the top-level directory. # See the COPYING file in the top-level directory.
import traceback import traceback
import unittest
import pytest
import tests.utils
import virtinst import virtinst
from virtinst import log
_do_skip = None def _skipIfTestsFailed():
if tests.utils.TESTCONFIG.skip_checkprops:
pytest.skip("Other tests failed or were skipped, don't do prop checks")
class CheckPropsTest(unittest.TestCase): def testCheckXMLBuilderProps():
maxDiff = None
def _skipIfTestsFailed(self):
# pylint: disable=protected-access
# Access to protected member, needed to unittest stuff
global _do_skip
if _do_skip is None:
_do_skip = False
try:
# Accessing an internal detail of unittest, but it's only
# to prevent incorrect output in the case that other tests
# failed or were skipped, which can give a false positive here
result = self._outcome.result
_do_skip = bool(
result.errors or result.failures or result.skipped)
except Exception:
log.debug("unittest skip hack failed", exc_info=True)
if _do_skip:
self.skipTest("skipping as other tests failed/skipped")
def testCheckXMLBuilderProps(self):
""" """
If a certain environment variable is set, XMLBuilder tracks If a certain environment variable is set, XMLBuilder tracks
every property registered and every one of those that is every property registered and every one of those that is
@ -41,14 +23,14 @@ class CheckPropsTest(unittest.TestCase):
If no tests failed or were skipped, we check to ensure the If no tests failed or were skipped, we check to ensure the
test suite is tickling every XML property test suite is tickling every XML property
""" """
self._skipIfTestsFailed() _skipIfTestsFailed()
# pylint: disable=protected-access # pylint: disable=protected-access
fail = [p for p in virtinst.xmlbuilder._allprops fail = [p for p in virtinst.xmlbuilder._allprops
if p not in virtinst.xmlbuilder._seenprops] if p not in virtinst.xmlbuilder._seenprops]
msg = None msg = None
try: try:
self.assertEqual([], fail) assert fail == []
except AssertionError: except AssertionError:
msg = "".join(traceback.format_exc()) + "\n\n" msg = "".join(traceback.format_exc()) + "\n\n"
msg += ("This means that there are XML properties that are\n" msg += ("This means that there are XML properties that are\n"
@ -58,14 +40,15 @@ class CheckPropsTest(unittest.TestCase):
"Look into extending test_cli.py and/or test_xmlparse.py.") "Look into extending test_cli.py and/or test_xmlparse.py.")
if msg: if msg:
self.fail(msg) pytest.fail(msg)
def testCheckCLISuboptions(self):
def testCheckCLISuboptions():
""" """
Track which command line suboptions and aliases we actually hit with Track which command line suboptions and aliases we actually hit with
the test suite. the test suite.
""" """
self._skipIfTestsFailed() _skipIfTestsFailed()
# pylint: disable=protected-access # pylint: disable=protected-access
from virtinst import cli from virtinst import cli
@ -76,4 +59,4 @@ class CheckPropsTest(unittest.TestCase):
msg += ("These command line arguments or aliases are not checked\n" msg += ("These command line arguments or aliases are not checked\n"
"in the test suite. Please test them.\n" "in the test suite. Please test them.\n"
"Total unchecked arguments: %s" % len(unchecked)) "Total unchecked arguments: %s" % len(unchecked))
self.fail(msg) pytest.fail(msg)

View File

@ -25,6 +25,7 @@ class _TestConfig(object):
def __init__(self): def __init__(self):
self.regenerate_output = False self.regenerate_output = False
self.debug = False self.debug = False
self.skip_checkprops = False
self.url_only = False self.url_only = False
self.url_iso_only = False self.url_iso_only = False