aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-03-10 05:11:51 +0100
committerMaximilian Hils <git@maximilianhils.com>2014-03-10 05:11:51 +0100
commitfe58c1c6eb16fdc14bd24843cb896b3d8a4eefc8 (patch)
tree0587a4a1a7351d313454a72ce237694c6523ff96 /test
parent78750a8b4da217a2b3f3eac23bea92b6c428fc35 (diff)
downloadmitmproxy-fe58c1c6eb16fdc14bd24843cb896b3d8a4eefc8.tar.gz
mitmproxy-fe58c1c6eb16fdc14bd24843cb896b3d8a4eefc8.tar.bz2
mitmproxy-fe58c1c6eb16fdc14bd24843cb896b3d8a4eefc8.zip
add advanced proxying options, add SSL-terminating capability to mitmproxy
Diffstat (limited to 'test')
-rw-r--r--test/test_cmdline.py11
-rw-r--r--test/test_proxy.py26
-rw-r--r--test/test_utils.py8
-rw-r--r--test/tservers.py31
-rw-r--r--test/tutils.py11
5 files changed, 41 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_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 addc7011..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,7 @@ 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
@@ -227,11 +225,12 @@ class ReverseProxTest(ProxTestBase):
@classmethod
def get_proxy_config(cls):
d = ProxTestBase.get_proxy_config()
- d["upstream_server"] = (
- "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
@@ -262,19 +261,17 @@ class ChainProxTest(ProxTestBase):
Chain n instances of mitmproxy in a row - because we can.
"""
n = 2
- chain_config = [lambda: ProxyConfig()] * n
+ 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.upstream_server = ("http", "127.0.0.1",
- cls.proxy.port if i == 0 else
- cls.chain[-1].port
- )
- config.http_form_in = "absolute"
- config.http_form_out = "absolute"
+ 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.