mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Increase code coverage on state module saltmod
, function parallel_runners
Signed-off-by: Pedro Algarvio <palgarvio@vmware.com>
This commit is contained in:
parent
2c3385524e
commit
40be4e727b
1 changed files with 253 additions and 0 deletions
253
tests/pytests/unit/states/saltmod/test_parallel_runners.py
Normal file
253
tests/pytests/unit/states/saltmod/test_parallel_runners.py
Normal file
|
@ -0,0 +1,253 @@
|
|||
import pytest
|
||||
|
||||
import salt.exceptions
|
||||
import salt.states.saltmod as saltmod
|
||||
from tests.support.mock import MagicMock, patch
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def configure_loader_modules(minion_opts):
|
||||
return {
|
||||
saltmod: {
|
||||
"__env__": "base",
|
||||
"__opts__": minion_opts,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_runners():
|
||||
name = "runner-name"
|
||||
runner_1 = "runner-1"
|
||||
runner_1_ret = {
|
||||
"jid": "20170406104341210934",
|
||||
"retcode": 0,
|
||||
"ret": {
|
||||
"test_|-notify_me_|-this is a name 1_|-show_notification": {
|
||||
"comment": f"Notify me: {runner_1}",
|
||||
"name": "this is a name 1",
|
||||
"start_time": "10:43:41.487565",
|
||||
"result": True,
|
||||
"duration": 0.35,
|
||||
"__run_num__": 0,
|
||||
"__sls__": "demo",
|
||||
"changes": {},
|
||||
"__id__": "notify_me",
|
||||
}
|
||||
},
|
||||
"failed": True,
|
||||
"out": "highstate",
|
||||
}
|
||||
|
||||
expected = {
|
||||
"name": name,
|
||||
"changes": {
|
||||
"ret": {
|
||||
runner_1: runner_1_ret,
|
||||
}
|
||||
},
|
||||
"result": True,
|
||||
"comment": "All runner functions executed successfully.",
|
||||
}
|
||||
mock = MagicMock(side_effect=[{"return": runner_1_ret}])
|
||||
with patch.dict(saltmod.__salt__, {"saltutil.runner": mock}):
|
||||
ret = saltmod.parallel_runners(name, runner_1)
|
||||
assert ret == expected
|
||||
|
||||
runner_2 = "runner-2"
|
||||
runner_2_ret = {
|
||||
"jid": "20170406104341210934",
|
||||
"retcode": 0,
|
||||
"ret": {
|
||||
"test_|-notify_me_|-this is a name 2_|-show_notification": {
|
||||
"comment": f"Notify me: {runner_2}",
|
||||
"name": "this is a name 2",
|
||||
"start_time": "10:43:41.487565",
|
||||
"result": True,
|
||||
"duration": 0.35,
|
||||
"__run_num__": 0,
|
||||
"__sls__": "demo",
|
||||
"changes": {},
|
||||
"__id__": "notify_me",
|
||||
}
|
||||
},
|
||||
"failed": True,
|
||||
"out": "highstate",
|
||||
}
|
||||
expected["changes"]["ret"][runner_2] = runner_2_ret
|
||||
mock = MagicMock(side_effect=[{"return": runner_1_ret}, {"return": runner_2_ret}])
|
||||
with patch.dict(saltmod.__salt__, {"saltutil.runner": mock}):
|
||||
ret = saltmod.parallel_runners(
|
||||
name, {runner_1: {"name": name}, runner_2: {"name": name}}
|
||||
)
|
||||
assert ret == expected
|
||||
|
||||
expected = {
|
||||
"name": name,
|
||||
"result": False,
|
||||
"changes": {},
|
||||
"comment": "The runners parameter must be a string or dict.",
|
||||
}
|
||||
ret = saltmod.parallel_runners(name, [runner_1, runner_2])
|
||||
assert ret == expected
|
||||
|
||||
|
||||
def test_exception():
|
||||
name = "runner-name"
|
||||
runner_1 = "runner-1"
|
||||
runner_1_ret = {
|
||||
"jid": "20170406104341210934",
|
||||
"retcode": 0,
|
||||
"ret": {
|
||||
"test_|-notify_me_|-this is a name_|-show_notification": {
|
||||
"comment": "Notify me",
|
||||
"name": "this is a name",
|
||||
"start_time": "10:43:41.487565",
|
||||
"result": True,
|
||||
"duration": 0.35,
|
||||
"__run_num__": 0,
|
||||
"__sls__": "demo",
|
||||
"changes": {},
|
||||
"__id__": "notify_me",
|
||||
}
|
||||
},
|
||||
"failed": True,
|
||||
"out": "highstate",
|
||||
}
|
||||
|
||||
expected = {
|
||||
"name": name,
|
||||
"result": False,
|
||||
"changes": {},
|
||||
"comment": "One of the runners raised an exception: An Exception!",
|
||||
"success": False,
|
||||
}
|
||||
runner_2 = "runner-2"
|
||||
mock = MagicMock(
|
||||
side_effect=[
|
||||
{"return": runner_1_ret},
|
||||
salt.exceptions.SaltException("An Exception!"),
|
||||
]
|
||||
)
|
||||
with patch.dict(saltmod.__salt__, {"saltutil.runner": mock}):
|
||||
ret = saltmod.parallel_runners(
|
||||
name, {runner_1: {"name": name}, runner_2: {"name": name}}
|
||||
)
|
||||
assert ret == expected
|
||||
|
||||
|
||||
def test_failed():
|
||||
|
||||
name = "runner-name"
|
||||
runner_1 = "runner-1"
|
||||
runner_1_ret = {
|
||||
"jid": "20170406104341210934",
|
||||
"retcode": 0,
|
||||
"ret": {
|
||||
"test_|-notify_me_|-this is a name 1_|-show_notification": {
|
||||
"comment": f"Notify me: {runner_1}",
|
||||
"name": "this is a name 1",
|
||||
"start_time": "10:43:41.487565",
|
||||
"result": True,
|
||||
"duration": 0.35,
|
||||
"__run_num__": 0,
|
||||
"__sls__": "demo",
|
||||
"changes": {"foo": "bar"},
|
||||
"__id__": "notify_me",
|
||||
}
|
||||
},
|
||||
"failed": True,
|
||||
"out": "highstate",
|
||||
"exit_code": 1,
|
||||
}
|
||||
runner_2 = "runner-2"
|
||||
runner_2_ret = {
|
||||
"jid": "20170406104341210934",
|
||||
"retcode": 1,
|
||||
"ret": {
|
||||
"test_|-notify_me_|-this is a name 2_|-show_notification": {
|
||||
"comment": f"Notify me: {runner_2}",
|
||||
"name": "this is a name 2",
|
||||
"start_time": "10:43:41.487565",
|
||||
"result": False,
|
||||
"duration": 0.35,
|
||||
"__run_num__": 0,
|
||||
"__sls__": "demo",
|
||||
"changes": {},
|
||||
"__id__": "notify_me",
|
||||
}
|
||||
},
|
||||
"failed": True,
|
||||
"out": "highstate",
|
||||
"exit_code": 0,
|
||||
}
|
||||
|
||||
expected = {
|
||||
"name": name,
|
||||
"changes": {
|
||||
"ret": {
|
||||
runner_1: runner_1_ret,
|
||||
}
|
||||
},
|
||||
"result": False,
|
||||
"comment": f"Runner {runner_1} failed.",
|
||||
}
|
||||
mock = MagicMock(side_effect=[{"return": runner_1_ret}])
|
||||
with patch.dict(saltmod.__salt__, {"saltutil.runner": mock}):
|
||||
ret = saltmod.parallel_runners(name, runner_1)
|
||||
assert ret == expected
|
||||
|
||||
expected["changes"]["ret"][runner_2] = runner_2_ret
|
||||
mock = MagicMock(side_effect=[{"return": runner_1_ret}, {"return": runner_2_ret}])
|
||||
with patch.dict(saltmod.__salt__, {"saltutil.runner": mock}):
|
||||
ret = saltmod.parallel_runners(
|
||||
name, {runner_1: {"name": name}, runner_2: {"name": name}}
|
||||
)
|
||||
assert ret == expected
|
||||
|
||||
runner_3 = "runner-3"
|
||||
runner_3_ret = {
|
||||
"jid": "20170406104341210934",
|
||||
"retcode": 1,
|
||||
"ret": {
|
||||
"test_|-notify_me_|-this is a name 2_|-show_notification": {
|
||||
"comment": f"Notify me: {runner_2}",
|
||||
"name": "this is a name 2",
|
||||
"start_time": "10:43:41.487565",
|
||||
"result": False,
|
||||
"duration": 0.35,
|
||||
"__run_num__": 0,
|
||||
"__sls__": "demo",
|
||||
"changes": {},
|
||||
"__id__": "notify_me",
|
||||
}
|
||||
},
|
||||
"failed": True,
|
||||
"out": "highstate",
|
||||
"exit_code": 1,
|
||||
}
|
||||
|
||||
expected["changes"]["ret"][runner_3] = runner_3_ret
|
||||
expected.pop("comment")
|
||||
mock = MagicMock(
|
||||
side_effect=[
|
||||
{"return": runner_1_ret},
|
||||
{"return": runner_2_ret},
|
||||
{"return": runner_3_ret},
|
||||
]
|
||||
)
|
||||
with patch.dict(saltmod.__salt__, {"saltutil.runner": mock}):
|
||||
ret = saltmod.parallel_runners(
|
||||
name,
|
||||
{
|
||||
runner_1: {"name": name},
|
||||
runner_2: {"name": name},
|
||||
runner_3: {"name": name},
|
||||
},
|
||||
)
|
||||
ret_comment = ret.pop("comment")
|
||||
assert ret == expected
|
||||
assert "Runners " in ret_comment
|
||||
assert " failed." in ret_comment
|
||||
assert runner_1 in ret_comment
|
||||
assert runner_3 in ret_comment
|
||||
assert runner_2 not in ret_comment
|
Loading…
Add table
Reference in a new issue