From 0b0daee7d7c646fe8ad399ed50ef4387251c63ce Mon Sep 17 00:00:00 2001 From: Amita Sharma Date: Tue, 9 Jan 2018 16:13:42 +0530 Subject: [PATCH] Ticket 48118 - Add CI test case Description: Add a test case to suites/memberof_plugin/regression_test.py Test that replication does not break, after DS stop-start, due to changelog reset, while using member_of plugin https://pagure.io/389-ds-base/issue/48118 Reviewed by: ??? --- .../suites/memberof_plugin/regression_test.py | 97 +++++++++++++++++++++- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/dirsrvtests/tests/suites/memberof_plugin/regression_test.py b/dirsrvtests/tests/suites/memberof_plugin/regression_test.py index bc7affe..2360ec2 100644 --- a/dirsrvtests/tests/suites/memberof_plugin/regression_test.py +++ b/dirsrvtests/tests/suites/memberof_plugin/regression_test.py @@ -12,13 +12,16 @@ import os import time import ldap import subprocess -from lib389.utils import ds_is_older +from random import sample +from lib389.utils import ds_is_older, ensure_list_bytes, ensure_bytes from lib389.topologies import topology_m1h1c1 as topo from lib389._constants import * from lib389.plugins import MemberOfPlugin -from lib389 import agreement +from lib389 import agreement, Entry from lib389.idm.user import UserAccount, UserAccounts, TEST_USER_PROPERTIES from lib389.idm.group import Groups, Group +from lib389.topologies import topology_m2 as topo_m2 +from lib389.replica import Replicas # Skip on older versions pytestmark = pytest.mark.skipif(ds_is_older('1.3.7'), reason="Not implemented") @@ -294,6 +297,96 @@ def test_scheme_violation_errors_logged(topo): assert inst.ds_error_log.match(pattern) +def add_users(topo_m2, users_num, suffix): + """Add users to the default suffix + Return the list of added user DNs. + """ + users_list = [] + users = UserAccounts(topo_m2.ms["master1"], suffix, rdn=None) + log.info('Adding %d users' % users_num) + for num in sample(range(1000), users_num): + num_ran = int(round(num)) + USER_NAME = 'test%05d' % num_ran + user = users.create(properties={ + 'uid': USER_NAME, + 'sn': USER_NAME, + 'cn': USER_NAME, + 'uidNumber': '%s' % num_ran, + 'gidNumber': '%s' % num_ran, + 'homeDirectory': '/home/%s' % USER_NAME, + 'mail': '%s@redhat.com' % USER_NAME, + 'userpassword': 'pass%s' % num_ran, + }) + users_list.append(user) + return users_list + + +@pytest.mark.bz1192099 +def test_memberof_with_changelog_reset(topo_m2): + """Test that replication does not break, after DS stop-start, due to changelog reset + + :id: 60c11636-55a1-4704-9e09-2c6bcc828de4 + :setup: 2 Masters + :steps: + 1. On M1 and M2, Enable memberof + 2. On M1, add 999 entries allowing memberof + 3. On M1, add a group with these 999 entries as members + 4. Stop M1 in between, + when add the group memerof is called and before it is finished the add , + so step 4 should be executed after memberof has started and before the add has finished + 5. Check that replication is working fine + :expectedresults: + 1. memberof should be enabled + 2. Entries should be added + 3. Add operation should start + 4. M1 should be stopped + 5. Replication should be working fine + """ + m1 = topo_m2.ms["master1"] + m2 = topo_m2.ms["master2"] + + log.info("Configure memberof on M1 and M2") + memberof = MemberOfPlugin(m1) + memberof.enable() + memberof.set_autoaddoc('nsMemberOf') + m1.restart() + + memberof = MemberOfPlugin(m2) + memberof.enable() + memberof.set_autoaddoc('nsMemberOf') + m2.restart() + + log.info("On M1, add 999 test entries allowing memberof") + users_list = add_users(topo_m2, 999, DEFAULT_SUFFIX) + + log.info("On M1, add a group with these 999 entries as members") + dic_of_attributes = {'cn': ensure_bytes('testgroup'), + 'objectclass': ensure_list_bytes(['top', 'groupOfNames'])} + + for user in users_list: + dic_of_attributes.setdefault('member',[]) + dic_of_attributes['member'].append(user.dn) + + log.info('Adding the test group using async function') + groupdn = 'cn=testgroup,%s' % DEFAULT_SUFFIX + m1.add(Entry((groupdn, dic_of_attributes))) + + #shutdown the server in-between adding the group + m1.stop() + + #start the server + m1.start() + + log.info("Check the log messages for error") + error_msg = "ERR - NSMMReplicationPlugin - ruv_compare_ruv" + assert not m1.ds_error_log.match(error_msg) + + log.info("Check that the replication is working fine both ways, M1 <-> M2") + replicas_m1 = Replicas(m1) + replicas_m2 = Replicas(m2) + replicas_m1.test(DEFAULT_SUFFIX, m2) + replicas_m2.test(DEFAULT_SUFFIX, m1) + if __name__ == '__main__': # Run isolated # -s for DEBUG mode -- 2.9.5