~bzr/ubuntu/lucid/bzr/beta-ppa

« back to all changes in this revision

Viewing changes to bzrlib/tests/http_server.py

  • Committer: Martin Pool
  • Date: 2010-08-18 04:26:39 UTC
  • mfrom: (129.1.8 packaging-karmic)
  • Revision ID: mbp@sourcefrog.net-20100818042639-mjoxtngyjwiu05fo
* PPA rebuild for lucid.
* PPA rebuild for karmic.
* PPA rebuild onto jaunty.
* New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
import urlparse
32
32
 
33
33
from bzrlib import transport
 
34
from bzrlib.tests import test_server
34
35
from bzrlib.transport import local
35
36
 
36
37
 
88
89
                                     errno.ECONNABORTED, errno.EBADF)):
89
90
                raise
90
91
 
 
92
    error_content_type = 'text/plain'
 
93
    error_message_format = '''\
 
94
Error code: %(code)s.
 
95
Message: %(message)s.
 
96
'''
 
97
 
 
98
    def send_error(self, code, message=None):
 
99
        """Send and log an error reply.
 
100
 
 
101
        We redefine the python-provided version to be able to set a 
 
102
        ``Content-Length`` header as some http/1.1 clients complain otherwise
 
103
        (see bug #568421).
 
104
 
 
105
        :param code: The HTTP error code.
 
106
 
 
107
        :param message: The explanation of the error code, Defaults to a short
 
108
             entry.
 
109
        """
 
110
 
 
111
        if message is None:
 
112
            try:
 
113
                message = self.responses[code][0]
 
114
            except KeyError:
 
115
                message = '???'
 
116
        self.log_error("code %d, message %s", code, message)
 
117
        content = (self.error_message_format %
 
118
                   {'code': code, 'message': message})
 
119
        self.send_response(code, message)
 
120
        self.send_header("Content-Type", self.error_content_type)
 
121
        self.send_header("Content-Length", "%d" % len(content))
 
122
        self.send_header('Connection', 'close')
 
123
        self.end_headers()
 
124
        if self.command != 'HEAD' and code >= 200 and code not in (204, 304):
 
125
            self.wfile.write(content)
 
126
 
91
127
    _range_regexp = re.compile(r'^(?P<start>\d+)-(?P<end>\d+)$')
92
128
    _tail_regexp = re.compile(r'^-(?P<tail>\d+)$')
93
129
 
530
566
        """
531
567
        # XXX: TODO: make the server back onto vfs_server rather than local
532
568
        # disk.
533
 
        if not (backing_transport_server is None or \
534
 
                isinstance(backing_transport_server, local.LocalURLServer)):
 
569
        if not (backing_transport_server is None
 
570
                or isinstance(backing_transport_server,
 
571
                              test_server.LocalURLServer)):
535
572
            raise AssertionError(
536
573
                "HTTPServer currently assumes local transport, got %s" % \
537
574
                backing_transport_server)