aboutsummaryrefslogtreecommitdiffstats
path: root/test/http/http1/test_read.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/http/http1/test_read.py')
-rw-r--r--test/http/http1/test_read.py34
1 files changed, 25 insertions, 9 deletions
diff --git a/test/http/http1/test_read.py b/test/http/http1/test_read.py
index 98d31bc2..45f61b4f 100644
--- a/test/http/http1/test_read.py
+++ b/test/http/http1/test_read.py
@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division
from io import BytesIO
import textwrap
from mock import Mock
-from netlib.exceptions import HttpException, HttpSyntaxException, HttpReadDisconnect
+from netlib.exceptions import HttpException, HttpSyntaxException, HttpReadDisconnect, TcpDisconnect
from netlib.http import Headers
from netlib.http.http1.read import (
read_request, read_response, read_request_head,
@@ -16,8 +16,8 @@ from netlib.tutils import treq, tresp, raises
def test_read_request():
rfile = BytesIO(b"GET / HTTP/1.1\r\n\r\nskip")
r = read_request(rfile)
- assert r.method == b"GET"
- assert r.body == b""
+ assert r.method == "GET"
+ assert r.content == b""
assert r.timestamp_end
assert rfile.read() == b"skip"
@@ -32,9 +32,9 @@ def test_read_request_head():
rfile.reset_timestamps = Mock()
rfile.first_byte_timestamp = 42
r = read_request_head(rfile)
- assert r.method == b"GET"
+ assert r.method == "GET"
assert r.headers["Content-Length"] == "4"
- assert r.body is None
+ assert r.content is None
assert rfile.reset_timestamps.called
assert r.timestamp_start == 42
assert rfile.read() == b"skip"
@@ -45,7 +45,7 @@ def test_read_response():
rfile = BytesIO(b"HTTP/1.1 418 I'm a teapot\r\n\r\nbody")
r = read_response(rfile, req)
assert r.status_code == 418
- assert r.body == b"body"
+ assert r.content == b"body"
assert r.timestamp_end
@@ -61,7 +61,7 @@ def test_read_response_head():
r = read_response_head(rfile)
assert r.status_code == 418
assert r.headers["Content-Length"] == "4"
- assert r.body is None
+ assert r.content is None
assert rfile.reset_timestamps.called
assert r.timestamp_start == 42
assert rfile.read() == b"skip"
@@ -100,6 +100,11 @@ class TestReadBody(object):
with raises(HttpException):
b"".join(read_body(rfile, -1, 3))
+ def test_max_chunk_size(self):
+ rfile = BytesIO(b"123456")
+ assert list(read_body(rfile, -1, max_chunk_size=None)) == [b"123456"]
+ rfile = BytesIO(b"123456")
+ assert list(read_body(rfile, -1, max_chunk_size=1)) == [b"1", b"2", b"3", b"4", b"5", b"6"]
def test_connection_close():
headers = Headers()
@@ -112,6 +117,9 @@ def test_connection_close():
headers["connection"] = "close"
assert connection_close(b"HTTP/1.1", headers)
+ headers["connection"] = "foobar"
+ assert connection_close(b"HTTP/1.0", headers)
+ assert not connection_close(b"HTTP/1.1", headers)
def test_expected_http_body_size():
# Expect: 100-continue
@@ -169,6 +177,11 @@ def test_get_first_line():
rfile = BytesIO(b"")
_get_first_line(rfile)
+ with raises(HttpReadDisconnect):
+ rfile = Mock()
+ rfile.readline.side_effect = TcpDisconnect
+ _get_first_line(rfile)
+
def test_read_request_line():
def t(b):
@@ -187,7 +200,8 @@ def test_read_request_line():
t(b"GET / WTF/1.1")
with raises(HttpSyntaxException):
t(b"this is not http")
-
+ with raises(HttpReadDisconnect):
+ t(b"")
def test_parse_authority_form():
assert _parse_authority_form(b"foo:42") == (b"foo", 42)
@@ -218,6 +232,8 @@ def test_read_response_line():
t(b"HTTP/1.1 OK OK")
with raises(HttpSyntaxException):
t(b"WTF/1.1 200 OK")
+ with raises(HttpReadDisconnect):
+ t(b"")
def test_check_http_version():
@@ -283,7 +299,7 @@ class TestReadHeaders(object):
def test_read_chunked():
- req = treq(body=None)
+ req = treq(content=None)
req.headers["Transfer-Encoding"] = "chunked"
data = b"1\r\na\r\n0\r\n"