ticket47431_test.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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 pytest
  10. from lib389.tasks import *
  11. from lib389.utils import *
  12. from lib389.topologies import topology_st
  13. logging.getLogger(__name__).setLevel(logging.DEBUG)
  14. log = logging.getLogger(__name__)
  15. DN_7BITPLUGIN = "cn=7-bit check,%s" % DN_PLUGIN
  16. ATTRS = ["uid", "mail", "userpassword", ",", SUFFIX, None]
  17. def test_ticket47431_0(topology_st):
  18. '''
  19. Enable 7 bit plugin
  20. '''
  21. log.info("Ticket 47431 - 0: Enable 7bit plugin...")
  22. topology_st.standalone.plugins.enable(name=PLUGIN_7_BIT_CHECK)
  23. def test_ticket47431_1(topology_st):
  24. '''
  25. nsslapd-pluginarg0: uid
  26. nsslapd-pluginarg1: mail
  27. nsslapd-pluginarg2: userpassword <== repeat 27 times
  28. nsslapd-pluginarg3: ,
  29. nsslapd-pluginarg4: dc=example,dc=com
  30. The duplicated values are removed by str2entry_dupcheck as follows:
  31. [..] - str2entry_dupcheck: 27 duplicate values for attribute type nsslapd-pluginarg2
  32. detected in entry cn=7-bit check,cn=plugins,cn=config. Extra values ignored.
  33. '''
  34. log.info("Ticket 47431 - 1: Check 26 duplicate values are treated as one...")
  35. expected = "str2entry_dupcheck - .* duplicate values for attribute type nsslapd-pluginarg2 detected in entry cn=7-bit check,cn=plugins,cn=config."
  36. log.debug('modify_s %s' % DN_7BITPLUGIN)
  37. try:
  38. topology_st.standalone.modify_s(DN_7BITPLUGIN,
  39. [(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', "uid"),
  40. (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', "mail"),
  41. (ldap.MOD_REPLACE, 'nsslapd-pluginarg2', "userpassword"),
  42. (ldap.MOD_REPLACE, 'nsslapd-pluginarg3', ","),
  43. (ldap.MOD_REPLACE, 'nsslapd-pluginarg4', SUFFIX)])
  44. except ValueError:
  45. log.error('modify failed: Some problem occured with a value that was provided')
  46. assert False
  47. arg2 = "nsslapd-pluginarg2: userpassword"
  48. topology_st.standalone.stop(timeout=10)
  49. dse_ldif = topology_st.standalone.confdir + '/dse.ldif'
  50. os.system('mv %s %s.47431' % (dse_ldif, dse_ldif))
  51. os.system(
  52. 'sed -e "s/\\(%s\\)/\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1/" %s.47431 > %s' % (
  53. arg2, dse_ldif, dse_ldif))
  54. topology_st.standalone.start(timeout=10)
  55. cmdline = 'egrep -i "%s" %s' % (expected, topology_st.standalone.errlog)
  56. p = os.popen(cmdline, "r")
  57. line = p.readline()
  58. if line == "":
  59. log.error('Expected error "%s" not logged in %s' % (expected, topology_st.standalone.errlog))
  60. assert False
  61. else:
  62. log.debug('line: %s' % line)
  63. log.info('Expected error "%s" logged in %s' % (expected, topology_st.standalone.errlog))
  64. log.info("Ticket 47431 - 1: done")
  65. def test_ticket47431_2(topology_st):
  66. '''
  67. nsslapd-pluginarg0: uid
  68. nsslapd-pluginarg0: mail
  69. nsslapd-pluginarg1: userpassword
  70. nsslapd-pluginarg2: ,
  71. nsslapd-pluginarg3: dc=example,dc=com
  72. ==>
  73. nsslapd-pluginarg0: uid
  74. nsslapd-pluginarg1: mail
  75. nsslapd-pluginarg2: userpassword
  76. nsslapd-pluginarg3: ,
  77. nsslapd-pluginarg4: dc=example,dc=com
  78. Should be logged in error log:
  79. [..] NS7bitAttr_Init - 0: uid
  80. [..] NS7bitAttr_Init - 1: userpassword
  81. [..] NS7bitAttr_Init - 2: mail
  82. [..] NS7bitAttr_Init - 3: ,
  83. [..] NS7bitAttr_Init - 4: dc=example,dc=com
  84. '''
  85. log.info("Ticket 47431 - 2: Check two values belonging to one arg is fixed...")
  86. try:
  87. topology_st.standalone.modify_s(DN_7BITPLUGIN,
  88. [(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', "uid"),
  89. (ldap.MOD_ADD, 'nsslapd-pluginarg0', "mail"),
  90. (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', "userpassword"),
  91. (ldap.MOD_REPLACE, 'nsslapd-pluginarg2', ","),
  92. (ldap.MOD_REPLACE, 'nsslapd-pluginarg3', SUFFIX),
  93. (ldap.MOD_DELETE, 'nsslapd-pluginarg4', None)])
  94. except ValueError:
  95. log.error('modify failed: Some problem occured with a value that was provided')
  96. assert False
  97. # PLUGIN LOG LEVEL
  98. topology_st.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')])
  99. topology_st.standalone.restart(timeout=10)
  100. cmdline = 'egrep -i %s %s' % ("NS7bitAttr_Init", topology_st.standalone.errlog)
  101. p = os.popen(cmdline, "r")
  102. i = 0
  103. while ATTRS[i]:
  104. line = p.readline()
  105. log.debug('line - %s' % line)
  106. log.debug('ATTRS[%d] %s' % (i, ATTRS[i]))
  107. if line == "":
  108. break
  109. elif line.find(ATTRS[i]) >= 0:
  110. log.debug('%s was logged' % ATTRS[i])
  111. else:
  112. log.error('%s was not logged.' % ATTRS[i])
  113. assert False
  114. i = i + 1
  115. log.info("Ticket 47431 - 2: done")
  116. def test_ticket47431_3(topology_st):
  117. '''
  118. nsslapd-pluginarg1: uid
  119. nsslapd-pluginarg3: mail
  120. nsslapd-pluginarg5: userpassword
  121. nsslapd-pluginarg7: ,
  122. nsslapd-pluginarg9: dc=example,dc=com
  123. ==>
  124. nsslapd-pluginarg0: uid
  125. nsslapd-pluginarg1: mail
  126. nsslapd-pluginarg2: userpassword
  127. nsslapd-pluginarg3: ,
  128. nsslapd-pluginarg4: dc=example,dc=com
  129. Should be logged in error log:
  130. [..] NS7bitAttr_Init - 0: uid
  131. [..] NS7bitAttr_Init - 1: userpassword
  132. [..] NS7bitAttr_Init - 2: mail
  133. [..] NS7bitAttr_Init - 3: ,
  134. [..] NS7bitAttr_Init - 4: dc=example,dc=com
  135. '''
  136. log.info("Ticket 47431 - 3: Check missing args are fixed...")
  137. try:
  138. topology_st.standalone.modify_s(DN_7BITPLUGIN,
  139. [(ldap.MOD_DELETE, 'nsslapd-pluginarg0', None),
  140. (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', "uid"),
  141. (ldap.MOD_DELETE, 'nsslapd-pluginarg2', None),
  142. (ldap.MOD_REPLACE, 'nsslapd-pluginarg3', "mail"),
  143. (ldap.MOD_REPLACE, 'nsslapd-pluginarg5', "userpassword"),
  144. (ldap.MOD_REPLACE, 'nsslapd-pluginarg7', ","),
  145. (ldap.MOD_REPLACE, 'nsslapd-pluginarg9', SUFFIX)])
  146. except ValueError:
  147. log.error('modify failed: Some problem occured with a value that was provided')
  148. assert False
  149. # PLUGIN LOG LEVEL
  150. topology_st.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')])
  151. topology_st.standalone.stop(timeout=10)
  152. os.system('mv %s %s.47431' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
  153. os.system('touch %s' % (topology_st.standalone.errlog))
  154. topology_st.standalone.start(timeout=10)
  155. cmdline = 'egrep -i %s %s' % ("NS7bitAttr_Init", topology_st.standalone.errlog)
  156. p = os.popen(cmdline, "r")
  157. i = 0
  158. while ATTRS[i]:
  159. line = p.readline()
  160. if line == "":
  161. break
  162. elif line.find(ATTRS[i]) >= 0:
  163. log.debug('%s was logged' % ATTRS[i])
  164. else:
  165. log.error('%s was not logged.' % ATTRS[i])
  166. assert False
  167. i = i + 1
  168. log.info("Ticket 47431 - 3: done")
  169. log.info('Test complete')
  170. if __name__ == '__main__':
  171. # Run isolated
  172. # -s for DEBUG mode
  173. CURRENT_FILE = os.path.realpath(__file__)
  174. pytest.main("-s %s" % CURRENT_FILE)