aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/mastertest.py2
-rw-r--r--test/mitmproxy/script/test_concurrent.py26
-rw-r--r--test/mitmproxy/test_contentview.py7
-rw-r--r--test/mitmproxy/test_controller.py10
-rw-r--r--test/mitmproxy/test_flow.py8
-rw-r--r--test/mitmproxy/test_server.py11
-rw-r--r--test/pathod/test_language_http2.py66
7 files changed, 67 insertions, 63 deletions
diff --git a/test/mitmproxy/mastertest.py b/test/mitmproxy/mastertest.py
index 9bb8826d..4d04f337 100644
--- a/test/mitmproxy/mastertest.py
+++ b/test/mitmproxy/mastertest.py
@@ -16,7 +16,9 @@ class MasterTest:
master.request(f)
if not f.error:
f.response = models.HTTPResponse.wrap(netlib.tutils.tresp(content=content))
+ f.reply.acked = False
f = master.response(f)
+ f.client_conn.reply.acked = False
master.clientdisconnect(f.client_conn)
return f
diff --git a/test/mitmproxy/script/test_concurrent.py b/test/mitmproxy/script/test_concurrent.py
index c2f169ad..62541f3f 100644
--- a/test/mitmproxy/script/test_concurrent.py
+++ b/test/mitmproxy/script/test_concurrent.py
@@ -1,29 +1,25 @@
-from threading import Event
-
from mitmproxy.script import Script
from test.mitmproxy import tutils
+from mitmproxy import controller
+import time
-class Dummy:
- def __init__(self, reply):
- self.reply = reply
+class Thing:
+ def __init__(self):
+ self.reply = controller.DummyReply()
@tutils.skip_appveyor
def test_concurrent():
with Script(tutils.test_data.path("data/scripts/concurrent_decorator.py"), None) as s:
- def reply():
- reply.acked.set()
- reply.acked = Event()
-
- f1, f2 = Dummy(reply), Dummy(reply)
+ f1, f2 = Thing(), Thing()
s.run("request", f1)
- f1.reply()
s.run("request", f2)
- f2.reply()
- assert f1.reply.acked == reply.acked
- assert not reply.acked.is_set()
- assert reply.acked.wait(10)
+ start = time.time()
+ while time.time() - start < 5:
+ if f1.reply.acked and f2.reply.acked:
+ return
+ raise ValueError("Script never acked")
def test_concurrent_err():
diff --git a/test/mitmproxy/test_contentview.py b/test/mitmproxy/test_contentview.py
index 48d6c307..f5ba45a6 100644
--- a/test/mitmproxy/test_contentview.py
+++ b/test/mitmproxy/test_contentview.py
@@ -1,5 +1,3 @@
-import json
-
from mitmproxy.exceptions import ContentViewException
from netlib.http import Headers
from netlib.odict import ODict
@@ -279,6 +277,7 @@ def test_get_by_shortcut():
def test_pretty_json():
- s = json.dumps({"foo": 1})
- assert cv.pretty_json(s)
+ assert cv.pretty_json('{"foo": 1}')
assert not cv.pretty_json("moo")
+ assert cv.pretty_json(b'{"foo" : "\xe4\xb8\x96\xe7\x95\x8c"}') # utf8 with chinese characters
+ assert not cv.pretty_json(b'{"foo" : "\xFF"}')
diff --git a/test/mitmproxy/test_controller.py b/test/mitmproxy/test_controller.py
index 83ad428e..5a68e15b 100644
--- a/test/mitmproxy/test_controller.py
+++ b/test/mitmproxy/test_controller.py
@@ -66,7 +66,7 @@ class TestChannel(object):
def reply():
m, obj = q.get()
assert m == "test"
- obj.reply(42)
+ obj.reply.send(42)
Thread(target=reply).start()
@@ -86,7 +86,7 @@ class TestDummyReply(object):
def test_simple(self):
reply = controller.DummyReply()
assert not reply.acked
- reply()
+ reply.ack()
assert reply.acked
@@ -94,16 +94,16 @@ class TestReply(object):
def test_simple(self):
reply = controller.Reply(42)
assert not reply.acked
- reply("foo")
+ reply.send("foo")
assert reply.acked
assert reply.q.get() == "foo"
def test_default(self):
reply = controller.Reply(42)
- reply()
+ reply.ack()
assert reply.q.get() == 42
def test_reply_none(self):
reply = controller.Reply(42)
- reply(None)
+ reply.send(None)
assert reply.q.get() is None
diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py
index 1b1f03f9..af8256c4 100644
--- a/test/mitmproxy/test_flow.py
+++ b/test/mitmproxy/test_flow.py
@@ -807,17 +807,22 @@ class TestFlowMaster:
fm.load_script(tutils.test_data.path("data/scripts/all.py"))
f = tutils.tflow(resp=True)
+ f.client_conn.acked = False
fm.clientconnect(f.client_conn)
assert fm.scripts[0].ns["log"][-1] == "clientconnect"
+ f.server_conn.acked = False
fm.serverconnect(f.server_conn)
assert fm.scripts[0].ns["log"][-1] == "serverconnect"
+ f.reply.acked = False
fm.request(f)
assert fm.scripts[0].ns["log"][-1] == "request"
+ f.reply.acked = False
fm.response(f)
assert fm.scripts[0].ns["log"][-1] == "response"
# load second script
fm.load_script(tutils.test_data.path("data/scripts/all.py"))
assert len(fm.scripts) == 2
+ f.server_conn.reply.acked = False
fm.clientdisconnect(f.server_conn)
assert fm.scripts[0].ns["log"][-1] == "clientdisconnect"
assert fm.scripts[1].ns["log"][-1] == "clientdisconnect"
@@ -828,6 +833,7 @@ class TestFlowMaster:
fm.load_script(tutils.test_data.path("data/scripts/all.py"))
f.error = tutils.terr()
+ f.reply.acked = False
fm.error(f)
assert fm.scripts[0].ns["log"][-1] == "error"
@@ -977,10 +983,12 @@ class TestFlowMaster:
f = tutils.tflow(resp=True)
f.response.headers["set-cookie"] = "foo=bar"
fm.request(f)
+ f.reply.acked = False
fm.response(f)
assert fm.stickycookie_state.jar
assert "cookie" not in f.request.headers
f = f.copy()
+ f.reply.acked = False
fm.request(f)
assert f.request.headers["cookie"] == "foo=bar"
diff --git a/test/mitmproxy/test_server.py b/test/mitmproxy/test_server.py
index b58c4f44..432340c0 100644
--- a/test/mitmproxy/test_server.py
+++ b/test/mitmproxy/test_server.py
@@ -14,7 +14,6 @@ from pathod import pathoc, pathod
from mitmproxy import controller
from mitmproxy.proxy.config import HostMatcher
-from mitmproxy.exceptions import Kill
from mitmproxy.models import Error, HTTPResponse, HTTPFlow
from . import tutils, tservers
@@ -744,7 +743,7 @@ class MasterFakeResponse(tservers.TestMaster):
@controller.handler
def request(self, f):
resp = HTTPResponse.wrap(netlib.tutils.tresp())
- f.reply(resp)
+ f.reply.send(resp)
class TestFakeResponse(tservers.HTTPProxyTest):
@@ -771,7 +770,7 @@ class MasterKillRequest(tservers.TestMaster):
@controller.handler
def request(self, f):
- f.reply(Kill)
+ f.reply.kill()
class TestKillRequest(tservers.HTTPProxyTest):
@@ -788,7 +787,7 @@ class MasterKillResponse(tservers.TestMaster):
@controller.handler
def response(self, f):
- f.reply(Kill)
+ f.reply.kill()
class TestKillResponse(tservers.HTTPProxyTest):
@@ -820,7 +819,7 @@ class MasterIncomplete(tservers.TestMaster):
def request(self, f):
resp = HTTPResponse.wrap(netlib.tutils.tresp())
resp.content = None
- f.reply(resp)
+ f.reply.send(resp)
class TestIncompleteResponse(tservers.HTTPProxyTest):
@@ -942,7 +941,7 @@ class TestProxyChainingSSLReconnect(tservers.HTTPUpstreamProxyTest):
if not (k[0] in exclude):
f.client_conn.finish()
f.error = Error("terminated")
- f.reply(Kill)
+ f.reply.kill()
return _func(f)
setattr(master, attr, handler)
diff --git a/test/pathod/test_language_http2.py b/test/pathod/test_language_http2.py
index de256626..a2bffe63 100644
--- a/test/pathod/test_language_http2.py
+++ b/test/pathod/test_language_http2.py
@@ -1,4 +1,4 @@
-from six.moves import cStringIO as StringIO
+from six import BytesIO
import netlib
from netlib import tcp
@@ -10,11 +10,11 @@ import tutils
def parse_request(s):
- return language.parse_pathoc(s, True).next()
+ return next(language.parse_pathoc(s, True))
def parse_response(s):
- return language.parse_pathod(s, True).next()
+ return next(language.parse_pathod(s, True))
def default_settings():
@@ -25,7 +25,7 @@ def default_settings():
def test_make_error_response():
- d = StringIO()
+ d = BytesIO()
s = http2.make_error_response("foo", "bar")
language.serve(s, d, default_settings())
@@ -46,15 +46,15 @@ class TestRequest:
def test_simple(self):
r = parse_request('GET:"/foo"')
- assert r.method.string() == "GET"
- assert r.path.string() == "/foo"
+ assert r.method.string() == b"GET"
+ assert r.path.string() == b"/foo"
r = parse_request('GET:/foo')
- assert r.path.string() == "/foo"
+ assert r.path.string() == b"/foo"
def test_multiple(self):
r = list(language.parse_pathoc("GET:/ PUT:/"))
- assert r[0].method.string() == "GET"
- assert r[1].method.string() == "PUT"
+ assert r[0].method.string() == b"GET"
+ assert r[1].method.string() == b"PUT"
assert len(r) == 2
l = """
@@ -71,8 +71,8 @@ class TestRequest:
"""
r = list(language.parse_pathoc(l, True))
assert len(r) == 2
- assert r[0].method.string() == "GET"
- assert r[1].method.string() == "PUT"
+ assert r[0].method.string() == b"GET"
+ assert r[1].method.string() == b"PUT"
l = """
get:"http://localhost:9999/p/200"
@@ -80,11 +80,11 @@ class TestRequest:
"""
r = list(language.parse_pathoc(l, True))
assert len(r) == 2
- assert r[0].method.string() == "GET"
- assert r[1].method.string() == "GET"
+ assert r[0].method.string() == b"GET"
+ assert r[1].method.string() == b"GET"
def test_render_simple(self):
- s = StringIO()
+ s = BytesIO()
r = parse_request("GET:'/foo'")
assert language.serve(
r,
@@ -101,32 +101,32 @@ class TestRequest:
r = parse_request('GET:/')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-length", "0")
+ assert r.headers[0].values(default_settings()) == (b"content-length", b"0")
r = parse_request('GET:/:b"foobar"')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-length", "6")
+ assert r.headers[0].values(default_settings()) == (b"content-length", b"6")
r = parse_request('GET:/:b"foobar":h"content-length"="42"')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-length", "42")
+ assert r.headers[0].values(default_settings()) == (b"content-length", b"42")
r = parse_request('GET:/:r:b"foobar":h"content-length"="42"')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-length", "42")
+ assert r.headers[0].values(default_settings()) == (b"content-length", b"42")
def test_content_type(self):
r = parse_request('GET:/:r:c"foobar"')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-type", "foobar")
+ assert r.headers[0].values(default_settings()) == (b"content-type", b"foobar")
def test_user_agent(self):
r = parse_request('GET:/:r:ua')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("user-agent", user_agents.get_by_shortcut('a')[2])
+ assert r.headers[0].values(default_settings()) == (b"user-agent", user_agents.get_by_shortcut('a')[2].encode())
def test_render_with_headers(self):
- s = StringIO()
+ s = BytesIO()
r = parse_request('GET:/foo:h"foo"="bar"')
assert language.serve(
r,
@@ -142,7 +142,7 @@ class TestRequest:
assert r.values(default_settings())
def test_render_with_body(self):
- s = StringIO()
+ s = BytesIO()
r = parse_request("GET:'/foo':bfoobar")
assert language.serve(
r,
@@ -177,29 +177,29 @@ class TestResponse:
r = parse_response('200')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-length", "0")
+ assert r.headers[0].values(default_settings()) == (b"content-length", b"0")
def test_content_type(self):
r = parse_response('200:r:c"foobar"')
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("content-type", "foobar")
+ assert r.headers[0].values(default_settings()) == (b"content-type", b"foobar")
def test_simple(self):
r = parse_response('200:r:h"foo"="bar"')
- assert r.status_code.string() == "200"
+ assert r.status_code.string() == b"200"
assert len(r.headers) == 1
- assert r.headers[0].values(default_settings()) == ("foo", "bar")
+ assert r.headers[0].values(default_settings()) == (b"foo", b"bar")
assert r.body is None
r = parse_response('200:r:h"foo"="bar":bfoobar:h"bla"="fasel"')
- assert r.status_code.string() == "200"
+ assert r.status_code.string() == b"200"
assert len(r.headers) == 2
- assert r.headers[0].values(default_settings()) == ("foo", "bar")
- assert r.headers[1].values(default_settings()) == ("bla", "fasel")
- assert r.body.string() == "foobar"
+ assert r.headers[0].values(default_settings()) == (b"foo", b"bar")
+ assert r.headers[1].values(default_settings()) == (b"bla", b"fasel")
+ assert r.body.string() == b"foobar"
def test_render_simple(self):
- s = StringIO()
+ s = BytesIO()
r = parse_response('200')
assert language.serve(
r,
@@ -208,7 +208,7 @@ class TestResponse:
)
def test_render_with_headers(self):
- s = StringIO()
+ s = BytesIO()
r = parse_response('200:h"foo"="bar"')
assert language.serve(
r,
@@ -217,7 +217,7 @@ class TestResponse:
)
def test_render_with_body(self):
- s = StringIO()
+ s = BytesIO()
r = parse_response('200:bfoobar')
assert language.serve(
r,