aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/test_contentview.py22
-rw-r--r--test/mitmproxy/test_examples.py10
-rw-r--r--test/mitmproxy/test_flow.py18
-rw-r--r--test/mitmproxy/test_protocol_http2.py6
-rw-r--r--test/mitmproxy/tservers.py1
-rw-r--r--test/netlib/http/test_message.py117
-rw-r--r--test/netlib/test_encoding.py40
7 files changed, 117 insertions, 97 deletions
diff --git a/test/mitmproxy/test_contentview.py b/test/mitmproxy/test_contentview.py
index 52fceeac..4b099d8d 100644
--- a/test/mitmproxy/test_contentview.py
+++ b/test/mitmproxy/test_contentview.py
@@ -209,28 +209,6 @@ Larry
headers=Headers()
)
- r = cv.get_content_view(
- cv.get("Auto"),
- encoding.encode('gzip', b"[1, 2, 3]"),
- headers=Headers(
- content_type="application/json",
- content_encoding="gzip"
- )
- )
- assert "decoded gzip" in r[0]
- assert "JSON" in r[0]
-
- r = cv.get_content_view(
- cv.get("XML"),
- encoding.encode('gzip', b"[1, 2, 3]"),
- headers=Headers(
- content_type="application/json",
- content_encoding="gzip"
- )
- )
- assert "decoded gzip" in r[0]
- assert "Raw" in r[0]
-
def test_add_cv(self):
class TestContentView(cv.View):
name = "test"
diff --git a/test/mitmproxy/test_examples.py b/test/mitmproxy/test_examples.py
index 607d6faf..22d3c425 100644
--- a/test/mitmproxy/test_examples.py
+++ b/test/mitmproxy/test_examples.py
@@ -73,9 +73,9 @@ def test_add_header():
def test_custom_contentviews():
with example("custom_contentviews.py") as ex:
pig = ex.ctx.contentview
- _, fmt = pig("<html>test!</html>")
- assert any('esttay!' in val[0][1] for val in fmt)
- assert not pig("gobbledygook")
+ _, fmt = pig(b"<html>test!</html>")
+ assert any(b'esttay!' in val[0][1] for val in fmt)
+ assert not pig(b"gobbledygook")
def test_iframe_injector():
@@ -103,7 +103,7 @@ def test_modify_form():
def test_modify_querystring():
- flow = tutils.tflow(req=netutils.treq(path="/search?q=term"))
+ flow = tutils.tflow(req=netutils.treq(path=b"/search?q=term"))
with example("modify_querystring.py") as ex:
ex.run("request", flow)
assert flow.request.query["mitmproxy"] == "rocks"
@@ -126,7 +126,7 @@ def test_modify_response_body():
def test_redirect_requests():
- flow = tutils.tflow(req=netutils.treq(host="example.org"))
+ flow = tutils.tflow(req=netutils.treq(host=b"example.org"))
with example("redirect_requests.py") as ex:
ex.run("request", flow)
assert flow.request.host == "mitmproxy.org"
diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py
index 9eaab9aa..5753e728 100644
--- a/test/mitmproxy/test_flow.py
+++ b/test/mitmproxy/test_flow.py
@@ -518,13 +518,13 @@ class TestFlow(object):
f.replace("foo", "bar")
- assert f.request.content != "abarb"
+ assert f.request.raw_content != "abarb"
f.request.decode()
- assert f.request.content == "abarb"
+ assert f.request.raw_content == "abarb"
- assert f.response.content != "abarb"
+ assert f.response.raw_content != "abarb"
f.response.decode()
- assert f.response.content == "abarb"
+ assert f.response.raw_content == "abarb"
class TestState:
@@ -1102,16 +1102,6 @@ class TestRequest:
r.constrain_encoding()
assert "oink" not in r.headers["accept-encoding"]
- def test_get_decoded_content(self):
- r = HTTPRequest.wrap(netlib.tutils.treq())
- r.content = None
- r.headers["content-encoding"] = "identity"
- assert r.get_decoded_content() is None
-
- r.content = "falafel"
- r.encode("gzip")
- assert r.get_decoded_content() == "falafel"
-
def test_get_content_type(self):
resp = HTTPResponse.wrap(netlib.tutils.tresp())
resp.headers = Headers(content_type="text/plain")
diff --git a/test/mitmproxy/test_protocol_http2.py b/test/mitmproxy/test_protocol_http2.py
index 932c8df2..6e021b2c 100644
--- a/test/mitmproxy/test_protocol_http2.py
+++ b/test/mitmproxy/test_protocol_http2.py
@@ -120,7 +120,7 @@ class _Http2TestBase(object):
client.wfile.flush()
# read CONNECT response
- while client.rfile.readline() != "\r\n":
+ while client.rfile.readline() != b"\r\n":
pass
client.convert_to_ssl(alpn_protos=[b'h2'])
@@ -197,7 +197,7 @@ class TestSimple(_Http2TestBase, _Http2ServerBase):
(':path', '/'),
('ClIeNt-FoO', 'client-bar-1'),
('ClIeNt-FoO', 'client-bar-2'),
- ], body='my request body echoed back to me')
+ ], body=b'my request body echoed back to me')
done = False
while not done:
@@ -269,7 +269,7 @@ class TestWithBodies(_Http2TestBase, _Http2ServerBase):
(':scheme', 'https'),
(':path', '/'),
],
- body='foobar with request body',
+ body=b'foobar with request body',
)
done = False
diff --git a/test/mitmproxy/tservers.py b/test/mitmproxy/tservers.py
index 51f4b4e2..6d8730f5 100644
--- a/test/mitmproxy/tservers.py
+++ b/test/mitmproxy/tservers.py
@@ -11,7 +11,6 @@ import pathod.pathoc
from mitmproxy import flow, controller
from mitmproxy.cmdline import APP_HOST, APP_PORT
-from netlib import strutils
testapp = flask.Flask(__name__)
diff --git a/test/netlib/http/test_message.py b/test/netlib/http/test_message.py
index f5bf7f0c..aecde1ec 100644
--- a/test/netlib/http/test_message.py
+++ b/test/netlib/http/test_message.py
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, division
-from netlib.http import decoded
+import six
+
from netlib.tutils import tresp
@@ -76,6 +77,9 @@ class TestMessage(object):
resp.content = b""
assert resp.data.content == b""
assert resp.headers["content-length"] == "0"
+ resp.raw_content = b"bar"
+ assert resp.data.content == b"bar"
+ assert resp.headers["content-length"] == "0"
def test_content_basic(self):
_test_passthrough_attr(tresp(), "content")
@@ -93,61 +97,108 @@ class TestMessage(object):
_test_decoded_attr(tresp(), "http_version")
-class TestDecodedDecorator(object):
-
+class TestMessageContentEncoding(object):
def test_simple(self):
r = tresp()
- assert r.content == b"message"
+ assert r.raw_content == b"message"
assert "content-encoding" not in r.headers
- assert r.encode("gzip")
+ r.encode("gzip")
assert r.headers["content-encoding"]
- assert r.content != b"message"
- with decoded(r):
- assert "content-encoding" not in r.headers
- assert r.content == b"message"
- assert r.headers["content-encoding"]
- assert r.content != b"message"
+ assert r.raw_content != b"message"
+ assert r.content == b"message"
+ assert r.raw_content != b"message"
def test_modify(self):
r = tresp()
assert "content-encoding" not in r.headers
- assert r.encode("gzip")
-
- with decoded(r):
- r.content = b"foo"
+ r.encode("gzip")
- assert r.content != b"foo"
+ r.content = b"foo"
+ assert r.raw_content != b"foo"
r.decode()
- assert r.content == b"foo"
+ assert r.raw_content == b"foo"
def test_unknown_ce(self):
r = tresp()
r.headers["content-encoding"] = "zopfli"
- r.content = b"foo"
- with decoded(r):
- assert r.headers["content-encoding"]
- assert r.content == b"foo"
- assert r.headers["content-encoding"]
+ r.raw_content = b"foo"
assert r.content == b"foo"
+ assert r.headers["content-encoding"]
def test_cannot_decode(self):
r = tresp()
- assert r.encode("gzip")
- r.content = b"foo"
- with decoded(r):
- assert r.headers["content-encoding"]
- assert r.content == b"foo"
+ r.encode("gzip")
+ r.raw_content = b"foo"
+ assert r.content == b"foo"
assert r.headers["content-encoding"]
- assert r.content != b"foo"
r.decode()
- assert r.content == b"foo"
+ assert r.raw_content == b"foo"
+ assert "content-encoding" not in r.headers
def test_cannot_encode(self):
r = tresp()
- assert r.encode("gzip")
- with decoded(r):
- r.content = None
+ r.encode("gzip")
+ r.content = None
+ assert r.headers["content-encoding"]
+ assert r.raw_content is None
+ r.headers["content-encoding"] = "zopfli"
+ r.content = b"foo"
assert "content-encoding" not in r.headers
- assert r.content is None
+ assert r.raw_content == b"foo"
+
+
+class TestMessageText(object):
+ def test_simple(self):
+ r = tresp(content=b'\xc3\xbc')
+ assert r.raw_content == b"\xc3\xbc"
+ assert r.content == b"\xc3\xbc"
+ assert r.text == u"ü"
+
+ r.encode("gzip")
+ assert r.text == u"ü"
+ r.decode()
+ assert r.text == u"ü"
+
+ r.headers["content-type"] = "text/html; charset=latin1"
+ assert r.content == b"\xc3\xbc"
+ assert r.text == u"ü"
+
+ def test_modify(self):
+ r = tresp()
+
+ r.text = u"ü"
+ assert r.raw_content == b"\xc3\xbc"
+
+ r.headers["content-type"] = "text/html; charset=latin1"
+ r.text = u"ü"
+ assert r.raw_content == b"\xfc"
+ assert r.headers["content-length"] == "1"
+
+ def test_unknown_ce(self):
+ r = tresp()
+ r.headers["content-type"] = "text/html; charset=wtf"
+ r.raw_content = b"foo"
+ assert r.text == u"foo"
+
+ def test_cannot_decode(self):
+ r = tresp()
+ r.raw_content = b"\xFF"
+ assert r.text == u'\ufffd' if six.PY2 else '\udcff'
+
+ def test_cannot_encode(self):
+ r = tresp()
+ r.content = None
+ assert "content-type" not in r.headers
+ assert r.raw_content is None
+
+ r.headers["content-type"] = "text/html; charset=latin1"
+ r.text = u"☃"
+ assert r.headers["content-type"] == "text/html; charset=utf-8"
+ assert r.raw_content == b'\xe2\x98\x83'
+
+ r.headers["content-type"] = "text/html; charset=latin1"
+ r.text = u'\udcff'
+ assert r.headers["content-type"] == "text/html; charset=utf-8"
+ assert r.raw_content == b'\xed\xb3\xbf' if six.PY2 else b"\xFF"
diff --git a/test/netlib/test_encoding.py b/test/netlib/test_encoding.py
index 0ff1aad1..de10fc48 100644
--- a/test/netlib/test_encoding.py
+++ b/test/netlib/test_encoding.py
@@ -1,37 +1,39 @@
-from netlib import encoding
+from netlib import encoding, tutils
def test_identity():
- assert b"string" == encoding.decode("identity", b"string")
- assert b"string" == encoding.encode("identity", b"string")
- assert not encoding.encode("nonexistent", b"string")
- assert not encoding.decode("nonexistent encoding", b"string")
+ assert b"string" == encoding.decode(b"string", "identity")
+ assert b"string" == encoding.encode(b"string", "identity")
+ with tutils.raises(ValueError):
+ encoding.encode(b"string", "nonexistent encoding")
def test_gzip():
assert b"string" == encoding.decode(
- "gzip",
encoding.encode(
- "gzip",
- b"string"
- )
+ b"string",
+ "gzip"
+ ),
+ "gzip"
)
- assert encoding.decode("gzip", b"bogus") is None
+ with tutils.raises(ValueError):
+ encoding.decode(b"bogus", "gzip")
def test_deflate():
assert b"string" == encoding.decode(
- "deflate",
encoding.encode(
- "deflate",
- b"string"
- )
+ b"string",
+ "deflate"
+ ),
+ "deflate"
)
assert b"string" == encoding.decode(
- "deflate",
encoding.encode(
- "deflate",
- b"string"
- )[2:-4]
+ b"string",
+ "deflate"
+ )[2:-4],
+ "deflate"
)
- assert encoding.decode("deflate", b"bogus") is None
+ with tutils.raises(ValueError):
+ encoding.decode(b"bogus", "deflate")