def test_blocking_read(conn, monkeypatch): path = '/foo/wurfl' chunks = [120] * 10 delay = 10 while True: monkeypatch.setattr(MockRequestHandler, 'do_GET', get_chunked_GET_handler(path, chunks, delay)) conn.send_request('GET', path) resp = conn.read_response() assert resp.status == 200 interrupted = 0 parts = [] while True: crt = conn.co_read(100) try: while True: io_req = next(crt) interrupted += 1 assert io_req.poll(5) except StopIteration as exc: buf = exc.value if not buf: break parts.append(buf) assert not conn.response_pending() assert _join(parts) == b''.join(DUMMY_DATA[:x] for x in chunks) if interrupted >= 8: break elif delay > 5000: pytest.fail('no blocking read even with %f sec sleep' % delay) delay *= 2
def test_readinto_identity(conn): conn.send_request('GET', '/send_512_bytes') resp = conn.read_response() assert resp.status == 200 assert resp.path == '/send_512_bytes' assert resp.length == 512 parts = [] while True: buf = bytearray(600) len_ = conn.readinto(buf) if not len_: break parts.append(buf[:len_]) assert _join(parts) == DUMMY_DATA[:512] assert not conn.response_pending()
def test_readinto_chunked(conn, monkeypatch): path = '/foo/wurfl' chunks = [300, 317, 283] monkeypatch.setattr(MockRequestHandler, 'do_GET', get_chunked_GET_handler(path, chunks)) conn.send_request('GET', path) resp = conn.read_response() assert resp.status == 200 assert resp.length is None assert resp.path == path parts = [] while True: buf = bytearray(600) len_ = conn.readinto(buf) if not len_: break parts.append(buf[:len_]) assert _join(parts) == b''.join(DUMMY_DATA[:x] for x in chunks) assert not conn.response_pending()