regression_test.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 base64
  10. import os
  11. import pytest
  12. import subprocess
  13. from lib389.tasks import *
  14. from lib389.utils import *
  15. from lib389.topologies import topology_m2
  16. from lib389._constants import *
  17. from lib389.replica import ReplicationManager
  18. pytestmark = [pytest.mark.tier1,
  19. pytest.mark.skipif(ds_is_older('1.3.5'), reason="Not implemented")]
  20. logging.getLogger(__name__).setLevel(logging.DEBUG)
  21. log = logging.getLogger(__name__)
  22. ISSUER = 'cn=CAcert'
  23. CACERT = 'CAcertificate'
  24. M1SERVERCERT = 'Server-Cert1'
  25. M2SERVERCERT = 'Server-Cert2'
  26. M1LDAPSPORT = '41636'
  27. M2LDAPSPORT = '42636'
  28. M1SUBJECT = 'CN=' + os.uname()[1] + ',OU=389 Directory Server'
  29. M2SUBJECT = 'CN=' + os.uname()[1] + ',OU=390 Directory Server'
  30. def add_entry(server, name, rdntmpl, start, num):
  31. log.info("\n######################### Adding %d entries to %s ######################\n" % (num, name))
  32. for i in range(num):
  33. ii = start + i
  34. dn = '%s%d,%s' % (rdntmpl, ii, DEFAULT_SUFFIX)
  35. server.add_s(Entry((dn, {'objectclass': 'top person extensibleObject'.split(),
  36. 'uid': '%s%d' % (rdntmpl, ii),
  37. 'cn': '%s user%d' % (name, ii),
  38. 'sn': 'user%d' % (ii)})))
  39. def check_pems(confdir, mycacert, myservercert, myserverkey, notexist):
  40. log.info("\n######################### Check PEM files (%s, %s, %s)%s in %s ######################\n"
  41. % (mycacert, myservercert, myserverkey, notexist, confdir))
  42. global cacert
  43. cacert = '%s/%s.pem' % (confdir, mycacert)
  44. if os.path.isfile(cacert):
  45. if notexist == "":
  46. log.info('%s is successfully generated.' % cacert)
  47. else:
  48. log.info('%s is incorrecly generated.' % cacert)
  49. assert False
  50. else:
  51. if notexist == "":
  52. log.fatal('%s is not generated.' % cacert)
  53. assert False
  54. else:
  55. log.info('%s is correctly not generated.' % cacert)
  56. servercert = '%s/%s.pem' % (confdir, myservercert)
  57. if os.path.isfile(servercert):
  58. if notexist == "":
  59. log.info('%s is successfully generated.' % servercert)
  60. else:
  61. log.info('%s is incorrecly generated.' % servercert)
  62. assert False
  63. else:
  64. if notexist == "":
  65. log.fatal('%s was not generated.' % servercert)
  66. assert False
  67. else:
  68. log.info('%s is correctly not generated.' % servercert)
  69. serverkey = '%s/%s.pem' % (confdir, myserverkey)
  70. if os.path.isfile(serverkey):
  71. if notexist == "":
  72. log.info('%s is successfully generated.' % serverkey)
  73. else:
  74. log.info('%s is incorrectly generated.' % serverkey)
  75. assert False
  76. else:
  77. if notexist == "":
  78. log.fatal('%s was not generated.' % serverkey)
  79. assert False
  80. else:
  81. log.info('%s is correctly not generated.' % serverkey)
  82. def relocate_pem_files(topology_m2):
  83. log.info("######################### Relocate PEM files on master1 ######################")
  84. mycacert = 'MyCA'
  85. topology_m2.ms["master1"].encryption.set('CACertExtractFile', mycacert)
  86. myservercert = 'MyServerCert1'
  87. myserverkey = 'MyServerKey1'
  88. topology_m2.ms["master1"].rsa.apply_mods([(ldap.MOD_REPLACE, 'ServerCertExtractFile', myservercert),
  89. (ldap.MOD_REPLACE, 'ServerKeyExtractFile', myserverkey)])
  90. log.info("##### restart master1")
  91. topology_m2.ms["master1"].restart()
  92. m1confdir = topology_m2.ms["master1"].confdir
  93. check_pems(m1confdir, mycacert, myservercert, myserverkey, "")
  94. @pytest.mark.ds47536
  95. def test_openldap_no_nss_crypto(topology_m2):
  96. """Check that we allow usage of OpenLDAP libraries
  97. that don't use NSS for crypto
  98. :id: 0a622f3d-8ba5-4df2-a1de-1fb2237da40a
  99. :setup: Replication with two masters:
  100. master_1 ----- startTLS -----> master_2;
  101. master_1 <-- TLS_clientAuth -- master_2;
  102. nsslapd-extract-pemfiles set to 'on' on both masters
  103. without specifying cert names
  104. :steps:
  105. 1. Add 5 users to master 1 and 2
  106. 2. Check that the users were successfully replicated
  107. 3. Relocate PEM files on master 1
  108. 4. Check PEM files in master 1 config directory
  109. 5. Add 5 users more to master 1 and 2
  110. 6. Check that the users were successfully replicated
  111. 7. Export userRoot on master 1
  112. :expectedresults:
  113. 1. Users should be successfully added
  114. 2. Users should be successfully replicated
  115. 3. Operation should be successful
  116. 4. PEM files should be found
  117. 5. Users should be successfully added
  118. 6. Users should be successfully replicated
  119. 7. Operation should be successful
  120. """
  121. log.info("Ticket 47536 - Allow usage of OpenLDAP libraries that don't use NSS for crypto")
  122. m1 = topology_m2.ms["master1"]
  123. m2 = topology_m2.ms["master2"]
  124. [i.enable_tls() for i in topology_m2]
  125. repl = ReplicationManager(DEFAULT_SUFFIX)
  126. repl.test_replication(m1, m2)
  127. add_entry(m1, 'master1', 'uid=m1user', 0, 5)
  128. add_entry(m2, 'master2', 'uid=m2user', 0, 5)
  129. repl.wait_for_replication(m1, m2)
  130. repl.wait_for_replication(m2, m1)
  131. log.info('##### Searching for entries on master1...')
  132. entries = m1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)')
  133. assert 10 == len(entries)
  134. log.info('##### Searching for entries on master2...')
  135. entries = m2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)')
  136. assert 10 == len(entries)
  137. relocate_pem_files(topology_m2)
  138. add_entry(m1, 'master1', 'uid=m1user', 10, 5)
  139. add_entry(m2, 'master2', 'uid=m2user', 10, 5)
  140. repl.wait_for_replication(m1, m2)
  141. repl.wait_for_replication(m2, m1)
  142. log.info('##### Searching for entries on master1...')
  143. entries = m1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)')
  144. assert 20 == len(entries)
  145. log.info('##### Searching for entries on master2...')
  146. entries = m2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)')
  147. assert 20 == len(entries)
  148. output_file = os.path.join(m1.get_ldif_dir(), "master1.ldif")
  149. m1.tasks.exportLDIF(benamebase='userRoot', output_file=output_file, args={'wait': True})
  150. log.info("Ticket 47536 - PASSED")
  151. if __name__ == '__main__':
  152. # Run isolated
  153. # -s for DEBUG mode
  154. CURRENT_FILE = os.path.realpath(__file__)
  155. pytest.main("-s %s" % CURRENT_FILE)