diff options
Diffstat (limited to 'test/mitmproxy/test_addonmanager.py')
-rw-r--r-- | test/mitmproxy/test_addonmanager.py | 95 |
1 files changed, 95 insertions, 0 deletions
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() |