aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_contentview.py118
-rw-r--r--test/test_dump.py57
2 files changed, 92 insertions, 83 deletions
diff --git a/test/test_contentview.py b/test/test_contentview.py
index ec1b4930..97608520 100644
--- a/test/test_contentview.py
+++ b/test/test_contentview.py
@@ -1,12 +1,9 @@
from libmproxy.exceptions import ContentViewException
from netlib.http import Headers
-
-import sys
-
import netlib.utils
from netlib import encoding
-import libmproxy.contentview as cv
+import libmproxy.contentviews as cv
import tutils
try:
@@ -21,76 +18,65 @@ except:
class TestContentView:
- def test_trailer(self):
- txt = "X"*10
- lines = cv.trailer(txt, 1000)
- assert not list(lines)
- lines = cv.trailer(txt, 5)
- assert list(lines)
def test_view_auto(self):
v = cv.ViewAuto()
f = v(
- Headers(),
"foo",
- 1000
+ headers=Headers()
)
assert f[0] == "Raw"
f = v(
- Headers(content_type="text/html"),
"<html></html>",
- 1000
+ headers=Headers(content_type="text/html")
)
assert f[0] == "HTML"
f = v(
- Headers(content_type="text/flibble"),
"foo",
- 1000
+ headers=Headers(content_type="text/flibble")
)
assert f[0] == "Raw"
f = v(
- Headers(content_type="text/flibble"),
"<xml></xml>",
- 1000
+ headers=Headers(content_type="text/flibble")
)
assert f[0].startswith("XML")
def test_view_urlencoded(self):
d = netlib.utils.urlencode([("one", "two"), ("three", "four")])
v = cv.ViewURLEncoded()
- assert v([], d, 100)
+ assert v(d)
d = netlib.utils.urlencode([("adsfa", "")])
v = cv.ViewURLEncoded()
- assert v([], d, 100)
+ assert v(d)
def test_view_html(self):
v = cv.ViewHTML()
s = "<html><br><br></br><p>one</p></html>"
- assert v([], s, 1000)
+ assert v(s)
s = "gobbledygook"
- assert not v([], s, 1000)
+ assert not v(s)
def test_view_html_outline(self):
v = cv.ViewHTMLOutline()
s = "<html><br><br></br><p>one</p></html>"
- assert v([], s, 1000)
+ assert v(s)
def test_view_json(self):
cv.VIEW_CUTOFF = 100
v = cv.ViewJSON()
- assert v([], "{}", 1000)
- assert not v([], "{", 1000)
- assert v([], "[" + ",".join(["0"] * cv.VIEW_CUTOFF) + "]", 1000)
- assert v([], "[1, 2, 3, 4, 5]", 5)
+ assert v("{}")
+ assert not v("{")
+ assert v("[1, 2, 3, 4, 5]")
def test_view_xml(self):
v = cv.ViewXML()
- assert v([], "<foo></foo>", 1000)
- assert not v([], "<foo>", 1000)
+ assert v("<foo></foo>")
+ assert not v("<foo>")
s = """<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet title="XSL_formatting"?>
<rss
@@ -99,17 +85,17 @@ class TestContentView:
version="2.0">
</rss>
"""
- assert v([], s, 1000)
+ assert v(s)
def test_view_raw(self):
v = cv.ViewRaw()
- assert v([], "foo", 1000)
+ assert v("foo")
def test_view_javascript(self):
v = cv.ViewJavaScript()
- assert v([], "[1, 2, 3]", 100)
- assert v([], "[1, 2, 3", 100)
- assert v([], "function(a){[1, 2, 3]}", 100)
+ assert v("[1, 2, 3]")
+ assert v("[1, 2, 3")
+ assert v("function(a){[1, 2, 3]}")
def test_view_css(self):
v = cv.ViewCSS()
@@ -117,14 +103,14 @@ class TestContentView:
with open(tutils.test_data.path('data/1.css'), 'r') as fp:
fixture_1 = fp.read()
- result = v([], 'a', 100)
+ result = v('a')
if cssutils:
assert len(list(result[1])) == 0
else:
assert len(list(result[1])) == 1
- result = v([], fixture_1, 100)
+ result = v(fixture_1)
if cssutils:
assert len(list(result[1])) > 1
@@ -133,23 +119,23 @@ class TestContentView:
def test_view_hex(self):
v = cv.ViewHex()
- assert v([], "foo", 1000)
+ assert v("foo")
def test_view_image(self):
v = cv.ViewImage()
p = tutils.test_data.path("data/image.png")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
p = tutils.test_data.path("data/image.gif")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
p = tutils.test_data.path("data/image-err1.jpg")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
p = tutils.test_data.path("data/image.ico")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
- assert not v([], "flibble", sys.maxsize)
+ assert not v("flibble")
def test_view_multipart(self):
view = cv.ViewMultipart()
@@ -161,42 +147,36 @@ Larry
--AaB03x
""".strip()
h = Headers(content_type="multipart/form-data; boundary=AaB03x")
- assert view(h, v, 1000)
+ assert view(v, headers=h)
h = Headers()
- assert not view(h, v, 1000)
+ assert not view(v, headers=h)
h = Headers(content_type="multipart/form-data")
- assert not view(h, v, 1000)
+ assert not view(v, headers=h)
h = Headers(content_type="unparseable")
- assert not view(h, v, 1000)
+ assert not view(v, headers=h)
def test_get_content_view(self):
r = cv.get_content_view(
cv.get("Raw"),
- Headers(content_type="application/json"),
"[1, 2, 3]",
- 1000,
- False
+ headers=Headers(content_type="application/json")
)
assert "Raw" in r[0]
r = cv.get_content_view(
cv.get("Auto"),
- Headers(content_type="application/json"),
"[1, 2, 3]",
- 1000,
- False
+ headers=Headers(content_type="application/json")
)
assert r[0] == "JSON"
r = cv.get_content_view(
cv.get("Auto"),
- Headers(content_type="application/json"),
"[1, 2",
- 1000,
- False
+ headers=Headers(content_type="application/json")
)
assert "Raw" in r[0]
@@ -204,34 +184,28 @@ Larry
ContentViewException,
cv.get_content_view,
cv.get("AMF"),
- Headers(),
"[1, 2",
- 1000,
- False
+ headers=Headers()
)
r = cv.get_content_view(
cv.get("Auto"),
- Headers(
+ encoding.encode('gzip', "[1, 2, 3]"),
+ headers=Headers(
content_type="application/json",
content_encoding="gzip"
- ),
- encoding.encode('gzip', "[1, 2, 3]"),
- 1000,
- False
+ )
)
assert "decoded gzip" in r[0]
assert "JSON" in r[0]
r = cv.get_content_view(
cv.get("XML"),
- Headers(
+ encoding.encode('gzip', "[1, 2, 3]"),
+ headers=Headers(
content_type="application/json",
content_encoding="gzip"
- ),
- encoding.encode('gzip', "[1, 2, 3]"),
- 1000,
- False
+ )
)
assert "decoded gzip" in r[0]
assert "Raw" in r[0]
@@ -242,22 +216,22 @@ if pyamf:
v = cv.ViewAMF()
p = tutils.test_data.path("data/amf01")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
p = tutils.test_data.path("data/amf02")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
def test_view_amf_response():
v = cv.ViewAMF()
p = tutils.test_data.path("data/amf03")
- assert v([], file(p, "rb").read(), sys.maxsize)
+ assert v(file(p, "rb").read())
if cv.ViewProtobuf.is_available():
def test_view_protobuf_request():
v = cv.ViewProtobuf()
p = tutils.test_data.path("data/protobuf01")
- content_type, output = v([], file(p, "rb").read(), sys.maxsize)
+ content_type, output = v(file(p, "rb").read())
assert content_type == "Protobuf"
assert output[0].text == '1: "3bbc333c-e61c-433b-819a-0b9a8cc103b8"'
diff --git a/test/test_dump.py b/test/test_dump.py
index c76f555f..29931759 100644
--- a/test/test_dump.py
+++ b/test/test_dump.py
@@ -1,5 +1,6 @@
import os
from cStringIO import StringIO
+from libmproxy.exceptions import ContentViewException
from libmproxy.models import HTTPResponse
import netlib.tutils
@@ -12,17 +13,51 @@ import mock
def test_strfuncs():
- t = HTTPResponse.wrap(netlib.tutils.tresp())
- t.is_replay = True
- dump.str_response(t)
-
- f = tutils.tflow()
- f.client_conn = None
- f.request.stickycookie = True
- assert "stickycookie" in dump.str_request(f, False)
- assert "stickycookie" in dump.str_request(f, True)
- assert "replay" in dump.str_request(f, False)
- assert "replay" in dump.str_request(f, True)
+ o = dump.Options()
+ m = dump.DumpMaster(None, o)
+
+ m.outfile = StringIO()
+ m.o.flow_detail = 0
+ m.echo_flow(tutils.tflow())
+ assert not m.outfile.getvalue()
+
+ m.o.flow_detail = 4
+ m.echo_flow(tutils.tflow())
+ assert m.outfile.getvalue()
+
+ m.outfile = StringIO()
+ m.echo_flow(tutils.tflow(resp=True))
+ assert "<<" in m.outfile.getvalue()
+
+ m.outfile = StringIO()
+ m.echo_flow(tutils.tflow(err=True))
+ assert "<<" in m.outfile.getvalue()
+
+ flow = tutils.tflow()
+ flow.request = netlib.tutils.treq()
+ flow.request.stickycookie = True
+ flow.client_conn = mock.MagicMock()
+ flow.client_conn.address.host = "foo"
+ flow.response = netlib.tutils.tresp(content=CONTENT_MISSING)
+ flow.response.is_replay = True
+ flow.response.code = 300
+ m.echo_flow(flow)
+
+
+ flow = tutils.tflow(resp=netlib.tutils.tresp("{"))
+ flow.response.headers["content-type"] = "application/json"
+ flow.response.code = 400
+ m.echo_flow(flow)
+
+
+@mock.patch("libmproxy.contentviews.get_content_view")
+def test_contentview(get_content_view):
+ get_content_view.side_effect = ContentViewException(""), ("x", iter([]))
+
+ o = dump.Options(flow_detail=4, verbosity=3)
+ m = dump.DumpMaster(None, o, StringIO())
+ m.echo_flow(tutils.tflow())
+ assert "Content viewer failed" in m.outfile.getvalue()
class TestDumpMaster: