~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/http_server.py

  • Committer: Vincent Ladeuil
  • Date: 2007-12-17 08:56:52 UTC
  • mto: (3146.3.1 179368) (3156.2.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 3158.
  • Revision ID: v.ladeuil+lp@free.fr-20071217085652-p4m867lxku62pmsn
Preparatory cleanup.

* bzrlib/tests/http_server.py:
Fix imports.
(TestingHTTPRequestHandler): Use HTTPMessage instead
mimetools.Message, we don't use it yet, but there is no good
reason to not be ready.
(HttpServer.get_bogus_url): Use _url_protocol, again no good
reason to not do it.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import BaseHTTPServer
18
18
import errno
 
19
import httplib
19
20
import os
20
 
from SimpleHTTPServer import SimpleHTTPRequestHandler
21
 
import socket
22
21
import posixpath
23
22
import random
24
23
import re
 
24
import SimpleHTTPServer
 
25
import socket
25
26
import sys
26
27
import threading
27
28
import time
28
29
import urllib
29
30
import urlparse
30
31
 
31
 
from bzrlib.transport import Server
32
 
from bzrlib.transport.local import LocalURLServer
 
32
from bzrlib import transport
 
33
from bzrlib.transport import local
33
34
 
34
35
 
35
36
class WebserverNotAvailable(Exception):
41
42
        return 'path %s is not in %s' % self.args
42
43
 
43
44
 
44
 
class TestingHTTPRequestHandler(SimpleHTTPRequestHandler):
 
45
class TestingHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
45
46
    """Handles one request.
46
47
 
47
48
    A TestingHTTPRequestHandler is instantiated for every request
48
49
    received by the associated server.
49
50
    """
 
51
    # The Message-like class used to parse the request headers
 
52
    MessageClass = httplib.HTTPMessage
50
53
 
51
54
    def log_message(self, format, *args):
52
55
        tcs = self.server.test_case_server
54
57
                self.address_string(),
55
58
                self.log_date_time_string(),
56
59
                format % args,
57
 
                self.headers.get('referer', '-'),
 
60
                self.headers.get('referrer', '-'),
58
61
                self.headers.get('user-agent', '-'))
59
62
 
60
63
    def handle_one_request(self):
64
67
        connection early to avoid polluting the test results.
65
68
        """
66
69
        try:
67
 
            SimpleHTTPRequestHandler.handle_one_request(self)
 
70
            SimpleHTTPServer.SimpleHTTPRequestHandler.handle_one_request(self)
68
71
        except socket.error, e:
69
72
            if (len(e.args) > 0
70
73
                and e.args[0] in (errno.EPIPE, errno.ECONNRESET,
71
74
                                  errno.ECONNABORTED,)):
72
75
                self.close_connection = 1
73
 
                pass
74
76
            else:
75
77
                raise
76
78
 
157
159
        ranges_header_value = self.headers.get('Range')
158
160
        if ranges_header_value is None or os.path.isdir(path):
159
161
            # Let the mother class handle most cases
160
 
            return SimpleHTTPRequestHandler.do_GET(self)
 
162
            return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
161
163
 
162
164
        try:
163
165
            # Always read in binary mode. Opening files in text
234
236
        return self._translate_path(path)
235
237
 
236
238
    def _translate_path(self, path):
237
 
        return SimpleHTTPRequestHandler.translate_path(self, path)
 
239
        return SimpleHTTPServer.SimpleHTTPRequestHandler.translate_path(
 
240
            self, path)
238
241
 
239
242
    if sys.platform == 'win32':
240
243
        # On win32 you cannot access non-ascii filenames without
267
270
 
268
271
class TestingHTTPServer(BaseHTTPServer.HTTPServer):
269
272
 
270
 
    def __init__(self, server_address, RequestHandlerClass,
 
273
    def __init__(self, server_address, request_handler_class,
271
274
                 test_case_server):
272
275
        BaseHTTPServer.HTTPServer.__init__(self, server_address,
273
 
                                           RequestHandlerClass)
 
276
                                           request_handler_class)
274
277
        # test_case_server can be used to communicate between the
275
278
        # tests and the server (or the request handler and the
276
279
        # server), allowing dynamic behaviors to be defined from
287
290
        BaseHTTPServer.HTTPServer.server_close(self)
288
291
 
289
292
 
290
 
class HttpServer(Server):
 
293
class HttpServer(transport.Server):
291
294
    """A test server for http transports.
292
295
 
293
296
    Subclasses can provide a specific request handler.
302
305
 
303
306
    # Subclasses can provide a specific request handler
304
307
    def __init__(self, request_handler=TestingHTTPRequestHandler):
305
 
        Server.__init__(self)
 
308
        transport.Server.__init__(self)
306
309
        self.request_handler = request_handler
307
310
        self.host = 'localhost'
308
311
        self.port = 0
357
360
        # XXX: TODO: make the server back onto vfs_server rather than local
358
361
        # disk.
359
362
        assert backing_transport_server is None or \
360
 
            isinstance(backing_transport_server, LocalURLServer), \
 
363
            isinstance(backing_transport_server, local.LocalURLServer), \
361
364
            "HTTPServer currently assumes local transport, got %s" % \
362
365
            backing_transport_server
363
366
        self._home_dir = os.getcwdu()
388
391
        """See bzrlib.transport.Server.get_bogus_url."""
389
392
        # this is chosen to try to prevent trouble with proxies, weird dns,
390
393
        # etc
391
 
        return 'http://127.0.0.1:1/'
 
394
        return self._url_protocol + '://127.0.0.1:1/'
392
395
 
393
396
 
394
397
class HttpServer_urllib(HttpServer):