server/test/unittest_ldapsource.py
changeset 8902 9edfa3660bf4
parent 8901 661b6aaac240
child 8903 192a748550c7
equal deleted inserted replaced
8901:661b6aaac240 8902:9edfa3660bf4
    16 # You should have received a copy of the GNU Lesser General Public License along
    16 # You should have received a copy of the GNU Lesser General Public License along
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    18 """cubicweb.server.sources.ldapusers unit and functional tests"""
    18 """cubicweb.server.sources.ldapusers unit and functional tests"""
    19 
    19 
    20 import os
    20 import os
       
    21 import sys
    21 import shutil
    22 import shutil
    22 import time
    23 import time
    23 from os.path import join, exists
    24 from os.path import join, exists
    24 import subprocess
    25 import subprocess
    25 import tempfile
    26 import tempfile
    48     confstream.write(confin % {'apphome': config.apphome, 'testdir': slapddir})
    49     confstream.write(confin % {'apphome': config.apphome, 'testdir': slapddir})
    49     confstream.close()
    50     confstream.close()
    50     # fill ldap server with some data
    51     # fill ldap server with some data
    51     ldiffile = join(config.apphome, "ldap_test.ldif")
    52     ldiffile = join(config.apphome, "ldap_test.ldif")
    52     config.info('Initing ldap database')
    53     config.info('Initing ldap database')
    53     cmdline = "/usr/sbin/slapadd -f %s -l %s -c" % (slapdconf, ldiffile)
    54     cmdline = ['/usr/sbin/slapadd', '-f', slapdconf, '-l', ldiffile, '-c']
    54     subprocess.call(cmdline, shell=True)
    55     PIPE = subprocess.PIPE
       
    56     slapproc = subprocess.Popen(cmdline, stdout=PIPE, stderr=PIPE)
       
    57     stdout, stderr = slapproc.communicate()
       
    58     if slapproc.returncode:
       
    59         print >> sys.stderr, ('slapadd returned with status: %s'
       
    60                               % slapproc.returncode)
       
    61         sys.stdout.write(stdout)
       
    62         sys.stderr.write(stderr)
    55 
    63 
    56     #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f')
    64     #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f')
    57     port = get_available_port(xrange(9000, 9100))
    65     port = get_available_port(xrange(9000, 9100))
    58     host = 'localhost:%s' % port
    66     host = 'localhost:%s' % port
    59     ldapuri = 'ldap://%s' % host
    67     ldapuri = 'ldap://%s' % host
    60     cmdline = ["/usr/sbin/slapd", "-f",  slapdconf,  "-h",  ldapuri, "-d", "0"]
    68     cmdline = ["/usr/sbin/slapd", "-f",  slapdconf,  "-h",  ldapuri, "-d", "0"]
    61     config.info('Starting slapd:', ' '.join(cmdline))
    69     config.info('Starting slapd:', ' '.join(cmdline))
    62     cls.slapd_process = subprocess.Popen(cmdline)
    70     PIPE = subprocess.PIPE
       
    71     cls.slapd_process = subprocess.Popen(cmdline, stdout=PIPE, stderr=PIPE)
    63     time.sleep(0.2)
    72     time.sleep(0.2)
    64     if cls.slapd_process.poll() is None:
    73     if cls.slapd_process.poll() is None:
    65         config.info('slapd started with pid %s', cls.slapd_process.pid)
    74         config.info('slapd started with pid %s', cls.slapd_process.pid)
    66     else:
    75     else:
    67         raise EnvironmentError('Cannot start slapd with cmdline="%s" (from directory "%s")' %
    76         raise EnvironmentError('Cannot start slapd with cmdline="%s" (from directory "%s")' %
    76         if hasattr(cls.slapd_process, 'terminate'):
    85         if hasattr(cls.slapd_process, 'terminate'):
    77             cls.slapd_process.terminate()
    86             cls.slapd_process.terminate()
    78         else:
    87         else:
    79             import os, signal
    88             import os, signal
    80             os.kill(cls.slapd_process.pid, signal.SIGTERM)
    89             os.kill(cls.slapd_process.pid, signal.SIGTERM)
    81         cls.slapd_process.wait()
    90         stdout, stderr = cls.slapd_process.communicate()
       
    91         if cls.slapd_process.returncode:
       
    92             print >> sys.stderr, ('slapd returned with status: %s'
       
    93                                   % cls.slapd_process.returncode)
       
    94             sys.stdout.write(stdout)
       
    95             sys.stderr.write(stderr)
    82         config.info('DONE')
    96         config.info('DONE')
    83 
    97 
    84 class LDAPTestBase(CubicWebTC):
    98 class LDAPTestBase(CubicWebTC):
    85     loglevel = 'ERROR'
    99     loglevel = 'ERROR'
    86 
   100