On (08/01/16 16:59), Martin Babinsky wrote:
Patch 0122 reimplements version checking and fixes
https://fedorahosted.org/freeipa/ticket/5572
Patch 0123 contains unit test for version checking code.
Thanks to Martin^1 for the idea of using CFFI for calling
rpm
C-API
directly.
--
Martin^3 Babinsky
>From c7a5d8970d100d071597b4e1d7cef8a27b8cd485 Mon Sep 17
00:00:00
2001
From: Martin Babinsky <mbabi...@redhat.com>
Date: Fri, 8 Jan 2016 15:54:00 +0100
Subject: [PATCH 2/3] tests for package version comparison
These tests will ensure that our package version handling
code can
correctly
decide when to upgrade IPA master.
https://fedorahosted.org/freeipa/ticket/5572
---
ipatests/test_ipaserver/test_version_comparsion.py | 47
++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644
ipatests/test_ipaserver/test_version_comparsion.py
diff --git
a/ipatests/test_ipaserver/test_version_comparsion.py
b/ipatests/test_ipaserver/test_version_comparsion.py
new file mode 100644
index
0000000000000000000000000000000000000000..51d069b23ba389ffce39e948cdbc7a1faaa84563
--- /dev/null
+++ b/ipatests/test_ipaserver/test_version_comparsion.py
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2015 FreeIPA Contributors see COPYING for
license
+#
+
+"""
+tests for correct RPM version comparison
+"""
+
+from ipaplatform.tasks import tasks
+import pytest
+
+version_strings = [
+ ("3.0.el6", "3.0.0.el6", "older"),
+ ("3.0.0.el6", "3.0.0.el6_8.2", "older"),
+ ("3.0.0-42.el6", "3.0.0.el6", "newer"),
+ ("3.0.0-1", "3.0.0-42", "older"),
+ ("3.0.0-42.el6", "3.3.3.fc20", "older"),
+ ("4.2.0-15.el7", "4.2.0-15.el7_2.3", "older"),
+ ("4.2.0-15.el7_2.3", "4.2.0-15.el7_2.3", "equal"),
+ ("4.2.0-1.fc23", "4.2.1.fc23", "older"),
+ ("4.2.3-alpha.fc23", "4.2.3-2.fc23", "older"), #
numeric
version elements have
+ # precedence over
letters
+ ("4.3.90.201601080923GIT55aeea7-0.fc23", "4.3.0-1.fc23",
"newer")
+]
+
+
+@pytest.fixture(params=version_strings)
+def versions(request):
+ return request.param
+
+class TestVersionComparsion(object):
+
+ def test_versions(self, versions):
+ version_string1, version_string2,
expected_comparison =
versions
+
+ ver1 = tasks.parse_ipa_version(version_string1)
+ ver2 = tasks.parse_ipa_version(version_string2)
+
+ if expected_comparison == "newer":
+ assert ver1 > ver2
+ elif expected_comparison == "older":
+ assert ver1 < ver2
+ elif expected_comparison == "equal":
+ assert ver1 == ver2
+ else:
+ raise TypeError(
+ "Unexpected comparison string: {}",
expected_comparison)
--
2.5.0
>From 9677e1a3ca2f5837f1b779780127adf27efa81df Mon Sep 17
00:00:00
2001
From: Martin Babinsky <mbabi...@redhat.com>
Date: Fri, 8 Jan 2016 14:17:14 +0100
Subject: [PATCH 1/3] use FFI call to rpmvercmp function for
version
comparison
Stop using rpm-python to compare package versions since the
implicit NSS
initialization upon the module import breaks NSS
handling in
IPA
code. Call
rpm-libs C-API function via CFFI instead.
Big thanks to Martin Kosek <mko...@redhat.com> for
sharing the
code
snippet
that spurred this patch.
https://fedorahosted.org/freeipa/ticket/5572
---
freeipa.spec.in | 2 +-
ipaplatform/redhat/tasks.py | 59
+++++++++++++++++++++------------------------
2 files changed, 29 insertions(+), 32 deletions(-)
diff --git a/freeipa.spec.in b/freeipa.spec.in
index
7e956538d0f6c24bab636579303e0c7b5eeec199..7f31d41d16b2a26b404c277595f0994a21123f80
100644
--- a/freeipa.spec.in
+++ b/freeipa.spec.in
@@ -214,7 +214,7 @@ Requires: python-pyasn1
Requires: dbus-python
Requires: python-dns >= 1.11.1
Requires: python-kdcproxy >= 0.3
-Requires: rpm-python
+Requires: rpm-devel
/usr/lib64/librpm.so.7 is provided by package rpm-libs
sh$ rpm -qf /usr/lib64/librpm.so.7
rpm-libs-4.13.0-0.rc1.7.fc23.x86_64
It's not very common to depend on devel packages.
LS