def test_io(self, sock): fp = BytesIO(b"foo") resp = HTTPResponse(fp, preload_content=False) assert not resp.closed assert resp.readable() assert not resp.writable() with pytest.raises(IOError): resp.fileno() resp.close() assert resp.closed # Try closing with an `httplib.HTTPResponse`, because it has an # `isclosed` method. try: hlr = httplib.HTTPResponse(sock) resp2 = HTTPResponse(hlr, preload_content=False) assert not resp2.closed resp2.close() assert resp2.closed finally: hlr.close() # also try when only data is present. resp3 = HTTPResponse("foodata") with pytest.raises(IOError): resp3.fileno() resp3._fp = 2 # A corner case where _fp is present but doesn't have `closed`, # `isclosed`, or `fileno`. Unlikely, but possible. assert resp3.closed with pytest.raises(IOError): resp3.fileno()
def test_io(self): import socket try: from http.client import HTTPResponse as OldHTTPResponse except: from httplib import HTTPResponse as OldHTTPResponse fp = BytesIO(b'foo') resp = HTTPResponse(fp, preload_content=False) self.assertEqual(resp.closed, False) self.assertEqual(resp.readable(), True) self.assertEqual(resp.writable(), False) self.assertRaises(IOError, resp.fileno) resp.close() self.assertEqual(resp.closed, True) # Try closing with an `httplib.HTTPResponse`, because it has an # `isclosed` method. hlr = OldHTTPResponse(socket.socket()) resp2 = HTTPResponse(hlr, preload_content=False) self.assertEqual(resp2.closed, False) resp2.close() self.assertEqual(resp2.closed, True) #also try when only data is present. resp3 = HTTPResponse('foodata') self.assertRaises(IOError, resp3.fileno) resp3._fp = 2 # A corner case where _fp is present but doesn't have `closed`, # `isclosed`, or `fileno`. Unlikely, but possible. self.assertEqual(resp3.closed, True) self.assertRaises(IOError, resp3.fileno)
def test_io(self, sock): fp = BytesIO(b'foo') resp = HTTPResponse(fp, preload_content=False) assert not resp.closed assert resp.readable() assert not resp.writable() with pytest.raises(IOError): resp.fileno() resp.close() assert resp.closed # Try closing with an `httplib.HTTPResponse`, because it has an # `isclosed` method. try: hlr = httplib.HTTPResponse(sock) resp2 = HTTPResponse(hlr, preload_content=False) assert not resp2.closed resp2.close() assert resp2.closed finally: hlr.close() # also try when only data is present. resp3 = HTTPResponse('foodata') with pytest.raises(IOError): resp3.fileno() resp3._fp = 2 # A corner case where _fp is present but doesn't have `closed`, # `isclosed`, or `fileno`. Unlikely, but possible. assert resp3.closed with pytest.raises(IOError): resp3.fileno()
def test_close_midstream(self): # A mock fp object that wraps a list and allows closing. class MockFP(object): self.list = None def close(self): self.list = None def __iter__(self): return self def __next__(self): if not self.list: raise StopIteration() return self.list.pop(0) next = __next__ data = [b"fo", b"o"] fp = MockFP() fp.list = data resp = HTTPResponse(fp) stream = resp.stream() assert next(stream) == b"fo" resp.close() with pytest.raises(StopIteration): next(stream)
def test_io(self): fp = BytesIO(b"foo") resp = HTTPResponse(fp) assert not resp.closed assert resp.readable() assert not resp.writable() with pytest.raises(IOError): resp.fileno() resp.close() assert resp.closed # Try closing with a base Response hlr = get_response() resp2 = HTTPResponse(hlr.body) assert not resp2.closed resp2.close() assert resp2.closed # also try when only data is present. resp3 = HTTPResponse("foodata") resp3.preload_content() with pytest.raises(IOError): resp3.fileno()
def test_closed_streaming(self): fp = BytesIO(b"foo") resp = HTTPResponse(fp) resp.close() with pytest.raises(StopIteration): next(resp.stream())
def test_closed_streaming(self): fp = BytesIO(b'foo') resp = HTTPResponse(fp, preload_content=False) resp.close() with pytest.raises(StopIteration): next(resp.stream())