diff options
Diffstat (limited to 'test/mitmproxy/addons/test_command_history.py')
-rw-r--r-- | test/mitmproxy/addons/test_command_history.py | 265 |
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'] |