57347: Updating rpm_lowpkg:version_cmp warning messages

This commit is contained in:
jude 2020-05-18 22:44:45 -04:00 committed by Daniel Wozniak
parent 0b75496c10
commit 5342442903
3 changed files with 80 additions and 18 deletions

1
changelog/57347.fixed Normal file
View file

@ -0,0 +1 @@
Updated rpm_lowpkg.version_cmp log messages and unit tests

View file

@ -727,6 +727,11 @@ def version_cmp(ver1, ver2, ignore_epoch=False):
"labelCompare function. Not using rpm.labelCompare for "
"version comparison."
)
else:
log.warning(
"Please install a package that provides rpm.labelCompare for "
"more accurate version comparisons."
)
if cmp_func is None and HAS_RPMUTILS:
try:
cmp_func = rpmUtils.miscutils.compareEVR
@ -735,6 +740,10 @@ def version_cmp(ver1, ver2, ignore_epoch=False):
if cmp_func is None:
if salt.utils.path.which("rpmdev-vercmp"):
log.warning(
"Installing the rpmdevtools package may surface dev tools in production."
)
# rpmdev-vercmp always uses epochs, even when zero
def _ensure_epoch(ver):
def _prepend(ver):
@ -773,10 +782,8 @@ def version_cmp(ver1, ver2, ignore_epoch=False):
result["stdout"],
)
else:
# We'll need to fall back to salt.utils.versions.version_cmp()
log.warning(
"rpmdevtools is not installed, please install it for "
"more accurate version comparisons"
"Falling back on salt.utils.versions.version_cmp() for version comparisons"
)
else:
# If one EVR is missing a release but not the other and they

View file

@ -187,28 +187,82 @@ class RpmTestCase(TestCase, LoaderModuleMockMixin):
rpm.checksum("file1.rpm", root="/")
self.assertTrue(_called_with_root(mock))
def test_version_cmp_rpm(self):
@patch("salt.modules.rpm_lowpkg.HAS_RPM", True)
@patch("salt.modules.rpm_lowpkg.rpm.labelCompare", return_value=-1)
@patch("salt.modules.rpm_lowpkg.log")
def test_version_cmp_rpm(self, mock_log, mock_labelCompare):
"""
Test package version is called RPM version if RPM-Python is installed
Test package version if RPM-Python is installed
:return:
"""
with patch(
"salt.modules.rpm_lowpkg.rpm.labelCompare", MagicMock(return_value=0)
), patch("salt.modules.rpm_lowpkg.HAS_RPM", True):
self.assertEqual(
0, rpm.version_cmp("1", "2")
) # mock returns 0, which means RPM was called
self.assertEqual(-1, rpm.version_cmp("1", "2"))
self.assertEqual(mock_log.warning.called, False)
self.assertEqual(mock_labelCompare.called, True)
def test_version_cmp_fallback(self):
@patch("salt.modules.rpm_lowpkg.HAS_RPM", False)
@patch("salt.modules.rpm_lowpkg.HAS_RPMUTILS", True)
@patch("salt.modules.rpm_lowpkg.rpmUtils", create=True)
@patch("salt.modules.rpm_lowpkg.log")
def test_version_cmp_rpmutils(self, mock_log, mock_rpmUtils):
"""
Test package version is called RPM version if RPM-Python is installed
Test package version if rpmUtils.miscutils called
:return:
"""
with patch(
"salt.modules.rpm_lowpkg.rpm.labelCompare", MagicMock(return_value=0)
), patch("salt.modules.rpm_lowpkg.HAS_RPM", False):
mock_rpmUtils.miscutils = MagicMock()
mock_rpmUtils.miscutils.compareEVR = MagicMock(return_value=-1)
self.assertEqual(-1, rpm.version_cmp("1", "2"))
self.assertEqual(mock_log.warning.called, True)
self.assertEqual(mock_rpmUtils.miscutils.compareEVR.called, True)
self.assertEqual(
mock_log.warning.mock_calls[0][1][0],
"Please install a package that provides rpm.labelCompare for more accurate version comparisons.",
)
@patch("salt.modules.rpm_lowpkg.HAS_RPM", False)
@patch("salt.modules.rpm_lowpkg.HAS_RPMUTILS", False)
@patch("salt.utils.path.which", return_value=True)
@patch("salt.modules.rpm_lowpkg.log")
def test_version_cmp_rpmdev_vercmp(self, mock_log, mock_which):
"""
Test package version if rpmdev-vercmp is installed
:return:
"""
mock__salt__ = MagicMock(return_value={"retcode": 12})
with patch.dict(rpm.__salt__, {"cmd.run_all": mock__salt__}):
self.assertEqual(-1, rpm.version_cmp("1", "2"))
self.assertEqual(mock__salt__.called, True)
self.assertEqual(mock_log.warning.called, True)
self.assertEqual(
-1, rpm.version_cmp("1", "2")
) # mock returns -1, a python implementation was called
mock_log.warning.mock_calls[0][1][0],
"Please install a package that provides rpm.labelCompare for more accurate version comparisons.",
)
self.assertEqual(
mock_log.warning.mock_calls[1][1][0],
"Installing the rpmdevtools package may surface dev tools in production.",
)
@patch("salt.modules.rpm_lowpkg.HAS_RPM", False)
@patch("salt.modules.rpm_lowpkg.HAS_RPMUTILS", False)
@patch("salt.utils.versions.version_cmp", return_value=-1)
@patch("salt.utils.path.which", return_value=False)
@patch("salt.modules.rpm_lowpkg.log")
def test_version_cmp_python(self, mock_log, mock_which, mock_version_cmp):
"""
Test package version if falling back to python
:return:
"""
self.assertEqual(-1, rpm.version_cmp("1", "2"))
self.assertEqual(mock_version_cmp.called, True)
self.assertEqual(mock_log.warning.called, True)
self.assertEqual(
mock_log.warning.mock_calls[0][1][0],
"Please install a package that provides rpm.labelCompare for more accurate version comparisons.",
)
self.assertEqual(
mock_log.warning.mock_calls[1][1][0],
"Falling back on salt.utils.versions.version_cmp() for version comparisons",
)