aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-03-10 17:02:09 +0100
committerMaximilian Hils <git@maximilianhils.com>2014-03-10 17:02:09 +0100
commitb59013f6e3d80fa6bbf5640f2652559457f07d0e (patch)
treebba552a4d7f089dc422df2aff2a9095153118311 /test
parent982da23e9a219d055c2137f56b885c06006ca098 (diff)
parent9cc10630c8e0b0f249ed852299d3316ba42f128d (diff)
downloadmitmproxy-b59013f6e3d80fa6bbf5640f2652559457f07d0e.tar.gz
mitmproxy-b59013f6e3d80fa6bbf5640f2652559457f07d0e.tar.bz2
mitmproxy-b59013f6e3d80fa6bbf5640f2652559457f07d0e.zip
Merge branch 'absolutely_relative_proxying'
Diffstat (limited to 'test')
-rw-r--r--test/test_cmdline.py11
-rw-r--r--test/test_protocol_http.py4
-rw-r--r--test/test_proxy.py26
-rw-r--r--test/test_utils.py8
-rw-r--r--test/tservers.py32
-rw-r--r--test/tutils.py11
6 files changed, 46 insertions, 46 deletions
diff --git a/test/test_cmdline.py b/test/test_cmdline.py
index dbc61bfc..12e8aa89 100644
--- a/test/test_cmdline.py
+++ b/test/test_cmdline.py
@@ -36,6 +36,17 @@ def test_parse_replace_hook():
)
+def test_parse_server_spec():
+ tutils.raises("Invalid server specification", cmdline.parse_server_spec, "")
+ assert cmdline.parse_server_spec("http://foo.com:88") == [False, False, "foo.com", 88]
+ assert cmdline.parse_server_spec("http://foo.com") == [False, False, "foo.com", 80]
+ assert cmdline.parse_server_spec("https://foo.com") == [True, True, "foo.com", 443]
+ assert cmdline.parse_server_spec("https2http://foo.com") == [True, False, "foo.com", 80]
+ assert cmdline.parse_server_spec("http2https://foo.com") == [False, True, "foo.com", 443]
+ tutils.raises("Invalid server specification", cmdline.parse_server_spec, "foo.com")
+ tutils.raises("Invalid server specification", cmdline.parse_server_spec, "http://")
+
+
def test_parse_setheaders():
x = cmdline.parse_setheader("/foo/bar/voing")
assert x == ("foo", "bar", "voing")
diff --git a/test/test_protocol_http.py b/test/test_protocol_http.py
index 6ff0cb65..290d82a1 100644
--- a/test/test_protocol_http.py
+++ b/test/test_protocol_http.py
@@ -90,7 +90,7 @@ class TestInvalidRequests(tservers.HTTPProxTest):
def test_double_connect(self):
p = self.pathoc()
r = p.request("connect:'%s:%s'" % ("127.0.0.1", self.server2.port))
- assert r.status_code == 502
+ assert r.status_code == 400
assert "Must not CONNECT on already encrypted connection" in r.content
def test_relative_request(self):
@@ -98,7 +98,7 @@ class TestInvalidRequests(tservers.HTTPProxTest):
p.connect()
r = p.request("get:/p/200")
assert r.status_code == 400
- assert "Invalid request form" in r.content
+ assert "Invalid HTTP request form" in r.content
class TestProxyChaining(tservers.HTTPChainProxyTest):
diff --git a/test/test_proxy.py b/test/test_proxy.py
index f53aa762..0f438482 100644
--- a/test/test_proxy.py
+++ b/test/test_proxy.py
@@ -43,28 +43,15 @@ class TestServerConnection:
sc.finish()
-class MockParser:
- def __init__(self):
- self.err = None
-
- def error(self, e):
- self.err = e
-
- def __repr__(self):
- return "ParseError(%s)"%self.err
-
-
class TestProcessProxyOptions:
def p(self, *args):
- parser = argparse.ArgumentParser()
+ parser = tutils.MockParser()
cmdline.common_options(parser)
opts = parser.parse_args(args=args)
- m = MockParser()
- return m, process_proxy_options(m, opts)
+ return parser, process_proxy_options(parser, opts)
def assert_err(self, err, *args):
- m, p = self.p(*args)
- assert err.lower() in m.err.lower()
+ tutils.raises(err, self.p, *args)
def assert_noerr(self, *args):
m, p = self.p(*args)
@@ -84,11 +71,10 @@ class TestProcessProxyOptions:
@mock.patch("libmproxy.platform.resolver")
def test_transparent_reverse(self, o):
- self.assert_err("can't set both", "-P", "reverse", "-T")
+ self.assert_err("mutually exclusive", "-R", "http://localhost", "-T")
self.assert_noerr("-T")
- assert o.call_count == 1
- self.assert_err("invalid reverse proxy", "-P", "reverse")
- self.assert_noerr("-P", "http://localhost")
+ self.assert_err("Invalid server specification", "-R", "reverse")
+ self.assert_noerr("-R", "http://localhost")
def test_client_certs(self):
with tutils.tmpdir() as confdir:
diff --git a/test/test_utils.py b/test/test_utils.py
index f40e0a31..11c26dba 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -87,14 +87,6 @@ def test_LRUCache():
assert len(f._cachelist_one) == 2
-def test_parse_proxy_spec():
- assert not utils.parse_proxy_spec("")
- assert utils.parse_proxy_spec("http://foo.com:88") == ("http", "foo.com", 88)
- assert utils.parse_proxy_spec("http://foo.com") == ("http", "foo.com", 80)
- assert not utils.parse_proxy_spec("foo.com")
- assert not utils.parse_proxy_spec("http://")
-
-
def test_unparse_url():
assert utils.unparse_url("http", "foo.com", 99, "") == "http://foo.com:99"
assert utils.unparse_url("http", "foo.com", 80, "") == "http://foo.com"
diff --git a/test/tservers.py b/test/tservers.py
index bfafc8cd..9ad3b735 100644
--- a/test/tservers.py
+++ b/test/tservers.py
@@ -4,6 +4,7 @@ import shutil, tempfile
import flask
from libmproxy.proxy.config import ProxyConfig
from libmproxy.proxy.server import ProxyServer
+from libmproxy.proxy.primitives import TransparentUpstreamServerResolver
import libpathod.test, libpathod.pathoc
from libmproxy import flow, controller
from libmproxy.cmdline import APP_HOST, APP_PORT
@@ -193,10 +194,9 @@ class TransparentProxTest(ProxTestBase):
ports = [cls.server.port, cls.server2.port]
else:
ports = []
- d["transparent_proxy"] = dict(
- resolver = cls.resolver(cls.server.port),
- sslports = ports
- )
+ d["get_upstream_server"] = TransparentUpstreamServerResolver(cls.resolver(cls.server.port), ports)
+ d["http_form_in"] = "relative"
+ d["http_form_out"] = "relative"
return d
def pathod(self, spec, sni=None):
@@ -225,11 +225,14 @@ class ReverseProxTest(ProxTestBase):
@classmethod
def get_proxy_config(cls):
d = ProxTestBase.get_proxy_config()
- d["reverse_proxy"] = (
- "https" if cls.ssl else "http",
- "127.0.0.1",
- cls.server.port
- )
+ d["get_upstream_server"] = lambda c: (
+ True if cls.ssl else False,
+ True if cls.ssl else False,
+ "127.0.0.1",
+ cls.server.port
+ )
+ d["http_form_in"] = "relative"
+ d["http_form_out"] = "relative"
return d
def pathoc(self, sni=None):
@@ -258,18 +261,17 @@ class ChainProxTest(ProxTestBase):
Chain n instances of mitmproxy in a row - because we can.
"""
n = 2
- chain_config = [lambda: ProxyConfig(
+ chain_config = [lambda port: ProxyConfig(
+ get_upstream_server = lambda c: (False, False, "127.0.0.1", port),
+ http_form_in = "absolute",
+ http_form_out = "absolute"
)] * n
@classmethod
def setupAll(cls):
super(ChainProxTest, cls).setupAll()
cls.chain = []
for i in range(cls.n):
- config = cls.chain_config[i]()
- config.forward_proxy = ("http", "127.0.0.1",
- cls.proxy.port if i == 0 else
- cls.chain[-1].port
- )
+ config = cls.chain_config[i](cls.proxy.port if i == 0 else cls.chain[-1].port)
tmaster = cls.masterclass(config)
tmaster.start_app(APP_HOST, APP_PORT, cls.externalapp)
cls.chain.append(ProxyThread(tmaster))
diff --git a/test/tutils.py b/test/tutils.py
index 3f6592b0..c527a64a 100644
--- a/test/tutils.py
+++ b/test/tutils.py
@@ -1,4 +1,4 @@
-import os, shutil, tempfile
+import os, shutil, tempfile, argparse
from contextlib import contextmanager
from libmproxy import flow, utils, controller
from libmproxy.protocol import http
@@ -136,6 +136,15 @@ def tmpdir(*args, **kwargs):
shutil.rmtree(temp_workdir)
+class MockParser(argparse.ArgumentParser):
+ """
+ argparse.ArgumentParser sys.exits() by default.
+ Make it more testable by throwing an exception instead.
+ """
+ def error(self, message):
+ raise Exception(message)
+
+
def raises(exc, obj, *args, **kwargs):
"""
Assert that a callable raises a specified exception.