~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/HttpServer.py

merge hpss changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
class TestingHTTPRequestHandler(SimpleHTTPRequestHandler):
45
45
 
46
46
    def log_message(self, format, *args):
47
 
        self.server.test_case.log('webserver - %s - - [%s] %s "%s" "%s"',
48
 
                                  self.address_string(),
49
 
                                  self.log_date_time_string(),
50
 
                                  format % args,
51
 
                                  self.headers.get('referer', '-'),
52
 
                                  self.headers.get('user-agent', '-'))
 
47
        tcs = self.server.test_case_server
 
48
        tcs.log('webserver - %s - - [%s] %s "%s" "%s"',
 
49
                self.address_string(),
 
50
                self.log_date_time_string(),
 
51
                format % args,
 
52
                self.headers.get('referer', '-'),
 
53
                self.headers.get('user-agent', '-'))
53
54
 
54
55
    def handle_one_request(self):
55
56
        """Handle a single HTTP request.
154
155
            self.end_headers()
155
156
            self.send_range_content(file, start, end - start + 1)
156
157
            self.wfile.write("--%s\r\n" % boundary)
157
 
            pass
158
158
 
159
159
    def do_GET(self):
160
160
        """Serve a GET request.
249
249
 
250
250
 
251
251
class TestingHTTPServer(BaseHTTPServer.HTTPServer):
252
 
    def __init__(self, server_address, RequestHandlerClass, test_case):
 
252
 
 
253
    def __init__(self, server_address, RequestHandlerClass,
 
254
                 test_case_server):
253
255
        BaseHTTPServer.HTTPServer.__init__(self, server_address,
254
 
                                                RequestHandlerClass)
255
 
        self.test_case = test_case
 
256
                                           RequestHandlerClass)
 
257
        # test_case_server can be used to communicate between the
 
258
        # tests and the server (or the request handler and the
 
259
        # server), allowing dynamic behaviors to be defined from
 
260
        # the tests cases.
 
261
        self.test_case_server = test_case_server
256
262
 
257
263
 
258
264
class HttpServer(Server):
268
274
    def __init__(self, request_handler=TestingHTTPRequestHandler):
269
275
        Server.__init__(self)
270
276
        self.request_handler = request_handler
 
277
        self.host = 'localhost'
 
278
        self.port = 0
 
279
        self._httpd = None
271
280
 
272
281
    def _get_httpd(self):
273
 
        return TestingHTTPServer(('localhost', 0),
274
 
                                  self.request_handler,
275
 
                                  self)
 
282
        if self._httpd is None:
 
283
            self._httpd = TestingHTTPServer((self.host, self.port),
 
284
                                            self.request_handler,
 
285
                                            self)
 
286
            host, self.port = self._httpd.socket.getsockname()
 
287
        return self._httpd
276
288
 
277
289
    def _http_start(self):
278
 
        httpd = None
279
290
        httpd = self._get_httpd()
280
 
        host, self.port = httpd.socket.getsockname()
281
 
        self._http_base_url = '%s://localhost:%s/' % (self._url_protocol,
282
 
                                                      self.port)
 
291
        self._http_base_url = '%s://%s:%s/' % (self._url_protocol,
 
292
                                               self.host,
 
293
                                               self.port)
283
294
        self._http_starting.release()
284
295
        httpd.socket.settimeout(0.1)
285
296