25 from socket import socket, error as socketerror |
25 from socket import socket, error as socketerror |
26 |
26 |
27 from logilab.common.testlib import TestCase, unittest_main, mock_object |
27 from logilab.common.testlib import TestCase, unittest_main, mock_object |
28 from cubicweb.devtools.testlib import CubicWebTC |
28 from cubicweb.devtools.testlib import CubicWebTC |
29 from cubicweb.devtools.repotest import RQLGeneratorTC |
29 from cubicweb.devtools.repotest import RQLGeneratorTC |
|
30 from cubicweb.devtools.httptest import get_available_port |
30 |
31 |
31 from cubicweb.server.sources.ldapuser import * |
32 from cubicweb.server.sources.ldapuser import * |
32 |
33 |
33 SYT = 'syt' |
34 SYT = 'syt' |
34 SYT_EMAIL = 'Sylvain Thenault' |
35 SYT_EMAIL = 'Sylvain Thenault' |
100 cmdline = "/usr/sbin/slapadd -f %s -l %s -c" % (slapdconf, ldiffile) |
101 cmdline = "/usr/sbin/slapadd -f %s -l %s -c" % (slapdconf, ldiffile) |
101 subprocess.call(cmdline, shell=True) |
102 subprocess.call(cmdline, shell=True) |
102 |
103 |
103 |
104 |
104 #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f') |
105 #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f') |
105 for port in range(9000, 9100): |
106 port = get_available_port(xrange(9000, 9100)) |
106 try: |
|
107 socket().bind(('localhost', port)) |
|
108 except socketerror, e: |
|
109 if e.errno == 98: # Address already in use |
|
110 pass |
|
111 else: |
|
112 raise |
|
113 else: |
|
114 break |
|
115 else: |
|
116 raise Exception("Can't find a free TCP port on localhost") |
|
117 |
|
118 host = 'localhost:%s' % port |
107 host = 'localhost:%s' % port |
119 ldapuri = 'ldap://%s' % host |
108 ldapuri = 'ldap://%s' % host |
120 cmdline = ["/usr/sbin/slapd", "-f", slapdconf, "-h", ldapuri, "-d", "0"] |
109 cmdline = ["/usr/sbin/slapd", "-f", slapdconf, "-h", ldapuri, "-d", "0"] |
121 print "Starting slapd on", ldapuri |
110 print "Starting slapd on", ldapuri |
122 slapd_process = subprocess.Popen(cmdline) |
111 slapd_process = subprocess.Popen(cmdline) |
130 |
119 |
131 def terminate_slapd(): |
120 def terminate_slapd(): |
132 global slapd_process |
121 global slapd_process |
133 if slapd_process.returncode is None: |
122 if slapd_process.returncode is None: |
134 print "terminating slapd" |
123 print "terminating slapd" |
135 slapd_process.terminate() |
124 if hasattr(slapd_process, 'terminate'): |
|
125 slapd_process.terminate() |
|
126 else: |
|
127 import os, signal |
|
128 os.kill(slapd_process.pid, signal.SIGTERM) |
136 slapd_process.wait() |
129 slapd_process.wait() |
137 print "DONE" |
130 print "DONE" |
138 |
131 |
139 del slapd_process |
132 del slapd_process |
140 |
133 |