112
112
self.assertEqual(r.read(1), b'f')
113
113
self.assertEqual(r.read(2), b'oo')
118
from http.client import HTTPResponse as OldHTTPResponse
120
from httplib import HTTPResponse as OldHTTPResponse
123
resp = HTTPResponse(fp, preload_content=False)
125
self.assertEqual(resp.closed, False)
126
self.assertEqual(resp.readable(), True)
127
self.assertEqual(resp.writable(), False)
128
self.assertRaises(IOError, resp.fileno)
131
self.assertEqual(resp.closed, True)
133
# Try closing with an `httplib.HTTPResponse`, because it has an
135
hlr = OldHTTPResponse(socket.socket())
136
resp2 = HTTPResponse(hlr, preload_content=False)
137
self.assertEqual(resp2.closed, False)
139
self.assertEqual(resp2.closed, True)
141
#also try when only data is present.
142
resp3 = HTTPResponse('foodata')
143
self.assertRaises(IOError, resp3.fileno)
146
# A corner case where _fp is present but doesn't have `closed`,
147
# `isclosed`, or `fileno`. Unlikely, but possible.
148
self.assertEqual(resp3.closed, True)
149
self.assertRaises(IOError, resp3.fileno)
151
def test_io_bufferedreader(self):
153
resp = HTTPResponse(fp, preload_content=False)
154
br = BufferedReader(resp)
156
self.assertEqual(br.read(), b'foo')
159
self.assertEqual(resp.closed, True)
161
def test_streaming(self):
163
resp = HTTPResponse(fp, preload_content=False)
164
stream = resp.stream(2, decode_content=False)
166
self.assertEqual(next(stream), b'fo')
167
self.assertEqual(next(stream), b'o')
168
self.assertRaises(StopIteration, next, stream)
170
def test_gzipped_streaming(self):
172
compress = zlib.compressobj(6, zlib.DEFLATED, 16 + zlib.MAX_WBITS)
173
data = compress.compress(b'foo')
174
data += compress.flush()
177
resp = HTTPResponse(fp, headers={'content-encoding': 'gzip'},
178
preload_content=False)
179
stream = resp.stream(2)
181
self.assertEqual(next(stream), b'f')
182
self.assertEqual(next(stream), b'oo')
183
self.assertRaises(StopIteration, next, stream)
185
def test_deflate_streaming(self):
187
data = zlib.compress(b'foo')
190
resp = HTTPResponse(fp, headers={'content-encoding': 'deflate'},
191
preload_content=False)
192
stream = resp.stream(2)
194
self.assertEqual(next(stream), b'f')
195
self.assertEqual(next(stream), b'oo')
196
self.assertRaises(StopIteration, next, stream)
198
def test_deflate2_streaming(self):
200
compress = zlib.compressobj(6, zlib.DEFLATED, -zlib.MAX_WBITS)
201
data = compress.compress(b'foo')
202
data += compress.flush()
205
resp = HTTPResponse(fp, headers={'content-encoding': 'deflate'},
206
preload_content=False)
207
stream = resp.stream(2)
209
self.assertEqual(next(stream), b'f')
210
self.assertEqual(next(stream), b'oo')
211
self.assertRaises(StopIteration, next, stream)
213
def test_empty_stream(self):
215
resp = HTTPResponse(fp, preload_content=False)
216
stream = resp.stream(2, decode_content=False)
218
self.assertRaises(StopIteration, next, stream)
220
def test_mock_httpresponse_stream(self):
221
# Mock out a HTTP Request that does enough to make it through urllib3's
222
# read() and close() calls, and also exhausts and underlying file
224
class MockHTTPRequest(object):
228
data = self.fp.read(amt)
237
bio = BytesIO(b'foo')
238
fp = MockHTTPRequest()
240
resp = HTTPResponse(fp, preload_content=False)
241
stream = resp.stream(2)
243
self.assertEqual(next(stream), b'fo')
244
self.assertEqual(next(stream), b'o')
245
self.assertRaises(StopIteration, next, stream)
115
248
if __name__ == '__main__':