def test_double_iteration_over_same_response_body(self): class TestHttpResp(object): msg = {'transfer-encoding': 'chunked'} def __init__(self, fp): self.fp = fp def isclosed(self): return len(self.fp.buf) == self.fp.tell() data = 'foobarbaz' data = '\n'.join([hex(len(data))[2:], data]) response = http.ResponseBody(TestHttpResp(StringIO(data)), lambda *a, **k: None) self.assertEqual(list(response.iterchunks()), ['foobarbaz']) self.assertEqual(list(response.iterchunks()), [])
def test_double_iteration_over_same_response_body(self): class TestHttpResp(object): msg = {'transfer-encoding': 'chunked'} def __init__(self, fp): self.fp = fp def close(self): pass def isclosed(self): return len(self.fp.getvalue()) == self.fp.tell() data = b'foobarbaz' data = b'\n'.join([hex(len(data))[2:].encode('utf-8'), data]) response = http.ResponseBody(TestHttpResp(util.StringIO(data)), None, None, None) self.assertEqual(list(response.iterchunks()), [b'foobarbaz']) self.assertEqual(list(response.iterchunks()), [])
def test_close(self): class TestStream(StringIO): def isclosed(self): return len(self.buf) == self.tell() class Counter(object): def __init__(self): self.value = 0 def __call__(self): self.value += 1 counter = Counter() response = http.ResponseBody(TestStream('foobar'), counter) response.read(10) # read more than stream has. close() is called response.read() # steam ended. another close() call self.assertEqual(counter.value, 1)
def test_close(self): class TestStream(util.StringIO): def isclosed(self): return len(self.getvalue()) == self.tell() class ConnPool(object): def __init__(self): self.value = 0 def release(self, url, conn): self.value += 1 conn_pool = ConnPool() stream = TestStream(b'foobar') stream.msg = {} response = http.ResponseBody(stream, conn_pool, 'a', 'b') response.read(10) # read more than stream has. close() is called response.read() # steam ended. another close() call self.assertEqual(conn_pool.value, 1)