This is an automated email from the git hooks/post-receive script.
spichugi pushed a change to branch master in repository 389-ds-base.
from c917b93 Ticket 49443 - scope one searches in 1.3.7 give incorrect results new f02cbdd Ticket - lib389 - Python 3 support for memberof plugin test suit
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: .../suites/memberof_plugin/regression_test.py | 241 +++++++++++++++++++ dirsrvtests/tests/tickets/ticket49064_test.py | 261 --------------------- 2 files changed, 241 insertions(+), 261 deletions(-) create mode 100644 dirsrvtests/tests/suites/memberof_plugin/regression_test.py delete mode 100644 dirsrvtests/tests/tickets/ticket49064_test.py
This is an automated email from the git hooks/post-receive script.
spichugi pushed a commit to branch master in repository 389-ds-base.
commit f02cbddfa4a65e5ce2f6fbef1aadccacc922e0c5 Author: Amita Sharma amsharma@redhat.com Date: Thu Nov 9 18:41:05 2017 +0530
Ticket - lib389 - Python 3 support for memberof plugin test suit
Bug Description: ticket49064_test.py tests did not support python 3
Fix Description: Move the test file from tickets to suits/memberof_plugin/regression_test.py, fix config_memberof and other methods to use DSLdapObject, create test users and test groups using DSLdapObject in test case, fix some docstrings and add more comments. Remove add_user, add_group, update_member and memberof_fixup_task methods. Remove ticket49064_test.py from dirsrvtests/tests/tickets/
https://pagure.io/lib389/issue/3
Reviewed by: William Brown (Huge Thanks!), spichugi
Signed-off-by: Simon Pichugin spichugi@redhat.com --- .../suites/memberof_plugin/regression_test.py | 241 +++++++++++++++++++ dirsrvtests/tests/tickets/ticket49064_test.py | 261 --------------------- 2 files changed, 241 insertions(+), 261 deletions(-)
diff --git a/dirsrvtests/tests/suites/memberof_plugin/regression_test.py b/dirsrvtests/tests/suites/memberof_plugin/regression_test.py new file mode 100644 index 0000000..6ba4217 --- /dev/null +++ b/dirsrvtests/tests/suites/memberof_plugin/regression_test.py @@ -0,0 +1,241 @@ +import logging +import pytest +import os +import time +import ldap +import subprocess +from lib389.utils import ds_is_older +from lib389.topologies import topology_m1h1c1 as topo +from lib389._constants import * +from lib389.plugins import MemberOfPlugin +from lib389 import agreement +from lib389.idm.user import UserAccount, UserAccounts, TEST_USER_PROPERTIES +from lib389.idm.group import Groups, Group + +# Skip on older versions +pytestmark = pytest.mark.skipif(ds_is_older('1.3.7'), reason="Not implemented") + +USER_CN='user_' +GROUP_CN='group_' + +DEBUGGING = os.getenv("DEBUGGING", default=False) +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + + +def config_memberof(server): + # Configure fractional to prevent total init to send memberof + memberof = MemberOfPlugin(server) + memberof.enable() + memberof.set_autoaddoc('nsMemberOf') + server.restart() + ents = server.agreement.list(suffix=DEFAULT_SUFFIX) + for ent in ents: + log.info('update %s to add nsDS5ReplicatedAttributeListTotal' % ent.dn) + server.agreement.setProperties(agmnt_dn=ents[0].dn, + properties={RA_FRAC_EXCLUDE:'(objectclass=*) $ EXCLUDE memberOf', + RA_FRAC_EXCLUDE_TOTAL_UPDATE:'(objectclass=*) $ EXCLUDE '}) + + +def send_updates_now(server): + ents = server.agreement.list(suffix=DEFAULT_SUFFIX) + for ent in ents: + server.agreement.pause(ent.dn) + server.agreement.resume(ent.dn) + + +def _find_memberof(server, member_dn, group_dn): + #To get the specific server's (M1, C1 and H1) user and group + user = UserAccount(server, member_dn) + assert user.exists() + group = Group(server, group_dn) + assert group.exists() + + #test that the user entry should have memberof attribute with sepecified group dn value + assert group._dn in user.get_attr_vals_utf8('memberOf') + + +@pytest.mark.bz1352121 +def test_memberof_with_repl(topo): + """Test that we allowed to enable MemberOf plugin in dedicated consumer + + :id: 60c11636-55a1-4704-9e09-2c6bcc828de4 + :setup: 1 Master - 1 Hub - 1 Consumer + :steps: + 1. Configure replication to EXCLUDE memberof + 2. Enable memberof plugin + 3. Create users/groups + 4. Make user_0 member of group_0 + 5. Checks that user_0 is memberof group_0 on M,H,C + 6. Make group_0 member of group_1 (nest group) + 7. Checks that user_0 is memberof group_0 and group_1 on M,H,C + 8. Check group_0 is memberof group_1 on M,H,C + 9. Remove group_0 from group_1 + 10. Check group_0 and user_0 are NOT memberof group_1 on M,H,C + 11. Remove user_0 from group_0 + 12. Check user_0 is not memberof group_0 and group_1 on M,H,C + 13. Disable memberof on C + 14. make user_0 member of group_1 + 15. Checks that user_0 is memberof group_0 on M,H but not on C + 16. Enable memberof on C + 17. Checks that user_0 is memberof group_0 on M,H but not on C + 18. Run memberof fixup task + 19. Checks that user_0 is memberof group_0 on M,H,C + :expectedresults: + 1. Configuration should be successful + 2. Plugin should be enabled + 3. Users and groups should be created + 4. user_0 should be member of group_0 + 5. user_0 should be memberof group_0 on M,H,C + 6. group_0 should be member of group_1 + 7. user_0 should be memberof group_0 and group_1 on M,H,C + 8. group_0 should be memberof group_1 on M,H,C + 9. group_0 from group_1 removal should be successful + 10. group_0 and user_0 should not be memberof group_1 on M,H,C + 11. user_0 from group_0 remove should be successful + 12. user_0 should not be memberof group_0 and group_1 on M,H,C + 13. memberof should be disabled on C + 14. user_0 should be member of group_1 + 15. user_0 should be memberof group_0 on M,H and should not on C + 16. Enable memberof on C should be successful + 17. user_0 should be memberof group_0 on M,H should not on C + 18. memberof fixup task should be successful + 19. user_0 should be memberof group_0 on M,H,C + """ + + M1 = topo.ms["master1"] + H1 = topo.hs["hub1"] + C1 = topo.cs["consumer1"] + + # Step 1 & 2 + M1.config.enable_log('audit') + config_memberof(M1) + M1.restart() + + H1.config.enable_log('audit') + config_memberof(H1) + H1.restart() + + C1.config.enable_log('audit') + config_memberof(C1) + C1.restart() + + #Declare lists of users and groups + test_users = [] + test_groups = [] + + # Step 3 + #In for loop create users and add them in the user list + #it creates user_0 to user_9 (range is fun) + for i in range(10): + CN = '%s%d' % (USER_CN, i) + users = UserAccounts(M1, SUFFIX) + user_props = TEST_USER_PROPERTIES.copy() + user_props.update({'uid': CN, 'cn': CN, 'sn': '_%s' % CN}) + testuser = users.create(properties=user_props) + time.sleep(2) + test_users.append(testuser) + + #In for loop create groups and add them to the group list + #it creates group_0 to group_2 (range is fun) + for i in range(3): + CN = '%s%d' % (GROUP_CN, i) + groups = Groups(M1, SUFFIX) + testgroup = groups.create(properties={'cn' : CN}) + time.sleep(2) + test_groups.append(testgroup) + + # Step 4 + #Now start testing by adding differnt user to differn group + if not ds_is_older('1.3.7'): + test_groups[0].remove('objectClass', 'nsMemberOf') + + member_dn = test_users[0].dn + grp0_dn = test_groups[0].dn + grp1_dn = test_groups[1].dn + + test_groups[0].add_member(member_dn) + time.sleep(5) + + # Step 5 + for i in [M1, H1, C1]: + _find_memberof(i, member_dn, grp0_dn) + + # Step 6 + test_groups[1].add_member(test_groups[0].dn) + time.sleep(5) + + # Step 7 + for i in [grp0_dn, grp1_dn]: + for inst in [M1, H1, C1]: + _find_memberof(inst, member_dn, i) + + # Step 8 + for i in [M1, H1, C1]: + _find_memberof(i, grp0_dn, grp1_dn) + + # Step 9 + test_groups[1].remove_member(test_groups[0].dn) + time.sleep(5) + + # Step 10 + # For negative testcase, we are using assertionerror + for inst in [M1, H1, C1]: + for i in [grp0_dn, member_dn]: + with pytest.raises(AssertionError): + _find_memberof(inst, i, grp1_dn) + + # Step 11 + test_groups[0].remove_member(member_dn) + time.sleep(5) + + # Step 12 + for inst in [M1, H1, C1]: + for grp in [grp0_dn, grp1_dn]: + with pytest.raises(AssertionError): + _find_memberof(inst, member_dn, grp) + + # Step 13 + C1.plugins.disable(name=PLUGIN_MEMBER_OF) + C1.restart() + + # Step 14 + test_groups[0].add_member(member_dn) + time.sleep(5) + + # Step 15 + for i in [M1, H1]: + _find_memberof(i, member_dn, grp0_dn) + with pytest.raises(AssertionError): + _find_memberof(C1, member_dn, grp0_dn) + + # Step 16 + memberof = MemberOfPlugin(C1) + memberof.enable() + C1.restart() + + # Step 17 + for i in [M1, H1]: + _find_memberof(i, member_dn, grp0_dn) + with pytest.raises(AssertionError): + _find_memberof(C1, member_dn, grp0_dn) + + # Step 18 + memberof.fixup(SUFFIX) + time.sleep(5) + + # Step 19 + for i in [M1, H1, C1]: + _find_memberof(i, member_dn, grp0_dn) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + + diff --git a/dirsrvtests/tests/tickets/ticket49064_test.py b/dirsrvtests/tests/tickets/ticket49064_test.py deleted file mode 100644 index 772adb0..0000000 --- a/dirsrvtests/tests/tickets/ticket49064_test.py +++ /dev/null @@ -1,261 +0,0 @@ -import logging -import pytest -import os -import time -import ldap -import subprocess -from lib389.utils import ds_is_older -from lib389.topologies import topology_m1h1c1 as topo -from lib389._constants import * -from lib389 import Entry - -# Skip on older versions -pytestmark = pytest.mark.skipif(ds_is_older('1.3.7'), reason="Not implemented") - -USER_CN='user_' -GROUP_CN='group_' -FIXUP_FILTER = '(objectClass=*)' -FIXUP_CMD = 'fixup-memberof.pl' - -DEBUGGING = os.getenv("DEBUGGING", default=False) -if DEBUGGING: - logging.getLogger(__name__).setLevel(logging.DEBUG) -else: - logging.getLogger(__name__).setLevel(logging.INFO) -log = logging.getLogger(__name__) - -def memberof_fixup_task(server): - sbin_dir = server.get_sbin_dir() - memof_task = os.path.join(sbin_dir, FIXUP_CMD) - try: - output = subprocess.check_output( - [memof_task, '-D', DN_DM, '-w', PASSWORD, '-b', SUFFIX, '-Z', SERVERID_CONSUMER_1, '-f', FIXUP_FILTER]) - except subprocess.CalledProcessError as err: - output = err.output - log.info('output: {}'.format(output)) - expected = "Successfully added task entry" - assert expected in output - -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'), - (ldap.MOD_REPLACE, 'memberOfAutoAddOC', 'nsMemberOf')]) - # Configure fractional to prevent total init to send memberof - ents = server.agreement.list(suffix=DEFAULT_SUFFIX) - for ent in ents: - log.info('update %s to add nsDS5ReplicatedAttributeListTotal' % ent.dn) - server.modify_s(ent.dn, - [(ldap.MOD_REPLACE, - 'nsDS5ReplicatedAttributeListTotal', - '(objectclass=*) $ EXCLUDE '), - (ldap.MOD_REPLACE, - 'nsDS5ReplicatedAttributeList', - '(objectclass=*) $ EXCLUDE memberOf')]) - - -def send_updates_now(server): - - ents = server.agreement.list(suffix=DEFAULT_SUFFIX) - for ent in ents: - server.agreement.pause(ent.dn) - server.agreement.resume(ent.dn) - -def add_user(server, no, desc='dummy', sleep=True): - cn = '%s%d' % (USER_CN, no) - dn = 'cn=%s,ou=people,%s' % (cn, SUFFIX) - log.fatal('Adding user (%s): ' % dn) - server.add_s(Entry((dn, {'objectclass': ['top', 'person', 'inetuser'], - 'sn': ['_%s' % cn], - 'description': [desc]}))) - if sleep: - time.sleep(2) - -def add_group(server, nr, sleep=True): - cn = '%s%d' % (GROUP_CN, nr) - dn = 'cn=%s,ou=groups,%s' % (cn, SUFFIX) - server.add_s(Entry((dn, {'objectclass': ['top', 'groupofnames'], - 'description': 'group %d' % nr}))) - if sleep: - time.sleep(2) - -def update_member(server, member_dn, group_dn, op, sleep=True): - mod = [(op, 'member', member_dn)] - server.modify_s(group_dn, mod) - if sleep: - time.sleep(2) - -def _find_memberof(server, member_dn, group_dn, find_result=True): - ent = server.getEntry(member_dn, ldap.SCOPE_BASE, "(objectclass=*)", ['memberof']) - found = False - if ent.hasAttr('memberof'): - - for val in ent.getValues('memberof'): - server.log.info("!!!!!!! %s: memberof->%s" % (member_dn, val)) - server.log.info("!!!!!!! %s" % (val)) - server.log.info("!!!!!!! %s" % (group_dn)) - if val.lower() == group_dn.lower(): - found = True - break - - if find_result: - assert (found) - else: - assert (not found) - - -def test_ticket49064(topo): - """Specify a test case purpose or name here - - :id: 60c11636-55a1-4704-9e09-2c6bcc828de4 - :setup: 1 Master - 1 Hub - 1 Consumer - :steps: - 1. Configure replication to EXCLUDE memberof - 2. Enable memberof plugin - 3. Create users/groups - 4. make user_1 member of group_1 - 5. Checks that user_1 is memberof group_1 on M,H,C - 6. make group_1 member of group_2 (nest group) - 7. Checks that user_1 is memberof group_1 and group_2 on M,H,C - 8. Check group_1 is memberof group_2 on M,H,C - 9. remove group_1 from group_2 - 10. Check group_1 and user_1 are NOT memberof group_2 on M,H,C - 11. remove user_1 from group_1 - 12. Check user_1 is NOT memberof group_1 and group_2 on M,H,C - 13. Disable memberof on C1 - 14. make user_1 member of group_1 - 15. Checks that user is memberof group_1 on M,H but not on C - 16. Enable memberof on C1 - 17. Checks that user is memberof group_1 on M,H but not on C - 18. Run memberof fixup task - 19. Checks that user is memberof group_1 on M,H,C - - - :expectedresults: - no assert for membership check - """ - - - M1 = topo.ms["master1"] - H1 = topo.hs["hub1"] - C1 = topo.cs["consumer1"] - - # Step 1 & 2 - M1.config.enable_log('audit') - config_memberof(M1) - M1.restart() - - H1.config.enable_log('audit') - config_memberof(H1) - H1.restart() - - C1.config.enable_log('audit') - config_memberof(C1) - C1.restart() - - # Step 3 - for i in range(10): - add_user(M1, i, desc='add on m1') - for i in range(3): - add_group(M1, i) - - # Step 4 - member_dn = 'cn=%s%d,ou=people,%s' % (USER_CN, 1, SUFFIX) - group_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 1, SUFFIX) - update_member(M1, member_dn, group_dn, ldap.MOD_ADD, sleep=True) - - # Step 5 - for i in [M1, H1, C1]: - _find_memberof(i, member_dn, group_dn, find_result=True) - - - # Step 6 - user_dn = 'cn=%s%d,ou=people,%s' % (USER_CN, 1, SUFFIX) - grp1_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 1, SUFFIX) - grp2_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 2, SUFFIX) - update_member(M1, grp1_dn, grp2_dn, ldap.MOD_ADD, sleep=True) - - # Step 7 - for i in [grp1_dn, grp2_dn]: - for inst in [M1, H1, C1]: - _find_memberof(inst, user_dn, i, find_result=True) - - # Step 8 - for i in [M1, H1, C1]: - _find_memberof(i, grp1_dn, grp2_dn, find_result=True) - - # Step 9 - user_dn = 'cn=%s%d,ou=people,%s' % (USER_CN, 1, SUFFIX) - grp1_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 1, SUFFIX) - grp2_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 2, SUFFIX) - update_member(M1, grp1_dn, grp2_dn, ldap.MOD_DELETE, sleep=True) - - # Step 10 - for inst in [M1, H1, C1]: - for i in [grp1_dn, user_dn]: - _find_memberof(inst, i, grp2_dn, find_result=False) - - # Step 11 - member_dn = 'cn=%s%d,ou=people,%s' % (USER_CN, 1, SUFFIX) - group_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 1, SUFFIX) - update_member(M1, member_dn, group_dn, ldap.MOD_DELETE, sleep=True) - - # Step 12 - for inst in [M1, H1, C1]: - for grp in [grp1_dn, grp2_dn]: - _find_memberof(inst, member_dn, grp, find_result=False) - - # Step 13 - C1.plugins.disable(name=PLUGIN_MEMBER_OF) - C1.restart() - - # Step 14 - member_dn = 'cn=%s%d,ou=people,%s' % (USER_CN, 1, SUFFIX) - group_dn = 'cn=%s%d,ou=groups,%s' % (GROUP_CN, 1, SUFFIX) - update_member(M1, member_dn, group_dn, ldap.MOD_ADD, sleep=True) - # to give time to the update to go up to the C1 - time.sleep(10) - - # Step 15 - for i in [M1, H1]: - _find_memberof(i, member_dn, group_dn, find_result=True) - _find_memberof(C1, member_dn, group_dn, find_result=False) - - # Step 16 - C1.plugins.enable(name=PLUGIN_MEMBER_OF) - C1.restart() - - # Step 17 - for i in [M1, H1]: - _find_memberof(i, member_dn, group_dn, find_result=True) - _find_memberof(C1, member_dn, group_dn, find_result=False) - - # Step 18 - memberof_fixup_task(C1) - time.sleep(5) - - # Step 19 - for i in [M1, H1, C1]: - _find_memberof(i, member_dn, group_dn, find_result=True) - - # If you need any test suite initialization, - # please, write additional fixture for that (including finalizer). - # Topology for suites are predefined in lib389/topologies.py. - - # If you need host, port or any other data about instance, - # Please, use the instance object attributes for that (for example, topo.ms["master1"].serverid) - - if DEBUGGING: - # Add debugging steps(if any)... - pass - - -if __name__ == '__main__': - # Run isolated - # -s for DEBUG mode - CURRENT_FILE = os.path.realpath(__file__) - pytest.main("-s %s" % CURRENT_FILE) -
389-commits@lists.fedoraproject.org