aboutsummaryrefslogtreecommitdiffstats
path: root/test/tservers.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/tservers.py')
-rw-r--r--test/tservers.py69
1 files changed, 55 insertions, 14 deletions
diff --git a/test/tservers.py b/test/tservers.py
index ac95b168..812e8921 100644
--- a/test/tservers.py
+++ b/test/tservers.py
@@ -21,13 +21,12 @@ def errapp(environ, start_response):
class TestMaster(flow.FlowMaster):
- def __init__(self, testq, config):
+ def __init__(self, config):
s = proxy.ProxyServer(config, 0)
state = flow.State()
flow.FlowMaster.__init__(self, s, state)
self.apps.add(testapp, "testapp", 80)
self.apps.add(errapp, "errapp", 80)
- self.testq = testq
self.clear_log()
self.start_app(APP_HOST, APP_PORT, False)
@@ -51,11 +50,12 @@ class ProxyThread(threading.Thread):
def __init__(self, tmaster):
threading.Thread.__init__(self)
self.tmaster = tmaster
+ self.name = "ProxyThread (%s:%s)" % (tmaster.server.address.host, tmaster.server.address.port)
controller.should_exit = False
@property
def port(self):
- return self.tmaster.server.port
+ return self.tmaster.server.address.port
@property
def log(self):
@@ -68,7 +68,7 @@ class ProxyThread(threading.Thread):
self.tmaster.shutdown()
-class ProxTestBase:
+class ProxTestBase(object):
# Test Configuration
ssl = None
ssloptions = False
@@ -79,17 +79,16 @@ class ProxTestBase:
masterclass = TestMaster
@classmethod
def setupAll(cls):
- cls.tqueue = Queue.Queue()
cls.server = libpathod.test.Daemon(ssl=cls.ssl, ssloptions=cls.ssloptions)
cls.server2 = libpathod.test.Daemon(ssl=cls.ssl, ssloptions=cls.ssloptions)
pconf = cls.get_proxy_config()
config = proxy.ProxyConfig(
no_upstream_cert = cls.no_upstream_cert,
- cacert = tutils.test_data.path("data/serverkey.pem"),
+ cacert = tutils.test_data.path("data/confdir/mitmproxy-ca.pem"),
authenticator = cls.authenticator,
**pconf
)
- tmaster = cls.masterclass(cls.tqueue, config)
+ tmaster = cls.masterclass(config)
cls.proxy = ProxyThread(tmaster)
cls.proxy.start()
@@ -134,13 +133,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,10 +160,8 @@ class HTTPProxTest(ProxTestBase):
def app(self, page):
if self.ssl:
- p = libpathod.pathoc.Pathoc("127.0.0.1", self.proxy.port, True)
- print "PRE"
+ p = libpathod.pathoc.Pathoc(("127.0.0.1", self.proxy.port), True)
p.connect((APP_HOST, APP_PORT))
- print "POST"
return p.request("get:'/%s'"%page)
else:
p = self.pathoc()
@@ -211,7 +208,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 +229,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
@@ -249,5 +246,49 @@ class ReverseProxTest(ProxTestBase):
return p.request(q)
+class ChainProxTest(ProxTestBase):
+ """
+ Chain n instances of mitmproxy in a row - because we can.
+ """
+ n = 2
+ chain_config = [lambda: proxy.ProxyConfig(
+ cacert = tutils.test_data.path("data/confdir/mitmproxy-ca.pem"),
+ )] * 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
+ )
+ tmaster = cls.masterclass(config)
+ cls.chain.append(ProxyThread(tmaster))
+ cls.chain[-1].start()
+ @classmethod
+ def teardownAll(cls):
+ super(ChainProxTest, cls).teardownAll()
+ for p in cls.chain:
+ p.tmaster.server.shutdown()
+ def setUp(self):
+ super(ChainProxTest, self).setUp()
+ for p in self.chain:
+ p.tmaster.clear_log()
+ p.tmaster.state.clear()
+
+
+class HTTPChainProxyTest(ChainProxTest):
+ def pathoc(self, sni=None):
+ """
+ Returns a connected Pathoc instance.
+ """
+ p = libpathod.pathoc.Pathoc(("localhost", self.chain[-1].port), ssl=self.ssl, sni=sni)
+ if self.ssl:
+ p.connect(("127.0.0.1", self.server.port))
+ else:
+ p.connect()
+ return p