| https://bitbucket.org/nikratio/python-dugong/commits/0e9d67700bc8 |
| diff --git a/test/test_dugong.py b/test/test_dugong.py |
| --- a/test/test_dugong.py |
| +++ b/test/test_dugong.py |
| @@ -99,6 +99,12 @@ |
| request.addfinalizer(conn.disconnect) |
| return conn |
| |
| +@pytest.fixture() |
| +def random_fh(request): |
| + fh = open('/dev/urandom', 'rb') |
| + request.addfinalizer(fh.close) |
| + return fh |
| + |
| def check_http_connection(): |
| '''Skip test if we can't connect to ssl test server''' |
| |
| @@ -170,12 +176,12 @@ |
| conn.get_ssl_cipher() |
| conn.get_ssl_peercert() |
| |
| -def test_blocking_send(conn): |
| +def test_blocking_send(conn, random_fh): |
| # Send requests until we block because all TCP buffers are full |
| |
| - path = '/send_100_1200-byte_chunks' |
| + path = '/send_102400_random_bytes' |
| for count in itertools.count(): |
| - crt = conn.co_send_request('GET', path, body=DUMMY_DATA[:8192]) |
| + crt = conn.co_send_request('GET', path, body=random_fh.read(8192)) |
| flag = False |
| for io_req in crt: |
| if not io_req.poll(1): |
| @@ -539,7 +545,7 @@ |
| conn.read_response() |
| conn.readall() |
| |
| -def test_aborted_write1(conn, monkeypatch): |
| +def test_aborted_write1(conn, monkeypatch, random_fh): |
| BUFSIZE = 64*1024 |
| |
| # Monkeypatch request handler |
| @@ -562,14 +568,14 @@ |
| # Try to write data |
| with pytest.raises(ConnectionClosed): |
| for _ in range(50): |
| - conn.write(b'f' * BUFSIZE) |
| + conn.write(random_fh.read(BUFSIZE)) |
| |
| # Nevertheless, try to read response |
| resp = conn.read_response() |
| assert resp.status == 401 |
| assert resp.reason == 'Please stop!' |
| |
| -def test_aborted_write2(conn, monkeypatch): |
| +def test_aborted_write2(conn, monkeypatch, random_fh): |
| BUFSIZE = 64*1024 |
| |
| # Monkeypatch request handler |
| @@ -590,7 +596,7 @@ |
| # Try to write data |
| with pytest.raises(ConnectionClosed): |
| for _ in range(50): |
| - conn.write(b'f' * BUFSIZE) |
| + conn.write(random_fh.read(BUFSIZE)) |
| |
| # Nevertheless, try to read response |
| assert_raises(ConnectionClosed, conn.read_response) |
| @@ -716,12 +722,13 @@ |
| assert conn.read(50) == b'x' * 25 |
| assert_raises(dugong.ConnectionTimedOut, conn.read, 50) |
| |
| -def test_send_timeout(conn, monkeypatch): |
| +def test_send_timeout(conn, monkeypatch, random_fh): |
| conn.timeout = 1 |
| |
| def do_PUT(self): |
| # Read just a tiny bit |
| self.rfile.read(256) |
| + time.sleep(2*conn.timeout) |
| monkeypatch.setattr(MockRequestHandler, 'do_PUT', do_PUT) |
| |
| # We don't know how much data can be buffered, so we |
| @@ -730,7 +737,7 @@ |
| conn.send_request('PUT', '/recv_something', body=BodyFollowing(len_)) |
| with pytest.raises(dugong.ConnectionTimedOut): |
| while len_ > 0: |
| - conn.write(b'x' * min(len_, 16*1024)) |
| + conn.write(random_fh.read(min(len_, 16*1024))) |
| |
| |
| DUMMY_DATA = ','.join(str(x) for x in range(10000)).encode() |
| @@ -743,6 +750,14 @@ |
| def log_message(self, format, *args): |
| pass |
| |
| + def setup(self): |
| + super().setup() |
| + self.random_fh = open('/dev/urandom', 'rb') |
| + |
| + def finish(self): |
| + super().finish() |
| + self.random_fh.close() |
| + |
| def handle_expect_100(self): |
| if self.handle_errors(): |
| return |
| @@ -782,14 +797,17 @@ |
| self.wfile.close() |
| return |
| |
| - hit = re.match(r'^/send_([0-9]+)_bytes', self.path) |
| + hit = re.match(r'^/send_([0-9]+)_(random_)?bytes', self.path) |
| if hit: |
| len_ = int(hit.group(1)) |
| self.send_response(200) |
| self.send_header("Content-Type", 'application/octet-stream') |
| self.send_header("Content-Length", str(len_)) |
| self.end_headers() |
| - self.wfile.write(DUMMY_DATA[:len_]) |
| + if hit.group(2): |
| + self.wfile.write(self.random_fh.read(len_)) |
| + else: |
| + self.wfile.write(DUMMY_DATA[:len_]) |
| return |
| |
| hit = re.match(r'^/send_([0-9]+)_([0-9]+)-byte_chunks(?:_delay_([0-9]+)_ms)?', |
| |