1
0

ticket47640_test.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # --- BEGIN COPYRIGHT BLOCK ---
  2. # Copyright (C) 2015 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 os
  10. import sys
  11. import time
  12. import ldap
  13. import logging
  14. import pytest
  15. from lib389 import DirSrv, Entry, tools, tasks
  16. from lib389.tools import DirSrvTools
  17. from lib389._constants import *
  18. from lib389.properties import *
  19. from lib389.tasks import *
  20. from lib389.utils import *
  21. logging.getLogger(__name__).setLevel(logging.DEBUG)
  22. log = logging.getLogger(__name__)
  23. installation1_prefix = None
  24. class TopologyStandalone(object):
  25. def __init__(self, standalone):
  26. standalone.open()
  27. self.standalone = standalone
  28. @pytest.fixture(scope="module")
  29. def topology(request):
  30. global installation1_prefix
  31. if installation1_prefix:
  32. args_instance[SER_DEPLOYED_DIR] = installation1_prefix
  33. # Creating standalone instance ...
  34. standalone = DirSrv(verbose=False)
  35. args_instance[SER_HOST] = HOST_STANDALONE
  36. args_instance[SER_PORT] = PORT_STANDALONE
  37. args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE
  38. args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX
  39. args_standalone = args_instance.copy()
  40. standalone.allocate(args_standalone)
  41. instance_standalone = standalone.exists()
  42. if instance_standalone:
  43. standalone.delete()
  44. standalone.create()
  45. standalone.open()
  46. # Clear out the tmp dir
  47. standalone.clearTmpDir(__file__)
  48. return TopologyStandalone(standalone)
  49. def test_ticket47640(topology):
  50. '''
  51. Linked Attrs Plugins - verify that if the plugin fails to update the link entry
  52. that the entire operation is aborted
  53. '''
  54. # Enable Dynamic plugins, and the linked Attrs plugin
  55. try:
  56. topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')])
  57. except ldap.LDAPError as e:
  58. ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc'])
  59. assert False
  60. try:
  61. topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS)
  62. except ValueError as e:
  63. ldap.fatal('Failed to enable linked attributes plugin!' + e.message['desc'])
  64. assert False
  65. # Add the plugin config entry
  66. try:
  67. topology.standalone.add_s(Entry(('cn=manager link,cn=Linked Attributes,cn=plugins,cn=config', {
  68. 'objectclass': 'top extensibleObject'.split(),
  69. 'cn': 'Manager Link',
  70. 'linkType': 'seeAlso',
  71. 'managedType': 'seeAlso'
  72. })))
  73. except ldap.LDAPError as e:
  74. log.fatal('Failed to add linked attr config entry: error ' + e.message['desc'])
  75. assert False
  76. # Add an entry who has a link to an entry that does not exist
  77. OP_REJECTED = False
  78. try:
  79. topology.standalone.add_s(Entry(('uid=manager,' + DEFAULT_SUFFIX, {
  80. 'objectclass': 'top extensibleObject'.split(),
  81. 'uid': 'manager',
  82. 'seeAlso': 'uid=user,dc=example,dc=com'
  83. })))
  84. except ldap.UNWILLING_TO_PERFORM:
  85. # Success
  86. log.info('Add operation correctly rejected.')
  87. OP_REJECTED = True
  88. except ldap.LDAPError as e:
  89. log.fatal('Add operation incorrectly rejected: error %s - ' +
  90. 'expected "unwilling to perform"' % e.message['desc'])
  91. assert False
  92. if not OP_REJECTED:
  93. log.fatal('Add operation incorrectly allowed')
  94. assert False
  95. log.info('Test complete')
  96. def test_ticket47640_final(topology):
  97. topology.standalone.delete()
  98. log.info('Testcase PASSED')
  99. def run_isolated():
  100. global installation1_prefix
  101. installation1_prefix = None
  102. topo = topology(True)
  103. test_ticket47640(topo)
  104. test_ticket47640_final(topo)
  105. if __name__ == '__main__':
  106. run_isolated()