automember_mod_test.py 4.3 KB

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