From 6908dc4d901fbe23107253535596a14ed2691539 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 18 Jul 2016 14:19:39 +1200 Subject: ProxyConfig refactor Step two of frog boiling: move listening address and port into options. This is the hard bit, because it touches the test suite so deeply. --- test/mitmproxy/test_protocol_http2.py | 9 +++++--- test/mitmproxy/test_proxy.py | 6 ++---- test/mitmproxy/test_server.py | 4 ++-- test/mitmproxy/tservers.py | 40 +++++++++++++++++------------------ 4 files changed, 30 insertions(+), 29 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/test_protocol_http2.py b/test/mitmproxy/test_protocol_http2.py index 04ca94bf..dd81ba23 100644 --- a/test/mitmproxy/test_protocol_http2.py +++ b/test/mitmproxy/test_protocol_http2.py @@ -90,9 +90,10 @@ class _Http2TestBase(object): @classmethod def setup_class(cls): cls.masteroptions = options.Options() - cls.config = ProxyConfig(cls.masteroptions, **cls.get_proxy_config()) + cnf, opts = cls.get_proxy_config() + cls.config = ProxyConfig(opts, **cnf) - tmaster = tservers.TestMaster(cls.masteroptions, cls.config) + tmaster = tservers.TestMaster(opts, cls.config) tmaster.start_app(APP_HOST, APP_PORT) cls.proxy = tservers.ProxyThread(tmaster) cls.proxy.start() @@ -103,12 +104,14 @@ class _Http2TestBase(object): @classmethod def get_proxy_config(cls): + opts = options.Options(listen_port=0) cls.cadir = os.path.join(tempfile.gettempdir(), "mitmproxy") - return dict( + d = dict( no_upstream_cert=False, cadir=cls.cadir, authenticator=None, ) + return d, opts @property def master(self): diff --git a/test/mitmproxy/test_proxy.py b/test/mitmproxy/test_proxy.py index f4f73cf5..c87e1ad4 100644 --- a/test/mitmproxy/test_proxy.py +++ b/test/mitmproxy/test_proxy.py @@ -160,15 +160,13 @@ class TestProxyServer: @tutils.skip_windows def test_err(self): conf = ProxyConfig( - options.Options(), - port=1 + options.Options(listen_port=1), ) tutils.raises("error starting proxy server", ProxyServer, conf) def test_err_2(self): conf = ProxyConfig( - options.Options(), - host="invalidhost" + options.Options(listen_host="invalidhost"), ) tutils.raises("error starting proxy server", ProxyServer, conf) diff --git a/test/mitmproxy/test_server.py b/test/mitmproxy/test_server.py index 2e580d47..20372c92 100644 --- a/test/mitmproxy/test_server.py +++ b/test/mitmproxy/test_server.py @@ -484,9 +484,9 @@ class TestHttps2Http(tservers.ReverseProxyTest): @classmethod def get_proxy_config(cls): - d = super(TestHttps2Http, cls).get_proxy_config() + d, opts = super(TestHttps2Http, cls).get_proxy_config() d["upstream_server"] = ("http", d["upstream_server"][1]) - return d + return d, opts def pathoc(self, ssl, sni=None): """ diff --git a/test/mitmproxy/tservers.py b/test/mitmproxy/tservers.py index e236656e..f9e1925f 100644 --- a/test/mitmproxy/tservers.py +++ b/test/mitmproxy/tservers.py @@ -33,7 +33,6 @@ def errapp(environ, start_response): class TestMaster(flow.FlowMaster): def __init__(self, opts, config): - config.port = 0 s = ProxyServer(config) state = flow.State() flow.FlowMaster.__init__(self, opts, s, state) @@ -55,7 +54,8 @@ class ProxyThread(threading.Thread): threading.Thread.__init__(self) self.tmaster = tmaster self.name = "ProxyThread (%s:%s)" % ( - tmaster.server.address.host, tmaster.server.address.port) + tmaster.server.address.host, tmaster.server.address.port + ) controller.should_exit = False @property @@ -80,7 +80,6 @@ class ProxyTestBase(object): no_upstream_cert = False authenticator = None masterclass = TestMaster - masteroptions = options.Options() add_upstream_certs_to_client_chain = False @classmethod @@ -92,8 +91,9 @@ class ProxyTestBase(object): ssl=cls.ssl, ssloptions=cls.ssloptions) - cls.config = ProxyConfig(cls.masteroptions, **cls.get_proxy_config()) - tmaster = cls.masterclass(cls.masteroptions, cls.config) + cnf, opts = cls.get_proxy_config() + cls.config = ProxyConfig(opts, **cnf) + tmaster = cls.masterclass(opts, cls.config) tmaster.start_app(APP_HOST, APP_PORT) cls.proxy = ProxyThread(tmaster) cls.proxy.start() @@ -120,12 +120,13 @@ class ProxyTestBase(object): @classmethod def get_proxy_config(cls): cls.cadir = os.path.join(tempfile.gettempdir(), "mitmproxy") - return dict( + cnf = dict( no_upstream_cert = cls.no_upstream_cert, cadir = cls.cadir, authenticator = cls.authenticator, add_upstream_certs_to_client_chain = cls.add_upstream_certs_to_client_chain, ) + return cnf, options.Options(listen_port=0) class HTTPProxyTest(ProxyTestBase): @@ -199,9 +200,9 @@ class TransparentProxyTest(ProxyTestBase): @classmethod def get_proxy_config(cls): - d = ProxyTestBase.get_proxy_config() + d, opts = ProxyTestBase.get_proxy_config() d["mode"] = "transparent" - return d + return d, opts def pathod(self, spec, sni=None): """ @@ -231,13 +232,13 @@ class ReverseProxyTest(ProxyTestBase): @classmethod def get_proxy_config(cls): - d = ProxyTestBase.get_proxy_config() + d, opts = ProxyTestBase.get_proxy_config() d["upstream_server"] = ( "https" if cls.ssl else "http", ("127.0.0.1", cls.server.port) ) d["mode"] = "reverse" - return d + return d, opts def pathoc(self, sni=None): """ @@ -266,9 +267,9 @@ class SocksModeTest(HTTPProxyTest): @classmethod def get_proxy_config(cls): - d = ProxyTestBase.get_proxy_config() + d, opts = ProxyTestBase.get_proxy_config() d["mode"] = "socks5" - return d + return d, opts class ChainProxyTest(ProxyTestBase): @@ -284,20 +285,19 @@ class ChainProxyTest(ProxyTestBase): @classmethod def setup_class(cls): - cls.masteroptions = options.Options() cls.chain = [] super(ChainProxyTest, cls).setup_class() for _ in range(cls.n): - config = ProxyConfig(cls.masteroptions, **cls.get_proxy_config()) - tmaster = cls.masterclass(cls.masteroptions, config) + cnf, opts = cls.get_proxy_config() + config = ProxyConfig(opts, **cnf) + tmaster = cls.masterclass(opts, config) proxy = ProxyThread(tmaster) proxy.start() cls.chain.insert(0, proxy) # Patch the orginal proxy to upstream mode - cls.config = cls.proxy.tmaster.config = cls.proxy.tmaster.server.config = ProxyConfig( - cls.masteroptions, - **cls.get_proxy_config()) + cnf, opts = cls.get_proxy_config() + cls.config = cls.proxy.tmaster.config = cls.proxy.tmaster.server.config = ProxyConfig(opts, **cnf) @classmethod def teardown_class(cls): @@ -313,13 +313,13 @@ class ChainProxyTest(ProxyTestBase): @classmethod def get_proxy_config(cls): - d = super(ChainProxyTest, cls).get_proxy_config() + d, opts = super(ChainProxyTest, cls).get_proxy_config() if cls.chain: # First proxy is in normal mode. d.update( mode="upstream", upstream_server=("http", ("127.0.0.1", cls.chain[0].port)) ) - return d + return d, opts class HTTPUpstreamProxyTest(ChainProxyTest, HTTPProxyTest): -- cgit v1.2.3