mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Implement the requires_salt_states
marker
This commit is contained in:
parent
6170458fc6
commit
0c225de432
1 changed files with 50 additions and 2 deletions
|
@ -266,6 +266,10 @@ def pytest_configure(config):
|
|||
"markers",
|
||||
"requires_salt_modules(*required_module_names): Skip if at least one module is not available.",
|
||||
)
|
||||
config.addinivalue_line(
|
||||
"markers",
|
||||
"requires_salt_states(*required_state_names): Skip if at least one state module is not available.",
|
||||
)
|
||||
config.addinivalue_line(
|
||||
"markers", "windows_whitelisted: Mark test as whitelisted to run under Windows"
|
||||
)
|
||||
|
@ -654,9 +658,9 @@ def pytest_runtest_setup(item):
|
|||
available_modules = list(sminion.functions)
|
||||
not_available_modules = set()
|
||||
try:
|
||||
cached_not_available_modules = sminion.__not_availiable_modules__
|
||||
cached_not_available_modules = sminion.__not_available_modules__
|
||||
except AttributeError:
|
||||
cached_not_available_modules = sminion.__not_availiable_modules__ = set()
|
||||
cached_not_available_modules = sminion.__not_available_modules__ = set()
|
||||
|
||||
if cached_not_available_modules:
|
||||
for not_available_module in cached_not_available_modules:
|
||||
|
@ -684,6 +688,50 @@ def pytest_runtest_setup(item):
|
|||
)
|
||||
)
|
||||
|
||||
requires_salt_states_marker = item.get_closest_marker("requires_salt_states")
|
||||
if requires_salt_states_marker is not None:
|
||||
required_salt_states = requires_salt_states_marker.args
|
||||
if len(required_salt_states) == 1 and isinstance(
|
||||
required_salt_states[0], (list, tuple, set)
|
||||
):
|
||||
required_salt_states = required_salt_states[0]
|
||||
required_salt_states = set(required_salt_states)
|
||||
sminion = create_sminion()
|
||||
available_modules = list(sminion.functions)
|
||||
not_available_states = set()
|
||||
try:
|
||||
cached_not_available_states = sminion.__not_available_states__
|
||||
except AttributeError:
|
||||
cached_not_available_states = sminion.__not_available_states__ = set()
|
||||
|
||||
if cached_not_available_states:
|
||||
for not_available_module in cached_not_available_states:
|
||||
if not_available_module in required_salt_states:
|
||||
not_available_states.add(not_available_module)
|
||||
required_salt_states.remove(not_available_module)
|
||||
|
||||
for required_state_name in required_salt_states:
|
||||
search_name = required_state_name
|
||||
if "." not in search_name:
|
||||
search_name += ".*"
|
||||
if not fnmatch.filter(available_modules, search_name):
|
||||
not_available_states.add(required_state_name)
|
||||
cached_not_available_states.add(required_state_name)
|
||||
|
||||
if not_available_states:
|
||||
item._skipped_by_mark = True
|
||||
if len(not_available_states) == 1:
|
||||
pytest.skip(
|
||||
"Salt state module '{}' is not available".format(
|
||||
*not_available_states
|
||||
)
|
||||
)
|
||||
pytest.skip(
|
||||
"Salt state modules not available: {}".format(
|
||||
", ".join(not_available_states)
|
||||
)
|
||||
)
|
||||
|
||||
if salt.utils.platform.is_windows():
|
||||
if not item.fspath.fnmatch(os.path.join(CODE_DIR, "tests", "unit", "*")):
|
||||
# Unit tests are whitelisted on windows by default, so, we're only
|
||||
|
|
Loading…
Add table
Reference in a new issue