aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2017-12-17 18:46:00 +0100
committerMaximilian Hils <git@maximilianhils.com>2017-12-29 23:20:03 +0100
commit465044c3731ac0077387f1cbb39ae4f90d3f06c8 (patch)
tree110040af7f55f97865c1fa41ac54a8ac4bf324ba
parent5661b40942d0ddcac14a2eb3e8a9ff30b7eaca06 (diff)
downloadmitmproxy-465044c3731ac0077387f1cbb39ae4f90d3f06c8.tar.gz
mitmproxy-465044c3731ac0077387f1cbb39ae4f90d3f06c8.tar.bz2
mitmproxy-465044c3731ac0077387f1cbb39ae4f90d3f06c8.zip
test that defaultkeys are valid commands
-rw-r--r--mitmproxy/command.py16
-rw-r--r--test/mitmproxy/tools/console/test_defaultkeys.py23
2 files changed, 33 insertions, 6 deletions
diff --git a/mitmproxy/command.py b/mitmproxy/command.py
index e1e56d3a..7bb2bf8e 100644
--- a/mitmproxy/command.py
+++ b/mitmproxy/command.py
@@ -76,11 +76,7 @@ class Command:
ret = " -> " + ret
return "%s %s%s" % (self.path, params, ret)
- def call(self, args: typing.Sequence[str]) -> typing.Any:
- """
- Call the command with a list of arguments. At this point, all
- arguments are strings.
- """
+ def prepare_args(self, args: typing.Sequence[str]) -> typing.List[typing.Any]:
verify_arg_signature(self.func, list(args), {})
remainder = [] # type: typing.Sequence[str]
@@ -92,6 +88,14 @@ class Command:
for arg, paramtype in zip(args, self.paramtypes):
pargs.append(parsearg(self.manager, arg, paramtype))
pargs.extend(remainder)
+ return pargs
+
+ def call(self, args: typing.Sequence[str]) -> typing.Any:
+ """
+ Call the command with a list of arguments. At this point, all
+ arguments are strings.
+ """
+ pargs = self.prepare_args(args)
with self.manager.master.handlecontext():
ret = self.func(*pargs)
@@ -121,7 +125,7 @@ ParseResult = typing.NamedTuple(
class CommandManager(mitmproxy.types._CommandBase):
def __init__(self, master):
self.master = master
- self.commands = {}
+ self.commands = {} # type: typing.Dict[str, Command]
def collect_commands(self, addon):
for i in dir(addon):
diff --git a/test/mitmproxy/tools/console/test_defaultkeys.py b/test/mitmproxy/tools/console/test_defaultkeys.py
new file mode 100644
index 00000000..1f17c888
--- /dev/null
+++ b/test/mitmproxy/tools/console/test_defaultkeys.py
@@ -0,0 +1,23 @@
+from mitmproxy.test.tflow import tflow
+from mitmproxy.tools.console import defaultkeys
+from mitmproxy.tools.console import keymap
+from mitmproxy.tools.console import master
+from mitmproxy import command
+
+
+def test_commands_exist():
+ km = keymap.Keymap(None)
+ defaultkeys.map(km)
+ assert km.bindings
+ m = master.ConsoleMaster(None)
+ m.load_flow(tflow())
+
+ for binding in km.bindings:
+ cmd, *args = command.lexer(binding.command)
+ assert cmd in m.commands.commands
+
+ cmd_obj = m.commands.commands[cmd]
+ try:
+ cmd_obj.prepare_args(args)
+ except Exception as e:
+ raise ValueError("Invalid command: {}".format(binding.command)) from e