diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2017-04-25 19:06:24 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2017-04-25 22:13:44 +1200 |
commit | e6eeab60946e61047ed858422badbda189a6f9e8 (patch) | |
tree | c0bc4775cd24824a3c2ff7df73c3b6078874eb70 /test/examples/test_examples.py | |
parent | 90c425bd14087a984afd92eec2c18e63707e4ffa (diff) | |
download | mitmproxy-e6eeab60946e61047ed858422badbda189a6f9e8.tar.gz mitmproxy-e6eeab60946e61047ed858422badbda189a6f9e8.tar.bz2 mitmproxy-e6eeab60946e61047ed858422badbda189a6f9e8.zip |
Revamp how addons work
- Addons now nest, which means that addons can manage addons. This has a number
of salutary effects - the scripts addon no longer has to poke into the global
addons list, we no longer have to replace/remove/boot-outof parent addons when
we load scripts, and this paves the way for making our top-level tools into
addons themselves.
- All addon calls are now wrapped in a safe execution environment where
exceptions are caught, and output to stdout/stderr are intercepted and turned
into logs.
- We no longer support script arguments in sys.argv - creating an option
properly is the only way to pass arguments. This means that all scripts are
always directly controllable from interctive tooling, and that arguments are
type-checked.
For now, I've disabled testing of the har dump example - it needs to be moved
to the new argument handling, and become a class addon. I'll address that in a
separate patch.
Diffstat (limited to 'test/examples/test_examples.py')
-rw-r--r-- | test/examples/test_examples.py | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/test/examples/test_examples.py b/test/examples/test_examples.py index 46fdcd36..4b691df2 100644 --- a/test/examples/test_examples.py +++ b/test/examples/test_examples.py @@ -1,5 +1,3 @@ -import pytest - from mitmproxy import options from mitmproxy import contentviews from mitmproxy import proxy @@ -8,6 +6,7 @@ from mitmproxy.addons import script from mitmproxy.test import tflow from mitmproxy.test import tutils +from mitmproxy.test import taddons from mitmproxy.net.http import Headers from ..mitmproxy import tservers @@ -27,7 +26,7 @@ class RaiseMaster(master.Master): def tscript(cmd, args=""): o = options.Options() - cmd = example_dir.path(cmd) + " " + args + cmd = example_dir.path(cmd) m = RaiseMaster(o, proxy.DummyServer()) sc = script.Script(cmd) m.addons.add(sc) @@ -48,14 +47,18 @@ class TestScripts(tservers.MasterTest): assert any(b'tEST!' in val[0][1] for val in fmt) def test_iframe_injector(self): - with pytest.raises(ScriptError): - tscript("simple/modify_body_inject_iframe.py") - - m, sc = tscript("simple/modify_body_inject_iframe.py", "http://example.org/evil_iframe") - f = tflow.tflow(resp=tutils.tresp(content=b"<html><body>mitmproxy</body></html>")) - m.addons.handle_lifecycle("response", f) - content = f.response.content - assert b'iframe' in content and b'evil_iframe' in content + with taddons.context() as tctx: + sc = tctx.script(example_dir.path("simple/modify_body_inject_iframe.py")) + tctx.configure( + sc, + iframe = "http://example.org/evil_iframe" + ) + f = tflow.tflow( + resp=tutils.tresp(content=b"<html><body>mitmproxy</body></html>") + ) + tctx.master.addons.invoke_addon(sc, "response", f) + content = f.response.content + assert b'iframe' in content and b'evil_iframe' in content def test_modify_form(self): m, sc = tscript("simple/modify_form.py") @@ -81,12 +84,6 @@ class TestScripts(tservers.MasterTest): m.addons.handle_lifecycle("request", f) assert f.request.query["mitmproxy"] == "rocks" - def test_arguments(self): - m, sc = tscript("simple/script_arguments.py", "mitmproxy rocks") - f = tflow.tflow(resp=tutils.tresp(content=b"I <3 mitmproxy")) - m.addons.handle_lifecycle("response", f) - assert f.response.content == b"I <3 rocks" - def test_redirect_requests(self): m, sc = tscript("simple/redirect_requests.py") f = tflow.tflow(req=tutils.treq(host="example.org")) |