aboutsummaryrefslogtreecommitdiffstats
path: root/test/mitmproxy/addons/test_command_history.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/mitmproxy/addons/test_command_history.py')
-rw-r--r--test/mitmproxy/addons/test_command_history.py265
1 files changed, 265 insertions, 0 deletions
diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py
new file mode 100644
index 00000000..df20fba7
--- /dev/null
+++ b/test/mitmproxy/addons/test_command_history.py
@@ -0,0 +1,265 @@
+import os
+
+from mitmproxy.addons import command_history
+from mitmproxy.test import taddons
+
+
+class TestCommandHistory:
+ def test_load_from_file(self, tmpdir):
+ commands = ['cmd1', 'cmd2', 'cmd3']
+ with open(tmpdir.join('command_history'), 'w') as f:
+ f.write("\n".join(commands))
+
+ ch = command_history.CommandHistory()
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+ assert ch.history == commands
+
+ def test_add_command(self):
+ history = command_history.CommandHistory()
+
+ history.add_command('cmd1')
+ history.add_command('cmd2')
+
+ assert history.history == ['cmd1', 'cmd2']
+
+ history.add_command('')
+ assert history.history == ['cmd1', 'cmd2']
+
+ def test_get_next_and_prev(self, tmpdir):
+ ch = command_history.CommandHistory()
+
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+
+ ch.add_command('cmd1')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.add_command('cmd2')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.add_command('cmd3')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+
+ ch.add_command('cmd4')
+
+ assert ch.get_prev() == 'cmd4'
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_next() == 'cmd4'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.add_command('cmd5')
+ ch.add_command('cmd6')
+
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd6'
+ assert ch.get_prev() == 'cmd5'
+ assert ch.get_prev() == 'cmd4'
+ assert ch.get_next() == 'cmd5'
+ assert ch.get_prev() == 'cmd4'
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_next() == 'cmd4'
+ assert ch.get_next() == 'cmd5'
+ assert ch.get_next() == 'cmd6'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.clear_history()
+
+ def test_clear(self, tmpdir):
+ ch = command_history.CommandHistory()
+
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+ ch.add_command('cmd1')
+ ch.add_command('cmd2')
+ ch.clear_history()
+
+ saved_commands = ch.get_history()
+ assert saved_commands == []
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == ''
+ assert ch.get_prev() == ''
+
+ ch.clear_history()
+
+ def test_filter(self, tmpdir):
+ ch = command_history.CommandHistory()
+
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+
+ ch.add_command('cmd1')
+ ch.add_command('cmd2')
+ ch.add_command('abc')
+ ch.set_filter('c')
+
+ assert ch.get_next() == 'c'
+ assert ch.get_next() == 'c'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'c'
+ assert ch.get_next() == 'c'
+
+ ch.set_filter('')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'abc'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'abc'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.clear_history()
+
+ def test_multiple_instances(self, tmpdir):
+ ch = command_history.CommandHistory()
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+
+ instances = [
+ command_history.CommandHistory(),
+ command_history.CommandHistory(),
+ command_history.CommandHistory()
+ ]
+
+ for i in instances:
+ i.configure('command_history')
+ saved_commands = i.get_history()
+ assert saved_commands == []
+
+ instances[0].add_command('cmd1')
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd1']
+
+ # These instances haven't yet added a new command, so they haven't
+ # yet reloaded their commands from the command file.
+ # This is expected, because if the user is filtering a command on
+ # another window, we don't want to interfere with that
+ saved_commands = instances[1].get_history()
+ assert saved_commands == []
+ saved_commands = instances[2].get_history()
+ assert saved_commands == []
+
+ # Since the second instanced added a new command, its list of
+ # saved commands has been updated to have the commands from the
+ # first instance + its own commands
+ instances[1].add_command('cmd2')
+ saved_commands = instances[1].get_history()
+ assert saved_commands == ['cmd2']
+
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd1']
+
+ # Third instance is still empty as it has not yet ran any command
+ saved_commands = instances[2].get_history()
+ assert saved_commands == []
+
+ instances[2].add_command('cmd3')
+ saved_commands = instances[2].get_history()
+ assert saved_commands == ['cmd3']
+
+ instances[0].add_command('cmd4')
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd1', 'cmd4']
+
+ instances.append(command_history.CommandHistory())
+ instances[3].configure('command_history')
+ saved_commands = instances[3].get_history()
+ assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4']
+
+ instances[0].add_command('cmd_before_close')
+ instances.pop(0).done()
+
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd2']
+
+ instances[0].add_command('new_cmd')
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd2', 'new_cmd']
+
+ instances.pop(0).done()
+ instances.pop(0).done()
+ instances.pop(0).done()
+
+ _path = os.path.join(tctx.options.confdir, 'command_history')
+ lines = open(_path, 'r').readlines()
+ saved_commands = [cmd.strip() for cmd in lines]
+ assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd_before_close', 'new_cmd']
+
+ instances = [
+ command_history.CommandHistory(),
+ command_history.CommandHistory()
+ ]
+
+ for i in instances:
+ i.configure('command_history')
+ i.clear_history()
+ saved_commands = i.get_history()
+ assert saved_commands == []
+
+ instances[0].add_command('cmd1')
+ instances[0].add_command('cmd2')
+ instances[1].add_command('cmd3')
+ instances[1].add_command('cmd4')
+ instances[1].add_command('cmd5')
+
+ saved_commands = instances[1].get_history()
+ assert saved_commands == ['cmd3', 'cmd4', 'cmd5']
+
+ instances.pop().done()
+ instances.pop().done()
+
+ _path = os.path.join(tctx.options.confdir, 'command_history')
+ lines = open(_path, 'r').readlines()
+ saved_commands = [cmd.strip() for cmd in lines]
+ assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd5']