aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_protocol_http.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-02-07 03:56:57 +0100
committerMaximilian Hils <git@maximilianhils.com>2014-02-07 03:56:57 +0100
commitd07029d575532122f3d1f81141710ba36ca307e0 (patch)
tree3295115b4b556999be7885dce414abe1377ae72d /test/test_protocol_http.py
parent9f5f2b707165d14cbf0ace9a55ec2d1dc44d9802 (diff)
downloadmitmproxy-d07029d575532122f3d1f81141710ba36ca307e0.tar.gz
mitmproxy-d07029d575532122f3d1f81141710ba36ca307e0.tar.bz2
mitmproxy-d07029d575532122f3d1f81141710ba36ca307e0.zip
coverage++
Diffstat (limited to 'test/test_protocol_http.py')
-rw-r--r--test/test_protocol_http.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/test/test_protocol_http.py b/test/test_protocol_http.py
new file mode 100644
index 00000000..9e043049
--- /dev/null
+++ b/test/test_protocol_http.py
@@ -0,0 +1,86 @@
+from libmproxy import proxy # FIXME: Remove
+from libmproxy.protocol.http import *
+from cStringIO import StringIO
+import tutils
+
+
+def test_HttpAuthenticationError():
+ x = HttpAuthenticationError({"foo": "bar"})
+ assert str(x)
+ assert "foo" in x.auth_headers
+
+
+def test_stripped_chunked_encoding_no_content():
+ """
+ https://github.com/mitmproxy/mitmproxy/issues/186
+ """
+ r = tutils.tresp(content="")
+ r.headers["Transfer-Encoding"] = ["chunked"]
+ assert "Content-Length" in r._assemble_headers()
+
+ r = tutils.treq(content="")
+ r.headers["Transfer-Encoding"] = ["chunked"]
+ assert "Content-Length" in r._assemble_headers()
+
+
+class TestHTTPRequest:
+ def test_asterisk_form(self):
+ s = StringIO("OPTIONS * HTTP/1.1")
+ f = tutils.tflow_noreq()
+ f.request = HTTPRequest.from_stream(s)
+ assert f.request.form_in == "asterisk"
+ x = f.request._assemble()
+ assert f.request._assemble() == "OPTIONS * HTTP/1.1\r\nHost: address:22\r\n\r\n"
+
+ def test_origin_form(self):
+ s = StringIO("GET /foo\xff HTTP/1.1")
+ tutils.raises("Bad HTTP request line", HTTPRequest.from_stream, s)
+
+ def test_authority_form(self):
+ s = StringIO("CONNECT oops-no-port.com HTTP/1.1")
+ tutils.raises("Bad HTTP request line", HTTPRequest.from_stream, s)
+ s = StringIO("CONNECT address:22 HTTP/1.1")
+ r = HTTPRequest.from_stream(s)
+ assert r._assemble() == "CONNECT address:22 HTTP/1.1\r\nHost: address:22\r\n\r\n"
+
+
+ def test_absolute_form(self):
+ s = StringIO("GET oops-no-protocol.com HTTP/1.1")
+ tutils.raises("Bad HTTP request line", HTTPRequest.from_stream, s)
+ s = StringIO("GET http://address:22/ HTTP/1.1")
+ r = HTTPRequest.from_stream(s)
+ assert r._assemble() == "GET http://address:22/ HTTP/1.1\r\nHost: address:22\r\n\r\n"
+
+ def test_assemble_unknown_form(self):
+ r = tutils.treq()
+ tutils.raises("Invalid request form", r._assemble, "antiauthority")
+
+
+ def test_set_url(self):
+ r = tutils.treq_absolute()
+ r.set_url("https://otheraddress:42/ORLY")
+ assert r.scheme == "https"
+ assert r.host == "otheraddress"
+ assert r.port == 42
+ assert r.path == "/ORLY"
+
+
+class TestHTTPResponse:
+ def test_read_from_stringio(self):
+ _s = "HTTP/1.1 200 OK\r\n" \
+ "Content-Length: 7\r\n" \
+ "\r\n"\
+ "content\r\n" \
+ "HTTP/1.1 204 OK\r\n" \
+ "\r\n"
+ s = StringIO(_s)
+ r = HTTPResponse.from_stream(s, "GET")
+ assert r.code == 200
+ assert r.content == "content"
+ assert HTTPResponse.from_stream(s, "GET").code == 204
+
+ s = StringIO(_s)
+ r = HTTPResponse.from_stream(s, "HEAD")
+ assert r.code == 200
+ assert r.content == ""
+ tutils.raises("Invalid server response: 'content", HTTPResponse.from_stream, s, "GET") \ No newline at end of file