ticket47560_test.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. # --- BEGIN COPYRIGHT BLOCK ---
  2. # Copyright (C) 2016 Red Hat, Inc.
  3. # All rights reserved.
  4. #
  5. # License: GPL (version 3 or any later version).
  6. # See LICENSE for details.
  7. # --- END COPYRIGHT BLOCK ---
  8. #
  9. import logging
  10. import time
  11. import ldap
  12. import pytest
  13. from lib389 import Entry
  14. from lib389._constants import *
  15. from lib389.properties import *
  16. from lib389.topologies import topology_st
  17. log = logging.getLogger(__name__)
  18. def test_ticket47560(topology_st):
  19. """
  20. This test case does the following:
  21. SETUP
  22. - Create entry cn=group,SUFFIX
  23. - Create entry cn=member,SUFFIX
  24. - Update 'cn=member,SUFFIX' to add "memberOf: cn=group,SUFFIX"
  25. - Enable Memberof Plugins
  26. # Here the cn=member entry has a 'memberOf' but
  27. # cn=group entry does not contain 'cn=member' in its member
  28. TEST CASE
  29. - start the fixupmemberof task
  30. - read the cn=member entry
  31. - check 'memberOf is now empty
  32. TEARDOWN
  33. - Delete entry cn=group,SUFFIX
  34. - Delete entry cn=member,SUFFIX
  35. - Disable Memberof Plugins
  36. """
  37. def _enable_disable_mbo(value):
  38. """
  39. Enable or disable mbo plugin depending on 'value' ('on'/'off')
  40. """
  41. # enable/disable the mbo plugin
  42. if value == 'on':
  43. topology_st.standalone.plugins.enable(name=PLUGIN_MEMBER_OF)
  44. else:
  45. topology_st.standalone.plugins.disable(name=PLUGIN_MEMBER_OF)
  46. log.debug("-------------> _enable_disable_mbo(%s)" % value)
  47. topology_st.standalone.stop(timeout=120)
  48. time.sleep(1)
  49. topology_st.standalone.start(timeout=120)
  50. time.sleep(3)
  51. # need to reopen a connection toward the instance
  52. topology_st.standalone.open()
  53. def _test_ticket47560_setup():
  54. """
  55. - Create entry cn=group,SUFFIX
  56. - Create entry cn=member,SUFFIX
  57. - Update 'cn=member,SUFFIX' to add "memberOf: cn=group,SUFFIX"
  58. - Enable Memberof Plugins
  59. """
  60. log.debug("-------- > _test_ticket47560_setup\n")
  61. #
  62. # By default the memberof plugin is disabled create
  63. # - create a group entry
  64. # - create a member entry
  65. # - set the member entry as memberof the group entry
  66. #
  67. entry = Entry(group_DN)
  68. entry.setValues('objectclass', 'top', 'groupOfNames', 'inetUser')
  69. entry.setValues('cn', 'group')
  70. try:
  71. topology_st.standalone.add_s(entry)
  72. except ldap.ALREADY_EXISTS:
  73. log.debug("Entry %s already exists" % (group_DN))
  74. entry = Entry(member_DN)
  75. entry.setValues('objectclass', 'top', 'person', 'organizationalPerson', 'inetorgperson', 'inetUser')
  76. entry.setValues('uid', 'member')
  77. entry.setValues('cn', 'member')
  78. entry.setValues('sn', 'member')
  79. try:
  80. topology_st.standalone.add_s(entry)
  81. except ldap.ALREADY_EXISTS:
  82. log.debug("Entry %s already exists" % (member_DN))
  83. replace = [(ldap.MOD_REPLACE, 'memberof', group_DN)]
  84. topology_st.standalone.modify_s(member_DN, replace)
  85. #
  86. # enable the memberof plugin and restart the instance
  87. #
  88. _enable_disable_mbo('on')
  89. #
  90. # check memberof attribute is still present
  91. #
  92. filt = 'uid=member'
  93. ents = topology_st.standalone.search_s(member_DN, ldap.SCOPE_BASE, filt)
  94. assert len(ents) == 1
  95. ent = ents[0]
  96. # print ent
  97. value = ent.getValue('memberof')
  98. # print "memberof: %s" % (value)
  99. assert value == group_DN
  100. def _test_ticket47560_teardown():
  101. """
  102. - Delete entry cn=group,SUFFIX
  103. - Delete entry cn=member,SUFFIX
  104. - Disable Memberof Plugins
  105. """
  106. log.debug("-------- > _test_ticket47560_teardown\n")
  107. # remove the entries group_DN and member_DN
  108. try:
  109. topology_st.standalone.delete_s(group_DN)
  110. except:
  111. log.warning("Entry %s fail to delete" % (group_DN))
  112. try:
  113. topology_st.standalone.delete_s(member_DN)
  114. except:
  115. log.warning("Entry %s fail to delete" % (member_DN))
  116. #
  117. # disable the memberof plugin and restart the instance
  118. #
  119. _enable_disable_mbo('off')
  120. group_DN = "cn=group,%s" % (SUFFIX)
  121. member_DN = "uid=member,%s" % (SUFFIX)
  122. #
  123. # Initialize the test case
  124. #
  125. _test_ticket47560_setup()
  126. #
  127. # start the test
  128. # - start the fixup task
  129. # - check the entry is fixed (no longer memberof the group)
  130. #
  131. log.debug("-------- > Start ticket tests\n")
  132. filt = 'uid=member'
  133. ents = topology_st.standalone.search_s(member_DN, ldap.SCOPE_BASE, filt)
  134. assert len(ents) == 1
  135. ent = ents[0]
  136. log.debug("Unfixed entry %r\n" % ent)
  137. # run the fixup task
  138. topology_st.standalone.tasks.fixupMemberOf(suffix=SUFFIX, args={TASK_WAIT: True})
  139. ents = topology_st.standalone.search_s(member_DN, ldap.SCOPE_BASE, filt)
  140. assert len(ents) == 1
  141. ent = ents[0]
  142. log.debug("Fixed entry %r\n" % ent)
  143. if ent.getValue('memberof') == group_DN:
  144. log.warning("Error the fixupMemberOf did not fix %s" % (member_DN))
  145. result_successful = False
  146. else:
  147. result_successful = True
  148. #
  149. # cleanup up the test case
  150. #
  151. _test_ticket47560_teardown()
  152. assert result_successful is True
  153. log.info('Testcase PASSED')
  154. if __name__ == '__main__':
  155. # Run isolated
  156. # -s for DEBUG mode
  157. CURRENT_FILE = os.path.realpath(__file__)
  158. pytest.main("-s %s" % CURRENT_FILE)