aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/addons/script.py13
-rw-r--r--test/mitmproxy/addons/test_script.py11
-rw-r--r--test/mitmproxy/data/addonscripts/configure.py21
3 files changed, 40 insertions, 5 deletions
diff --git a/mitmproxy/addons/script.py b/mitmproxy/addons/script.py
index 3b2568c9..b3cb0999 100644
--- a/mitmproxy/addons/script.py
+++ b/mitmproxy/addons/script.py
@@ -105,11 +105,14 @@ class Script:
# We're already running, so we have to explicitly register and
# configure the addon
ctx.master.addons.invoke_addon(self.ns, "running")
- ctx.master.addons.invoke_addon(
- self.ns,
- "configure",
- ctx.options.keys()
- )
+ try:
+ ctx.master.addons.invoke_addon(
+ self.ns,
+ "configure",
+ ctx.options.keys()
+ )
+ except exceptions.OptionsError as e:
+ script_error_handler(self.fullpath, e, msg=str(e))
async def watcher(self):
last_mtime = 0
diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py
index 05472d9a..61e19174 100644
--- a/test/mitmproxy/addons/test_script.py
+++ b/test/mitmproxy/addons/test_script.py
@@ -137,6 +137,17 @@ class TestScript:
assert await tctx.master.await_log("error.py")
@pytest.mark.asyncio
+ async def test_optionexceptions(self, tdata):
+ with taddons.context() as tctx:
+ sc = script.Script(
+ tdata.path("mitmproxy/data/addonscripts/configure.py"),
+ True,
+ )
+ tctx.master.addons.add(sc)
+ tctx.configure(sc)
+ assert await tctx.master.await_log("Options Error")
+
+ @pytest.mark.asyncio
async def test_addon(self, tdata):
with taddons.context() as tctx:
sc = script.Script(
diff --git a/test/mitmproxy/data/addonscripts/configure.py b/test/mitmproxy/data/addonscripts/configure.py
new file mode 100644
index 00000000..6f6ac06a
--- /dev/null
+++ b/test/mitmproxy/data/addonscripts/configure.py
@@ -0,0 +1,21 @@
+import typing
+
+from mitmproxy import exceptions
+
+
+class OptionAddon:
+ def load(self, loader):
+ loader.add_option(
+ name = "optionaddon",
+ typespec = typing.Optional[int],
+ default = None,
+ help = "Option Addon",
+ )
+
+ def configure(self, updates):
+ raise exceptions.OptionsError("Options Error")
+
+addons = [
+ OptionAddon()
+]
+