From 16b55f9476373347a3c2553e070497b383288360 Mon Sep 17 00:00:00 2001 From: Henrique Date: Fri, 22 Nov 2019 10:00:17 -0500 Subject: Implemented feature to save command history to a file. This allows users to reuse their commands the next time they open mitmproxy --- test/mitmproxy/tools/console/test_commander.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py index a77be043..5e11166e 100644 --- a/test/mitmproxy/tools/console/test_commander.py +++ b/test/mitmproxy/tools/console/test_commander.py @@ -97,6 +97,7 @@ class TestCommandEdit: def test_up_and_down(self): with taddons.context() as tctx: history = commander.CommandHistory(tctx.master, size=3) + history.clear_history() edit = commander.CommandEdit(tctx.master, '', history) buf = commander.CommandBuffer(tctx.master, 'cmd1') @@ -112,6 +113,7 @@ class TestCommandEdit: assert edit.get_edit_text() == 'cmd1' history = commander.CommandHistory(tctx.master, size=5) + history.clear_history() edit = commander.CommandEdit(tctx.master, '', history) edit.keypress(1, 'a') edit.keypress(1, 'b') @@ -139,6 +141,7 @@ class TestCommandHistory: def fill_history(self, commands): with taddons.context() as tctx: history = commander.CommandHistory(tctx.master, size=3) + history.clear_history() for c in commands: cbuf = commander.CommandBuffer(tctx.master, c) history.add_command(cbuf) @@ -183,7 +186,7 @@ class TestCommandHistory: for i in range(3): assert history.get_next().text == expected_items[i] # We are at the last item of the history - assert history.get_next() is None + assert history.get_next().text == expected_items[-1] def test_get_prev(self): commands = ["command1", "command2"] @@ -194,7 +197,7 @@ class TestCommandHistory: for i in range(3): assert history.get_prev().text == expected_items[i] # We are at the first item of the history - assert history.get_prev() is None + assert history.get_prev().text == expected_items[-1] class TestCommandBuffer: -- cgit v1.2.3 From 7b386d5393a68715e70a9ea6d2936c8b09104f86 Mon Sep 17 00:00:00 2001 From: Henrique Date: Sun, 24 Nov 2019 20:13:25 -0500 Subject: Fixed the logic according to some tests, added new tests --- test/mitmproxy/tools/console/test_commander.py | 412 +++++++++++++++---------- 1 file changed, 246 insertions(+), 166 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py index 5e11166e..b95fe707 100644 --- a/test/mitmproxy/tools/console/test_commander.py +++ b/test/mitmproxy/tools/console/test_commander.py @@ -1,9 +1,34 @@ +import os import pytest +import shutil +import uuid +from mitmproxy import options +from mitmproxy.addons import command_history from mitmproxy.test import taddons from mitmproxy.tools.console.commander import commander +@pytest.fixture(autouse=True) +def tctx(): + # This runs before each test + dir_id = str(uuid.uuid4()) + confdir = os.path.expanduser(f"~/.mitmproxy-test-suite-{dir_id}") + if not os.path.exists(confdir): + os.makedirs(confdir) + + opts = options.Options() + opts.set(*[f"confdir={confdir}"]) + tctx = taddons.context(options=opts) + ch = command_history.CommandHistory() + tctx.master.addons.add(ch) + + yield tctx + + # This runs after each test + shutil.rmtree(confdir) + + class TestListCompleter: def test_cycle(self): tests = [ @@ -23,181 +48,237 @@ class TestListCompleter: ["b", "ba", "bb", "b"] ], ] - for start, options, cycle in tests: - c = commander.ListCompleter(start, options) + for start, opts, cycle in tests: + c = commander.ListCompleter(start, opts) for expected in cycle: assert c.cycle() == expected class TestCommandEdit: - def test_open_command_bar(self): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - edit = commander.CommandEdit(tctx.master, '', history) - try: - edit.update() - except IndexError: - pytest.faied("Unexpected IndexError") + def test_open_command_bar(self, tctx): + edit = commander.CommandEdit(tctx.master, '') - def test_insert(self): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - edit = commander.CommandEdit(tctx.master, '', history) - edit.keypress(1, 'a') - assert edit.get_edit_text() == 'a' - - # Don't let users type a space before starting a command - # as a usability feature - history = commander.CommandHistory(tctx.master, size=3) - edit = commander.CommandEdit(tctx.master, '', history) - edit.keypress(1, ' ') - assert edit.get_edit_text() == '' + try: + edit.update() + except IndexError: + pytest.faied("Unexpected IndexError") - def test_backspace(self): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - edit = commander.CommandEdit(tctx.master, '', history) - edit.keypress(1, 'a') - edit.keypress(1, 'b') - assert edit.get_edit_text() == 'ab' - edit.keypress(1, 'backspace') - assert edit.get_edit_text() == 'a' + def test_insert(self, tctx): + edit = commander.CommandEdit(tctx.master, '') + edit.keypress(1, 'a') + assert edit.get_edit_text() == 'a' - def test_left(self): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - edit = commander.CommandEdit(tctx.master, '', history) - edit.keypress(1, 'a') - assert edit.cbuf.cursor == 1 - edit.keypress(1, 'left') - assert edit.cbuf.cursor == 0 + # Don't let users type a space before starting a command + # as a usability feature + edit = commander.CommandEdit(tctx.master, '') + edit.keypress(1, ' ') + assert edit.get_edit_text() == '' - # Do it again to make sure it won't go negative - edit.keypress(1, 'left') - assert edit.cbuf.cursor == 0 + def test_backspace(self, tctx): + edit = commander.CommandEdit(tctx.master, '') - def test_right(self): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - edit = commander.CommandEdit(tctx.master, '', history) - edit.keypress(1, 'a') - assert edit.cbuf.cursor == 1 - - # Make sure cursor won't go past the text - edit.keypress(1, 'right') - assert edit.cbuf.cursor == 1 - - # Make sure cursor goes left and then back right - edit.keypress(1, 'left') - assert edit.cbuf.cursor == 0 - edit.keypress(1, 'right') - assert edit.cbuf.cursor == 1 - - def test_up_and_down(self): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - history.clear_history() - edit = commander.CommandEdit(tctx.master, '', history) - - buf = commander.CommandBuffer(tctx.master, 'cmd1') - history.add_command(buf) - buf = commander.CommandBuffer(tctx.master, 'cmd2') - history.add_command(buf) - - edit.keypress(1, 'up') - assert edit.get_edit_text() == 'cmd2' - edit.keypress(1, 'up') - assert edit.get_edit_text() == 'cmd1' - edit.keypress(1, 'up') - assert edit.get_edit_text() == 'cmd1' - - history = commander.CommandHistory(tctx.master, size=5) - history.clear_history() - edit = commander.CommandEdit(tctx.master, '', history) - edit.keypress(1, 'a') - edit.keypress(1, 'b') - edit.keypress(1, 'c') - assert edit.get_edit_text() == 'abc' - edit.keypress(1, 'up') - assert edit.get_edit_text() == '' - edit.keypress(1, 'down') - assert edit.get_edit_text() == 'abc' - edit.keypress(1, 'down') - assert edit.get_edit_text() == 'abc' - - history = commander.CommandHistory(tctx.master, size=5) - edit = commander.CommandEdit(tctx.master, '', history) - buf = commander.CommandBuffer(tctx.master, 'cmd3') - history.add_command(buf) - edit.keypress(1, 'z') - edit.keypress(1, 'up') - assert edit.get_edit_text() == 'cmd3' - edit.keypress(1, 'down') - assert edit.get_edit_text() == 'z' - - -class TestCommandHistory: - def fill_history(self, commands): - with taddons.context() as tctx: - history = commander.CommandHistory(tctx.master, size=3) - history.clear_history() - for c in commands: - cbuf = commander.CommandBuffer(tctx.master, c) - history.add_command(cbuf) - return history, tctx.master - - def test_add_command(self): - commands = ["command1", "command2"] - history, tctx_master = self.fill_history(commands) - - saved_commands = [buf.text for buf in history.saved_commands] - assert saved_commands == [""] + commands - - # The history size is only 3. So, we forget the first - # one command, when adding fourth command - cbuf = commander.CommandBuffer(tctx_master, "command3") - history.add_command(cbuf) - saved_commands = [buf.text for buf in history.saved_commands] - assert saved_commands == commands + ["command3"] - - # Commands with the same text are not repeated in the history one by one - history.add_command(cbuf) - saved_commands = [buf.text for buf in history.saved_commands] - assert saved_commands == commands + ["command3"] - - # adding command in execution mode sets index at the beginning of the history - # and replace the last command buffer if it is empty or has the same text - cbuf = commander.CommandBuffer(tctx_master, "") - history.add_command(cbuf) - history.index = 0 - cbuf = commander.CommandBuffer(tctx_master, "command4") - history.add_command(cbuf, True) - assert history.index == history.last_index - saved_commands = [buf.text for buf in history.saved_commands] - assert saved_commands == ["command2", "command3", "command4"] - - def test_get_next(self): - commands = ["command1", "command2"] - history, tctx_master = self.fill_history(commands) - - history.index = -1 - expected_items = ["", "command1", "command2"] - for i in range(3): - assert history.get_next().text == expected_items[i] - # We are at the last item of the history - assert history.get_next().text == expected_items[-1] - - def test_get_prev(self): - commands = ["command1", "command2"] - history, tctx_master = self.fill_history(commands) - - expected_items = ["command2", "command1", ""] - history.index = history.last_index + 1 - for i in range(3): - assert history.get_prev().text == expected_items[i] - # We are at the first item of the history - assert history.get_prev().text == expected_items[-1] + edit.keypress(1, 'a') + edit.keypress(1, 'b') + assert edit.get_edit_text() == 'ab' + + edit.keypress(1, 'backspace') + assert edit.get_edit_text() == 'a' + + def test_left(self, tctx): + edit = commander.CommandEdit(tctx.master, '') + + edit.keypress(1, 'a') + assert edit.cbuf.cursor == 1 + + edit.keypress(1, 'left') + assert edit.cbuf.cursor == 0 + + # Do it again to make sure it won't go negative + edit.keypress(1, 'left') + assert edit.cbuf.cursor == 0 + + def test_right(self, tctx): + edit = commander.CommandEdit(tctx.master, '') + + edit.keypress(1, 'a') + assert edit.cbuf.cursor == 1 + + # Make sure cursor won't go past the text + edit.keypress(1, 'right') + assert edit.cbuf.cursor == 1 + + # Make sure cursor goes left and then back right + edit.keypress(1, 'left') + assert edit.cbuf.cursor == 0 + + edit.keypress(1, 'right') + assert edit.cbuf.cursor == 1 + + def test_up_and_down(self, tctx): + edit = commander.CommandEdit(tctx.master, '') + + tctx.master.commands.execute('command_history.clear') + tctx.master.commands.execute('command_history.add "cmd1"') + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit = commander.CommandEdit(tctx.master, '') + + tctx.master.commands.execute('command_history.clear') + tctx.master.commands.execute('command_history.add "cmd1"') + tctx.master.commands.execute('command_history.add "cmd2"') + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'a') + edit.keypress(1, 'b') + edit.keypress(1, 'c') + assert edit.get_edit_text() == 'abc' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'abc' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'abc' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'abc' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'abc' + + edit = commander.CommandEdit(tctx.master, '') + tctx.master.commands.execute('command_history.add "cmd3"') + + edit.keypress(1, 'z') + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'z' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'z' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'z' + + edit.keypress(1, 'backspace') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'c') + assert edit.get_edit_text() == 'c' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'backspace') + assert edit.get_edit_text() == '' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'up') + assert edit.get_edit_text() == 'cmd1' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd2' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == 'cmd3' + + edit.keypress(1, 'down') + assert edit.get_edit_text() == '' class TestCommandBuffer: @@ -258,8 +339,7 @@ class TestCommandBuffer: cb.cursor = len(cb.text) cb.cycle_completion() - ch = commander.CommandHistory(tctx.master, 30) - ce = commander.CommandEdit(tctx.master, "se", ch) + ce = commander.CommandEdit(tctx.master, "se") ce.keypress(1, 'tab') ce.update() ret = ce.cbuf.render() -- cgit v1.2.3 From 640bec24e5e056b8f5963b890d6764f434ce5b3c Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 10:23:51 -0500 Subject: Oops, forgot to add the tests for the CommandHistory addon --- test/mitmproxy/addons/test_command_history.py | 196 ++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 test/mitmproxy/addons/test_command_history.py (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py new file mode 100644 index 00000000..898692ec --- /dev/null +++ b/test/mitmproxy/addons/test_command_history.py @@ -0,0 +1,196 @@ +import os +import pytest +import shutil +import uuid + +from mitmproxy import options +from mitmproxy.addons import command_history +from mitmproxy.test import taddons + + +@pytest.fixture(autouse=True) +def tctx(): + # This runs before each test + dir_id = str(uuid.uuid4()) + confdir = os.path.expanduser(f"~/.mitmproxy-test-suite-{dir_id}") + if not os.path.exists(confdir): + os.makedirs(confdir) + + opts = options.Options() + opts.set(*[f"confdir={confdir}"]) + tctx = taddons.context(options=opts) + ch = command_history.CommandHistory() + tctx.master.addons.add(ch) + + yield tctx + + # This runs after each test + ch.command_history_file.close() # Makes windows happy + shutil.rmtree(confdir) + + +class TestCommandHistory: + def test_existing_command_history(self, tctx): + commands = ['cmd1', 'cmd2', 'cmd3'] + confdir = tctx.options.confdir + f = open(os.path.join(confdir, 'command_history'), 'w') + f.write("\n".join(commands)) + f.close() + + history = command_history.CommandHistory() + + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] + + def test_add_command(self, tctx): + history = command_history.CommandHistory(3) + + history.add_command('cmd1') + history.add_command('cmd2') + + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd1', 'cmd2'] + + history.add_command('') + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd1', 'cmd2'] + + # The history size is only 3. So, we forget the first + # one command, when adding fourth command + history.add_command('cmd3') + history.add_command('cmd4') + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd2', 'cmd3', 'cmd4'] + + history.add_command('') + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd2', 'cmd3', 'cmd4'] + + # Commands with the same text are not repeated in the history one by one + history.add_command('cmd3') + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd2', 'cmd4', 'cmd3'] + + history.add_command('cmd2') + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == ['cmd4', 'cmd3', 'cmd2'] + + def test_get_next_and_prev(self, tctx): + history = command_history.CommandHistory(5) + + history.add_command('cmd1') + + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_next() == '' + assert history.get_next() == '' + + history.add_command('cmd2') + + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == 'cmd2' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_next() == 'cmd2' + assert history.get_next() == '' + assert history.get_next() == '' + + history.add_command('cmd3') + + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == 'cmd3' + assert history.get_prev() == 'cmd2' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_next() == 'cmd2' + assert history.get_next() == 'cmd3' + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == 'cmd3' + assert history.get_prev() == 'cmd2' + + history.add_command('cmd4') + + assert history.get_prev() == 'cmd4' + assert history.get_prev() == 'cmd3' + assert history.get_prev() == 'cmd2' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_next() == 'cmd2' + assert history.get_next() == 'cmd3' + assert history.get_next() == 'cmd4' + assert history.get_next() == '' + assert history.get_next() == '' + + history.add_command('cmd5') + history.add_command('cmd6') + + assert history.get_next() == '' + assert history.get_prev() == 'cmd6' + assert history.get_prev() == 'cmd5' + assert history.get_prev() == 'cmd4' + assert history.get_next() == 'cmd5' + assert history.get_prev() == 'cmd4' + assert history.get_prev() == 'cmd3' + assert history.get_prev() == 'cmd2' + assert history.get_next() == 'cmd3' + assert history.get_prev() == 'cmd2' + assert history.get_prev() == 'cmd2' + assert history.get_next() == 'cmd3' + assert history.get_next() == 'cmd4' + assert history.get_next() == 'cmd5' + assert history.get_next() == 'cmd6' + assert history.get_next() == '' + assert history.get_next() == '' + + def test_clear(self, tctx): + history = command_history.CommandHistory(3) + + history.add_command('cmd1') + history.add_command('cmd2') + history.clear_history() + + saved_commands = [cmd for cmd in history.saved_commands] + assert saved_commands == [] + + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == '' + assert history.get_prev() == '' + + def test_filter(self, tctx): + history = command_history.CommandHistory(3) + + history.add_command('cmd1') + history.add_command('cmd2') + history.add_command('abc') + history.set_filter('c') + + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == 'c' + assert history.get_prev() == 'cmd2' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_next() == 'cmd2' + assert history.get_next() == 'c' + assert history.get_next() == '' + assert history.get_next() == '' + + history.set_filter('') + + assert history.get_next() == '' + assert history.get_next() == '' + assert history.get_prev() == 'abc' + assert history.get_prev() == 'cmd2' + assert history.get_prev() == 'cmd1' + assert history.get_prev() == 'cmd1' + assert history.get_next() == 'cmd2' + assert history.get_next() == 'abc' + assert history.get_next() == '' + assert history.get_next() == '' -- cgit v1.2.3 From ed7f0b4b39f622b13fce4d3c4ef154231fe07954 Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 10:24:46 -0500 Subject: Making windows happy --- test/mitmproxy/tools/console/test_commander.py | 1 + 1 file changed, 1 insertion(+) (limited to 'test') diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py index b95fe707..06e676c0 100644 --- a/test/mitmproxy/tools/console/test_commander.py +++ b/test/mitmproxy/tools/console/test_commander.py @@ -26,6 +26,7 @@ def tctx(): yield tctx # This runs after each test + ch.command_history_file.close() shutil.rmtree(confdir) -- cgit v1.2.3 From 1c8abaed78028f4a14044b06430ef86e7e36b6c3 Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 10:39:36 -0500 Subject: Make windows happy --- test/mitmproxy/addons/test_command_history.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py index 898692ec..847c273d 100644 --- a/test/mitmproxy/addons/test_command_history.py +++ b/test/mitmproxy/addons/test_command_history.py @@ -42,6 +42,8 @@ class TestCommandHistory: saved_commands = [cmd for cmd in history.saved_commands] assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] + history.command_history_file.close() + def test_add_command(self, tctx): history = command_history.CommandHistory(3) -- cgit v1.2.3 From 5b582a76a862b0ad31e048e1e5f3f66df09062bc Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 10:48:42 -0500 Subject: Make windows happy once again --- test/mitmproxy/addons/test_command_history.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py index 847c273d..405b8323 100644 --- a/test/mitmproxy/addons/test_command_history.py +++ b/test/mitmproxy/addons/test_command_history.py @@ -77,6 +77,8 @@ class TestCommandHistory: saved_commands = [cmd for cmd in history.saved_commands] assert saved_commands == ['cmd4', 'cmd3', 'cmd2'] + history.command_history_file.close() + def test_get_next_and_prev(self, tctx): history = command_history.CommandHistory(5) @@ -150,6 +152,8 @@ class TestCommandHistory: assert history.get_next() == '' assert history.get_next() == '' + history.command_history_file.close() + def test_clear(self, tctx): history = command_history.CommandHistory(3) @@ -165,6 +169,8 @@ class TestCommandHistory: assert history.get_prev() == '' assert history.get_prev() == '' + history.command_history_file.close() + def test_filter(self, tctx): history = command_history.CommandHistory(3) @@ -196,3 +202,5 @@ class TestCommandHistory: assert history.get_next() == 'abc' assert history.get_next() == '' assert history.get_next() == '' + + history.command_history_file.close() -- cgit v1.2.3 From 4464648c38021bb3fcbac6f978bf40e9636dad4c Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 13:08:09 -0500 Subject: Logic to handle multiple instances using CommandHistory. --- test/mitmproxy/addons/test_command_history.py | 82 +++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py index 405b8323..d22e1fb1 100644 --- a/test/mitmproxy/addons/test_command_history.py +++ b/test/mitmproxy/addons/test_command_history.py @@ -25,7 +25,7 @@ def tctx(): yield tctx # This runs after each test - ch.command_history_file.close() # Makes windows happy + ch.cleanup() shutil.rmtree(confdir) @@ -42,7 +42,7 @@ class TestCommandHistory: saved_commands = [cmd for cmd in history.saved_commands] assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] - history.command_history_file.close() + history.cleanup() def test_add_command(self, tctx): history = command_history.CommandHistory(3) @@ -77,7 +77,7 @@ class TestCommandHistory: saved_commands = [cmd for cmd in history.saved_commands] assert saved_commands == ['cmd4', 'cmd3', 'cmd2'] - history.command_history_file.close() + history.cleanup() def test_get_next_and_prev(self, tctx): history = command_history.CommandHistory(5) @@ -152,7 +152,7 @@ class TestCommandHistory: assert history.get_next() == '' assert history.get_next() == '' - history.command_history_file.close() + history.cleanup() def test_clear(self, tctx): history = command_history.CommandHistory(3) @@ -169,7 +169,7 @@ class TestCommandHistory: assert history.get_prev() == '' assert history.get_prev() == '' - history.command_history_file.close() + history.cleanup() def test_filter(self, tctx): history = command_history.CommandHistory(3) @@ -203,4 +203,74 @@ class TestCommandHistory: assert history.get_next() == '' assert history.get_next() == '' - history.command_history_file.close() + history.cleanup() + + def test_multiple_instances(self, tctx): + + instances = [ + command_history.CommandHistory(10), + command_history.CommandHistory(10), + command_history.CommandHistory(10) + ] + + for i in instances: + saved_commands = [cmd for cmd in i.saved_commands] + assert saved_commands == [] + + instances[0].add_command('cmd1') + saved_commands = [cmd for cmd in instances[0].saved_commands] + 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 = [cmd for cmd in instances[1].saved_commands] + assert saved_commands == [] + saved_commands = [cmd for cmd in instances[2].saved_commands] + 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 = [cmd for cmd in instances[1].saved_commands] + assert saved_commands == ['cmd1', 'cmd2'] + + saved_commands = [cmd for cmd in instances[0].saved_commands] + assert saved_commands == ['cmd1'] + + # Third instance is still empty as it has not yet ran any command + saved_commands = [cmd for cmd in instances[2].saved_commands] + assert saved_commands == [] + + instances[2].add_command('cmd3') + saved_commands = [cmd for cmd in instances[2].saved_commands] + assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] + + instances[0].add_command('cmd4') + saved_commands = [cmd for cmd in instances[0].saved_commands] + assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] + + instances.append(command_history.CommandHistory(10)) + saved_commands = [cmd for cmd in instances[3].saved_commands] + assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] + + instances[0].add_command('cmd_before_close') + instances.pop(0) + + saved_commands = [cmd for cmd in instances[0].saved_commands] + assert saved_commands == ['cmd1', 'cmd2'] + + instances[0].add_command('new_cmd') + saved_commands = [cmd for cmd in instances[0].saved_commands] + assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd_before_close', 'new_cmd'] + + instances.pop(0) + instances.pop(0) + instances.pop(0) + + _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'] -- cgit v1.2.3 From 68b016e180ec1475391f2e8389ae1c708692c499 Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 14:37:49 -0500 Subject: Addressing comments from review --- test/mitmproxy/addons/test_command_history.py | 48 +++++++++++++++++++++----- test/mitmproxy/tools/console/test_commander.py | 15 +++----- 2 files changed, 44 insertions(+), 19 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py index d22e1fb1..026ce53e 100644 --- a/test/mitmproxy/addons/test_command_history.py +++ b/test/mitmproxy/addons/test_command_history.py @@ -1,7 +1,5 @@ import os import pytest -import shutil -import uuid from mitmproxy import options from mitmproxy.addons import command_history @@ -9,24 +7,22 @@ from mitmproxy.test import taddons @pytest.fixture(autouse=True) -def tctx(): +def tctx(tmpdir): # This runs before each test - dir_id = str(uuid.uuid4()) - confdir = os.path.expanduser(f"~/.mitmproxy-test-suite-{dir_id}") - if not os.path.exists(confdir): - os.makedirs(confdir) + dir_name = tmpdir.mkdir('mitmproxy').dirname + confdir = dir_name opts = options.Options() opts.set(*[f"confdir={confdir}"]) tctx = taddons.context(options=opts) ch = command_history.CommandHistory() tctx.master.addons.add(ch) + ch.configure([]) yield tctx # This runs after each test ch.cleanup() - shutil.rmtree(confdir) class TestCommandHistory: @@ -38,6 +34,7 @@ class TestCommandHistory: f.close() history = command_history.CommandHistory() + history.configure([]) saved_commands = [cmd for cmd in history.saved_commands] assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] @@ -46,6 +43,7 @@ class TestCommandHistory: def test_add_command(self, tctx): history = command_history.CommandHistory(3) + history.configure([]) history.add_command('cmd1') history.add_command('cmd2') @@ -81,6 +79,7 @@ class TestCommandHistory: def test_get_next_and_prev(self, tctx): history = command_history.CommandHistory(5) + history.configure([]) history.add_command('cmd1') @@ -156,6 +155,7 @@ class TestCommandHistory: def test_clear(self, tctx): history = command_history.CommandHistory(3) + history.configure([]) history.add_command('cmd1') history.add_command('cmd2') @@ -173,6 +173,7 @@ class TestCommandHistory: def test_filter(self, tctx): history = command_history.CommandHistory(3) + history.configure([]) history.add_command('cmd1') history.add_command('cmd2') @@ -206,7 +207,6 @@ class TestCommandHistory: history.cleanup() def test_multiple_instances(self, tctx): - instances = [ command_history.CommandHistory(10), command_history.CommandHistory(10), @@ -214,6 +214,7 @@ class TestCommandHistory: ] for i in instances: + i.configure([]) saved_commands = [cmd for cmd in i.saved_commands] assert saved_commands == [] @@ -253,6 +254,7 @@ class TestCommandHistory: assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] instances.append(command_history.CommandHistory(10)) + instances[3].configure([]) saved_commands = [cmd for cmd in instances[3].saved_commands] assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] @@ -274,3 +276,31 @@ class TestCommandHistory: 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(10), + command_history.CommandHistory(10) + ] + + for i in instances: + i.configure([]) + i.clear_history() + saved_commands = [cmd for cmd in i.saved_commands] + 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 = [cmd for cmd in instances[1].saved_commands] + assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd5'] + + instances.pop() + instances.pop() + + _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'] diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py index 06e676c0..4fa10eb8 100644 --- a/test/mitmproxy/tools/console/test_commander.py +++ b/test/mitmproxy/tools/console/test_commander.py @@ -1,7 +1,4 @@ -import os import pytest -import shutil -import uuid from mitmproxy import options from mitmproxy.addons import command_history @@ -10,24 +7,22 @@ from mitmproxy.tools.console.commander import commander @pytest.fixture(autouse=True) -def tctx(): +def tctx(tmpdir): # This runs before each test - dir_id = str(uuid.uuid4()) - confdir = os.path.expanduser(f"~/.mitmproxy-test-suite-{dir_id}") - if not os.path.exists(confdir): - os.makedirs(confdir) + dir_name = tmpdir.mkdir('mitmproxy').dirname + confdir = dir_name opts = options.Options() opts.set(*[f"confdir={confdir}"]) tctx = taddons.context(options=opts) ch = command_history.CommandHistory() tctx.master.addons.add(ch) + ch.configure([]) yield tctx # This runs after each test - ch.command_history_file.close() - shutil.rmtree(confdir) + ch.cleanup() class TestListCompleter: -- cgit v1.2.3 From 819d5e631757f33a751eab8491b39eaacdb0c0c9 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 26 Nov 2019 02:43:09 +0100 Subject: command history: start adjusting tests --- test/mitmproxy/addons/test_command_history.py | 103 +++++++------------------ test/mitmproxy/tools/console/test_commander.py | 12 +-- 2 files changed, 32 insertions(+), 83 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py index 026ce53e..e38b4061 100644 --- a/test/mitmproxy/addons/test_command_history.py +++ b/test/mitmproxy/addons/test_command_history.py @@ -1,81 +1,30 @@ import os -import pytest -from mitmproxy import options from mitmproxy.addons import command_history from mitmproxy.test import taddons -@pytest.fixture(autouse=True) -def tctx(tmpdir): - # This runs before each test - dir_name = tmpdir.mkdir('mitmproxy').dirname - confdir = dir_name - - opts = options.Options() - opts.set(*[f"confdir={confdir}"]) - tctx = taddons.context(options=opts) - ch = command_history.CommandHistory() - tctx.master.addons.add(ch) - ch.configure([]) - - yield tctx - - # This runs after each test - ch.cleanup() - - class TestCommandHistory: - def test_existing_command_history(self, tctx): + def test_load_from_file(self, tmpdir): commands = ['cmd1', 'cmd2', 'cmd3'] - confdir = tctx.options.confdir - f = open(os.path.join(confdir, 'command_history'), 'w') - f.write("\n".join(commands)) - f.close() - - history = command_history.CommandHistory() - history.configure([]) - - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] + with open(tmpdir.join('command_history'), 'w') as f: + f.write("\n".join(commands)) - history.cleanup() + ch = command_history.CommandHistory() + with taddons.context(ch) as tctx: + tctx.options.confdir = str(tmpdir) + assert ch.history == commands - def test_add_command(self, tctx): - history = command_history.CommandHistory(3) - history.configure([]) + def test_add_command(self): + history = command_history.CommandHistory() history.add_command('cmd1') history.add_command('cmd2') - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd1', 'cmd2'] - - history.add_command('') - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd1', 'cmd2'] - - # The history size is only 3. So, we forget the first - # one command, when adding fourth command - history.add_command('cmd3') - history.add_command('cmd4') - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd2', 'cmd3', 'cmd4'] + assert history.history == ['cmd1', 'cmd2'] history.add_command('') - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd2', 'cmd3', 'cmd4'] - - # Commands with the same text are not repeated in the history one by one - history.add_command('cmd3') - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd2', 'cmd4', 'cmd3'] - - history.add_command('cmd2') - saved_commands = [cmd for cmd in history.saved_commands] - assert saved_commands == ['cmd4', 'cmd3', 'cmd2'] - - history.cleanup() + assert history.history == ['cmd1', 'cmd2'] def test_get_next_and_prev(self, tctx): history = command_history.CommandHistory(5) @@ -161,7 +110,7 @@ class TestCommandHistory: history.add_command('cmd2') history.clear_history() - saved_commands = [cmd for cmd in history.saved_commands] + saved_commands = [cmd for cmd in history.history] assert saved_commands == [] assert history.get_next() == '' @@ -215,57 +164,57 @@ class TestCommandHistory: for i in instances: i.configure([]) - saved_commands = [cmd for cmd in i.saved_commands] + saved_commands = [cmd for cmd in i.history] assert saved_commands == [] instances[0].add_command('cmd1') - saved_commands = [cmd for cmd in instances[0].saved_commands] + saved_commands = [cmd for cmd in instances[0].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 = [cmd for cmd in instances[1].saved_commands] + saved_commands = [cmd for cmd in instances[1].history] assert saved_commands == [] - saved_commands = [cmd for cmd in instances[2].saved_commands] + saved_commands = [cmd for cmd in instances[2].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 = [cmd for cmd in instances[1].saved_commands] + saved_commands = [cmd for cmd in instances[1].history] assert saved_commands == ['cmd1', 'cmd2'] - saved_commands = [cmd for cmd in instances[0].saved_commands] + saved_commands = [cmd for cmd in instances[0].history] assert saved_commands == ['cmd1'] # Third instance is still empty as it has not yet ran any command - saved_commands = [cmd for cmd in instances[2].saved_commands] + saved_commands = [cmd for cmd in instances[2].history] assert saved_commands == [] instances[2].add_command('cmd3') - saved_commands = [cmd for cmd in instances[2].saved_commands] + saved_commands = [cmd for cmd in instances[2].history] assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] instances[0].add_command('cmd4') - saved_commands = [cmd for cmd in instances[0].saved_commands] + saved_commands = [cmd for cmd in instances[0].history] assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] instances.append(command_history.CommandHistory(10)) instances[3].configure([]) - saved_commands = [cmd for cmd in instances[3].saved_commands] + saved_commands = [cmd for cmd in instances[3].history] assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] instances[0].add_command('cmd_before_close') instances.pop(0) - saved_commands = [cmd for cmd in instances[0].saved_commands] + saved_commands = [cmd for cmd in instances[0].history] assert saved_commands == ['cmd1', 'cmd2'] instances[0].add_command('new_cmd') - saved_commands = [cmd for cmd in instances[0].saved_commands] + saved_commands = [cmd for cmd in instances[0].history] assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd_before_close', 'new_cmd'] instances.pop(0) @@ -285,7 +234,7 @@ class TestCommandHistory: for i in instances: i.configure([]) i.clear_history() - saved_commands = [cmd for cmd in i.saved_commands] + saved_commands = [cmd for cmd in i.history] assert saved_commands == [] instances[0].add_command('cmd1') @@ -294,7 +243,7 @@ class TestCommandHistory: instances[1].add_command('cmd4') instances[1].add_command('cmd5') - saved_commands = [cmd for cmd in instances[1].saved_commands] + saved_commands = [cmd for cmd in instances[1].history] assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd5'] instances.pop() diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py index 4fa10eb8..aa859092 100644 --- a/test/mitmproxy/tools/console/test_commander.py +++ b/test/mitmproxy/tools/console/test_commander.py @@ -114,8 +114,8 @@ class TestCommandEdit: def test_up_and_down(self, tctx): edit = commander.CommandEdit(tctx.master, '') - tctx.master.commands.execute('command_history.clear') - tctx.master.commands.execute('command_history.add "cmd1"') + tctx.master.commands.execute('commands.history.clear') + tctx.master.commands.execute('commands.history.add "cmd1"') edit.keypress(1, 'up') assert edit.get_edit_text() == 'cmd1' @@ -131,9 +131,9 @@ class TestCommandEdit: edit = commander.CommandEdit(tctx.master, '') - tctx.master.commands.execute('command_history.clear') - tctx.master.commands.execute('command_history.add "cmd1"') - tctx.master.commands.execute('command_history.add "cmd2"') + tctx.master.commands.execute('commands.history.clear') + tctx.master.commands.execute('commands.history.add "cmd1"') + tctx.master.commands.execute('commands.history.add "cmd2"') edit.keypress(1, 'up') assert edit.get_edit_text() == 'cmd2' @@ -168,7 +168,7 @@ class TestCommandEdit: assert edit.get_edit_text() == 'abc' edit = commander.CommandEdit(tctx.master, '') - tctx.master.commands.execute('command_history.add "cmd3"') + tctx.master.commands.execute('commands.history.add "cmd3"') edit.keypress(1, 'z') edit.keypress(1, 'up') -- cgit v1.2.3 From 8eb173b44e6c9fe093e58428dc6dd8d812b80318 Mon Sep 17 00:00:00 2001 From: Henrique Date: Wed, 27 Nov 2019 09:21:30 -0500 Subject: Fixed small bugs on command_history and tests --- test/mitmproxy/addons/test_command_history.py | 320 +++++++++++++------------- 1 file changed, 165 insertions(+), 155 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py index e38b4061..df20fba7 100644 --- a/test/mitmproxy/addons/test_command_history.py +++ b/test/mitmproxy/addons/test_command_history.py @@ -26,200 +26,210 @@ class TestCommandHistory: history.add_command('') assert history.history == ['cmd1', 'cmd2'] - def test_get_next_and_prev(self, tctx): - history = command_history.CommandHistory(5) - history.configure([]) + def test_get_next_and_prev(self, tmpdir): + ch = command_history.CommandHistory() - history.add_command('cmd1') + with taddons.context(ch) as tctx: + tctx.options.confdir = str(tmpdir) - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_next() == '' - assert history.get_next() == '' + 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() - history.add_command('cmd2') + with taddons.context(ch) as tctx: + tctx.options.confdir = str(tmpdir) + ch.add_command('cmd1') + ch.add_command('cmd2') + ch.clear_history() - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == 'cmd2' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_next() == 'cmd2' - assert history.get_next() == '' - assert history.get_next() == '' - - history.add_command('cmd3') - - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == 'cmd3' - assert history.get_prev() == 'cmd2' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_next() == 'cmd2' - assert history.get_next() == 'cmd3' - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == 'cmd3' - assert history.get_prev() == 'cmd2' - - history.add_command('cmd4') - - assert history.get_prev() == 'cmd4' - assert history.get_prev() == 'cmd3' - assert history.get_prev() == 'cmd2' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_next() == 'cmd2' - assert history.get_next() == 'cmd3' - assert history.get_next() == 'cmd4' - assert history.get_next() == '' - assert history.get_next() == '' - - history.add_command('cmd5') - history.add_command('cmd6') - - assert history.get_next() == '' - assert history.get_prev() == 'cmd6' - assert history.get_prev() == 'cmd5' - assert history.get_prev() == 'cmd4' - assert history.get_next() == 'cmd5' - assert history.get_prev() == 'cmd4' - assert history.get_prev() == 'cmd3' - assert history.get_prev() == 'cmd2' - assert history.get_next() == 'cmd3' - assert history.get_prev() == 'cmd2' - assert history.get_prev() == 'cmd2' - assert history.get_next() == 'cmd3' - assert history.get_next() == 'cmd4' - assert history.get_next() == 'cmd5' - assert history.get_next() == 'cmd6' - assert history.get_next() == '' - assert history.get_next() == '' - - history.cleanup() - - def test_clear(self, tctx): - history = command_history.CommandHistory(3) - history.configure([]) + saved_commands = ch.get_history() + assert saved_commands == [] - history.add_command('cmd1') - history.add_command('cmd2') - history.clear_history() + assert ch.get_next() == '' + assert ch.get_next() == '' + assert ch.get_prev() == '' + assert ch.get_prev() == '' - saved_commands = [cmd for cmd in history.history] - assert saved_commands == [] + ch.clear_history() - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == '' - assert history.get_prev() == '' + def test_filter(self, tmpdir): + ch = command_history.CommandHistory() - history.cleanup() + with taddons.context(ch) as tctx: + tctx.options.confdir = str(tmpdir) - def test_filter(self, tctx): - history = command_history.CommandHistory(3) - history.configure([]) + 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) - history.add_command('cmd1') - history.add_command('cmd2') - history.add_command('abc') - history.set_filter('c') - - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == 'c' - assert history.get_prev() == 'cmd2' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_next() == 'cmd2' - assert history.get_next() == 'c' - assert history.get_next() == '' - assert history.get_next() == '' - - history.set_filter('') - - assert history.get_next() == '' - assert history.get_next() == '' - assert history.get_prev() == 'abc' - assert history.get_prev() == 'cmd2' - assert history.get_prev() == 'cmd1' - assert history.get_prev() == 'cmd1' - assert history.get_next() == 'cmd2' - assert history.get_next() == 'abc' - assert history.get_next() == '' - assert history.get_next() == '' - - history.cleanup() - - def test_multiple_instances(self, tctx): instances = [ - command_history.CommandHistory(10), - command_history.CommandHistory(10), - command_history.CommandHistory(10) + command_history.CommandHistory(), + command_history.CommandHistory(), + command_history.CommandHistory() ] for i in instances: - i.configure([]) - saved_commands = [cmd for cmd in i.history] + i.configure('command_history') + saved_commands = i.get_history() assert saved_commands == [] instances[0].add_command('cmd1') - saved_commands = [cmd for cmd in instances[0].history] + 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 = [cmd for cmd in instances[1].history] + saved_commands = instances[1].get_history() assert saved_commands == [] - saved_commands = [cmd for cmd in instances[2].history] + 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 = [cmd for cmd in instances[1].history] - assert saved_commands == ['cmd1', 'cmd2'] + saved_commands = instances[1].get_history() + assert saved_commands == ['cmd2'] - saved_commands = [cmd for cmd in instances[0].history] + 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 = [cmd for cmd in instances[2].history] + saved_commands = instances[2].get_history() assert saved_commands == [] instances[2].add_command('cmd3') - saved_commands = [cmd for cmd in instances[2].history] - assert saved_commands == ['cmd1', 'cmd2', 'cmd3'] + saved_commands = instances[2].get_history() + assert saved_commands == ['cmd3'] instances[0].add_command('cmd4') - saved_commands = [cmd for cmd in instances[0].history] - assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4'] + saved_commands = instances[0].get_history() + assert saved_commands == ['cmd1', 'cmd4'] - instances.append(command_history.CommandHistory(10)) - instances[3].configure([]) - saved_commands = [cmd for cmd in instances[3].history] + 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) + instances.pop(0).done() - saved_commands = [cmd for cmd in instances[0].history] - assert saved_commands == ['cmd1', 'cmd2'] + saved_commands = instances[0].get_history() + assert saved_commands == ['cmd2'] instances[0].add_command('new_cmd') - saved_commands = [cmd for cmd in instances[0].history] - assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd_before_close', 'new_cmd'] + saved_commands = instances[0].get_history() + assert saved_commands == ['cmd2', 'new_cmd'] - instances.pop(0) - instances.pop(0) - instances.pop(0) + 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() @@ -227,14 +237,14 @@ class TestCommandHistory: assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd_before_close', 'new_cmd'] instances = [ - command_history.CommandHistory(10), - command_history.CommandHistory(10) + command_history.CommandHistory(), + command_history.CommandHistory() ] for i in instances: - i.configure([]) + i.configure('command_history') i.clear_history() - saved_commands = [cmd for cmd in i.history] + saved_commands = i.get_history() assert saved_commands == [] instances[0].add_command('cmd1') @@ -243,11 +253,11 @@ class TestCommandHistory: instances[1].add_command('cmd4') instances[1].add_command('cmd5') - saved_commands = [cmd for cmd in instances[1].history] - assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd5'] + saved_commands = instances[1].get_history() + assert saved_commands == ['cmd3', 'cmd4', 'cmd5'] - instances.pop() - instances.pop() + instances.pop().done() + instances.pop().done() _path = os.path.join(tctx.options.confdir, 'command_history') lines = open(_path, 'r').readlines() -- cgit v1.2.3 From 2177eb9e35a252f20ea5bc2d5a9abee29b7601ff Mon Sep 17 00:00:00 2001 From: Henrique Date: Wed, 27 Nov 2019 09:27:38 -0500 Subject: Fixed small issue --- test/mitmproxy/tools/console/test_commander.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py index aa859092..839f81e5 100644 --- a/test/mitmproxy/tools/console/test_commander.py +++ b/test/mitmproxy/tools/console/test_commander.py @@ -17,12 +17,12 @@ def tctx(tmpdir): tctx = taddons.context(options=opts) ch = command_history.CommandHistory() tctx.master.addons.add(ch) - ch.configure([]) + ch.configure('command_history') yield tctx # This runs after each test - ch.cleanup() + ch.clear_history() class TestListCompleter: -- cgit v1.2.3