mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Fixing rabbitmq.list_user_permissions to ensure we are returning a permission list with three elements even when some values are empty.
This commit is contained in:
parent
971dfb43fb
commit
caa72102c8
3 changed files with 850 additions and 915 deletions
|
@ -1,11 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Module to provide RabbitMQ compatibility to Salt.
|
||||
Todo: A lot, need to add cluster support, logging, and minion configuration
|
||||
data.
|
||||
"""
|
||||
# Import Python libs
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
@ -13,16 +10,12 @@ import random
|
|||
import re
|
||||
import string
|
||||
|
||||
# Import Salt libs
|
||||
import salt.utils.itertools
|
||||
import salt.utils.json
|
||||
import salt.utils.path
|
||||
import salt.utils.platform
|
||||
import salt.utils.user
|
||||
from salt.exceptions import CommandExecutionError, SaltInvocationError
|
||||
|
||||
# Import 3rd-party libs
|
||||
from salt.ext import six
|
||||
from salt.ext.six.moves import range
|
||||
from salt.utils.versions import LooseVersion as _LooseVersion
|
||||
|
||||
|
@ -53,10 +46,10 @@ def __virtual__():
|
|||
(dir_path, value_type) = winreg.QueryValueEx(key, "Install_Dir")
|
||||
if value_type != winreg.REG_SZ:
|
||||
raise TypeError(
|
||||
"Invalid RabbitMQ Server directory type: {0}".format(value_type)
|
||||
"Invalid RabbitMQ Server directory type: {}".format(value_type)
|
||||
)
|
||||
if not os.path.isdir(dir_path):
|
||||
raise IOError("RabbitMQ directory not found: {0}".format(dir_path))
|
||||
raise OSError("RabbitMQ directory not found: {}".format(dir_path))
|
||||
subdir_match = ""
|
||||
for name in os.listdir(dir_path):
|
||||
if name.startswith("rabbitmq_server-"):
|
||||
|
@ -65,10 +58,8 @@ def __virtual__():
|
|||
if os.path.isdir(subdir_path) and subdir_path > subdir_match:
|
||||
subdir_match = subdir_path
|
||||
if not subdir_match:
|
||||
raise IOError(
|
||||
'"rabbitmq_server-*" subdirectory not found in: {0}'.format(
|
||||
dir_path
|
||||
)
|
||||
raise OSError(
|
||||
'"rabbitmq_server-*" subdirectory not found in: {}'.format(dir_path)
|
||||
)
|
||||
RABBITMQCTL = os.path.join(subdir_match, "sbin", "rabbitmqctl.bat")
|
||||
RABBITMQ_PLUGINS = os.path.join(
|
||||
|
@ -92,24 +83,24 @@ def _check_response(response):
|
|||
if isinstance(response, dict):
|
||||
if response["retcode"] != 0 or response["stderr"]:
|
||||
raise CommandExecutionError(
|
||||
"RabbitMQ command failed: {0}".format(response["stderr"])
|
||||
"RabbitMQ command failed: {}".format(response["stderr"])
|
||||
)
|
||||
else:
|
||||
if "Error" in response:
|
||||
raise CommandExecutionError("RabbitMQ command failed: {0}".format(response))
|
||||
raise CommandExecutionError("RabbitMQ command failed: {}".format(response))
|
||||
|
||||
|
||||
def _format_response(response, msg):
|
||||
if isinstance(response, dict):
|
||||
if response["retcode"] != 0 or response["stderr"]:
|
||||
raise CommandExecutionError(
|
||||
"RabbitMQ command failed: {0}".format(response["stderr"])
|
||||
"RabbitMQ command failed: {}".format(response["stderr"])
|
||||
)
|
||||
else:
|
||||
response = response["stdout"]
|
||||
else:
|
||||
if "Error" in response:
|
||||
raise CommandExecutionError("RabbitMQ command failed: {0}".format(response))
|
||||
raise CommandExecutionError("RabbitMQ command failed: {}".format(response))
|
||||
return {msg: response}
|
||||
|
||||
|
||||
|
@ -125,7 +116,7 @@ def _get_rabbitmq_plugin():
|
|||
if RABBITMQ_PLUGINS is None:
|
||||
version = __salt__["pkg.version"]("rabbitmq-server").split("-")[0]
|
||||
RABBITMQ_PLUGINS = (
|
||||
"/usr/lib/rabbitmq/lib/rabbitmq_server-{0}" "/sbin/rabbitmq-plugins"
|
||||
"/usr/lib/rabbitmq/lib/rabbitmq_server-{}" "/sbin/rabbitmq-plugins"
|
||||
).format(version)
|
||||
|
||||
return RABBITMQ_PLUGINS
|
||||
|
@ -167,7 +158,7 @@ def _output_to_dict(cmdoutput, values_mapper=None):
|
|||
if isinstance(cmdoutput, dict):
|
||||
if cmdoutput["retcode"] != 0 or cmdoutput["stderr"]:
|
||||
raise CommandExecutionError(
|
||||
"RabbitMQ command failed: {0}".format(cmdoutput["stderr"])
|
||||
"RabbitMQ command failed: {}".format(cmdoutput["stderr"])
|
||||
)
|
||||
cmdoutput = cmdoutput["stdout"]
|
||||
|
||||
|
@ -386,7 +377,7 @@ def add_user(name, password=None, runas=None):
|
|||
# command,\r\noperable program or batch file.
|
||||
# Work around this by using a shell and a quoted command.
|
||||
python_shell = True
|
||||
cmd = '"{0}" add_user "{1}" "{2}"'.format(RABBITMQCTL, name, password)
|
||||
cmd = '"{}" add_user "{}" "{}"'.format(RABBITMQCTL, name, password)
|
||||
else:
|
||||
python_shell = False
|
||||
cmd = [RABBITMQCTL, "add_user", name, password]
|
||||
|
@ -456,7 +447,7 @@ def change_password(name, password, runas=None):
|
|||
# command,\r\noperable program or batch file.
|
||||
# Work around this by using a shell and a quoted command.
|
||||
python_shell = True
|
||||
cmd = '"{0}" change_password "{1}" "{2}"'.format(RABBITMQCTL, name, password)
|
||||
cmd = '"{}" change_password "{}" "{}"'.format(RABBITMQCTL, name, password)
|
||||
else:
|
||||
python_shell = False
|
||||
cmd = [RABBITMQCTL, "change_password", name, password]
|
||||
|
@ -547,9 +538,7 @@ def check_password(name, password, runas=None):
|
|||
# command,\r\noperable program or batch file.
|
||||
# Work around this by using a shell and a quoted command.
|
||||
python_shell = True
|
||||
cmd = '"{0}" authenticate_user "{1}" "{2}"'.format(
|
||||
RABBITMQCTL, name, password
|
||||
)
|
||||
cmd = '"{}" authenticate_user "{}" "{}"'.format(RABBITMQCTL, name, password)
|
||||
else:
|
||||
python_shell = False
|
||||
cmd = [RABBITMQCTL, "authenticate_user", name, password]
|
||||
|
@ -697,7 +686,12 @@ def list_user_permissions(name, runas=None):
|
|||
python_shell=False,
|
||||
)
|
||||
|
||||
return _output_to_dict(res)
|
||||
perms = _output_to_dict(res)
|
||||
for perm in perms:
|
||||
if len(perms[perm]) < 3:
|
||||
missing = ["" for i in range(0, 3 - len(perms[perm]))]
|
||||
perms[perm].extend(missing)
|
||||
return perms
|
||||
|
||||
|
||||
def set_user_tags(name, tags, runas=None):
|
||||
|
@ -782,7 +776,7 @@ def join_cluster(host, user="rabbit", ram_node=None, runas=None):
|
|||
cmd = [RABBITMQCTL, "join_cluster"]
|
||||
if ram_node:
|
||||
cmd.append("--ram")
|
||||
cmd.append("{0}@{1}".format(user, host))
|
||||
cmd.append("{}@{}".format(user, host))
|
||||
|
||||
if runas is None and not salt.utils.platform.is_windows():
|
||||
runas = salt.utils.user.get_user()
|
||||
|
@ -1013,7 +1007,7 @@ def set_policy(
|
|||
runas = salt.utils.user.get_user()
|
||||
if isinstance(definition, dict):
|
||||
definition = salt.utils.json.dumps(definition)
|
||||
if not isinstance(definition, six.string_types):
|
||||
if not isinstance(definition, str):
|
||||
raise SaltInvocationError(
|
||||
"The 'definition' argument must be a dictionary or JSON string"
|
||||
)
|
||||
|
|
829
tests/pytests/unit/modules/test_rabbitmq.py
Normal file
829
tests/pytests/unit/modules/test_rabbitmq.py
Normal file
|
@ -0,0 +1,829 @@
|
|||
"""
|
||||
:codeauthor: Jayesh Kariya <jayeshk@saltstack.com>
|
||||
"""
|
||||
|
||||
|
||||
import pytest
|
||||
import salt.modules.rabbitmq as rabbitmq
|
||||
from salt.exceptions import CommandExecutionError
|
||||
from tests.support.mock import MagicMock, patch
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def configure_loader_modules():
|
||||
return {rabbitmq: {"__context__": {"rabbitmqctl": None, "rabbitmq-plugins": None}}}
|
||||
|
||||
|
||||
# 'list_users_rabbitmq2' function tests: 1
|
||||
def test_list_users_rabbitmq2():
|
||||
"""
|
||||
Test if it return a list of users based off of rabbitmqctl user_list.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing users ...\nguest\t[administrator, user]\njustAnAdmin\t[administrator]\n",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_users() == {
|
||||
"guest": ["administrator", "user"],
|
||||
"justAnAdmin": ["administrator"],
|
||||
}
|
||||
|
||||
|
||||
# 'list_users_rabbitmq3' function tests: 1
|
||||
def test_list_users_rabbitmq3():
|
||||
"""
|
||||
Test if it return a list of users based off of rabbitmqctl user_list.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "guest\t[administrator user]\r\nother\t[a b]\r\n",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_users() == {
|
||||
"guest": ["administrator", "user"],
|
||||
"other": ["a", "b"],
|
||||
}
|
||||
|
||||
|
||||
# 'list_users_with_warning_rabbitmq2' function tests: 1
|
||||
def test_list_users_with_warning_rabbitmq2():
|
||||
"""
|
||||
Test if having a leading WARNING returns the user_list anyway.
|
||||
"""
|
||||
rtn_stdout = "\n".join(
|
||||
[
|
||||
"WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- location has moved to /etc/rabbitmq/rabbitmq-env.conf",
|
||||
"Listing users ...",
|
||||
"guest\t[administrator, user]\n",
|
||||
]
|
||||
)
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": rtn_stdout, "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_users() == {"guest": ["administrator", "user"]}
|
||||
|
||||
|
||||
# 'list_users_with_warning_rabbitmq3' function tests: 1
|
||||
def test_list_users_with_warning_rabbitmq3():
|
||||
"""
|
||||
Test if having a leading WARNING returns the user_list anyway.
|
||||
"""
|
||||
rtn_stdout = "\n".join(
|
||||
[
|
||||
"WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- location has moved to /etc/rabbitmq/rabbitmq-env.conf",
|
||||
"Listing users ...",
|
||||
"guest\t[administrator user]\n",
|
||||
]
|
||||
)
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": rtn_stdout, "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_users() == {"guest": ["administrator", "user"]}
|
||||
|
||||
|
||||
# 'list_vhosts' function tests: 2
|
||||
def test_list_vhosts():
|
||||
"""
|
||||
Test if it return a list of vhost based on rabbitmqctl list_vhosts.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "/\nsaltstack\n...", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_vhosts() == ["/", "saltstack", "..."]
|
||||
|
||||
|
||||
def test_list_vhosts_with_warning():
|
||||
"""
|
||||
Test if it return a list of vhost based on rabbitmqctl list_vhosts even with a leading WARNING.
|
||||
"""
|
||||
rtn_stdout = "\n".join(
|
||||
[
|
||||
"WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- location has moved to /etc/rabbitmq/rabbitmq-env.conf",
|
||||
"Listing users ...",
|
||||
"/",
|
||||
"saltstack",
|
||||
"...\n",
|
||||
]
|
||||
)
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": rtn_stdout, "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_vhosts() == ["/", "saltstack", "..."]
|
||||
|
||||
|
||||
# 'user_exists' function tests: 2
|
||||
def test_user_exists():
|
||||
"""
|
||||
Test whether a given rabbitmq-internal user exists based
|
||||
on rabbitmqctl list_users.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing users ...\n" "saltstack\t[administrator]\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.user_exists("saltstack")
|
||||
|
||||
|
||||
def test_user_exists_negative():
|
||||
"""
|
||||
Negative test of whether rabbitmq-internal user exists based
|
||||
on rabbitmqctl list_users.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing users ...\n" "saltstack\t[administrator]\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert not rabbitmq.user_exists("salt")
|
||||
|
||||
|
||||
# 'vhost_exists' function tests: 2
|
||||
def test_vhost_exists():
|
||||
"""
|
||||
Test if it return whether the vhost exists based
|
||||
on rabbitmqctl list_vhosts.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing vhosts ...\nsaltstack",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.vhost_exists("saltstack")
|
||||
|
||||
|
||||
def test_vhost_exists_negative():
|
||||
"""
|
||||
Test if it return whether the vhost exists based
|
||||
on rabbitmqctl list_vhosts.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing vhosts ...\nsaltstack",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert not rabbitmq.vhost_exists("salt")
|
||||
|
||||
|
||||
# 'add_user' function tests: 1
|
||||
def test_add_user():
|
||||
"""
|
||||
Test if it add a rabbitMQ user via rabbitmqctl
|
||||
user_add <user> <password>
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.add_user("saltstack") == {"Added": "saltstack"}
|
||||
|
||||
mock_run = MagicMock(return_value="Error")
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
with patch.object(
|
||||
rabbitmq, "clear_password", return_value={"Error": "Error", "retcode": 1},
|
||||
):
|
||||
pytest.raises(CommandExecutionError, rabbitmq.add_user, "saltstack")
|
||||
|
||||
|
||||
# 'delete_user' function tests: 1
|
||||
def test_delete_user():
|
||||
"""
|
||||
Test if it deletes a user via rabbitmqctl delete_user.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.delete_user("saltstack") == {"Deleted": "saltstack"}
|
||||
|
||||
|
||||
# 'check_password' function tests: 2
|
||||
def test_check_password_lt_38():
|
||||
"""
|
||||
Test if it checks a user's password for RabbitMQ less than v3.8.
|
||||
"""
|
||||
mock_run = MagicMock(return_value='{rabbit,"RabbitMQ","3.5.7"}')
|
||||
mock_run2 = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'Authenticating user "saltstack" ...\nSuccess',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run": mock_run, "cmd.run_all": mock_run2}):
|
||||
assert rabbitmq.check_password("saltstack", "salt@123")
|
||||
|
||||
|
||||
def test_check_password_gt_38():
|
||||
"""
|
||||
Test if it checks a user's password for RabbitMQ greater than v3.8.
|
||||
"""
|
||||
mock_run = MagicMock(return_value="RabbitMQ version: 3.8.3")
|
||||
mock_run2 = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'Authenticating user "saltstack" ...\nSuccess',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run": mock_run, "cmd.run_all": mock_run2}):
|
||||
assert rabbitmq.check_password("saltstack", "salt@123")
|
||||
|
||||
|
||||
# 'change_password' function tests: 1
|
||||
def test_change_password():
|
||||
"""
|
||||
Test if it changes a user's password.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.change_password("saltstack", "salt@123") == {
|
||||
"Password Changed": "saltstack"
|
||||
}
|
||||
|
||||
|
||||
# 'clear_password' function tests: 1
|
||||
def test_clear_password():
|
||||
"""
|
||||
Test if it removes a user's password.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.clear_password("saltstack") == {"Password Cleared": "saltstack"}
|
||||
|
||||
|
||||
# 'add_vhost' function tests: 1
|
||||
def test_add_vhost():
|
||||
"""
|
||||
Test if it adds a vhost via rabbitmqctl add_vhost.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.add_vhost("saltstack") == {"Added": "saltstack"}
|
||||
|
||||
|
||||
# 'delete_vhost' function tests: 1
|
||||
def test_delete_vhost():
|
||||
"""
|
||||
Test if it deletes a vhost rabbitmqctl delete_vhost.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.delete_vhost("saltstack") == {"Deleted": "saltstack"}
|
||||
|
||||
|
||||
# 'set_permissions' function tests: 1
|
||||
def test_set_permissions():
|
||||
"""
|
||||
Test if it sets permissions for vhost via rabbitmqctl set_permissions.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.set_permissions("myvhost", "myuser") == {
|
||||
"Permissions Set": "saltstack"
|
||||
}
|
||||
|
||||
|
||||
# 'list_permissions' function tests: 1
|
||||
def test_list_permissions():
|
||||
"""
|
||||
Test if it lists permissions for a vhost
|
||||
via rabbitmqctl list_permissions.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing stuff ...\nsaltstack\tsaltstack\t.*\t1\nguest\t0\tone\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_user_permissions("myuser") == {
|
||||
"saltstack": ["saltstack", ".*", "1"],
|
||||
"guest": ["0", "one", ""],
|
||||
}
|
||||
|
||||
|
||||
# 'list_user_permissions' function tests: 1
|
||||
def test_list_user_permissions():
|
||||
"""
|
||||
Test if it list permissions for a user
|
||||
via rabbitmqctl list_user_permissions.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing stuff ...\nsaltstack\tsaltstack\t0\t1\nguest\t0\tone\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_user_permissions("myuser") == {
|
||||
"saltstack": ["saltstack", "0", "1"],
|
||||
"guest": ["0", "one", ""],
|
||||
}
|
||||
|
||||
|
||||
# 'set_user_tags' function tests: 1
|
||||
def test_set_user_tags():
|
||||
"""
|
||||
Test if it add user tags via rabbitmqctl set_user_tags.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.set_user_tags("myadmin", "admin") == {"Tag(s) set": "saltstack"}
|
||||
|
||||
|
||||
# 'status' function tests: 1
|
||||
def test_status():
|
||||
"""
|
||||
Test if it return rabbitmq status.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.status() == "saltstack"
|
||||
|
||||
|
||||
# 'cluster_status' function tests: 1
|
||||
def test_cluster_status():
|
||||
"""
|
||||
Test if it return rabbitmq cluster_status.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.cluster_status() == "saltstack"
|
||||
|
||||
|
||||
# 'join_cluster' function tests: 1
|
||||
def test_join_cluster():
|
||||
"""
|
||||
Test if it join a rabbit cluster.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.join_cluster("rabbit.example.com") == {"Join": "saltstack"}
|
||||
|
||||
|
||||
# 'stop_app' function tests: 1
|
||||
def test_stop_app():
|
||||
"""
|
||||
Test if it stops the RabbitMQ application,
|
||||
leaving the Erlang node running.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.stop_app() == "saltstack"
|
||||
|
||||
|
||||
# 'start_app' function tests: 1
|
||||
def test_start_app():
|
||||
"""
|
||||
Test if it start the RabbitMQ application.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.start_app() == "saltstack"
|
||||
|
||||
|
||||
# 'reset' function tests: 1
|
||||
def test_reset():
|
||||
"""
|
||||
Test if it return a RabbitMQ node to its virgin state
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.reset() == "saltstack"
|
||||
|
||||
|
||||
# 'force_reset' function tests: 1
|
||||
def test_force_reset():
|
||||
"""
|
||||
Test if it forcefully Return a RabbitMQ node to its virgin state
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.force_reset() == "saltstack"
|
||||
|
||||
|
||||
# 'list_queues' function tests: 1
|
||||
def test_list_queues():
|
||||
"""
|
||||
Test if it returns queue details of the / virtual host
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\t0\nceleryev.234-234\t10",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_queues() == {
|
||||
"saltstack": ["0"],
|
||||
"celeryev.234-234": ["10"],
|
||||
}
|
||||
|
||||
|
||||
# 'list_queues_vhost' function tests: 1
|
||||
def test_list_queues_vhost():
|
||||
"""
|
||||
Test if it returns queue details of specified virtual host.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\t0\nceleryev.234-234\t10",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.list_queues_vhost("consumers") == {
|
||||
"saltstack": ["0"],
|
||||
"celeryev.234-234": ["10"],
|
||||
}
|
||||
|
||||
|
||||
# 'list_policies' function tests: 3
|
||||
def test_list_policies():
|
||||
"""
|
||||
Test if it return a dictionary of policies nested by vhost
|
||||
and name based on the data returned from rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.7")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": ""}):
|
||||
assert rabbitmq.list_policies() == {}
|
||||
|
||||
|
||||
def test_list_policies_freebsd():
|
||||
"""
|
||||
Test if it return a dictionary of policies nested by vhost
|
||||
and name based on the data returned from rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.7")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": "FreeBSD"}):
|
||||
assert rabbitmq.list_policies() == {}
|
||||
|
||||
|
||||
def test_list_policies_old_version():
|
||||
"""
|
||||
Test if it return a dictionary of policies nested by vhost
|
||||
and name based on the data returned from rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.0")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": ""}):
|
||||
assert rabbitmq.list_policies() == {}
|
||||
|
||||
|
||||
# 'set_policy' function tests: 1
|
||||
def test_set_policy():
|
||||
"""
|
||||
Test if it set a policy based on rabbitmqctl set_policy.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.set_policy("/", "HA", ".*", '{"ha-mode": "all"}') == {
|
||||
"Set": "saltstack"
|
||||
}
|
||||
|
||||
|
||||
# 'delete_policy' function tests: 1
|
||||
def test_delete_policy():
|
||||
"""
|
||||
Test if it delete a policy based on rabbitmqctl clear_policy.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.delete_policy("/", "HA") == {"Deleted": "saltstack"}
|
||||
|
||||
|
||||
# 'policy_exists' function tests: 1
|
||||
def test_policy_exists():
|
||||
"""
|
||||
Test if it return whether the policy exists
|
||||
based on rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.0")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": ""}):
|
||||
assert not rabbitmq.policy_exists("/", "HA")
|
||||
|
||||
|
||||
# 'list_available_plugins' function tests: 2
|
||||
def test_list_available_plugins():
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack\nsalt\nother", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.list_available_plugins() == ["saltstack", "salt", "other"]
|
||||
|
||||
|
||||
def test_list_available_plugins_space_delimited():
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack salt other", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.list_available_plugins() == ["saltstack", "salt", "other"]
|
||||
|
||||
|
||||
# 'list_enabled_plugins' function tests: 2
|
||||
def test_list_enabled_plugins():
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack\nsalt\nother", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.list_enabled_plugins() == ["saltstack", "salt", "other"]
|
||||
|
||||
|
||||
def test_list_enabled_plugins_space_delimited():
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack salt other", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.list_enabled_plugins() == ["saltstack", "salt", "other"]
|
||||
|
||||
|
||||
# 'plugin_is_enabled' function tests: 2
|
||||
def test_plugin_is_enabled():
|
||||
"""
|
||||
Test if it returns true for an enabled plugin.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack\nsalt\nother", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.plugin_is_enabled("saltstack")
|
||||
assert rabbitmq.plugin_is_enabled("salt")
|
||||
assert rabbitmq.plugin_is_enabled("other")
|
||||
|
||||
|
||||
def test_plugin_is_enabled_negative():
|
||||
"""
|
||||
Test if it returns false for a disabled plugin.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack\nother", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert not rabbitmq.plugin_is_enabled("salt")
|
||||
assert not rabbitmq.plugin_is_enabled("stack")
|
||||
assert not rabbitmq.plugin_is_enabled("random")
|
||||
|
||||
|
||||
# 'enable_plugin' function tests: 1
|
||||
def test_enable_plugin():
|
||||
"""
|
||||
Test if it enable a RabbitMQ plugin via the rabbitmq-plugins command.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.enable_plugin("salt") == {"Enabled": "saltstack"}
|
||||
|
||||
|
||||
# 'disable_plugin' function tests: 1
|
||||
def test_disable_plugin():
|
||||
"""
|
||||
Test if it disable a RabbitMQ plugin via the rabbitmq-plugins command.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.disable_plugin("salt") == {"Disabled": "saltstack"}
|
||||
|
||||
|
||||
# 'list_upstreams' function tests: 1
|
||||
def test_list_upstreams():
|
||||
"""
|
||||
Test if it returns a list of upstreams.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'federation-upstream\tremote-name\t{"ack-mode":"on-confirm"'
|
||||
',"max-hops":1,"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
assert rabbitmq.list_upstreams() == {
|
||||
"remote-name": (
|
||||
'{"ack-mode":"on-confirm","max-hops":1,'
|
||||
'"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}'
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
# 'upstream_exists' function tests: 2
|
||||
def test_upstream_exists():
|
||||
"""
|
||||
Test whether a given rabbitmq-internal upstream exists based
|
||||
on rabbitmqctl list_upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'federation-upstream\tremote-name\t{"ack-mode":"on-confirm"'
|
||||
',"max-hops":1,"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.upstream_exists("remote-name")
|
||||
|
||||
|
||||
def test_upstream_exists_negative():
|
||||
"""
|
||||
Negative test of whether rabbitmq-internal upstream exists based
|
||||
on rabbitmqctl list_upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'federation-upstream\tremote-name\t{"ack-mode":"on-confirm"'
|
||||
',"max-hops":1,"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert not rabbitmq.upstream_exists("does-not-exist")
|
||||
|
||||
|
||||
# 'add_upstream' function tests: 1
|
||||
def test_set_upstream():
|
||||
"""
|
||||
Test if a rabbitMQ upstream gets configured properly.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": (
|
||||
'Setting runtime parameter "federation-upstream" for component '
|
||||
'"remote-name" to "{"trust-user-id": true, "uri": '
|
||||
'"amqp://username:password@remote.fqdn", "ack-mode": "on-confirm", '
|
||||
'"max-hops": 1}" in vhost "/" ...'
|
||||
),
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.set_upstream(
|
||||
"remote-name",
|
||||
"amqp://username:password@remote.fqdn",
|
||||
ack_mode="on-confirm",
|
||||
max_hops=1,
|
||||
trust_user_id=True,
|
||||
)
|
||||
|
||||
|
||||
# 'delete_upstream' function tests: 2
|
||||
def test_delete_upstream():
|
||||
"""
|
||||
Test if an upstream gets deleted properly using rabbitmqctl delete_upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": (
|
||||
'Clearing runtime parameter "remote-name" for component '
|
||||
'"federation-upstream" on vhost "/" ...'
|
||||
),
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
assert rabbitmq.delete_upstream("remote-name")
|
||||
|
||||
|
||||
def test_delete_upstream_negative():
|
||||
"""
|
||||
Negative test trying to delete a non-existant upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 70,
|
||||
"stdout": (
|
||||
'Clearing runtime parameter "remote-name" for component '
|
||||
'"federation-upstream" on vhost "/" ...'
|
||||
),
|
||||
"stderr": "Error:\nParameter does not exist",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
pytest.raises(CommandExecutionError, rabbitmq.delete_upstream, "remote-name")
|
|
@ -1,888 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
:codeauthor: Jayesh Kariya <jayeshk@saltstack.com>
|
||||
"""
|
||||
|
||||
# Import Python Libs
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
# Import Salt Libs
|
||||
import salt.modules.rabbitmq as rabbitmq
|
||||
from salt.exceptions import CommandExecutionError
|
||||
|
||||
# Import Salt Testing Libs
|
||||
from tests.support.mixins import LoaderModuleMockMixin
|
||||
from tests.support.mock import MagicMock, patch
|
||||
from tests.support.unit import TestCase
|
||||
|
||||
|
||||
class RabbitmqTestCase(TestCase, LoaderModuleMockMixin):
|
||||
"""
|
||||
Test cases for salt.modules.rabbitmq
|
||||
"""
|
||||
|
||||
def setup_loader_modules(self):
|
||||
return {
|
||||
rabbitmq: {"__context__": {"rabbitmqctl": None, "rabbitmq-plugins": None}}
|
||||
}
|
||||
|
||||
# 'list_users_rabbitmq2' function tests: 1
|
||||
|
||||
def test_list_users_rabbitmq2(self):
|
||||
"""
|
||||
Test if it return a list of users based off of rabbitmqctl user_list.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing users ...\nguest\t[administrator, user]\njustAnAdmin\t[administrator]\n",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_users(),
|
||||
{"guest": ["administrator", "user"], "justAnAdmin": ["administrator"]},
|
||||
)
|
||||
|
||||
# 'list_users_rabbitmq3' function tests: 1
|
||||
|
||||
def test_list_users_rabbitmq3(self):
|
||||
"""
|
||||
Test if it return a list of users based off of rabbitmqctl user_list.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "guest\t[administrator user]\r\nother\t[a b]\r\n",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_users(),
|
||||
{"guest": ["administrator", "user"], "other": ["a", "b"]},
|
||||
)
|
||||
|
||||
# 'list_users_with_warning_rabbitmq2' function tests: 1
|
||||
|
||||
def test_list_users_with_warning_rabbitmq2(self):
|
||||
"""
|
||||
Test if having a leading WARNING returns the user_list anyway.
|
||||
"""
|
||||
rtn_stdout = "\n".join(
|
||||
[
|
||||
"WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- location has moved to /etc/rabbitmq/rabbitmq-env.conf",
|
||||
"Listing users ...",
|
||||
"guest\t[administrator, user]\n",
|
||||
]
|
||||
)
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": rtn_stdout, "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_users(), {"guest": ["administrator", "user"]}
|
||||
)
|
||||
|
||||
# 'list_users_with_warning_rabbitmq3' function tests: 1
|
||||
|
||||
def test_list_users_with_warning_rabbitmq3(self):
|
||||
"""
|
||||
Test if having a leading WARNING returns the user_list anyway.
|
||||
"""
|
||||
rtn_stdout = "\n".join(
|
||||
[
|
||||
"WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- location has moved to /etc/rabbitmq/rabbitmq-env.conf",
|
||||
"Listing users ...",
|
||||
"guest\t[administrator user]\n",
|
||||
]
|
||||
)
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": rtn_stdout, "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_users(), {"guest": ["administrator", "user"]}
|
||||
)
|
||||
|
||||
# 'list_vhosts' function tests: 2
|
||||
|
||||
def test_list_vhosts(self):
|
||||
"""
|
||||
Test if it return a list of vhost based on rabbitmqctl list_vhosts.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "/\nsaltstack\n...", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertListEqual(rabbitmq.list_vhosts(), ["/", "saltstack", "..."])
|
||||
|
||||
def test_list_vhosts_with_warning(self):
|
||||
"""
|
||||
Test if it return a list of vhost based on rabbitmqctl list_vhosts even with a leading WARNING.
|
||||
"""
|
||||
rtn_stdout = "\n".join(
|
||||
[
|
||||
"WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- location has moved to /etc/rabbitmq/rabbitmq-env.conf",
|
||||
"Listing users ...",
|
||||
"/",
|
||||
"saltstack",
|
||||
"...\n",
|
||||
]
|
||||
)
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": rtn_stdout, "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertListEqual(rabbitmq.list_vhosts(), ["/", "saltstack", "..."])
|
||||
|
||||
# 'user_exists' function tests: 2
|
||||
|
||||
def test_user_exists(self):
|
||||
"""
|
||||
Test whether a given rabbitmq-internal user exists based
|
||||
on rabbitmqctl list_users.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing users ...\n" "saltstack\t[administrator]\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertTrue(rabbitmq.user_exists("saltstack"))
|
||||
|
||||
def test_user_exists_negative(self):
|
||||
"""
|
||||
Negative test of whether rabbitmq-internal user exists based
|
||||
on rabbitmqctl list_users.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing users ...\n" "saltstack\t[administrator]\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertFalse(rabbitmq.user_exists("salt"))
|
||||
|
||||
# 'vhost_exists' function tests: 2
|
||||
|
||||
def test_vhost_exists(self):
|
||||
"""
|
||||
Test if it return whether the vhost exists based
|
||||
on rabbitmqctl list_vhosts.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing vhosts ...\nsaltstack",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertTrue(rabbitmq.vhost_exists("saltstack"))
|
||||
|
||||
def test_vhost_exists_negative(self):
|
||||
"""
|
||||
Test if it return whether the vhost exists based
|
||||
on rabbitmqctl list_vhosts.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing vhosts ...\nsaltstack",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertFalse(rabbitmq.vhost_exists("salt"))
|
||||
|
||||
# 'add_user' function tests: 1
|
||||
|
||||
def test_add_user(self):
|
||||
"""
|
||||
Test if it add a rabbitMQ user via rabbitmqctl
|
||||
user_add <user> <password>
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(rabbitmq.add_user("saltstack"), {"Added": "saltstack"})
|
||||
|
||||
mock_run = MagicMock(return_value="Error")
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
with patch.object(
|
||||
rabbitmq,
|
||||
"clear_password",
|
||||
return_value={"Error": "Error", "retcode": 1},
|
||||
):
|
||||
self.assertRaises(CommandExecutionError, rabbitmq.add_user, "saltstack")
|
||||
|
||||
# 'delete_user' function tests: 1
|
||||
|
||||
def test_delete_user(self):
|
||||
"""
|
||||
Test if it deletes a user via rabbitmqctl delete_user.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.delete_user("saltstack"), {"Deleted": "saltstack"}
|
||||
)
|
||||
|
||||
# 'check_password' function tests: 2
|
||||
|
||||
def test_check_password_lt_38(self):
|
||||
"""
|
||||
Test if it checks a user's password for RabbitMQ less than v3.8.
|
||||
"""
|
||||
mock_run = MagicMock(return_value='{rabbit,"RabbitMQ","3.5.7"}')
|
||||
mock_run2 = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'Authenticating user "saltstack" ...\nSuccess',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run": mock_run, "cmd.run_all": mock_run2}
|
||||
):
|
||||
self.assertEqual(rabbitmq.check_password("saltstack", "salt@123"), True)
|
||||
|
||||
def test_check_password_gt_38(self):
|
||||
"""
|
||||
Test if it checks a user's password for RabbitMQ greater than v3.8.
|
||||
"""
|
||||
mock_run = MagicMock(return_value="RabbitMQ version: 3.8.3")
|
||||
mock_run2 = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'Authenticating user "saltstack" ...\nSuccess',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run": mock_run, "cmd.run_all": mock_run2}
|
||||
):
|
||||
self.assertEqual(rabbitmq.check_password("saltstack", "salt@123"), True)
|
||||
|
||||
# 'change_password' function tests: 1
|
||||
|
||||
def test_change_password(self):
|
||||
"""
|
||||
Test if it changes a user's password.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.change_password("saltstack", "salt@123"),
|
||||
{"Password Changed": "saltstack"},
|
||||
)
|
||||
|
||||
# 'clear_password' function tests: 1
|
||||
|
||||
def test_clear_password(self):
|
||||
"""
|
||||
Test if it removes a user's password.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.clear_password("saltstack"), {"Password Cleared": "saltstack"}
|
||||
)
|
||||
|
||||
# 'add_vhost' function tests: 1
|
||||
|
||||
def test_add_vhost(self):
|
||||
"""
|
||||
Test if it adds a vhost via rabbitmqctl add_vhost.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.add_vhost("saltstack"), {"Added": "saltstack"}
|
||||
)
|
||||
|
||||
# 'delete_vhost' function tests: 1
|
||||
|
||||
def test_delete_vhost(self):
|
||||
"""
|
||||
Test if it deletes a vhost rabbitmqctl delete_vhost.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.delete_vhost("saltstack"), {"Deleted": "saltstack"}
|
||||
)
|
||||
|
||||
# 'set_permissions' function tests: 1
|
||||
|
||||
def test_set_permissions(self):
|
||||
"""
|
||||
Test if it sets permissions for vhost via rabbitmqctl set_permissions.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.set_permissions("myvhost", "myuser"),
|
||||
{"Permissions Set": "saltstack"},
|
||||
)
|
||||
|
||||
# 'list_permissions' function tests: 1
|
||||
|
||||
def test_list_permissions(self):
|
||||
"""
|
||||
Test if it lists permissions for a vhost
|
||||
via rabbitmqctl list_permissions.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing stuff ...\nsaltstack\tsaltstack\t.*\t1\nguest\t0\tone\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_user_permissions("myuser"),
|
||||
{"saltstack": ["saltstack", ".*", "1"], "guest": ["0", "one"]},
|
||||
)
|
||||
|
||||
# 'list_user_permissions' function tests: 1
|
||||
|
||||
def test_list_user_permissions(self):
|
||||
"""
|
||||
Test if it list permissions for a user
|
||||
via rabbitmqctl list_user_permissions.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "Listing stuff ...\nsaltstack\tsaltstack\t0\t1\nguest\t0\tone\n...done",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_user_permissions("myuser"),
|
||||
{"saltstack": ["saltstack", "0", "1"], "guest": ["0", "one"]},
|
||||
)
|
||||
|
||||
# 'set_user_tags' function tests: 1
|
||||
|
||||
def test_set_user_tags(self):
|
||||
"""
|
||||
Test if it add user tags via rabbitmqctl set_user_tags.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.set_user_tags("myadmin", "admin"), {"Tag(s) set": "saltstack"}
|
||||
)
|
||||
|
||||
# 'status' function tests: 1
|
||||
|
||||
def test_status(self):
|
||||
"""
|
||||
Test if it return rabbitmq status.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertEqual(rabbitmq.status(), "saltstack")
|
||||
|
||||
# 'cluster_status' function tests: 1
|
||||
|
||||
def test_cluster_status(self):
|
||||
"""
|
||||
Test if it return rabbitmq cluster_status.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertEqual(rabbitmq.cluster_status(), "saltstack")
|
||||
|
||||
# 'join_cluster' function tests: 1
|
||||
|
||||
def test_join_cluster(self):
|
||||
"""
|
||||
Test if it join a rabbit cluster.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.join_cluster("rabbit.example.com"), {"Join": "saltstack"}
|
||||
)
|
||||
|
||||
# 'stop_app' function tests: 1
|
||||
|
||||
def test_stop_app(self):
|
||||
"""
|
||||
Test if it stops the RabbitMQ application,
|
||||
leaving the Erlang node running.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertEqual(rabbitmq.stop_app(), "saltstack")
|
||||
|
||||
# 'start_app' function tests: 1
|
||||
|
||||
def test_start_app(self):
|
||||
"""
|
||||
Test if it start the RabbitMQ application.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertEqual(rabbitmq.start_app(), "saltstack")
|
||||
|
||||
# 'reset' function tests: 1
|
||||
|
||||
def test_reset(self):
|
||||
"""
|
||||
Test if it return a RabbitMQ node to its virgin state
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertEqual(rabbitmq.reset(), "saltstack")
|
||||
|
||||
# 'force_reset' function tests: 1
|
||||
|
||||
def test_force_reset(self):
|
||||
"""
|
||||
Test if it forcefully Return a RabbitMQ node to its virgin state
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertEqual(rabbitmq.force_reset(), "saltstack")
|
||||
|
||||
# 'list_queues' function tests: 1
|
||||
|
||||
def test_list_queues(self):
|
||||
"""
|
||||
Test if it returns queue details of the / virtual host
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\t0\nceleryev.234-234\t10",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_queues(), {"saltstack": ["0"], "celeryev.234-234": ["10"]}
|
||||
)
|
||||
|
||||
# 'list_queues_vhost' function tests: 1
|
||||
|
||||
def test_list_queues_vhost(self):
|
||||
"""
|
||||
Test if it returns queue details of specified virtual host.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\t0\nceleryev.234-234\t10",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_queues_vhost("consumers"),
|
||||
{"saltstack": ["0"], "celeryev.234-234": ["10"]},
|
||||
)
|
||||
|
||||
# 'list_policies' function tests: 3
|
||||
|
||||
def test_list_policies(self):
|
||||
"""
|
||||
Test if it return a dictionary of policies nested by vhost
|
||||
and name based on the data returned from rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.7")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": ""}):
|
||||
self.assertDictEqual(rabbitmq.list_policies(), {})
|
||||
|
||||
def test_list_policies_freebsd(self):
|
||||
"""
|
||||
Test if it return a dictionary of policies nested by vhost
|
||||
and name based on the data returned from rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.7")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": "FreeBSD"}):
|
||||
self.assertDictEqual(rabbitmq.list_policies(), {})
|
||||
|
||||
def test_list_policies_old_version(self):
|
||||
"""
|
||||
Test if it return a dictionary of policies nested by vhost
|
||||
and name based on the data returned from rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.0")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": ""}):
|
||||
self.assertDictEqual(rabbitmq.list_policies(), {})
|
||||
|
||||
# 'set_policy' function tests: 1
|
||||
|
||||
def test_set_policy(self):
|
||||
"""
|
||||
Test if it set a policy based on rabbitmqctl set_policy.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.set_policy("/", "HA", ".*", '{"ha-mode": "all"}'),
|
||||
{"Set": "saltstack"},
|
||||
)
|
||||
|
||||
# 'delete_policy' function tests: 1
|
||||
|
||||
def test_delete_policy(self):
|
||||
"""
|
||||
Test if it delete a policy based on rabbitmqctl clear_policy.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.delete_policy("/", "HA"), {"Deleted": "saltstack"}
|
||||
)
|
||||
|
||||
# 'policy_exists' function tests: 1
|
||||
|
||||
def test_policy_exists(self):
|
||||
"""
|
||||
Test if it return whether the policy exists
|
||||
based on rabbitmqctl list_policies.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="3.0")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
), patch.dict(rabbitmq.__grains__, {"os_family": ""}):
|
||||
self.assertFalse(rabbitmq.policy_exists("/", "HA"))
|
||||
|
||||
# 'list_available_plugins' function tests: 2
|
||||
|
||||
def test_list_available_plugins(self):
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\nsalt\nother",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertListEqual(
|
||||
rabbitmq.list_available_plugins(), ["saltstack", "salt", "other"]
|
||||
)
|
||||
|
||||
def test_list_available_plugins_space_delimited(self):
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack salt other", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertListEqual(
|
||||
rabbitmq.list_available_plugins(), ["saltstack", "salt", "other"]
|
||||
)
|
||||
|
||||
# 'list_enabled_plugins' function tests: 2
|
||||
|
||||
def test_list_enabled_plugins(self):
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\nsalt\nother",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertListEqual(
|
||||
rabbitmq.list_enabled_plugins(), ["saltstack", "salt", "other"]
|
||||
)
|
||||
|
||||
def test_list_enabled_plugins_space_delimited(self):
|
||||
"""
|
||||
Test if it returns a list of plugins.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack salt other", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertListEqual(
|
||||
rabbitmq.list_enabled_plugins(), ["saltstack", "salt", "other"]
|
||||
)
|
||||
|
||||
# 'plugin_is_enabled' function tests: 2
|
||||
|
||||
def test_plugin_is_enabled(self):
|
||||
"""
|
||||
Test if it returns true for an enabled plugin.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": "saltstack\nsalt\nother",
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertTrue(rabbitmq.plugin_is_enabled("saltstack"))
|
||||
self.assertTrue(rabbitmq.plugin_is_enabled("salt"))
|
||||
self.assertTrue(rabbitmq.plugin_is_enabled("other"))
|
||||
|
||||
def test_plugin_is_enabled_negative(self):
|
||||
"""
|
||||
Test if it returns false for a disabled plugin.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack\nother", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertFalse(rabbitmq.plugin_is_enabled("salt"))
|
||||
self.assertFalse(rabbitmq.plugin_is_enabled("stack"))
|
||||
self.assertFalse(rabbitmq.plugin_is_enabled("random"))
|
||||
|
||||
# 'enable_plugin' function tests: 1
|
||||
|
||||
def test_enable_plugin(self):
|
||||
"""
|
||||
Test if it enable a RabbitMQ plugin via the rabbitmq-plugins command.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.enable_plugin("salt"), {"Enabled": "saltstack"}
|
||||
)
|
||||
|
||||
# 'disable_plugin' function tests: 1
|
||||
|
||||
def test_disable_plugin(self):
|
||||
"""
|
||||
Test if it disable a RabbitMQ plugin via the rabbitmq-plugins command.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={"retcode": 0, "stdout": "saltstack", "stderr": ""}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.disable_plugin("salt"), {"Disabled": "saltstack"}
|
||||
)
|
||||
|
||||
# 'list_upstreams' function tests: 1
|
||||
|
||||
def test_list_upstreams(self):
|
||||
"""
|
||||
Test if it returns a list of upstreams.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'federation-upstream\tremote-name\t{"ack-mode":"on-confirm"'
|
||||
',"max-hops":1,"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
mock_pkg = MagicMock(return_value="")
|
||||
with patch.dict(
|
||||
rabbitmq.__salt__, {"cmd.run_all": mock_run, "pkg.version": mock_pkg}
|
||||
):
|
||||
self.assertDictEqual(
|
||||
rabbitmq.list_upstreams(),
|
||||
{
|
||||
"remote-name": (
|
||||
'{"ack-mode":"on-confirm","max-hops":1,'
|
||||
'"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}'
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
# 'upstream_exists' function tests: 2
|
||||
|
||||
def test_upstream_exists(self):
|
||||
"""
|
||||
Test whether a given rabbitmq-internal upstream exists based
|
||||
on rabbitmqctl list_upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'federation-upstream\tremote-name\t{"ack-mode":"on-confirm"'
|
||||
',"max-hops":1,"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertTrue(rabbitmq.upstream_exists("remote-name"))
|
||||
|
||||
def test_upstream_exists_negative(self):
|
||||
"""
|
||||
Negative test of whether rabbitmq-internal upstream exists based
|
||||
on rabbitmqctl list_upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": 'federation-upstream\tremote-name\t{"ack-mode":"on-confirm"'
|
||||
',"max-hops":1,"trust-user-id":true,"uri":"amqp://username:'
|
||||
'password@remote.fqdn"}',
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertFalse(rabbitmq.upstream_exists("does-not-exist"))
|
||||
|
||||
# 'add_upstream' function tests: 1
|
||||
|
||||
def test_set_upstream(self):
|
||||
"""
|
||||
Test if a rabbitMQ upstream gets configured properly.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": (
|
||||
'Setting runtime parameter "federation-upstream" for component '
|
||||
'"remote-name" to "{"trust-user-id": true, "uri": '
|
||||
'"amqp://username:password@remote.fqdn", "ack-mode": "on-confirm", '
|
||||
'"max-hops": 1}" in vhost "/" ...'
|
||||
),
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertTrue(
|
||||
rabbitmq.set_upstream(
|
||||
"remote-name",
|
||||
"amqp://username:password@remote.fqdn",
|
||||
ack_mode="on-confirm",
|
||||
max_hops=1,
|
||||
trust_user_id=True,
|
||||
)
|
||||
)
|
||||
|
||||
# 'delete_upstream' function tests: 2
|
||||
|
||||
def test_delete_upstream(self):
|
||||
"""
|
||||
Test if an upstream gets deleted properly using rabbitmqctl delete_upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 0,
|
||||
"stdout": (
|
||||
'Clearing runtime parameter "remote-name" for component '
|
||||
'"federation-upstream" on vhost "/" ...'
|
||||
),
|
||||
"stderr": "",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertTrue(rabbitmq.delete_upstream("remote-name"))
|
||||
|
||||
def test_delete_upstream_negative(self):
|
||||
"""
|
||||
Negative test trying to delete a non-existant upstream.
|
||||
"""
|
||||
mock_run = MagicMock(
|
||||
return_value={
|
||||
"retcode": 70,
|
||||
"stdout": (
|
||||
'Clearing runtime parameter "remote-name" for component '
|
||||
'"federation-upstream" on vhost "/" ...'
|
||||
),
|
||||
"stderr": "Error:\nParameter does not exist",
|
||||
}
|
||||
)
|
||||
with patch.dict(rabbitmq.__salt__, {"cmd.run_all": mock_run}):
|
||||
self.assertRaises(
|
||||
CommandExecutionError, rabbitmq.delete_upstream, "remote-name"
|
||||
)
|
Loading…
Add table
Reference in a new issue