From 478932fcf5051d1f1090344d5db179ec64473cd8 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Mon, 21 Aug 2017 16:02:54 -0400 Subject: [PATCH] Ticket 49295 - Fix CI tests Description: Fix the next round of failures. There are still more issues with 48252 and 48755 https://pagure.io/389-ds-base/issue/49295 Reviewed by: ? --- .../tests/suites/plugins/rootdn_plugin_test.py | 19 +++-- .../replication/wait_for_async_feature_test.py | 11 ++- dirsrvtests/tests/tickets/ticket1347760_test.py | 16 ++-- dirsrvtests/tests/tickets/ticket47536_test.py | 19 +++-- dirsrvtests/tests/tickets/ticket47966_test.py | 2 +- dirsrvtests/tests/tickets/ticket47981_test.py | 4 +- dirsrvtests/tests/tickets/ticket48252_test.py | 21 +++-- dirsrvtests/tests/tickets/ticket48755_test.py | 2 +- dirsrvtests/tests/tickets/ticket48784_test.py | 6 +- dirsrvtests/tests/tickets/ticket49287_test.py | 98 +++++++++++++--------- 10 files changed, 114 insertions(+), 84 deletions(-) diff --git a/dirsrvtests/tests/suites/plugins/rootdn_plugin_test.py b/dirsrvtests/tests/suites/plugins/rootdn_plugin_test.py index a5f42ac..af5c4c4 100644 --- a/dirsrvtests/tests/suites/plugins/rootdn_plugin_test.py +++ b/dirsrvtests/tests/suites/plugins/rootdn_plugin_test.py @@ -295,7 +295,7 @@ def test_rootdn_access_denied_ip(topology_st): try: topology_st.standalone.simple_bind_s(USER1_DN, PASSWORD) except ldap.LDAPError as e: - log.fatal('test_rootdn_access_denied_ip: : failed to bind as user1') + log.fatal('test_rootdn_access_denied_ip: failed to bind as user1') assert False try: @@ -344,9 +344,10 @@ def test_rootdn_access_denied_host(topology_st): topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-deny-host', hostname)]) - topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, - 'rootdn-deny-host', - localhost)]) + if localhost != hostname: + topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + 'rootdn-deny-host', + localhost)]) except ldap.LDAPError as e: log.fatal('test_rootdn_access_denied_host: Failed to set deny host: error ' + e.message['desc']) @@ -524,12 +525,16 @@ def test_rootdn_access_allowed_host(topology_st): hostname = socket.gethostname() localhost = DirSrvTools.getLocalhost() try: - topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-allow-host', - localhost)]) + None)]) topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-allow-host', - hostname)]) + localhost)]) + if hostname != localhost: + topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + 'rootdn-allow-host', + hostname)]) except ldap.LDAPError as e: log.fatal('test_rootdn_access_allowed_host: Failed to set allowed host: error ' + e.message['desc']) diff --git a/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py b/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py index 34ead67..cac25f8 100644 --- a/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py +++ b/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py @@ -36,7 +36,7 @@ def waitfor_async_attr(topology_m2, request): # Run through all masters for num in range(1, 3): master = topology_m2.ms["master{}".format(num)] - agmt = topology_m2.ms["master{}_agmts".format(num)].values()[0] + agmt = master.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn try: if attr_value: log.info("Set %s: %s on %s" % ( @@ -97,9 +97,8 @@ def entries(topology_m2, request): def test_not_int_value(topology_m2): """Tests not integer value""" - master1 = topology_m2.ms["master1"] - agmt = topology_m2.ms["master1_agmts"]["m1_m2"] + agmt = master1.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn log.info("Try to set %s: wv1" % WAITFOR_ASYNC_ATTR) try: @@ -111,9 +110,9 @@ def test_not_int_value(topology_m2): def test_multi_value(topology_m2): """Tests multi value""" - master1 = topology_m2.ms["master1"] - agmt = topology_m2.ms["master1_agmts"]["m1_m2"] + agmt = master1.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn + log.info("agmt: %s" % agmt) log.info("Try to set %s: 100 and 101 in the same time (multi value test)" % ( @@ -134,7 +133,7 @@ def test_value_check(topology_m2, waitfor_async_attr): for num in range(1, 3): master = topology_m2.ms["master{}".format(num)] - agmt = topology_m2.ms["master{}_agmts".format(num)].values()[0] + agmt = master.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn log.info("Check attr %s on %s" % (WAITFOR_ASYNC_ATTR, master.serverid)) try: diff --git a/dirsrvtests/tests/tickets/ticket1347760_test.py b/dirsrvtests/tests/tickets/ticket1347760_test.py index 9187cf6..4dc2311 100644 --- a/dirsrvtests/tests/tickets/ticket1347760_test.py +++ b/dirsrvtests/tests/tickets/ticket1347760_test.py @@ -79,7 +79,7 @@ def check_op_result(server, op, dn, superior, exists, rc): else: opstr = 'Modifying non-existing entry' elif op == 'modrdn': - if superior != None: + if superior is not None: targetdn = superior if exists: opstr = 'Moving to existing superior' @@ -113,7 +113,7 @@ def check_op_result(server, op, dn, superior, exists, rc): elif op == 'modify': server.modify_s(dn, [(ldap.MOD_REPLACE, 'description', 'test')]) elif op == 'modrdn': - if superior != None: + if superior is not None: server.rename_s(dn, 'uid=new', newsuperior=superior, delold=1) else: server.rename_s(dn, 'uid=new', delold=1) @@ -127,7 +127,7 @@ def check_op_result(server, op, dn, superior, exists, rc): log.info("Exception (expected): %s" % type(e).__name__) log.info('Desc ' + e.message['desc']) assert isinstance(e, rc) - if e.message.has_key('matched'): + if 'matched' in e.message: log.info('Matched is returned: ' + e.message['matched']) if rc != ldap.NO_SUCH_OBJECT: assert False @@ -206,7 +206,7 @@ def test_ticket1347760(topology_st): assert isinstance(e, ldap.INVALID_CREDENTIALS) regex = re.compile('No such entry') cause = pattern_accesslog(file_obj, regex) - if cause == None: + if cause is None: log.fatal('Cause not found - %s' % cause) assert False else: @@ -220,7 +220,7 @@ def test_ticket1347760(topology_st): topology_st.standalone.simple_bind_s(BOGUSSUFFIX, 'bogus') regex = re.compile('No suffix for bind') cause = pattern_accesslog(file_obj, regex) - if cause == None: + if cause is None: log.fatal('Cause not found - %s' % cause) assert False else: @@ -238,7 +238,7 @@ def test_ticket1347760(topology_st): assert isinstance(e, ldap.INVALID_CREDENTIALS) regex = re.compile('Invalid credentials') cause = pattern_accesslog(file_obj, regex) - if cause == None: + if cause is None: log.fatal('Cause not found - %s' % cause) assert False else: @@ -437,13 +437,13 @@ def test_ticket1347760(topology_st): log.info('Desc ' + e.message['desc']) assert isinstance(e, ldap.UNWILLING_TO_PERFORM) - log.info('Bind as {%s,%s} which should fail with %s.' % (BINDDN, 'bogus', ldap.INVALID_CREDENTIALS.__name__)) + log.info('Bind as {%s,%s} which should fail with %s.' % (BINDDN, 'bogus', ldap.UNWILLING_TO_PERFORM.__name__)) try: topology_st.standalone.simple_bind_s(BINDDN, 'bogus') except ldap.LDAPError as e: log.info("Exception (expected): %s" % type(e).__name__) log.info('Desc ' + e.message['desc']) - assert isinstance(e, ldap.INVALID_CREDENTIALS) + assert isinstance(e, ldap.UNWILLING_TO_PERFORM) log.info('SUCCESS') diff --git a/dirsrvtests/tests/tickets/ticket47536_test.py b/dirsrvtests/tests/tickets/ticket47536_test.py index bb30bc8..bd7baf8 100644 --- a/dirsrvtests/tests/tickets/ticket47536_test.py +++ b/dirsrvtests/tests/tickets/ticket47536_test.py @@ -13,8 +13,7 @@ import subprocess from lib389.tasks import * from lib389.utils import * from lib389.topologies import topology_m2 - -from lib389._constants import DEFAULT_SUFFIX, DN_DM, PASSWORD +from lib389._constants import * pytestmark = pytest.mark.skipif(ds_is_older('1.3.5'), reason="Not implemented") @@ -290,7 +289,9 @@ def config_tls_agreements(topology_m2): log.info("##################### master1 <- tls_clientAuth -- master2 ##################") log.info("##### Update the agreement of master1") - m1_m2_agmt = topology_m2.ms["master1_agmts"]["m1_m2"] + m1 = topology_m2.ms["master1"] + m1_m2_agmt = m1.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn + topology_m2.ms["master1"].modify_s(m1_m2_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS')]) log.info("##### Add the cert to the repl manager on master1") @@ -328,16 +329,18 @@ def config_tls_agreements(topology_m2): m1certmap = '%s/certmap.conf' % (m1confdir) os.system('chmod 660 %s' % m1certmap) m1cm = open(m1certmap, "w") - m1cm.write('certmap Example %s\n' % ISSUER) - m1cm.write('Example:DNComps cn\n') + m1cm.write('certmap Example %s\n' % ISSUER) + m1cm.write('Example:DNComps cn\n') m1cm.write('Example:FilterComps\n') - m1cm.write('Example:verifycert on\n') - m1cm.write('Example:CmapLdapAttr description') + m1cm.write('Example:verifycert on\n') + m1cm.write('Example:CmapLdapAttr description') m1cm.close() os.system('chmod 440 %s' % m1certmap) log.info("##### Update the agreement of master2") - m2_m1_agmt = topology_m2.ms["master2_agmts"]["m2_m1"] + m2 = topology_m2.ms["master2"] + m2_m1_agmt = m2.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn + topology_m2.ms["master2"].modify_s(m2_m1_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS'), (ldap.MOD_REPLACE, 'nsDS5ReplicaBindMethod', 'SSLCLIENTAUTH')]) diff --git a/dirsrvtests/tests/tickets/ticket47966_test.py b/dirsrvtests/tests/tickets/ticket47966_test.py index cace643..ba6f3b6 100644 --- a/dirsrvtests/tests/tickets/ticket47966_test.py +++ b/dirsrvtests/tests/tickets/ticket47966_test.py @@ -26,7 +26,7 @@ def test_ticket47966(topology_m2): log.info('Testing Ticket 47966 - [VLV] slapd crashes during Dogtag clone reinstallation') M1 = topology_m2.ms["master1"] M2 = topology_m2.ms["master2"] - m1_m2_agmt = topology_m2.ms["master1_agmts"]["m1_m2"] + m1_m2_agmt = M1.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn log.info('0. Create a VLV index on Master 2.') # get the backend entry diff --git a/dirsrvtests/tests/tickets/ticket47981_test.py b/dirsrvtests/tests/tickets/ticket47981_test.py index 9ed3694..753169e 100644 --- a/dirsrvtests/tests/tickets/ticket47981_test.py +++ b/dirsrvtests/tests/tickets/ticket47981_test.py @@ -82,7 +82,7 @@ def addSubtreePwPolicy(inst): except ldap.LDAPError as e: log.error('Failed to add COS def: error ' + e.message['desc']) assert False - time.sleep(0.5) + time.sleep(1) def delSubtreePwPolicy(inst): @@ -109,7 +109,7 @@ def delSubtreePwPolicy(inst): except ldap.LDAPError as e: log.error('Failed to delete COS container: error ' + e.message['desc']) assert False - time.sleep(0.5) + time.sleep(1) def test_ticket47981(topology_st): diff --git a/dirsrvtests/tests/tickets/ticket48252_test.py b/dirsrvtests/tests/tickets/ticket48252_test.py index d8d25e8..47f0eac 100644 --- a/dirsrvtests/tests/tickets/ticket48252_test.py +++ b/dirsrvtests/tests/tickets/ticket48252_test.py @@ -22,7 +22,6 @@ USER_NUM = 10 TEST_USER = "test_user" - def test_ticket48252_setup(topology_st): """ Enable USN plug-in for enabling tombstones @@ -51,7 +50,7 @@ def test_ticket48252_setup(topology_st): def in_index_file(topology_st, id, index): key = "%s%s" % (TEST_USER, id) - log.info(" dbscan - checking %s is in index file %s..." % (key, index)) + log.info(" dbscan - checking %s is in index file %s..." % (key, index)) dbscanOut = topology_st.standalone.dbscan(DEFAULT_BENAME, index) if key in dbscanOut: @@ -73,16 +72,16 @@ def test_ticket48252_run_0(topology_st): uas = UserAccounts(topology_st.standalone, DEFAULT_SUFFIX) del_rdn = "cn=%s0" % TEST_USER del_entry = uas.get('%s0' % TEST_USER) - log.info(" Deleting a test entry %s..." % del_entry) + log.info(" Deleting a test entry %s..." % del_entry) del_entry.delete() assert in_index_file(topology_st, 0, 'cn') == False - log.info(" db2index - reindexing %s ..." % 'cn') + log.info(" db2index - reindexing %s ..." % 'cn') assert topology_st.standalone.db2index(DEFAULT_BENAME, 'cn') assert in_index_file(topology_st, 0, 'cn') == False - log.info(" entry %s is not in the cn index file after reindexed." % del_rdn) + log.info(" entry %s is not in the cn index file after reindexed." % del_rdn) log.info('Case 1 - PASSED') @@ -95,7 +94,7 @@ def test_ticket48252_run_1(topology_st): uas = UserAccounts(topology_st.standalone, DEFAULT_SUFFIX) del_rdn = "cn=%s1" % TEST_USER del_entry = uas.get('%s1' % TEST_USER) - log.info(" Deleting a test entry %s..." % del_rdn) + log.info(" Deleting a test entry %s..." % del_rdn) del_uniqueid = del_entry.get_attr_val_utf8('nsuniqueid') @@ -106,20 +105,20 @@ def test_ticket48252_run_1(topology_st): entry = topology_st.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(&(objectclass=nstombstone)(nsuniqueid=%s))' % del_uniqueid) assert len(entry) == 1 - log.info(" entry %s is in the objectclass index file." % del_rdn) + log.info(" entry %s is in the objectclass index file." % del_rdn) entry = topology_st.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(&(objectclass=nstombstone)(%s))' % del_rdn) assert len(entry) == 0 - log.info(" entry %s is correctly not in the cn index file before reindexing." % del_rdn) + log.info(" entry %s is correctly not in the cn index file before reindexing." % del_rdn) - log.info(" db2index - reindexing %s ..." % 'objectclass') + log.info(" db2index - reindexing %s ..." % 'objectclass') assert topology_st.standalone.db2index(DEFAULT_BENAME, 'objectclass') entry = topology_st.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(&(objectclass=nstombstone)(nsuniqueid=%s))' % del_uniqueid) assert len(entry) == 1 - log.info(" entry %s is in the objectclass index file after reindexing." % del_rdn) + log.info(" entry %s is in the objectclass index file after reindexing." % del_rdn) entry = topology_st.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(&(objectclass=nstombstone)(%s))' % del_rdn) assert len(entry) == 0 - log.info(" entry %s is correctly not in the cn index file after reindexing." % del_rdn) + log.info(" entry %s is correctly not in the cn index file after reindexing." % del_rdn) log.info('Case 2 - PASSED') diff --git a/dirsrvtests/tests/tickets/ticket48755_test.py b/dirsrvtests/tests/tickets/ticket48755_test.py index 9f2e2ac..b147d3e 100644 --- a/dirsrvtests/tests/tickets/ticket48755_test.py +++ b/dirsrvtests/tests/tickets/ticket48755_test.py @@ -133,7 +133,7 @@ def test_ticket48755(topology_m2): log.info('%s => %s => %s => %s => 10 USERS' % (DEFAULT_SUFFIX, parent1, parent01, parent001)) log.info("Run Consumer Initialization.") - m1_m2_agmt = topology_m2.ms["master1_agmts"]["m1_m2"] + m1_m2_agmt = M1.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn M1.startReplication_async(m1_m2_agmt) M1.waitForReplInit(m1_m2_agmt) time.sleep(2) diff --git a/dirsrvtests/tests/tickets/ticket48784_test.py b/dirsrvtests/tests/tickets/ticket48784_test.py index f562eb8..0f63302 100644 --- a/dirsrvtests/tests/tickets/ticket48784_test.py +++ b/dirsrvtests/tests/tickets/ticket48784_test.py @@ -113,11 +113,13 @@ def config_tls_agreements(topology_m2): log.info("######################## master1 <-- startTLS -> master2 #####################") log.info("##### Update the agreement of master1") - m1_m2_agmt = topology_m2.ms["master1_agmts"]["m1_m2"] + m1 = topology_m2.ms["master1"] + m1_m2_agmt = m1.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn topology_m2.ms["master1"].modify_s(m1_m2_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS')]) log.info("##### Update the agreement of master2") - m2_m1_agmt = topology_m2.ms["master2_agmts"]["m2_m1"] + m2 = topology_m2.ms["master2"] + m2_m1_agmt = m2.agreement.list(suffix=DEFAULT_SUFFIX)[0].dn topology_m2.ms["master2"].modify_s(m2_m1_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS')]) time.sleep(1) diff --git a/dirsrvtests/tests/tickets/ticket49287_test.py b/dirsrvtests/tests/tickets/ticket49287_test.py index 6a5f0a2..21ccf60 100644 --- a/dirsrvtests/tests/tickets/ticket49287_test.py +++ b/dirsrvtests/tests/tickets/ticket49287_test.py @@ -9,10 +9,9 @@ import pytest from lib389.tasks import * from lib389.utils import * -from lib389._constants import (SUFFIX, ReplicaRole, defaultProperties, REPLICATION_BIND_DN, PLUGIN_MEMBER_OF, - REPLICATION_BIND_PW, REPLICATION_BIND_METHOD, REPLICATION_TRANSPORT) from lib389.properties import RA_NAME, RA_BINDDN, RA_BINDPW, RA_METHOD, RA_TRANSPORT_PROT, BACKEND_NAME from lib389.topologies import topology_m2 +from lib389._constants import * DEBUGGING = os.getenv('DEBUGGING', False) GROUP_DN = ("cn=group," + DEFAULT_SUFFIX) @@ -23,17 +22,19 @@ else: logging.getLogger(__name__).setLevel(logging.INFO) log = logging.getLogger(__name__) + def _add_repl_backend(s1, s2, be, rid): suffix = 'ou=%s,dc=test,dc=com' % be create_backend(s1, s2, suffix, be) add_ou(s1, suffix) replicate_backend(s1, s2, suffix, rid) + def _wait_for_sync(s1, s2, testbase, final_db): now = time.time() - cn1 = 'sync-%s-%d' % (now,1) - cn2 = 'sync-%s-%d' % (now,2) + cn1 = 'sync-%s-%d' % (now, 1) + cn2 = 'sync-%s-%d' % (now, 2) add_user(s1, cn1, testbase, 'add on m1', sleep=False) add_user(s2, cn2, testbase, 'add on m2', sleep=False) dn1 = 'cn=%s,%s' % (cn1, testbase) @@ -60,15 +61,16 @@ def _check_entry_exist(master, dn, loops=10, wait=1): assert False assert attempt <= loops + def config_memberof(server): server.plugins.enable(name=PLUGIN_MEMBER_OF) MEMBEROF_PLUGIN_DN = ('cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config') - server.modify_s(MEMBEROF_PLUGIN_DN, - [(ldap.MOD_REPLACE, - 'memberOfAllBackends','on')]) + server.modify_s(MEMBEROF_PLUGIN_DN, [(ldap.MOD_REPLACE, + 'memberOfAllBackends', + 'on')]) # Configure fractional to prevent total init to send memberof - ents = server.agreement.list(suffix=SUFFIX) + ents = server.agreement.list(suffix=DEFAULT_SUFFIX) log.info('update %s to add nsDS5ReplicatedAttributeListTotal' % ents[0].dn) for ent in ents: server.modify_s(ent.dn, @@ -79,25 +81,31 @@ def config_memberof(server): 'nsDS5ReplicatedAttributeList', '(objectclass=*) $ EXCLUDE memberOf')]) + def _disable_auto_oc_memberof(server): MEMBEROF_PLUGIN_DN = ('cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config') server.modify_s(MEMBEROF_PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberOfAutoAddOC', 'nsContainer')]) + def _enable_auto_oc_memberof(server): MEMBEROF_PLUGIN_DN = ('cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config') server.modify_s(MEMBEROF_PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberOfAutoAddOC', 'nsMemberOf')]) + def add_dc(server, dn): server.add_s(Entry((dn, {'objectclass': ['top', 'domain']}))) + def add_ou(server, dn): server.add_s(Entry((dn, {'objectclass': ['top', 'organizationalunit']}))) + def add_container(server, dn): server.add_s(Entry((dn, {'objectclass': ['top', 'nscontainer']}))) + def add_user(server, cn, testbase, desc, sleep=True): dn = 'cn=%s,%s' % (cn, testbase) log.fatal('Adding user (%s): ' % dn) @@ -107,6 +115,7 @@ def add_user(server, cn, testbase, desc, sleep=True): if sleep: time.sleep(2) + def add_person(server, cn, testbase, desc, sleep=True): dn = 'cn=%s,%s' % (cn, testbase) log.fatal('Adding user (%s): ' % dn) @@ -116,6 +125,7 @@ def add_person(server, cn, testbase, desc, sleep=True): if sleep: time.sleep(2) + def add_multi_member(server, cn, mem_id, mem_usr, testbase, sleep=True): dn = 'cn=%s,ou=groups,%s' % (cn, testbase) members = [] @@ -126,10 +136,11 @@ def add_multi_member(server, cn, mem_id, mem_usr, testbase, sleep=True): server.modify_s(dn, mod) except ldap.OBJECT_CLASS_VIOLATION: log.info('objectclass violation') - + if sleep: time.sleep(2) + def add_member(server, cn, mem, testbase, sleep=True): dn = 'cn=%s,ou=groups,%s' % (cn, testbase) mem_dn = 'cn=%s,ou=people,%s' % (mem, testbase) @@ -138,19 +149,21 @@ def add_member(server, cn, mem, testbase, sleep=True): if sleep: time.sleep(2) + def add_group(server, testbase, nr, sleep=True): dn = 'cn=g%d,ou=groups,%s' % (nr, testbase) server.add_s(Entry((dn, {'objectclass': ['top', 'groupofnames'], 'member': [ - 'cn=m1_%d,%s' % (nr,testbase), - 'cn=m2_%d,%s' % (nr,testbase), - 'cn=m3_%d,%s' % (nr,testbase) + 'cn=m1_%d,%s' % (nr, testbase), + 'cn=m2_%d,%s' % (nr, testbase), + 'cn=m3_%d,%s' % (nr, testbase) ], 'description': 'group %d' % nr}))) if sleep: time.sleep(2) + def del_group(server, testbase, nr, sleep=True): dn = 'cn=g%d,%s' % (nr, testbase) @@ -158,24 +171,28 @@ def del_group(server, testbase, nr, sleep=True): if sleep: time.sleep(2) + def mod_entry(server, cn, testbase, desc): dn = 'cn=%s,%s' % (cn, testbase) mod = [(ldap.MOD_ADD, 'description', desc)] server.modify_s(dn, mod) time.sleep(2) + def del_entry(server, testbase, cn): dn = 'cn=%s,%s' % (cn, testbase) server.delete_s(dn) time.sleep(2) + def _disable_nunc_stans(server): server.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-enable-nunc-stans', 'off')]) + def _enable_spec_logging(server): mods = [(ldap.MOD_REPLACE, 'nsslapd-accesslog-level', str(260)), # Internal op - (ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192+65536)), + (ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192 + 65536)), # (ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192+32768+524288)), # (ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192)), (ldap.MOD_REPLACE, 'nsslapd-plugin-logging', 'on')] @@ -183,17 +200,17 @@ def _enable_spec_logging(server): server.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-auditlog-logging-enabled', 'on')]) + def create_agmt(s1, s2, replSuffix): - properties = {RA_NAME: 'meTo_{}:{}'.format(s1.host, - str(s2.port)), + properties = {RA_NAME: 'meTo_{}:{}'.format(s1.host, str(s2.port)), RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} new_agmt = s1.agreement.create(suffix=replSuffix, - host=s2.host, - port=s2.port, - properties=properties) + host=s2.host, + port=s2.port, + properties=properties) return new_agmt @@ -203,9 +220,11 @@ def create_backend(s1, s2, beSuffix, beName): s2.mappingtree.create(beSuffix, beName) s2.backend.create(beSuffix, {BACKEND_NAME: beName}) + def replicate_backend(s1, s2, beSuffix, rid): s1.replica.enableReplication(suffix=beSuffix, role=ReplicaRole.MASTER, replicaId=rid) - s2.replica.enableReplication(suffix=beSuffix, role=ReplicaRole.MASTER, replicaId=rid+1) + s2.replica.enableReplication(suffix=beSuffix, role=ReplicaRole.MASTER, replicaId=rid + 1) + # agreement m2_m1_agmt is not needed... :p s1s2_agmt = create_agmt(s1, s2, beSuffix) @@ -213,23 +232,25 @@ def replicate_backend(s1, s2, beSuffix, rid): s1.agreement.init(beSuffix, s2.host, s2.port) s1.waitForReplInit(s1s2_agmt) + def check_group_mods(server1, server2, group, testbase): - # add members to group + # add members to group add_multi_member(server1, group, 1, [1,2,3,4,5], testbase, sleep=False) add_multi_member(server1, group, 2, [3,4,5], testbase, sleep=False) add_multi_member(server1, group, 3, [0], testbase, sleep=False) add_multi_member(server1, group, 4, [1,3,5], testbase, sleep=False) add_multi_member(server1, group, 5, [2,0], testbase, sleep=False) add_multi_member(server1, group, 6, [2,3,4], testbase, sleep=False) - # check that replication is working - # for main backend and some member backends + # check that replication is working + # for main backend and some member backends _wait_for_sync(server1, server2, testbase, None) for i in range(6): be = "be_%d" % i - _wait_for_sync(server1, server2, 'ou=%s,dc=test,dc=com'%be, None) + _wait_for_sync(server1, server2, 'ou=%s,dc=test,dc=com' % be, None) + def check_multi_group_mods(server1, server2, group1, group2, testbase): - # add members to group + # add members to group add_multi_member(server2, group1, 1, [1,2,3,4,5], testbase, sleep=False) add_multi_member(server1, group2, 1, [1,2,3,4,5], testbase, sleep=False) add_multi_member(server2, group1, 2, [3,4,5], testbase, sleep=False) @@ -242,12 +263,13 @@ def check_multi_group_mods(server1, server2, group1, group2, testbase): add_multi_member(server1, group2, 5, [2,0], testbase, sleep=False) add_multi_member(server2, group1, 6, [2,3,4], testbase, sleep=False) add_multi_member(server1, group2, 6, [2,3,4], testbase, sleep=False) - # check that replication is working - # for main backend and some member backends + # check that replication is working + # for main backend and some member backends _wait_for_sync(server1, server2, testbase, None) for i in range(6): be = "be_%d" % i - _wait_for_sync(server1, server2, 'ou=%s,dc=test,dc=com'%be, None) + _wait_for_sync(server1, server2, 'ou=%s,dc=test,dc=com' % be, None) + def test_ticket49287(topology_m2): """ @@ -260,7 +282,6 @@ def test_ticket49287(topology_m2): M1 = topology_m2.ms["master1"] M2 = topology_m2.ms["master2"] - config_memberof(M1) config_memberof(M2) @@ -290,7 +311,7 @@ def test_ticket49287(topology_m2): cn = 'a%d' % i add_user(M1, cn, peoplebase, 'add on m1', sleep=False) time.sleep(2) - add_group(M1,testbase, 1) + add_group(M1, testbase, 1) for i in range(10): cn = 'a%d' % i add_member(M1, 'g1', cn, testbase, sleep=False) @@ -304,37 +325,38 @@ def test_ticket49287(topology_m2): # test group with members in multiple backends for i in range(7): be = "be_%d" % i - _add_repl_backend(M1, M2, be, 300+i) + _add_repl_backend(M1, M2, be, 300 + i) # add entries akllowing meberof - for i in range(1,7): + for i in range(1, 7): be = "be_%d" % i for i in range(10): cn = 'a%d' % i - add_user(M1, cn, 'ou=%s,dc=test,dc=com'%be, 'add on m1', sleep=False) + add_user(M1, cn, 'ou=%s,dc=test,dc=com' % be, 'add on m1', sleep=False) # add entries not allowing memberof be = 'be_0' for i in range(10): cn = 'a%d' % i - add_person(M1, cn, 'ou=%s,dc=test,dc=com'%be, 'add on m1', sleep=False) + add_person(M1, cn, 'ou=%s,dc=test,dc=com' % be, 'add on m1', sleep=False) _disable_auto_oc_memberof(M1) _disable_auto_oc_memberof(M2) - add_group(M1,testbase, 2) + add_group(M1, testbase, 2) check_group_mods(M1, M2, 'g2', testbase) _enable_auto_oc_memberof(M1) - add_group(M1,testbase, 3) + add_group(M1, testbase, 3) check_group_mods(M1, M2, 'g3', testbase) _enable_auto_oc_memberof(M2) - add_group(M1,testbase, 4) + add_group(M1, testbase, 4) check_group_mods(M1, M2, 'g4', testbase) - add_group(M1,testbase, 5) - add_group(M1,testbase, 6) + add_group(M1, testbase, 5) + add_group(M1, testbase, 6) check_multi_group_mods(M1, M2, 'g5', 'g6', testbase) + if __name__ == '__main__': # Run isolated # -s for DEBUG mode -- 2.9.4