Adding tests.

This commit is contained in:
Gareth J. Greenaway 2023-10-02 12:57:15 -07:00
parent f9e5029ae9
commit 08e4057148
No known key found for this signature in database
GPG key ID: 10B62F8A7CAD7A41
2 changed files with 121 additions and 12 deletions

View file

@ -106,7 +106,7 @@ STATE_RUNTIME_KEYWORDS = frozenset(
"__env__",
"__sls__",
"__id__",
"__included__",
"__sls_included_from__",
"__orchestration_jid__",
"__pub_user",
"__pub_arg",
@ -649,8 +649,8 @@ class Compiler:
chunk["__sls__"] = body["__sls__"]
if "__env__" in body:
chunk["__env__"] = body["__env__"]
if "__included__" in body:
chunk["__included__"] = body["__included__"]
if "__sls_included_from__" in body:
chunk["__sls_included_from__"] = body["__sls_included_from__"]
chunk["__id__"] = name
for arg in run:
if isinstance(arg, str):
@ -1679,8 +1679,8 @@ class State:
chunk["__sls__"] = body["__sls__"]
if "__env__" in body:
chunk["__env__"] = body["__env__"]
if "__included__" in body:
chunk["__included__"] = body["__included__"]
if "__sls_included_from__" in body:
chunk["__sls_included_from__"] = body["__sls_included_from__"]
chunk["__id__"] = name
for arg in run:
if isinstance(arg, str):
@ -2892,7 +2892,7 @@ class State:
# Allow requisite tracking of entire sls files
if fnmatch.fnmatch(
chunk["__sls__"], req_val
) or req_val in chunk.get("__included__", []):
) or req_val in chunk.get("__sls_included_from__", []):
found = True
reqs[r_state].append(chunk)
continue
@ -3109,7 +3109,7 @@ class State:
# Allow requisite tracking of entire sls files
if fnmatch.fnmatch(
chunk["__sls__"], req_val
) or req_val in chunk.get("__included__", []):
) or req_val in chunk.get("__sls_included_from__", []):
if requisite == "prereq":
chunk["__prereq__"] = True
reqs.append(chunk)
@ -4410,11 +4410,12 @@ class BaseHighState:
context=context,
)
if nstate:
if empty_state_dict:
for item in nstate:
if "__included__" not in nstate[item]:
nstate[item]["__included__"] = []
nstate[item]["__included__"].append(sls)
for item in nstate:
if "__sls_included_from__" not in nstate[item]:
nstate[item]["__sls_included_from__"] = []
nstate[item]["__sls_included_from__"].append(
sls
)
self.merge_included_states(state, nstate, errors)
state.update(nstate)

View file

@ -38,3 +38,111 @@ def test_issue_64111(salt_master, salt_minion, salt_call_cli):
with tf("common/file1.sls", file1_sls):
ret = salt_call_cli.run("state.apply", "common")
assert ret.returncode == 0
@pytest.mark.slow_test
def test_issue_65080(salt_master, salt_minion, salt_call_cli):
"""
Test scenario when a state includes another state that only includes a third state
"""
only_include_sls = """
include:
- includetest.another-include
"""
another_include_sls = """
/tmp/from-test-file.txt:
file.managed:
- contents: Hello from test-file.sls
"""
init_sls = """
include:
- includetest.only-include
/tmp/from-init.txt:
file.managed:
- contents: Hello from init.sls
- require:
- sls: includetest.only-include
"""
tf = salt_master.state_tree.base.temp_file
with tf("includetest/init.sls", init_sls):
with tf("includetest/another-include.sls", another_include_sls):
with tf("includetest/only-include.sls", only_include_sls):
ret = salt_call_cli.run("state.apply", "includetest")
assert ret.returncode == 0
ret = salt_call_cli.run("state.show_low_sls", "includetest")
assert "__sls_included_from__" in ret.data[0]
assert "includetest.only-include" in ret.data[0]["__included_from__"]
@pytest.mark.slow_test
def test_issue_65080_multiple_includes(salt_master, salt_minion, salt_call_cli):
"""
Test scenario when a state includes another state that only includes a third state
"""
only_include_one_sls = """
include:
- includetest.include-one
"""
only_include_two_sls = """
include:
- includetest.include-two
"""
include_one_sls = """
/tmp/from-test-file1.txt:
file.managed:
- contents: Hello from test-file.sls
"""
include_two_sls = """
/tmp/from-test-file2.txt:
file.managed:
- contents: Hello from test-file.sls
"""
init_sls = """
include:
- includetest.only-include-one
- includetest.only-include-two
/tmp/from-init.txt:
file.managed:
- contents: Hello from init.sls
- require:
- sls: includetest.only-include-one
- sls: includetest.only-include-two
"""
tf = salt_master.state_tree.base.temp_file
with tf("includetest/init.sls", init_sls):
with tf("includetest/include-one.sls", include_one_sls), tf(
"includetest/include-two.sls", include_two_sls
):
with tf("includetest/only-include-one.sls", only_include_one_sls), tf(
"includetest/only-include-two.sls", only_include_two_sls
):
ret = salt_call_cli.run("state.apply", "includetest")
assert ret.returncode == 0
ret = salt_call_cli.run("state.show_low_sls", "includetest")
assert "__sls_included_from__" in ret.data[0]
assert (
"includetest.only-include-one"
in ret.data[0]["__sls_included_from__"]
)
assert "__sls_included_from__" in ret.data[1]
assert (
"includetest.only-include-two"
in ret.data[1]["__sls_included_from__"]
)