Add ssl argument to MongoClient for mongo returner

This commit is contained in:
Wayne Werner 2022-02-15 16:38:01 -06:00 committed by Daniel Wozniak
parent 4819ad1949
commit bbf86a67be
2 changed files with 81 additions and 2 deletions

View file

@ -107,6 +107,7 @@ def _get_options(ret):
attrs = {
"host": "host",
"port": "port",
"ssl": "ssl",
"db": "db",
"user": "user",
"password": "password",
@ -127,6 +128,7 @@ def _get_conn(ret):
host = _options.get("host")
port = _options.get("port")
ssl = _options.get("ssl") or False
db_ = _options.get("db")
user = _options.get("user")
password = _options.get("password")
@ -136,8 +138,8 @@ def _get_conn(ret):
# pymongo versions < 2.3 until then there are
# a bunch of these sections that need to be supported
if PYMONGO_VERSION > Version("2.3"):
conn = pymongo.MongoClient(host, port)
if PYMONGO_VERSION > _LooseVersion("2.3"):
conn = pymongo.MongoClient(host=host, port=port, ssl=ssl)
else:
conn = pymongo.Connection(host, port)
mdb = conn[db_]

View file

@ -0,0 +1,77 @@
import pytest
import salt.returners.mongo_return as mongo_return
from tests.support.mock import patch
@pytest.fixture
def configure_loader_modules():
fake_opts = {"mongo.host": "fnord", "mongo.port": "fnordport"}
return {
mongo_return: {
"__opts__": fake_opts,
"__salt__": {"config.option": fake_opts.get},
}
}
@pytest.mark.parametrize(
"expected_ssl, use_ssl",
[
(True, {"fnord.mongo.ssl": True}),
(False, {"fnord.mongo.ssl": False}),
(False, {"fnord.mongo.ssl": None}),
(False, {}),
],
)
def test_mongo_returner_should_correctly_pass_ssl_to_MongoClient_when_ret_is_set(
expected_ssl, use_ssl
):
with patch(
"salt.returners.mongo_return.pymongo", create=True
) as fake_mongo, patch.object(
mongo_return,
"PYMONGO_VERSION",
mongo_return._LooseVersion("99999"),
create=True,
), patch.dict(
"salt.returners.mongo_return.__opts__",
{
**use_ssl,
**{"fnord.mongo.host": "fnordfnord", "fnord.mongo.port": "fnordfnordport"},
},
):
mongo_return._get_conn(ret={"ret_config": "fnord"})
fake_mongo.MongoClient.assert_called_with(
host="fnordfnord", port="fnordfnordport", ssl=expected_ssl
)
@pytest.mark.parametrize(
"expected_ssl, use_ssl",
[
(True, {"mongo.ssl": True}),
(False, {"mongo.ssl": False}),
(False, {"mongo.ssl": None}),
(False, {}),
],
)
def test_mongo_returner_should_correctly_pass_ssl_to_MongoClient(expected_ssl, use_ssl):
# Here these fnord.X.Y config options should be ignored
with patch(
"salt.returners.mongo_return.pymongo", create=True
) as fake_mongo, patch.object(
mongo_return,
"PYMONGO_VERSION",
mongo_return._LooseVersion("99999"),
create=True,
), patch.dict(
"salt.returners.mongo_return.__opts__",
{
**use_ssl,
**{"fnord.mongo.host": "fnordfnord", "fnord.mongo.port": "fnordfnordport"},
},
):
mongo_return._get_conn(ret=None)
fake_mongo.MongoClient.assert_called_with(
host="fnord", port="fnordport", ssl=expected_ssl
)