From 73cdeb71472bb5d9fd8b1825f96c49ab8752abc0 Mon Sep 17 00:00:00 2001 From: Viktor Ashirov Date: Jun 03 2019 16:22:36 +0000 Subject: Issue 49761 - Fix CI test suite issues Bug Description: ds_is_older() and ds_is_newer() accept only one value. This becomes tricky when we need to compare current DS version to a number of versions across different branches where a feature was implemented or a bug was fixed. Fix Description: Add a generic function that accepts either string or multiple strings containing versions. If a single version string is passed, it is compared only to that string. If multiple version strings are passed, the comparison happens only in a related branch, i.e. '1.3.9.1' is compared only to '1.3.x', but not to '1.4.x'. Update replcheck_test.py to use different parameters for ds-replcheck depending on the version. Relates: https://pagure.io/389-ds-base/issue/49761 Reviewed by: mreynolds (Thanks!) --- diff --git a/dirsrvtests/tests/suites/ds_tools/replcheck_test.py b/dirsrvtests/tests/suites/ds_tools/replcheck_test.py index cfc4815..5773586 100644 --- a/dirsrvtests/tests/suites/ds_tools/replcheck_test.py +++ b/dirsrvtests/tests/suites/ds_tools/replcheck_test.py @@ -128,24 +128,42 @@ def replcheck_cmd_list(topo_tls_ldapi): ds_replcheck_path = os.path.join(m1.ds_paths.bin_dir, 'ds-replcheck') - replcheck_cmd = [[ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', - '-m', 'ldap://{}:{}'.format(m1.host, m1.port), '--conflicts', - '-r', 'ldap://{}:{}'.format(m2.host, m2.port)], - [ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', - '-m', 'ldaps://{}:{}'.format(m1.host, m1.sslport), '--conflicts', - '-r', 'ldaps://{}:{}'.format(m2.host, m2.sslport)], - [ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', - '-m', 'ldap://{}:{}'.format(m1.host, m1.port), '-Z', m1.get_ssca_dir(), - '-r', 'ldap://{}:{}'.format(m2.host, m2.port), '--conflicts'], - [ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', - '-m', 'ldapi://%2fvar%2frun%2fslapd-{}.socket'.format(m1.serverid), '--conflict', - '-r', 'ldapi://%2fvar%2frun%2fslapd-{}.socket'.format(m2.serverid)], - [ds_replcheck_path, 'offline', '-b', DEFAULT_SUFFIX, '--conflicts', '--rid', '1', - '-m', '/tmp/export_{}.ldif'.format(m1.serverid), - '-r', '/tmp/export_{}.ldif'.format(m2.serverid)]] - return replcheck_cmd + if ds_is_newer("1.4.1.2"): + replcheck_cmd = [[ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldap://{}:{}'.format(m1.host, m1.port), '--conflicts', + '-r', 'ldap://{}:{}'.format(m2.host, m2.port)], + [ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldaps://{}:{}'.format(m1.host, m1.sslport), '--conflicts', + '-r', 'ldaps://{}:{}'.format(m2.host, m2.sslport)], + [ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldap://{}:{}'.format(m1.host, m1.port), '-Z', m1.get_ssca_dir(), + '-r', 'ldap://{}:{}'.format(m2.host, m2.port), '--conflicts'], + [ds_replcheck_path, 'online', '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldapi://%2fvar%2frun%2fslapd-{}.socket'.format(m1.serverid), '--conflict', + '-r', 'ldapi://%2fvar%2frun%2fslapd-{}.socket'.format(m2.serverid)], + [ds_replcheck_path, 'offline', '-b', DEFAULT_SUFFIX, '--conflicts', '--rid', '1', + '-m', '/tmp/export_{}.ldif'.format(m1.serverid), + '-r', '/tmp/export_{}.ldif'.format(m2.serverid)]] + else: + replcheck_cmd = [[ds_replcheck_path, '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldap://{}:{}'.format(m1.host, m1.port), '--conflicts', + '-r', 'ldap://{}:{}'.format(m2.host, m2.port)], + [ds_replcheck_path, '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldaps://{}:{}'.format(m1.host, m1.sslport), '--conflicts', + '-r', 'ldaps://{}:{}'.format(m2.host, m2.sslport)], + [ds_replcheck_path, '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldap://{}:{}'.format(m1.host, m1.port), '-Z', m1.get_ssca_dir(), + '-r', 'ldap://{}:{}'.format(m2.host, m2.port), '--conflicts'], + [ds_replcheck_path, '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '-l', '1', + '-m', 'ldapi://%2fvar%2frun%2fslapd-{}.socket'.format(m1.serverid), '--conflict', + '-r', 'ldapi://%2fvar%2frun%2fslapd-{}.socket'.format(m2.serverid)], + [ds_replcheck_path, '-b', DEFAULT_SUFFIX, '-D', DN_DM, '-w', PW_DM, '--conflicts', + '-M', '/tmp/export_{}.ldif'.format(m1.serverid), + '-R', '/tmp/export_{}.ldif'.format(m2.serverid)]] + return replcheck_cmd +@pytest.mark.skipif(ds_is_older("1.4.1.2"), reason="Not implemented") def test_state(topo_tls_ldapi): """Check "state" report @@ -367,7 +385,7 @@ def test_inconsistencies(topo_tls_ldapi): assert attr_m1 in result assert attr_m2 in result assert attr_m1_only in result - if ds_is_newer("1.4.1.2"): + if ds_is_newer("1.3.9.1", "1.4.1.2"): assert attr_first not in result assert attr_second not in result # Ignore some attributes and check the output @@ -376,7 +394,7 @@ def test_inconsistencies(topo_tls_ldapi): assert attr_m1 not in result assert attr_m2 not in result assert attr_m1_only not in result - if ds_is_newer("1.4.1.2"): + if ds_is_newer("1.3.9.1", "1.4.1.2"): assert attr_first not in result assert attr_second not in result diff --git a/src/lib389/lib389/utils.py b/src/lib389/lib389/utils.py index 783c1cd..1472309 100644 --- a/src/lib389/lib389/utils.py +++ b/src/lib389/lib389/utils.py @@ -36,6 +36,7 @@ import filecmp import pwd import six import shlex +import operator import subprocess from socket import getfqdn from ldapurl import LDAPUrl @@ -1055,14 +1056,33 @@ def get_ds_version(): return p.version -def ds_is_older(ver): - """Return True if current version of ns-slapd is older than provided - version""" - return get_ds_version() < ver +def ds_is_related(relation, *ver): + """ + Return a result of a comparison between the current version of ns-slapd and a provided version. + """ + ops = {'older': operator.lt, + 'newer': operator.ge} + ds_ver = get_ds_version() + if len(ver) > 1: + for cmp_ver in ver: + if cmp_ver.startswith(ds_ver[:3]): + return ops[relation](ds_ver,cmp_ver) + else: + return ops[relation](ds_ver, ver[0]) -def ds_is_newer(ver): - return get_ds_version() >= ver +def ds_is_older(*ver): + """ + Return True if the current version of ns-slapd is older than a provided version + """ + return ds_is_related('older', *ver) + + +def ds_is_newer(*ver): + """ + Return True if the current version of ns-slapd is newer than a provided version + """ + return ds_is_related('newer', *ver) def getDateTime():