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())