Speed up our skip helpers

This commit is contained in:
Pedro Algarvio 2020-05-06 10:52:13 +01:00 committed by Daniel Wozniak
parent b7f99d180f
commit 83e0c6e929

View file

@ -107,27 +107,21 @@ def destructiveTest(caller):
if RUNTIME_VARS.PYTEST_SESSION:
setattr(caller, "__destructive_test__", True)
if inspect.isclass(caller):
# We're decorating a class
old_setup = getattr(caller, "setUp", None)
if os.environ.get("DESTRUCTIVE_TESTS", "False").lower() == "false":
reason = "Destructive tests are disabled"
def setUp(self, *args, **kwargs):
if os.environ.get("DESTRUCTIVE_TESTS", "False").lower() == "false":
self.skipTest("Destructive tests are disabled")
if old_setup is not None:
old_setup(self, *args, **kwargs)
if not isinstance(caller, type):
caller.setUp = setUp
return caller
@functools.wraps(caller)
def skip_wrapper(*args, **kwargs):
raise SkipTest(reason)
# We're simply decorating functions
@functools.wraps(caller)
def wrap(cls, *args, **kwargs):
if os.environ.get("DESTRUCTIVE_TESTS", "False").lower() == "false":
cls.skipTest("Destructive tests are disabled")
return caller(cls, *args, **kwargs)
caller = skip_wrapper
return wrap
caller.__unittest_skip__ = True
caller.__unittest_skip_why__ = reason
return caller
def expensiveTest(caller):
@ -149,27 +143,21 @@ def expensiveTest(caller):
if RUNTIME_VARS.PYTEST_SESSION:
setattr(caller, "__expensive_test__", True)
if inspect.isclass(caller):
# We're decorating a class
old_setup = getattr(caller, "setUp", None)
if os.environ.get("EXPENSIVE_TESTS", "False").lower() == "false":
reason = "Expensive tests are disabled"
def setUp(self, *args, **kwargs):
if os.environ.get("EXPENSIVE_TESTS", "False").lower() == "false":
self.skipTest("Expensive tests are disabled")
if old_setup is not None:
old_setup(self, *args, **kwargs)
if not isinstance(caller, type):
caller.setUp = setUp
return caller
@functools.wraps(caller)
def skip_wrapper(*args, **kwargs):
raise SkipTest(reason)
# We're simply decorating functions
@functools.wraps(caller)
def wrap(cls, *args, **kwargs):
if os.environ.get("EXPENSIVE_TESTS", "False").lower() == "false":
cls.skipTest("Expensive tests are disabled")
return caller(cls, *args, **kwargs)
caller = skip_wrapper
return wrap
caller.__unittest_skip__ = True
caller.__unittest_skip_why__ = reason
return caller
def slowTest(caller):
@ -1114,33 +1102,23 @@ def runs_on(grains=None, **kwargs):
Skip the test if grains don't match the values passed into **kwargs
if a kwarg value is a list then skip if the grains don't match any item in the list
"""
def decorator(caller):
@functools.wraps(caller)
def wrapper(cls):
reason = kwargs.pop("reason", None)
for kw, value in kwargs.items():
if isinstance(value, list):
if not any(
str(grains.get(kw)).lower() != str(v).lower() for v in value
):
if reason is None:
reason = "This test does not run on {}={}".format(
kw, grains.get(kw)
)
raise SkipTest(reason)
else:
if str(grains.get(kw)).lower() != str(value).lower():
if reason is None:
reason = "This test runs on {}={}, not {}".format(
kw, value, grains.get(kw)
)
raise SkipTest(reason)
return caller(cls)
return wrapper
return decorator
reason = kwargs.pop("reason", None)
for kw, value in kwargs.items():
if isinstance(value, list):
if not any(str(grains.get(kw)).lower() != str(v).lower() for v in value):
if reason is None:
reason = "This test does not run on {}={}".format(
kw, grains.get(kw)
)
return skip(reason)
else:
if str(grains.get(kw)).lower() != str(value).lower():
if reason is None:
reason = "This test runs on {}={}, not {}".format(
kw, value, grains.get(kw)
)
return skip(reason)
return _id
@requires_system_grains
@ -1150,33 +1128,23 @@ def not_runs_on(grains=None, **kwargs):
Skip the test if any grains match the values passed into **kwargs
if a kwarg value is a list then skip if the grains match any item in the list
"""
def decorator(caller):
@functools.wraps(caller)
def wrapper(cls):
reason = kwargs.pop("reason", None)
for kw, value in kwargs.items():
if isinstance(value, list):
if any(
str(grains.get(kw)).lower() == str(v).lower() for v in value
):
if reason is None:
reason = "This test does not run on {}={}".format(
kw, grains.get(kw)
)
raise SkipTest(reason)
else:
if str(grains.get(kw)).lower() == str(value).lower():
if reason is None:
reason = "This test does not run on {}={}, got {}".format(
kw, value, grains.get(kw)
)
raise SkipTest(reason)
return caller(cls)
return wrapper
return decorator
reason = kwargs.pop("reason", None)
for kw, value in kwargs.items():
if isinstance(value, list):
if any(str(grains.get(kw)).lower() == str(v).lower() for v in value):
if reason is None:
reason = "This test does not run on {}={}".format(
kw, grains.get(kw)
)
return skip(reason)
else:
if str(grains.get(kw)).lower() == str(value).lower():
if reason is None:
reason = "This test does not run on {}={}, got {}".format(
kw, value, grains.get(kw)
)
return skip(reason)
return _id
def _check_required_sminion_attributes(sminion_attr, *required_items):
@ -1222,32 +1190,9 @@ def requires_salt_states(*names):
.. versionadded:: 3000
"""
not_available = _check_required_sminion_attributes("states", *names)
def decorator(caller):
if inspect.isclass(caller):
# We're decorating a class
old_setup = getattr(caller, "setUp", None)
def setUp(self, *args, **kwargs):
if not_available:
raise SkipTest("Unavailable salt states: {}".format(*not_available))
if old_setup is not None:
old_setup(self, *args, **kwargs)
caller.setUp = setUp
return caller
# We're simply decorating functions
@functools.wraps(caller)
def wrapper(cls):
if not_available:
raise SkipTest("Unavailable salt states: {}".format(*not_available))
return caller(cls)
return wrapper
return decorator
if not_available:
return skip("Unavailable salt states: {}".format(*not_available))
return _id
def requires_salt_modules(*names):
@ -1257,33 +1202,9 @@ def requires_salt_modules(*names):
.. versionadded:: 0.5.2
"""
not_available = _check_required_sminion_attributes("functions", *names)
def decorator(caller):
if inspect.isclass(caller):
# We're decorating a class
old_setup = getattr(caller, "setUp", None)
def setUp(self, *args, **kwargs):
if not_available:
raise SkipTest(
"Unavailable salt modules: {}".format(*not_available)
)
if old_setup is not None:
old_setup(self, *args, **kwargs)
caller.setUp = setUp
return caller
# We're simply decorating functions
@functools.wraps(caller)
def wrapper(cls):
if not_available:
raise SkipTest("Unavailable salt modules: {}".format(*not_available))
return caller(cls)
return wrapper
return decorator
if not_available:
return skip("Unavailable salt modules: {}".format(*not_available))
return _id
def skip_if_binaries_missing(*binaries, **kwargs):