/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_http.py

  • Committer: Jelmer Vernooij
  • Date: 2011-08-02 09:07:04 UTC
  • mfrom: (6047 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6050.
  • Revision ID: jelmer@samba.org-20110802090704-54mg7tjsbs2q12se
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
128
128
        ('urllib,http', dict(_activity_server=ActivityHTTPServer,
129
129
                            _transport=_urllib.HttpTransport_urllib,)),
130
130
        ]
131
 
    if tests.HTTPSServerFeature.available():
 
131
    if features.HTTPSServerFeature.available():
132
132
        activity_scenarios.append(
133
133
            ('urllib,https', dict(_activity_server=ActivityHTTPSServer,
134
134
                                _transport=_urllib.HttpTransport_urllib,)),)
136
136
        activity_scenarios.append(
137
137
            ('pycurl,http', dict(_activity_server=ActivityHTTPServer,
138
138
                                _transport=PyCurlTransport,)),)
139
 
        if tests.HTTPSServerFeature.available():
 
139
        if features.HTTPSServerFeature.available():
140
140
            from bzrlib.tests import (
141
141
                ssl_certs,
142
142
                )
1048
1048
        self.assertEqual('single', t._range_hint)
1049
1049
 
1050
1050
 
 
1051
class TruncatedBeforeBoundaryRequestHandler(
 
1052
    http_server.TestingHTTPRequestHandler):
 
1053
    """Truncation before a boundary, like in bug 198646"""
 
1054
 
 
1055
    _truncated_ranges = 1
 
1056
 
 
1057
    def get_multiple_ranges(self, file, file_size, ranges):
 
1058
        self.send_response(206)
 
1059
        self.send_header('Accept-Ranges', 'bytes')
 
1060
        boundary = 'tagada'
 
1061
        self.send_header('Content-Type',
 
1062
                         'multipart/byteranges; boundary=%s' % boundary)
 
1063
        boundary_line = '--%s\r\n' % boundary
 
1064
        # Calculate the Content-Length
 
1065
        content_length = 0
 
1066
        for (start, end) in ranges:
 
1067
            content_length += len(boundary_line)
 
1068
            content_length += self._header_line_length(
 
1069
                'Content-type', 'application/octet-stream')
 
1070
            content_length += self._header_line_length(
 
1071
                'Content-Range', 'bytes %d-%d/%d' % (start, end, file_size))
 
1072
            content_length += len('\r\n') # end headers
 
1073
            content_length += end - start # + 1
 
1074
        content_length += len(boundary_line)
 
1075
        self.send_header('Content-length', content_length)
 
1076
        self.end_headers()
 
1077
 
 
1078
        # Send the multipart body
 
1079
        cur = 0
 
1080
        for (start, end) in ranges:
 
1081
            if cur + self._truncated_ranges >= len(ranges):
 
1082
                # Abruptly ends the response and close the connection
 
1083
                self.close_connection = 1
 
1084
                return
 
1085
            self.wfile.write(boundary_line)
 
1086
            self.send_header('Content-type', 'application/octet-stream')
 
1087
            self.send_header('Content-Range', 'bytes %d-%d/%d'
 
1088
                             % (start, end, file_size))
 
1089
            self.end_headers()
 
1090
            self.send_range_content(file, start, end - start + 1)
 
1091
            cur += 1
 
1092
        # Final boundary
 
1093
        self.wfile.write(boundary_line)
 
1094
 
 
1095
 
 
1096
class TestTruncatedBeforeBoundary(TestSpecificRequestHandler):
 
1097
    """Tests the case of bug 198646, disconnecting before a boundary."""
 
1098
 
 
1099
    _req_handler_class = TruncatedBeforeBoundaryRequestHandler
 
1100
 
 
1101
    def setUp(self):
 
1102
        super(TestTruncatedBeforeBoundary, self).setUp()
 
1103
        self.build_tree_contents([('a', '0123456789')],)
 
1104
 
 
1105
    def test_readv_with_short_reads(self):
 
1106
        server = self.get_readonly_server()
 
1107
        t = self.get_readonly_transport()
 
1108
        # Force separate ranges for each offset
 
1109
        t._bytes_to_read_before_seek = 0
 
1110
        ireadv = iter(t.readv('a', ((0, 1), (2, 1), (4, 2), (9, 1))))
 
1111
        self.assertEqual((0, '0'), ireadv.next())
 
1112
        self.assertEqual((2, '2'), ireadv.next())
 
1113
        self.assertEqual((4, '45'), ireadv.next())
 
1114
        self.assertEqual((9, '9'), ireadv.next())
 
1115
 
 
1116
 
1051
1117
class LimitedRangeRequestHandler(http_server.TestingHTTPRequestHandler):
1052
1118
    """Errors out when range specifiers exceed the limit"""
1053
1119
 
2020
2086
    pass
2021
2087
 
2022
2088
 
2023
 
if tests.HTTPSServerFeature.available():
 
2089
if features.HTTPSServerFeature.available():
2024
2090
    from bzrlib.tests import https_server
2025
2091
    class ActivityHTTPSServer(ActivityServerMixin, https_server.HTTPSServer):
2026
2092
        pass