aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-01-29 02:49:11 +0100
committerMaximilian Hils <git@maximilianhils.com>2014-01-29 02:49:11 +0100
commit607f7778110d5c2720e60ffcf5f4b0c94e8fcc5f (patch)
treecd6249109b49936267cee0a30e0cb616288417d0 /test
parent1e3e0dd1271afda59ec244b64391b6579a998dce (diff)
downloadmitmproxy-607f7778110d5c2720e60ffcf5f4b0c94e8fcc5f.tar.gz
mitmproxy-607f7778110d5c2720e60ffcf5f4b0c94e8fcc5f.tar.bz2
mitmproxy-607f7778110d5c2720e60ffcf5f4b0c94e8fcc5f.zip
fix most testsuite errors, improve proxy error handling
Diffstat (limited to 'test')
-rw-r--r--test/test_dump.py2
-rw-r--r--test/test_flow.py2
-rw-r--r--test/test_proxy.py13
-rw-r--r--test/test_server.py31
-rw-r--r--test/tservers.py12
5 files changed, 29 insertions, 31 deletions
diff --git a/test/test_dump.py b/test/test_dump.py
index a958a2ec..031a3f6a 100644
--- a/test/test_dump.py
+++ b/test/test_dump.py
@@ -30,7 +30,7 @@ class TestDumpMaster:
resp = tutils.tresp(req)
resp.content = content
m.handle_clientconnect(cc)
- sc = proxy.ServerConnection(m.o, req.scheme, req.host, req.port, None)
+ sc = proxy.ServerConnection((req.host, req.port))
sc.reply = mock.MagicMock()
m.handle_serverconnection(sc)
m.handle_request(req)
diff --git a/test/test_flow.py b/test/test_flow.py
index f9198f0c..aec04152 100644
--- a/test/test_flow.py
+++ b/test/test_flow.py
@@ -595,7 +595,7 @@ class TestFlowMaster:
req = tutils.treq()
fm.handle_clientconnect(req.client_conn)
assert fm.scripts[0].ns["log"][-1] == "clientconnect"
- sc = proxy.ServerConnection(None, req.scheme, req.host, req.port, None)
+ sc = proxy.ServerConnection((req.host, req.port))
sc.reply = controller.DummyReply()
fm.handle_serverconnection(sc)
assert fm.scripts[0].ns["log"][-1] == "serverconnect"
diff --git a/test/test_proxy.py b/test/test_proxy.py
index 371e5ef7..737e4a92 100644
--- a/test/test_proxy.py
+++ b/test/test_proxy.py
@@ -19,25 +19,26 @@ class TestServerConnection:
self.d.shutdown()
def test_simple(self):
- sc = proxy.ServerConnection(proxy.ProxyConfig(), "http", self.d.IFACE, self.d.port, "host.com")
+ sc = proxy.ServerConnection((self.d.IFACE, self.d.port))
sc.connect()
r = tutils.treq()
r.path = "/p/200:da"
- sc.send(r)
+ sc.send(r._assemble())
assert http.read_response(sc.rfile, r.method, 1000)
assert self.d.last_log()
r.content = flow.CONTENT_MISSING
- tutils.raises("incomplete request", sc.send, r)
+ tutils.raises("incomplete request", sc.send, r._assemble())
- sc.terminate()
+ sc.finish()
def test_terminate_error(self):
- sc = proxy.ServerConnection(proxy.ProxyConfig(), "http", self.d.IFACE, self.d.port, "host.com")
+ sc = proxy.ServerConnection((self.d.IFACE, self.d.port))
sc.connect()
sc.connection = mock.Mock()
+ sc.connection.recv = mock.Mock(return_value=False)
sc.connection.flush = mock.Mock(side_effect=tcp.NetLibDisconnect)
- sc.terminate()
+ sc.finish()
class MockParser:
diff --git a/test/test_server.py b/test/test_server.py
index ba152dc2..d3bf4676 100644
--- a/test/test_server.py
+++ b/test/test_server.py
@@ -19,8 +19,8 @@ class CommonMixin:
def test_replay(self):
assert self.pathod("304").status_code == 304
- assert len(self.master.state.view) == 1
- l = self.master.state.view[0]
+ assert len(self.master.state.view) == (2 if self.ssl else 1)
+ l = self.master.state.view[1 if self.ssl else 0]
assert l.response.code == 304
l.request.path = "/p/305"
rt = self.master.replay_request(l, block=True)
@@ -41,16 +41,17 @@ class CommonMixin:
assert f.status_code == 304
l = self.master.state.view[0]
- assert l.request.client_conn.address
+ assert l.client_conn.address
assert "host" in l.request.headers
assert l.response.code == 304
def test_invalid_http(self):
- t = tcp.TCPClient(("127.0.0.1", self.proxy.address.port))
+ t = tcp.TCPClient(("127.0.0.1", self.proxy.port))
t.connect()
t.wfile.write("invalid\r\n\r\n")
t.wfile.flush()
- assert "Bad Request" in t.rfile.readline()
+ line = t.rfile.readline()
+ assert ("Bad Request" in line) or ("Bad Gateway" in line)
@@ -70,7 +71,7 @@ class TestHTTP(tservers.HTTPProxTest, CommonMixin, AppMixin):
assert "ValueError" in ret.content
def test_invalid_connect(self):
- t = tcp.TCPClient(("127.0.0.1", self.proxy.address.port))
+ t = tcp.TCPClient(("127.0.0.1", self.proxy.port))
t.connect()
t.wfile.write("CONNECT invalid\n\n")
t.wfile.flush()
@@ -105,22 +106,17 @@ class TestHTTP(tservers.HTTPProxTest, CommonMixin, AppMixin):
assert p.request(req)
assert p.request(req)
- # However, if the server disconnects on our first try, it's an error.
- req = "get:'%s/p/200:b@1:d0'"%self.server.urlbase
- p = self.pathoc()
- tutils.raises("server disconnect", p.request, req)
-
def test_proxy_ioerror(self):
# Tests a difficult-to-trigger condition, where an IOError is raised
# within our read loop.
- with mock.patch("libmproxy.proxy.ProxyHandler.read_request") as m:
+ with mock.patch("libmproxy.protocol.HTTPRequest.from_stream") as m:
m.side_effect = IOError("error!")
tutils.raises("server disconnect", self.pathod, "304")
def test_get_connection_switching(self):
def switched(l):
for i in l:
- if "switching" in i:
+ if "serverdisconnect" in i:
return True
req = "get:'%s/p/200:b@1'"
p = self.pathoc()
@@ -230,12 +226,13 @@ class TestTransparentSSL(tservers.TransparentProxTest, CommonMixin):
f = self.pathod("304", sni="testserver.com")
assert f.status_code == 304
l = self.server.last_log()
- assert self.server.last_log()["request"]["sni"] == "testserver.com"
+ assert l["request"]["sni"] == "testserver.com"
def test_sslerr(self):
- p = pathoc.Pathoc("localhost", self.proxy.port)
+ p = pathoc.Pathoc(("localhost", self.proxy.port))
p.connect()
- assert p.request("get:/").status_code == 400
+ r = p.request("get:/")
+ assert r.status_code == 502
class TestProxy(tservers.HTTPProxTest):
@@ -335,7 +332,6 @@ class TestFakeResponse(tservers.HTTPProxTest):
assert "header_response" in f.headers.keys()
-
class MasterKillRequest(tservers.TestMaster):
def handle_request(self, m):
m.reply(proxy.KILL)
@@ -376,6 +372,7 @@ class TestTransparentResolveError(tservers.TransparentProxTest):
class MasterIncomplete(tservers.TestMaster):
def handle_request(self, m):
+ # FIXME: fails because of a ._assemble().splitlines() log statement.
resp = tutils.tresp()
resp.content = flow.CONTENT_MISSING
m.reply(resp)
diff --git a/test/tservers.py b/test/tservers.py
index ac95b168..f9008cd6 100644
--- a/test/tservers.py
+++ b/test/tservers.py
@@ -55,7 +55,7 @@ class ProxyThread(threading.Thread):
@property
def port(self):
- return self.tmaster.server.port
+ return self.tmaster.server.address.port
@property
def log(self):
@@ -134,13 +134,13 @@ class ProxTestBase:
class HTTPProxTest(ProxTestBase):
def pathoc_raw(self):
- return libpathod.pathoc.Pathoc("127.0.0.1", self.proxy.port)
+ return libpathod.pathoc.Pathoc(("127.0.0.1", self.proxy.port))
def pathoc(self, sni=None):
"""
Returns a connected Pathoc instance.
"""
- p = libpathod.pathoc.Pathoc("localhost", self.proxy.port, ssl=self.ssl, sni=sni)
+ p = libpathod.pathoc.Pathoc(("localhost", self.proxy.port), ssl=self.ssl, sni=sni)
if self.ssl:
p.connect(("127.0.0.1", self.server.port))
else:
@@ -161,7 +161,7 @@ class HTTPProxTest(ProxTestBase):
def app(self, page):
if self.ssl:
- p = libpathod.pathoc.Pathoc("127.0.0.1", self.proxy.port, True)
+ p = libpathod.pathoc.Pathoc(("127.0.0.1", self.proxy.port), True)
print "PRE"
p.connect((APP_HOST, APP_PORT))
print "POST"
@@ -211,7 +211,7 @@ class TransparentProxTest(ProxTestBase):
"""
Returns a connected Pathoc instance.
"""
- p = libpathod.pathoc.Pathoc("localhost", self.proxy.port, ssl=self.ssl, sni=sni)
+ p = libpathod.pathoc.Pathoc(("localhost", self.proxy.port), ssl=self.ssl, sni=sni)
p.connect()
return p
@@ -232,7 +232,7 @@ class ReverseProxTest(ProxTestBase):
"""
Returns a connected Pathoc instance.
"""
- p = libpathod.pathoc.Pathoc("localhost", self.proxy.port, ssl=self.ssl, sni=sni)
+ p = libpathod.pathoc.Pathoc(("localhost", self.proxy.port), ssl=self.ssl, sni=sni)
p.connect()
return p