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 -- Manage your subscription for the Freeipa-devel mailing list: https://www.redhat.com/mailman/listinfo/freeipa-devel Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code