From 541c1e8b9f0e2e12bd770100888129639cc94827 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 24 Mar 2017 10:15:41 +1300 Subject: addons: start -> load throughout --- test/mitmproxy/addons/test_script.py | 20 ++++++++++---------- test/mitmproxy/addons/test_serverplayback.py | 12 ++++++------ test/mitmproxy/data/addonscripts/addon.py | 8 ++++---- .../data/addonscripts/concurrent_decorator_class.py | 2 +- test/mitmproxy/data/addonscripts/print.py | 2 +- test/mitmproxy/data/addonscripts/recorder.py | 2 +- test/mitmproxy/script/test_concurrent.py | 6 +++--- 7 files changed, 26 insertions(+), 26 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py index 84d36e2a..79416161 100644 --- a/test/mitmproxy/addons/test_script.py +++ b/test/mitmproxy/addons/test_script.py @@ -104,7 +104,7 @@ def test_load_script(): "mitmproxy/data/addonscripts/recorder.py" ), [] ) - assert ns.start + assert ns.load def test_script_print_stdout(): @@ -129,7 +129,7 @@ class TestScript: ) ) sc.load_script() - assert sc.ns.call_log[0][0:2] == ("solo", "start") + assert sc.ns.call_log[0][0:2] == ("solo", "load") sc.ns.call_log = [] f = tflow.tflow(resp=True) @@ -157,7 +157,7 @@ class TestScript: sc = script.Script( tutils.test_data.path("mitmproxy/data/addonscripts/error.py") ) - sc.start(tctx.options) + sc.load(tctx.options) f = tflow.tflow(resp=True) sc.request(f) assert tctx.master.logs[0].level == "error" @@ -173,10 +173,10 @@ class TestScript: "mitmproxy/data/addonscripts/addon.py" ) ) - sc.start(tctx.options) + sc.load(tctx.options) tctx.configure(sc) assert sc.ns.event_log == [ - 'scriptstart', 'addonstart', 'addonconfigure' + 'scriptload', 'addonload', 'addonconfigure' ] @@ -213,7 +213,7 @@ class TestScriptLoader: ), [f] ) evts = [i[1] for i in sc.ns.call_log] - assert evts == ['start', 'requestheaders', 'request', 'responseheaders', 'response', 'done'] + assert evts == ['load', 'requestheaders', 'request', 'responseheaders', 'response', 'done'] f = tflow.tflow(resp=True) with m.handlecontext(): @@ -271,15 +271,15 @@ class TestScriptLoader: ) debug = [i.msg for i in tctx.master.logs if i.level == "debug"] assert debug == [ - 'a start', + 'a load', 'a configure', 'a running', - 'b start', + 'b load', 'b configure', 'b running', - 'c start', + 'c load', 'c configure', 'c running', ] @@ -307,7 +307,7 @@ class TestScriptLoader: assert debug == [ 'c done', 'b done', - 'x start', + 'x load', 'x configure', 'x running', ] diff --git a/test/mitmproxy/addons/test_serverplayback.py b/test/mitmproxy/addons/test_serverplayback.py index 02642c35..7078b66e 100644 --- a/test/mitmproxy/addons/test_serverplayback.py +++ b/test/mitmproxy/addons/test_serverplayback.py @@ -44,12 +44,12 @@ def test_server_playback(): assert not sp.flowmap - sp.load([f]) + sp.load_flows([f]) assert sp.flowmap assert sp.next_flow(f) assert not sp.flowmap - sp.load([f]) + sp.load_flows([f]) assert sp.flowmap sp.clear() assert not sp.flowmap @@ -192,7 +192,7 @@ def test_load(): r2 = tflow.tflow(resp=True) r2.request.headers["key"] = "two" - s.load([r, r2]) + s.load_flows([r, r2]) assert s.count() == 2 @@ -218,7 +218,7 @@ def test_load_with_server_replay_nopop(): r2 = tflow.tflow(resp=True) r2.request.headers["key"] = "two" - s.load([r, r2]) + s.load_flows([r, r2]) assert s.count() == 2 s.next_flow(r) @@ -319,7 +319,7 @@ def test_server_playback_full(): f = tflow.tflow() f.response = mitmproxy.test.tutils.tresp(content=f.request.content) - s.load([f, f]) + s.load_flows([f, f]) tf = tflow.tflow() assert not tf.response @@ -352,7 +352,7 @@ def test_server_playback_kill(): f = tflow.tflow() f.response = mitmproxy.test.tutils.tresp(content=f.request.content) - s.load([f]) + s.load_flows([f]) f = tflow.tflow() f.request.host = "nonexistent" diff --git a/test/mitmproxy/data/addonscripts/addon.py b/test/mitmproxy/data/addonscripts/addon.py index f34f41cb..3186400a 100644 --- a/test/mitmproxy/data/addonscripts/addon.py +++ b/test/mitmproxy/data/addonscripts/addon.py @@ -6,8 +6,8 @@ class Addon: def event_log(self): return event_log - def start(self, opts): - event_log.append("addonstart") + def load(self, opts): + event_log.append("addonload") def configure(self, options, updated): event_log.append("addonconfigure") @@ -17,6 +17,6 @@ def configure(options, updated): event_log.append("addonconfigure") -def start(opts): - event_log.append("scriptstart") +def load(opts): + event_log.append("scriptload") return Addon() diff --git a/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py b/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py index 10ba24cd..d486923a 100644 --- a/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py +++ b/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py @@ -9,5 +9,5 @@ class ConcurrentClass: time.sleep(0.1) -def start(opts): +def load(opts): return ConcurrentClass() diff --git a/test/mitmproxy/data/addonscripts/print.py b/test/mitmproxy/data/addonscripts/print.py index fdfcc3d9..93b65a64 100644 --- a/test/mitmproxy/data/addonscripts/print.py +++ b/test/mitmproxy/data/addonscripts/print.py @@ -1,2 +1,2 @@ -def start(opts): +def load(l): print("stdoutprint") diff --git a/test/mitmproxy/data/addonscripts/recorder.py b/test/mitmproxy/data/addonscripts/recorder.py index aff524a8..5e0cdfc2 100644 --- a/test/mitmproxy/data/addonscripts/recorder.py +++ b/test/mitmproxy/data/addonscripts/recorder.py @@ -22,5 +22,5 @@ class CallLogger: raise AttributeError -def start(opts): +def load(opts): return CallLogger(*sys.argv[1:]) diff --git a/test/mitmproxy/script/test_concurrent.py b/test/mitmproxy/script/test_concurrent.py index 0e397b8f..ccae0d31 100644 --- a/test/mitmproxy/script/test_concurrent.py +++ b/test/mitmproxy/script/test_concurrent.py @@ -24,7 +24,7 @@ class TestConcurrent(tservers.MasterTest): "mitmproxy/data/addonscripts/concurrent_decorator.py" ) ) - sc.start(tctx.options) + sc.load(tctx.options) f1, f2 = tflow.tflow(), tflow.tflow() tctx.cycle(sc, f1) @@ -42,7 +42,7 @@ class TestConcurrent(tservers.MasterTest): "mitmproxy/data/addonscripts/concurrent_decorator_err.py" ) ) - sc.start(tctx.options) + sc.load(tctx.options) assert tctx.master.has_log("decorator not supported") def test_concurrent_class(self): @@ -52,7 +52,7 @@ class TestConcurrent(tservers.MasterTest): "mitmproxy/data/addonscripts/concurrent_decorator_class.py" ) ) - sc.start(tctx.options) + sc.load(tctx.options) f1, f2 = tflow.tflow(), tflow.tflow() tctx.cycle(sc, f1) -- cgit v1.2.3 From 65f0885bd6809966f694d1ffb965401b8ab2cffc Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 24 Mar 2017 11:29:36 +1300 Subject: addon loader: add boot_into, which replaces returning from start() While we're here, expand test coverage for addonmanager to 100%, and promote to individual coverage. --- test/mitmproxy/addons/test_script.py | 9 +- test/mitmproxy/data/addonscripts/addon.py | 4 +- .../addonscripts/concurrent_decorator_class.py | 4 +- test/mitmproxy/data/addonscripts/recorder.py | 4 +- test/mitmproxy/script/test_concurrent.py | 10 ++- test/mitmproxy/test_addonmanager.py | 95 ++++++++++++++++++++++ 6 files changed, 114 insertions(+), 12 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py index 79416161..c68981de 100644 --- a/test/mitmproxy/addons/test_script.py +++ b/test/mitmproxy/addons/test_script.py @@ -9,6 +9,7 @@ from unittest import mock from mitmproxy.test import tflow from mitmproxy.test import tutils from mitmproxy.test import taddons +from mitmproxy import addonmanager from mitmproxy import exceptions from mitmproxy import options from mitmproxy import proxy @@ -116,7 +117,7 @@ def test_script_print_stdout(): "mitmproxy/data/addonscripts/print.py" ), [] ) - ns.start(tctx.options) + ns.load(addonmanager.Loader(tctx.master)) mock_warn.assert_called_once_with("stdoutprint") @@ -157,7 +158,8 @@ class TestScript: sc = script.Script( tutils.test_data.path("mitmproxy/data/addonscripts/error.py") ) - sc.load(tctx.options) + l = addonmanager.Loader(tctx.master) + sc.load(l) f = tflow.tflow(resp=True) sc.request(f) assert tctx.master.logs[0].level == "error" @@ -173,7 +175,8 @@ class TestScript: "mitmproxy/data/addonscripts/addon.py" ) ) - sc.load(tctx.options) + l = addonmanager.Loader(tctx.master) + sc.load(l) tctx.configure(sc) assert sc.ns.event_log == [ 'scriptload', 'addonload', 'addonconfigure' diff --git a/test/mitmproxy/data/addonscripts/addon.py b/test/mitmproxy/data/addonscripts/addon.py index 3186400a..beef2ce7 100644 --- a/test/mitmproxy/data/addonscripts/addon.py +++ b/test/mitmproxy/data/addonscripts/addon.py @@ -17,6 +17,6 @@ def configure(options, updated): event_log.append("addonconfigure") -def load(opts): +def load(l): event_log.append("scriptload") - return Addon() + l.boot_into(Addon()) diff --git a/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py b/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py index d486923a..8e6988d4 100644 --- a/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py +++ b/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py @@ -9,5 +9,5 @@ class ConcurrentClass: time.sleep(0.1) -def load(opts): - return ConcurrentClass() +def load(l): + l.boot_into(ConcurrentClass()) diff --git a/test/mitmproxy/data/addonscripts/recorder.py b/test/mitmproxy/data/addonscripts/recorder.py index 5e0cdfc2..fe497b05 100644 --- a/test/mitmproxy/data/addonscripts/recorder.py +++ b/test/mitmproxy/data/addonscripts/recorder.py @@ -22,5 +22,5 @@ class CallLogger: raise AttributeError -def load(opts): - return CallLogger(*sys.argv[1:]) +def load(l): + l.boot_into(CallLogger(*sys.argv[1:])) diff --git a/test/mitmproxy/script/test_concurrent.py b/test/mitmproxy/script/test_concurrent.py index ccae0d31..86efdfc2 100644 --- a/test/mitmproxy/script/test_concurrent.py +++ b/test/mitmproxy/script/test_concurrent.py @@ -2,6 +2,7 @@ from mitmproxy.test import tflow from mitmproxy.test import tutils from mitmproxy.test import taddons +from mitmproxy import addonmanager from mitmproxy import controller from mitmproxy.addons import script @@ -24,7 +25,8 @@ class TestConcurrent(tservers.MasterTest): "mitmproxy/data/addonscripts/concurrent_decorator.py" ) ) - sc.load(tctx.options) + l = addonmanager.Loader(tctx.master) + sc.load(l) f1, f2 = tflow.tflow(), tflow.tflow() tctx.cycle(sc, f1) @@ -42,7 +44,8 @@ class TestConcurrent(tservers.MasterTest): "mitmproxy/data/addonscripts/concurrent_decorator_err.py" ) ) - sc.load(tctx.options) + l = addonmanager.Loader(tctx.master) + sc.load(l) assert tctx.master.has_log("decorator not supported") def test_concurrent_class(self): @@ -52,7 +55,8 @@ class TestConcurrent(tservers.MasterTest): "mitmproxy/data/addonscripts/concurrent_decorator_class.py" ) ) - sc.load(tctx.options) + l = addonmanager.Loader(tctx.master) + sc.load(l) f1, f2 = tflow.tflow(), tflow.tflow() tctx.cycle(sc, f1) diff --git a/test/mitmproxy/test_addonmanager.py b/test/mitmproxy/test_addonmanager.py index e7be25b8..5bb88eb6 100644 --- a/test/mitmproxy/test_addonmanager.py +++ b/test/mitmproxy/test_addonmanager.py @@ -5,6 +5,7 @@ from mitmproxy import exceptions from mitmproxy import options from mitmproxy import master from mitmproxy import proxy +from mitmproxy.test import tflow class TAddon: @@ -23,6 +24,58 @@ class TAddon: self.custom_called = True +class THalt: + def event_custom(self): + raise exceptions.AddonHalt + + +class AOption: + def load(self, l): + l.add_option("custom_option", bool, False, "help") + + +class AChain: + def __init__(self, name, next): + self.name = name + self.next = next + + def load(self, l): + if self.next: + l.boot_into(self.next) + + def __repr__(self): + return "<%s>" % self.name + + +def test_halt(): + o = options.Options() + m = master.Master(o, proxy.DummyServer(o)) + a = addonmanager.AddonManager(m) + halt = THalt() + end = TAddon("end") + a.add(halt) + a.add(end) + + a.trigger("custom") + assert not end.custom_called + + a.remove(halt) + a.trigger("custom") + assert end.custom_called + + +def test_lifecycle(): + o = options.Options() + m = master.Master(o, proxy.DummyServer(o)) + a = addonmanager.AddonManager(m) + a.add(TAddon("one")) + + f = tflow.tflow() + a.handle_lifecycle("request", f) + + a.configure_all(o, o.keys()) + + def test_simple(): o = options.Options() m = master.Master(o, proxy.DummyServer(o)) @@ -30,10 +83,13 @@ def test_simple(): with pytest.raises(exceptions.AddonError): a.invoke_addon(TAddon("one"), "done") + assert len(a) == 0 a.add(TAddon("one")) assert a.get("one") assert not a.get("two") + assert len(a) == 1 a.clear() + assert len(a) == 0 assert not a.chain a.add(TAddon("one")) @@ -41,7 +97,46 @@ def test_simple(): with pytest.raises(exceptions.AddonError): a.trigger("tick") + a.remove(a.get("one")) + assert not a.get("one") + ta = TAddon("one") a.add(ta) a.trigger("custom") assert ta.custom_called + + +def test_load_option(): + o = options.Options() + m = master.Master(o, proxy.DummyServer(o)) + a = addonmanager.AddonManager(m) + a.add(AOption()) + assert "custom_option" in m.options._options + + +def test_loadchain(): + o = options.Options() + m = master.Master(o, proxy.DummyServer(o)) + a = addonmanager.AddonManager(m) + + a.add(AChain("one", None)) + assert a.get("one") + a.clear() + + a.add(AChain("one", AChain("two", None))) + assert not a.get("one") + assert a.get("two") + a.clear() + + a.add(AChain("one", AChain("two", AChain("three", None)))) + assert not a.get("one") + assert not a.get("two") + assert a.get("three") + a.clear() + + a.add(AChain("one", AChain("two", AChain("three", AChain("four", None))))) + assert not a.get("one") + assert not a.get("two") + assert not a.get("three") + assert a.get("four") + a.clear() -- cgit v1.2.3