ticket47963_test.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 pytest
  11. from lib389.tasks import *
  12. from lib389.topologies import topology_st
  13. logging.getLogger(__name__).setLevel(logging.DEBUG)
  14. log = logging.getLogger(__name__)
  15. def test_ticket47963(topology_st):
  16. '''
  17. Test that the memberOf plugin works correctly after setting:
  18. memberofskipnested: on
  19. '''
  20. PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config'
  21. USER_DN = 'uid=test_user,' + DEFAULT_SUFFIX
  22. GROUP_DN1 = 'cn=group1,' + DEFAULT_SUFFIX
  23. GROUP_DN2 = 'cn=group2,' + DEFAULT_SUFFIX
  24. GROUP_DN3 = 'cn=group3,' + DEFAULT_SUFFIX
  25. #
  26. # Enable the plugin and configure the skiop nest attribute, then restart the server
  27. #
  28. topology_st.standalone.plugins.enable(name=PLUGIN_MEMBER_OF)
  29. try:
  30. topology_st.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofskipnested', 'on')])
  31. except ldap.LDAPError as e:
  32. log.error('test_automember: Failed to modify config entry: error ' + e.message['desc'])
  33. assert False
  34. topology_st.standalone.restart(timeout=10)
  35. #
  36. # Add our groups, users, memberships, etc
  37. #
  38. try:
  39. topology_st.standalone.add_s(Entry((USER_DN, {
  40. 'objectclass': 'top extensibleObject'.split(),
  41. 'uid': 'test_user'
  42. })))
  43. except ldap.LDAPError as e:
  44. log.error('Failed to add teset user: error ' + e.message['desc'])
  45. assert False
  46. try:
  47. topology_st.standalone.add_s(Entry((GROUP_DN1, {
  48. 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(),
  49. 'cn': 'group1',
  50. 'member': USER_DN
  51. })))
  52. except ldap.LDAPError as e:
  53. log.error('Failed to add group1: error ' + e.message['desc'])
  54. assert False
  55. try:
  56. topology_st.standalone.add_s(Entry((GROUP_DN2, {
  57. 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(),
  58. 'cn': 'group2',
  59. 'member': USER_DN
  60. })))
  61. except ldap.LDAPError as e:
  62. log.error('Failed to add group2: error ' + e.message['desc'])
  63. assert False
  64. # Add group with no member(yet)
  65. try:
  66. topology_st.standalone.add_s(Entry((GROUP_DN3, {
  67. 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(),
  68. 'cn': 'group'
  69. })))
  70. except ldap.LDAPError as e:
  71. log.error('Failed to add group3: error ' + e.message['desc'])
  72. assert False
  73. time.sleep(1)
  74. #
  75. # Test we have the correct memberOf values in the user entry
  76. #
  77. try:
  78. member_filter = ('(&(memberOf=' + GROUP_DN1 + ')(memberOf=' + GROUP_DN2 + '))')
  79. entries = topology_st.standalone.search_s(USER_DN, ldap.SCOPE_BASE, member_filter)
  80. if not entries:
  81. log.fatal('User is missing expected memberOf attrs')
  82. assert False
  83. except ldap.LDAPError as e:
  84. log.fatal('Search for user1 failed: ' + e.message['desc'])
  85. assert False
  86. # Add the user to the group
  87. try:
  88. topology_st.standalone.modify_s(GROUP_DN3, [(ldap.MOD_ADD, 'member', USER_DN)])
  89. except ldap.LDAPError as e:
  90. log.error('Failed to member to group: error ' + e.message['desc'])
  91. assert False
  92. time.sleep(1)
  93. # Check that the test user is a "memberOf" all three groups
  94. try:
  95. member_filter = ('(&(memberOf=' + GROUP_DN1 + ')(memberOf=' + GROUP_DN2 +
  96. ')(memberOf=' + GROUP_DN3 + '))')
  97. entries = topology_st.standalone.search_s(USER_DN, ldap.SCOPE_BASE, member_filter)
  98. if not entries:
  99. log.fatal('User is missing expected memberOf attrs')
  100. assert False
  101. except ldap.LDAPError as e:
  102. log.fatal('Search for user1 failed: ' + e.message['desc'])
  103. assert False
  104. #
  105. # Delete group2, and check memberOf values in the user entry
  106. #
  107. try:
  108. topology_st.standalone.delete_s(GROUP_DN2)
  109. except ldap.LDAPError as e:
  110. log.error('Failed to delete test group2: ' + e.message['desc'])
  111. assert False
  112. time.sleep(1)
  113. try:
  114. member_filter = ('(&(memberOf=' + GROUP_DN1 + ')(memberOf=' + GROUP_DN3 + '))')
  115. entries = topology_st.standalone.search_s(USER_DN, ldap.SCOPE_BASE, member_filter)
  116. if not entries:
  117. log.fatal('User incorrect memberOf attrs')
  118. assert False
  119. except ldap.LDAPError as e:
  120. log.fatal('Search for user1 failed: ' + e.message['desc'])
  121. assert False
  122. log.info('Test complete')
  123. if __name__ == '__main__':
  124. # Run isolated
  125. # -s for DEBUG mode
  126. CURRENT_FILE = os.path.realpath(__file__)
  127. pytest.main("-s %s" % CURRENT_FILE)