diff options
-rw-r--r-- | mitmproxy/addons/script.py | 26 | ||||
-rw-r--r-- | test/mitmproxy/addons/test_script.py | 8 |
2 files changed, 21 insertions, 13 deletions
diff --git a/mitmproxy/addons/script.py b/mitmproxy/addons/script.py index 706146b0..5c0fe2de 100644 --- a/mitmproxy/addons/script.py +++ b/mitmproxy/addons/script.py @@ -148,16 +148,26 @@ class ScriptLoader: @command.command("script.run") def script_run(self, flows: typing.Sequence[flow.Flow], path: mtypes.Path) -> None: """ - Run a script on the specified flows. The script is loaded with - default options, and all lifecycle events for each flow are - simulated. + Run a script on the specified flows. The script is configured with + the current options and all lifecycle events for each flow are + simulated. Note that the load event is not invoked. """ + if not os.path.isfile(path): + ctx.log.error('No such script: %s' % path) + return try: - s = Script(path, False) - for f in flows: - for evt, arg in eventsequence.iterate(f): - with addonmanager.safecall(): - ctx.master.addons.invoke_addon(s, evt, arg) + mod = load_script(path) + if mod: + ctx.master.addons.invoke_addon(mod, "running") + ctx.master.addons.invoke_addon( + mod, + "configure", + ctx.options.keys() + ) + for f in flows: + for evt, arg in eventsequence.iterate(f): + with addonmanager.safecall(): + ctx.master.addons.invoke_addon(mod, evt, arg) except exceptions.OptionsError as e: script_error_handler(path, e, msg=str(e)) diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py index 573b36e7..05472d9a 100644 --- a/test/mitmproxy/addons/test_script.py +++ b/test/mitmproxy/addons/test_script.py @@ -173,16 +173,14 @@ class TestCutTraceback: class TestScriptLoader: @pytest.mark.asyncio async def test_script_run(self, tdata): - rp = tdata.path( - "mitmproxy/data/addonscripts/recorder/recorder.py" - ) + rp = tdata.path("mitmproxy/data/addonscripts/recorder/recorder.py") sc = script.ScriptLoader() with taddons.context(sc) as tctx: sc.script_run([tflow.tflow(resp=True)], rp) await tctx.master.await_log("recorder response") debug = [i.msg for i in tctx.master.logs if i.level == "debug"] assert debug == [ - 'recorder load', 'recorder running', 'recorder configure', + 'recorder running', 'recorder configure', 'recorder requestheaders', 'recorder request', 'recorder responseheaders', 'recorder response' ] @@ -192,7 +190,7 @@ class TestScriptLoader: sc = script.ScriptLoader() with taddons.context(sc) as tctx: sc.script_run([tflow.tflow(resp=True)], "/") - assert await tctx.master.await_log("/: No such script") + assert await tctx.master.await_log("No such script") def test_simple(self, tdata): sc = script.ScriptLoader() |