import libpry
import libmproxy.console.contentview as cv
from libmproxy import utils, flow, encoding
class uContentView(libpry.AutoTree):
def test_trailer(self):
txt = []
cv.trailer(5, txt)
assert not txt
cv.trailer(cv.VIEW_CUTOFF + 10, txt)
assert txt
def test_get_view_func(self):
f = cv.get_view_func(
cv.VIEW_CONTENT_HEX,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
flow.ODictCaseless(),
"foo"
)
assert f is cv.view_hex
f = cv.get_view_func(
cv.VIEW_CONTENT_RAW,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
flow.ODictCaseless(),
"foo"
)
assert f is cv.view_raw
f = cv.get_view_func(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
flow.ODictCaseless(
[["content-type", "text/html"]],
),
"foo"
)
assert f is cv.view_xmlish
f = cv.get_view_func(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
flow.ODictCaseless(
[["content-type", "text/flibble"]],
),
"foo"
)
assert f is cv.view_raw
f = cv.get_view_func(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
flow.ODictCaseless(
[["content-type", "text/flibble"]],
),
""
)
assert f is cv.view_xmlish
def test_view_urlencoded(self):
d = utils.urlencode([("one", "two"), ("three", "four")])
assert cv.view_urlencoded([], d)
assert not cv.view_urlencoded([], "foo")
def test_view_json(self):
cv.VIEW_CUTOFF = 100
assert cv.view_json([], "{}")
assert not cv.view_urlencoded([], "{")
assert cv.view_json([], "[" + ",".join(["0"]*cv.VIEW_CUTOFF) + "]")
def test_view_xmlish(self):
assert cv.view_xmlish([], "")
assert cv.view_xmlish([], "")
def test_view_raw(self):
assert cv.view_raw([], "foo")
def test_view_javascript(self):
assert cv.view_javascript([], "[1, 2, 3]")
assert cv.view_javascript([], "[1, 2, 3")
assert cv.view_javascript([], "function(a){[1, 2, 3]}")
def test_view_raw(self):
assert cv.view_hex([], "foo")
def test_view_image(self):
assert cv.view_image([], file("data/image.png").read())
assert cv.view_image([], file("data/image.gif").read())
assert cv.view_image([], file("data/image-err1.jpg").read())
assert cv.view_image([], file("data/image.ico").read())
assert not cv.view_image([], "flibble")
def test_view_multipart(self):
v = """
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
""".strip()
h = flow.ODictCaseless(
[("Content-Type", "multipart/form-data; boundary=AaB03x")]
)
assert cv.view_multipart(h, v)
h = flow.ODictCaseless()
assert not cv.view_multipart(h, v)
h = flow.ODictCaseless(
[("Content-Type", "multipart/form-data")]
)
assert not cv.view_multipart(h, v)
h = flow.ODictCaseless(
[("Content-Type", "unparseable")]
)
assert not cv.view_multipart(h, v)
def test_get_content_view(self):
r = cv.get_content_view(
cv.VIEW_CONTENT_RAW,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
[["content-type", "application/json"]],
"[1, 2, 3]"
)
assert r[0] == "Raw"
r = cv.get_content_view(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
[["content-type", "application/json"]],
"[1, 2, 3]"
)
assert r[0] == "JSON"
r = cv.get_content_view(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
[["content-type", "application/json"]],
"[1, 2"
)
assert r[0] == "Raw"
r = cv.get_content_view(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_AUTO,
[
["content-type", "application/json"],
["content-encoding", "gzip"]
],
encoding.encode('gzip', "[1, 2, 3]")
)
assert "decoded gzip" in r[0]
assert "JSON" in r[0]
r = cv.get_content_view(
cv.VIEW_CONTENT_PRETTY,
cv.VIEW_CONTENT_PRETTY_TYPE_XML,
[
["content-type", "application/json"],
["content-encoding", "gzip"]
],
encoding.encode('gzip', "[1, 2, 3]")
)
assert "decoded gzip" in r[0]
assert "forced" in r[0]
tests = [
uContentView()
]