aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_protocol_http.py
diff options
context:
space:
mode:
authorThomas Kriechbaumer <thomas@kriechbaumer.name>2015-08-01 10:40:19 +0200
committerThomas Kriechbaumer <thomas@kriechbaumer.name>2015-08-01 14:37:32 +0200
commitdb02553e2afee044faac898d12bd8d1adadbcd21 (patch)
tree1e5910599b7b47c527528f03f896efd2fbf7c907 /test/test_protocol_http.py
parent8a051511706e2e62c32e0f70e05ecab11d444b6f (diff)
downloadmitmproxy-db02553e2afee044faac898d12bd8d1adadbcd21.tar.gz
mitmproxy-db02553e2afee044faac898d12bd8d1adadbcd21.tar.bz2
mitmproxy-db02553e2afee044faac898d12bd8d1adadbcd21.zip
move code from mitmproxy to netlib
Diffstat (limited to 'test/test_protocol_http.py')
-rw-r--r--test/test_protocol_http.py259
1 files changed, 1 insertions, 258 deletions
diff --git a/test/test_protocol_http.py b/test/test_protocol_http.py
index 75f0a7b9..81c39f09 100644
--- a/test/test_protocol_http.py
+++ b/test/test_protocol_http.py
@@ -17,14 +17,7 @@ def mock_protocol(data='', chunked=False):
return http1.HTTP1Protocol(rfile=rfile, wfile=wfile)
-
-def test_HttpAuthenticationError():
- x = HttpAuthenticationError({"foo": "bar"})
- assert str(x)
- assert "foo" in x.headers
-
-
-# TODO: move test to netlib
+# TODO: move test to netlib http1 protocol
# def test_stripped_chunked_encoding_no_content():
# """
# https://github.com/mitmproxy/mitmproxy/issues/186
@@ -38,183 +31,6 @@ def test_HttpAuthenticationError():
# assert "Content-Length" in r._assemble_headers()
#
-class TestHTTPRequest:
- def test_asterisk_form_in(self):
- f = tutils.tflow(req=None)
- protocol = mock_protocol("OPTIONS * HTTP/1.1")
- f.request = HTTPRequest.from_protocol(protocol)
-
- assert f.request.form_in == "relative"
- f.request.host = f.server_conn.address.host
- f.request.port = f.server_conn.address.port
- f.request.scheme = "http"
- assert protocol.assemble(f.request) == (
- "OPTIONS * HTTP/1.1\r\n"
- "Host: address:22\r\n"
- "Content-Length: 0\r\n\r\n")
-
- def test_relative_form_in(self):
- protocol = mock_protocol("GET /foo\xff HTTP/1.1")
- tutils.raises("Bad HTTP request line", HTTPRequest.from_protocol, protocol)
-
- protocol = mock_protocol("GET /foo HTTP/1.1\r\nConnection: Upgrade\r\nUpgrade: h2c")
- r = HTTPRequest.from_protocol(protocol)
- assert r.headers["Upgrade"] == ["h2c"]
-
- def test_expect_header(self):
- protocol = mock_protocol(
- "GET / HTTP/1.1\r\nContent-Length: 3\r\nExpect: 100-continue\r\n\r\nfoobar")
- r = HTTPRequest.from_protocol(protocol)
- assert protocol.tcp_handler.wfile.getvalue() == "HTTP/1.1 100 Continue\r\n\r\n"
- assert r.content == "foo"
- assert protocol.tcp_handler.rfile.read(3) == "bar"
-
- def test_authority_form_in(self):
- protocol = mock_protocol("CONNECT oops-no-port.com HTTP/1.1")
- tutils.raises("Bad HTTP request line", HTTPRequest.from_protocol, protocol)
-
- protocol = mock_protocol("CONNECT address:22 HTTP/1.1")
- r = HTTPRequest.from_protocol(protocol)
- r.scheme, r.host, r.port = "http", "address", 22
- assert protocol.assemble(r) == (
- "CONNECT address:22 HTTP/1.1\r\n"
- "Host: address:22\r\n"
- "Content-Length: 0\r\n\r\n")
- assert r.pretty_url(False) == "address:22"
-
- def test_absolute_form_in(self):
- protocol = mock_protocol("GET oops-no-protocol.com HTTP/1.1")
- tutils.raises("Bad HTTP request line", HTTPRequest.from_protocol, protocol)
-
- protocol = mock_protocol("GET http://address:22/ HTTP/1.1")
- r = HTTPRequest.from_protocol(protocol)
- assert protocol.assemble(r) == (
- "GET http://address:22/ HTTP/1.1\r\n"
- "Host: address:22\r\n"
- "Content-Length: 0\r\n\r\n")
-
- def test_http_options_relative_form_in(self):
- """
- Exercises fix for Issue #392.
- """
- protocol = mock_protocol("OPTIONS /secret/resource HTTP/1.1")
- r = HTTPRequest.from_protocol(protocol)
- r.host = 'address'
- r.port = 80
- r.scheme = "http"
- assert protocol.assemble(r) == (
- "OPTIONS /secret/resource HTTP/1.1\r\n"
- "Host: address\r\n"
- "Content-Length: 0\r\n\r\n")
-
- def test_http_options_absolute_form_in(self):
- protocol = mock_protocol("OPTIONS http://address/secret/resource HTTP/1.1")
- r = HTTPRequest.from_protocol(protocol)
- r.host = 'address'
- r.port = 80
- r.scheme = "http"
- assert protocol.assemble(r) == (
- "OPTIONS http://address:80/secret/resource HTTP/1.1\r\n"
- "Host: address\r\n"
- "Content-Length: 0\r\n\r\n")
-
- def test_set_url(self):
- r = tutils.treq_absolute()
- r.url = "https://otheraddress:42/ORLY"
- assert r.scheme == "https"
- assert r.host == "otheraddress"
- assert r.port == 42
- assert r.path == "/ORLY"
-
- def test_repr(self):
- r = tutils.treq()
- assert repr(r)
-
- def test_pretty_host(self):
- r = tutils.treq()
- assert r.pretty_host(True) == "address"
- assert r.pretty_host(False) == "address"
- r.headers["host"] = ["other"]
- assert r.pretty_host(True) == "other"
- assert r.pretty_host(False) == "address"
- r.host = None
- assert r.pretty_host(True) == "other"
- assert r.pretty_host(False) is None
- del r.headers["host"]
- assert r.pretty_host(True) is None
- assert r.pretty_host(False) is None
-
- # Invalid IDNA
- r.headers["host"] = [".disqus.com"]
- assert r.pretty_host(True) == ".disqus.com"
-
- def test_get_form_for_urlencoded(self):
- r = tutils.treq()
- r.headers.add("content-type", "application/x-www-form-urlencoded")
- r.get_form_urlencoded = MagicMock()
-
- r.get_form()
-
- assert r.get_form_urlencoded.called
-
- def test_get_form_for_multipart(self):
- r = tutils.treq()
- r.headers.add("content-type", "multipart/form-data")
- r.get_form_multipart = MagicMock()
-
- r.get_form()
-
- assert r.get_form_multipart.called
-
- def test_get_cookies_none(self):
- h = odict.ODictCaseless()
- r = tutils.treq()
- r.headers = h
- assert len(r.get_cookies()) == 0
-
- def test_get_cookies_single(self):
- h = odict.ODictCaseless()
- h["Cookie"] = ["cookiename=cookievalue"]
- r = tutils.treq()
- r.headers = h
- result = r.get_cookies()
- assert len(result) == 1
- assert result['cookiename'] == ['cookievalue']
-
- def test_get_cookies_double(self):
- h = odict.ODictCaseless()
- h["Cookie"] = [
- "cookiename=cookievalue;othercookiename=othercookievalue"
- ]
- r = tutils.treq()
- r.headers = h
- result = r.get_cookies()
- assert len(result) == 2
- assert result['cookiename'] == ['cookievalue']
- assert result['othercookiename'] == ['othercookievalue']
-
- def test_get_cookies_withequalsign(self):
- h = odict.ODictCaseless()
- h["Cookie"] = [
- "cookiename=coo=kievalue;othercookiename=othercookievalue"
- ]
- r = tutils.treq()
- r.headers = h
- result = r.get_cookies()
- assert len(result) == 2
- assert result['cookiename'] == ['coo=kievalue']
- assert result['othercookiename'] == ['othercookievalue']
-
- def test_set_cookies(self):
- h = odict.ODictCaseless()
- h["Cookie"] = ["cookiename=cookievalue"]
- r = tutils.treq()
- r.headers = h
- result = r.get_cookies()
- result["cookiename"] = ["foo"]
- r.set_cookies(result)
- assert r.get_cookies()["cookiename"] == ["foo"]
-
class TestHTTPResponse:
def test_read_from_stringio(self):
@@ -241,80 +57,7 @@ class TestHTTPResponse:
HTTPResponse.from_protocol, protocol, "GET"
)
- def test_repr(self):
- r = tutils.tresp()
- assert "unknown content type" in repr(r)
- r.headers["content-type"] = ["foo"]
- assert "foo" in repr(r)
- assert repr(tutils.tresp(content=CONTENT_MISSING))
-
- def test_get_cookies_none(self):
- h = odict.ODictCaseless()
- resp = tutils.tresp()
- resp.headers = h
- assert not resp.get_cookies()
-
- def test_get_cookies_simple(self):
- h = odict.ODictCaseless()
- h["Set-Cookie"] = ["cookiename=cookievalue"]
- resp = tutils.tresp()
- resp.headers = h
- result = resp.get_cookies()
- assert len(result) == 1
- assert "cookiename" in result
- assert result["cookiename"][0] == ["cookievalue", odict.ODict()]
-
- def test_get_cookies_with_parameters(self):
- h = odict.ODictCaseless()
- h["Set-Cookie"] = [
- "cookiename=cookievalue;domain=example.com;expires=Wed Oct 21 16:29:41 2015;path=/; HttpOnly"]
- resp = tutils.tresp()
- resp.headers = h
- result = resp.get_cookies()
- assert len(result) == 1
- assert "cookiename" in result
- assert result["cookiename"][0][0] == "cookievalue"
- attrs = result["cookiename"][0][1]
- assert len(attrs) == 4
- assert attrs["domain"] == ["example.com"]
- assert attrs["expires"] == ["Wed Oct 21 16:29:41 2015"]
- assert attrs["path"] == ["/"]
- assert attrs["httponly"] == [None]
-
- def test_get_cookies_no_value(self):
- h = odict.ODictCaseless()
- h["Set-Cookie"] = [
- "cookiename=; Expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/"
- ]
- resp = tutils.tresp()
- resp.headers = h
- result = resp.get_cookies()
- assert len(result) == 1
- assert "cookiename" in result
- assert result["cookiename"][0][0] == ""
- assert len(result["cookiename"][0][1]) == 2
-
- def test_get_cookies_twocookies(self):
- h = odict.ODictCaseless()
- h["Set-Cookie"] = ["cookiename=cookievalue", "othercookie=othervalue"]
- resp = tutils.tresp()
- resp.headers = h
- result = resp.get_cookies()
- assert len(result) == 2
- assert "cookiename" in result
- assert result["cookiename"][0] == ["cookievalue", odict.ODict()]
- assert "othercookie" in result
- assert result["othercookie"][0] == ["othervalue", odict.ODict()]
-
- def test_set_cookies(self):
- resp = tutils.tresp()
- v = resp.get_cookies()
- v.add("foo", ["bar", odict.ODictCaseless()])
- resp.set_cookies(v)
- v = resp.get_cookies()
- assert len(v) == 1
- assert v["foo"] == [["bar", odict.ODictCaseless()]]
class TestHTTPFlow(object):