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' |
99 cmdline = "/usr/sbin/slapadd -f %s -l %s -c" % (slapdconf, ldiffile) |
100 cmdline = "/usr/sbin/slapadd -f %s -l %s -c" % (slapdconf, ldiffile) |
100 subprocess.call(cmdline, shell=True) |
101 subprocess.call(cmdline, shell=True) |
101 |
102 |
102 |
103 |
103 #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f') |
104 #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f') |
104 for port in range(9000, 9100): |
105 port = get_available_port(xrange(9000, 9100)) |
105 try: |
|
106 socket().bind(('localhost', port)) |
|
107 except socketerror, e: |
|
108 if e.errno == 98: # Address already in use |
|
109 pass |
|
110 else: |
|
111 raise |
|
112 else: |
|
113 break |
|
114 else: |
|
115 raise Exception("Can't find a free TCP port on localhost") |
|
116 |
|
117 host = 'localhost:%s' % port |
106 host = 'localhost:%s' % port |
118 ldapuri = 'ldap://%s' % host |
107 ldapuri = 'ldap://%s' % host |
119 cmdline = ["/usr/sbin/slapd", "-f", slapdconf, "-h", ldapuri, "-d", "0"] |
108 cmdline = ["/usr/sbin/slapd", "-f", slapdconf, "-h", ldapuri, "-d", "0"] |
120 print "Starting slapd on", ldapuri |
109 print "Starting slapd on", ldapuri |
121 slapd_process = subprocess.Popen(cmdline) |
110 slapd_process = subprocess.Popen(cmdline) |
129 |
118 |
130 def terminate_slapd(): |
119 def terminate_slapd(): |
131 global slapd_process |
120 global slapd_process |
132 if slapd_process.returncode is None: |
121 if slapd_process.returncode is None: |
133 print "terminating slapd" |
122 print "terminating slapd" |
134 slapd_process.terminate() |
123 if hasattr(slapd_process, 'terminate'): |
|
124 slapd_process.terminate() |
|
125 else: |
|
126 import os, signal |
|
127 os.kill(slapd_process.pid, signal.SIGTERM) |
135 slapd_process.wait() |
128 slapd_process.wait() |
136 print "DONE" |
129 print "DONE" |
137 |
130 |
138 del slapd_process |
131 del slapd_process |
139 |
132 |