automember_mod_test.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import logging
  2. import pytest
  3. import os
  4. from lib389.utils import ds_is_older
  5. from lib389._constants import *
  6. from lib389.plugins import AutoMembershipPlugin, AutoMembershipDefinitions
  7. from lib389.idm.user import UserAccounts
  8. from lib389.idm.group import Groups
  9. from lib389.topologies import topology_st as topo
  10. # Skip on older versions
  11. pytestmark = [pytest.mark.tier1,
  12. pytest.mark.skipif(ds_is_older('1.4.0'), reason="Not implemented")]
  13. DEBUGGING = os.getenv("DEBUGGING", default=False)
  14. if DEBUGGING:
  15. logging.getLogger(__name__).setLevel(logging.DEBUG)
  16. else:
  17. logging.getLogger(__name__).setLevel(logging.INFO)
  18. log = logging.getLogger(__name__)
  19. @pytest.fixture(scope="module")
  20. def automember_fixture(topo, request):
  21. # Create group
  22. groups = []
  23. group_obj = Groups(topo.standalone, DEFAULT_SUFFIX)
  24. groups.append(group_obj.create(properties={'cn': 'testgroup'}))
  25. groups.append(group_obj.create(properties={'cn': 'testgroup2'}))
  26. groups.append(group_obj.create(properties={'cn': 'testgroup3'}))
  27. # Create test user
  28. user_accts = UserAccounts(topo.standalone, DEFAULT_SUFFIX)
  29. user = user_accts.create_test_user()
  30. # Create automember definitions and regex rules
  31. automember_prop = {
  32. 'cn': 'testgroup_definition',
  33. 'autoMemberScope': DEFAULT_SUFFIX,
  34. 'autoMemberFilter': 'objectclass=posixaccount',
  35. 'autoMemberDefaultGroup': groups[0].dn,
  36. 'autoMemberGroupingAttr': 'member:dn',
  37. }
  38. automembers = AutoMembershipDefinitions(topo.standalone)
  39. auto_def = automembers.create(properties=automember_prop)
  40. auto_def.add_regex_rule("regex1", groups[1].dn, include_regex=['cn=mark.*'])
  41. auto_def.add_regex_rule("regex2", groups[2].dn, include_regex=['cn=simon.*'])
  42. # Enable plugin
  43. automemberplugin = AutoMembershipPlugin(topo.standalone)
  44. automemberplugin.enable()
  45. topo.standalone.restart()
  46. return (user, groups)
  47. def test_mods(automember_fixture, topo):
  48. """Modify the user so that it is added to the various automember groups
  49. :id: 28a2b070-7f16-4905-8831-c80fa6441693
  50. :setup: Standalone Instance
  51. :steps:
  52. 1. Update user that should add it to group[0]
  53. 2. Update user that should add it to group[1]
  54. 3. Update user that should add it to group[2]
  55. 4. Update user that should add it to group[0]
  56. 5. Test rebuild task correctly moves user to group[1]
  57. :expectedresults:
  58. 1. Success
  59. 2. Success
  60. 3. Success
  61. 4. Success
  62. 5. Success
  63. """
  64. (user, groups) = automember_fixture
  65. # Update user which should go into group[0]
  66. user.replace('cn', 'whatever')
  67. groups[0].is_member(user.dn)
  68. if groups[1].is_member(user.dn):
  69. assert False
  70. if groups[2].is_member(user.dn):
  71. assert False
  72. # Update user0 which should go into group[1]
  73. user.replace('cn', 'mark')
  74. groups[1].is_member(user.dn)
  75. if groups[0].is_member(user.dn):
  76. assert False
  77. if groups[2].is_member(user.dn):
  78. assert False
  79. # Update user which should go into group[2]
  80. user.replace('cn', 'simon')
  81. groups[2].is_member(user.dn)
  82. if groups[0].is_member(user.dn):
  83. assert False
  84. if groups[1].is_member(user.dn):
  85. assert False
  86. # Update user which should go back into group[0] (full circle)
  87. user.replace('cn', 'whatever')
  88. groups[0].is_member(user.dn)
  89. if groups[1].is_member(user.dn):
  90. assert False
  91. if groups[2].is_member(user.dn):
  92. assert False
  93. #
  94. # Test rebuild task. First disable plugin
  95. #
  96. automemberplugin = AutoMembershipPlugin(topo.standalone)
  97. automemberplugin.disable()
  98. topo.standalone.restart()
  99. # Make change that would move the entry from group[0] to group[1]
  100. user.replace('cn', 'mark')
  101. # Enable plugin
  102. automemberplugin.enable()
  103. topo.standalone.restart()
  104. # Run rebuild task
  105. task = automemberplugin.fixup(DEFAULT_SUFFIX, "objectclass=posixaccount")
  106. task.wait()
  107. # Test membership
  108. groups[1].is_member(user.dn)
  109. if groups[0].is_member(user.dn):
  110. assert False
  111. if groups[2].is_member(user.dn):
  112. assert False
  113. # Success
  114. log.info("Test PASSED")
  115. if __name__ == '__main__':
  116. # Run isolated
  117. # -s for DEBUG mode
  118. CURRENT_FILE = os.path.realpath(__file__)
  119. pytest.main(["-s", CURRENT_FILE])