diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2016-10-19 08:25:41 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2016-10-19 11:40:51 +1300 |
commit | ceb8caee9885e87641755e86b72adc2a73877ce0 (patch) | |
tree | 0c9a9c5630b96c2f8984c3515513e986ccbdc839 /test | |
parent | 03cb5bb32503d07eda466ab8dd62e750d10d4392 (diff) | |
download | mitmproxy-ceb8caee9885e87641755e86b72adc2a73877ce0.tar.gz mitmproxy-ceb8caee9885e87641755e86b72adc2a73877ce0.tar.bz2 mitmproxy-ceb8caee9885e87641755e86b72adc2a73877ce0.zip |
Web apps to addons
This commit removes the app registry, adds a wsgiapp addon base, and ports the
onboarding app to it.
Diffstat (limited to 'test')
-rw-r--r-- | test/mitmproxy/builtins/test_onboarding.py (renamed from test/mitmproxy/test_app.py) | 5 | ||||
-rw-r--r-- | test/mitmproxy/builtins/test_wsgiapp.py | 61 | ||||
-rw-r--r-- | test/mitmproxy/protocol/test_http2.py | 4 | ||||
-rw-r--r-- | test/mitmproxy/protocol/test_websockets.py | 4 | ||||
-rw-r--r-- | test/mitmproxy/test_addons.py | 2 | ||||
-rw-r--r-- | test/mitmproxy/test_dump.py | 5 | ||||
-rw-r--r-- | test/mitmproxy/test_flow.py | 20 | ||||
-rw-r--r-- | test/mitmproxy/test_server.py | 20 | ||||
-rw-r--r-- | test/mitmproxy/tservers.py | 41 |
9 files changed, 87 insertions, 75 deletions
diff --git a/test/mitmproxy/test_app.py b/test/mitmproxy/builtins/test_onboarding.py index 4c9eff08..3226aec3 100644 --- a/test/mitmproxy/test_app.py +++ b/test/mitmproxy/builtins/test_onboarding.py @@ -1,7 +1,10 @@ -from . import tservers +from mitmproxy.builtins import onboarding +from .. import tservers class TestApp(tservers.HTTPProxyTest): + def addons(self): + return [onboarding.Onboarding()] def test_basic(self): assert self.app("/").status_code == 200 diff --git a/test/mitmproxy/builtins/test_wsgiapp.py b/test/mitmproxy/builtins/test_wsgiapp.py new file mode 100644 index 00000000..c8991892 --- /dev/null +++ b/test/mitmproxy/builtins/test_wsgiapp.py @@ -0,0 +1,61 @@ +import flask + +from .. import tservers +from mitmproxy.builtins import wsgiapp + +testapp = flask.Flask(__name__) + + +@testapp.route("/") +def hello(): + return "testapp" + + +@testapp.route("/error") +def error(): + raise ValueError("An exception...") + + +def errapp(environ, start_response): + raise ValueError("errapp") + + +class TestApp(tservers.HTTPProxyTest): + def addons(self): + return [ + wsgiapp.WSGIApp(testapp, "testapp", 80), + wsgiapp.WSGIApp(errapp, "errapp", 80) + ] + + def test_simple(self): + p = self.pathoc() + with p.connect(): + ret = p.request("get:'http://testapp/'") + assert ret.status_code == 200 + + def _test_app_err(self): + p = self.pathoc() + with p.connect(): + ret = p.request("get:'http://errapp/'") + assert ret.status_code == 500 + assert b"ValueError" in ret.content + + +def _test_app_registry(): + ar = flow.AppRegistry() + ar.add("foo", "domain", 80) + + r = HTTPRequest.wrap(netlib.tutils.treq()) + r.host = "domain" + r.port = 80 + assert ar.get(r) + + r.port = 81 + assert not ar.get(r) + + r = HTTPRequest.wrap(netlib.tutils.treq()) + r.host = "domain2" + r.port = 80 + assert not ar.get(r) + r.headers["host"] = "domain" + assert ar.get(r) diff --git a/test/mitmproxy/protocol/test_http2.py b/test/mitmproxy/protocol/test_http2.py index e6b13a05..a2efdc47 100644 --- a/test/mitmproxy/protocol/test_http2.py +++ b/test/mitmproxy/protocol/test_http2.py @@ -96,7 +96,6 @@ class _Http2TestBase: cls.config = ProxyConfig(opts) tmaster = tservers.TestMaster(opts, cls.config) - tmaster.start_app(options.APP_HOST, options.APP_PORT) cls.proxy = tservers.ProxyThread(tmaster) cls.proxy.start() @@ -119,8 +118,7 @@ class _Http2TestBase: return self.proxy.tmaster def setup(self): - self.master.clear_log() - self.master.state.clear() + self.master.reset([]) self.server.server.handle_server_event = self.handle_server_event def _setup_connection(self): diff --git a/test/mitmproxy/protocol/test_websockets.py b/test/mitmproxy/protocol/test_websockets.py index 508a539f..ef520d87 100644 --- a/test/mitmproxy/protocol/test_websockets.py +++ b/test/mitmproxy/protocol/test_websockets.py @@ -50,7 +50,6 @@ class _WebSocketsTestBase: cls.config = ProxyConfig(opts) tmaster = tservers.TestMaster(opts, cls.config) - tmaster.start_app(options.APP_HOST, options.APP_PORT) cls.proxy = tservers.ProxyThread(tmaster) cls.proxy.start() @@ -74,8 +73,7 @@ class _WebSocketsTestBase: return self.proxy.tmaster def setup(self): - self.master.clear_log() - self.master.state.clear() + self.master.reset([]) self.server.server.handle_websockets = self.handle_websockets def _setup_connection(self): diff --git a/test/mitmproxy/test_addons.py b/test/mitmproxy/test_addons.py index eb35d15b..b3e33b4e 100644 --- a/test/mitmproxy/test_addons.py +++ b/test/mitmproxy/test_addons.py @@ -18,3 +18,5 @@ def test_simple(): a.add(TAddon("one")) assert a.get("one") assert not a.get("two") + a.clear() + assert not a.chain diff --git a/test/mitmproxy/test_dump.py b/test/mitmproxy/test_dump.py index d1443de4..8a645dac 100644 --- a/test/mitmproxy/test_dump.py +++ b/test/mitmproxy/test_dump.py @@ -99,11 +99,6 @@ class TestDumpMaster(mastertest.MasterTest): self.mkmaster("~u foo", verbosity=1), 1, b"" ) - def test_app(self): - o = dump.Options(app=True) - m = dump.DumpMaster(None, o) - assert len(m.apps.apps) == 1 - def test_replacements(self): o = dump.Options( replacements=[(".*", "content", "foo")], diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py index 78cfca99..4531cc5d 100644 --- a/test/mitmproxy/test_flow.py +++ b/test/mitmproxy/test_flow.py @@ -17,26 +17,6 @@ from mitmproxy.models.connections import ClientConnection from . import tutils -def test_app_registry(): - ar = flow.AppRegistry() - ar.add("foo", "domain", 80) - - r = HTTPRequest.wrap(netlib.tutils.treq()) - r.host = "domain" - r.port = 80 - assert ar.get(r) - - r.port = 81 - assert not ar.get(r) - - r = HTTPRequest.wrap(netlib.tutils.treq()) - r.host = "domain2" - r.port = 80 - assert not ar.get(r) - r.headers["host"] = "domain" - assert ar.get(r) - - class TestHTTPFlow: def test_copy(self): diff --git a/test/mitmproxy/test_server.py b/test/mitmproxy/test_server.py index 12c0b25f..6679625b 100644 --- a/test/mitmproxy/test_server.py +++ b/test/mitmproxy/test_server.py @@ -201,23 +201,7 @@ class TcpMixin: # assert any("306" in m for m in self.master.tlog) -class AppMixin: - - def test_app(self): - ret = self.app("/") - assert ret.status_code == 200 - assert b"mitmproxy" in ret.content - - -class TestHTTP(tservers.HTTPProxyTest, CommonMixin, AppMixin): - - def test_app_err(self): - p = self.pathoc() - with p.connect(): - ret = p.request("get:'http://errapp/'") - assert ret.status_code == 500 - assert b"ValueError" in ret.content - +class TestHTTP(tservers.HTTPProxyTest, CommonMixin): def test_invalid_connect(self): t = tcp.TCPClient(("127.0.0.1", self.proxy.port)) with t.connect(): @@ -897,7 +881,7 @@ class TestIncompleteResponse(tservers.HTTPProxyTest): assert self.pathod("200").status_code == 502 -class TestUpstreamProxy(tservers.HTTPUpstreamProxyTest, CommonMixin, AppMixin): +class TestUpstreamProxy(tservers.HTTPUpstreamProxyTest, CommonMixin): ssl = False diff --git a/test/mitmproxy/tservers.py b/test/mitmproxy/tservers.py index e704faa4..b09a6cf9 100644 --- a/test/mitmproxy/tservers.py +++ b/test/mitmproxy/tservers.py @@ -1,7 +1,6 @@ import os.path import threading import tempfile -import flask import mock import sys @@ -13,37 +12,26 @@ import pathod.pathoc from mitmproxy import flow, controller, options import netlib.exceptions -testapp = flask.Flask(__name__) - - -@testapp.route("/") -def hello(): - return "testapp" - - -@testapp.route("/error") -def error(): - raise ValueError("An exception...") - - -def errapp(environ, start_response): - raise ValueError("errapp") - class TestMaster(flow.FlowMaster): def __init__(self, opts, config): s = ProxyServer(config) flow.FlowMaster.__init__(self, opts, s) + + def clear_addons(self, addons): + self.addons.clear() self.state = state.State() self.addons.add(self.state) - self.apps.add(testapp, "testapp", 80) - self.apps.add(errapp, "errapp", 80) - self.clear_log() + self.addons.add(*addons) def clear_log(self): self.tlog = [] + def reset(self, addons): + self.clear_addons(addons) + self.clear_log() + @controller.handler def log(self, e): self.tlog.append(e.msg) @@ -94,7 +82,6 @@ class ProxyTestBase: opts = cls.get_options() cls.config = ProxyConfig(opts) tmaster = cls.masterclass(opts, cls.config) - tmaster.start_app(options.APP_HOST, options.APP_PORT) cls.proxy = ProxyThread(tmaster) cls.proxy.start() @@ -116,8 +103,7 @@ class ProxyTestBase: raise def setup(self): - self.master.state.clear() - self.master.clear_log() + self.master.reset(self.addons()) self.server.clear_log() self.server2.clear_log() @@ -135,6 +121,12 @@ class ProxyTestBase: ssl_insecure=True, ) + def addons(self): + """ + Can be over-ridden to add a standard set of addons to tests. + """ + return [] + class LazyPathoc(pathod.pathoc.Pathoc): def __init__(self, lazy_connect, *args, **kwargs): @@ -330,8 +322,7 @@ class ChainProxyTest(ProxyTestBase): def setup(self): super().setup() for proxy in self.chain: - proxy.tmaster.clear_log() - proxy.tmaster.state.clear() + proxy.tmaster.reset(self.addons()) @classmethod def get_options(cls): |