diff options
Diffstat (limited to 'test/mitmproxy/console/test_master.py')
-rw-r--r-- | test/mitmproxy/console/test_master.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/test/mitmproxy/console/test_master.py b/test/mitmproxy/console/test_master.py new file mode 100644 index 00000000..33261c28 --- /dev/null +++ b/test/mitmproxy/console/test_master.py @@ -0,0 +1,122 @@ +import gc + +import netlib.tutils +from mitmproxy import console +from mitmproxy.console import common + +from .. import tutils, mastertest + + +class TestConsoleState: + + def test_flow(self): + """ + normal flow: + + connect -> request -> response + """ + c = console.master.ConsoleState() + f = self._add_request(c) + assert f in c.flows + assert c.get_focus() == (f, 0) + + def test_focus(self): + """ + normal flow: + + connect -> request -> response + """ + c = console.master.ConsoleState() + f = self._add_request(c) + + assert c.get_focus() == (f, 0) + assert c.get_from_pos(0) == (f, 0) + assert c.get_from_pos(1) == (None, None) + assert c.get_next(0) == (None, None) + + f2 = self._add_request(c) + assert c.get_focus() == (f, 0) + assert c.get_next(0) == (f2, 1) + assert c.get_prev(1) == (f, 0) + assert c.get_next(1) == (None, None) + + c.set_focus(0) + assert c.get_focus() == (f, 0) + c.set_focus(-1) + assert c.get_focus() == (f, 0) + c.set_focus(2) + assert c.get_focus() == (f2, 1) + + c.delete_flow(f2) + assert c.get_focus() == (f, 0) + c.delete_flow(f) + assert c.get_focus() == (None, None) + + def _add_request(self, state): + f = tutils.tflow() + return state.add_flow(f) + + def _add_response(self, state): + f = self._add_request(state) + f.response = netlib.tutils.tresp() + state.update_flow(f) + + def test_add_response(self): + c = console.master.ConsoleState() + f = self._add_request(c) + f.response = netlib.tutils.tresp() + c.focus = None + c.update_flow(f) + + def test_focus_view(self): + c = console.master.ConsoleState() + self._add_request(c) + self._add_response(c) + self._add_request(c) + self._add_response(c) + self._add_request(c) + self._add_response(c) + assert not c.set_limit("~s") + assert len(c.view) == 3 + assert c.focus == 0 + + def test_settings(self): + c = console.master.ConsoleState() + f = self._add_request(c) + c.add_flow_setting(f, "foo", "bar") + assert c.get_flow_setting(f, "foo") == "bar" + assert c.get_flow_setting(f, "oink") is None + assert c.get_flow_setting(f, "oink", "foo") == "foo" + assert len(c.flowsettings) == 1 + c.delete_flow(f) + del f + gc.collect() + assert len(c.flowsettings) == 0 + + +def test_format_keyvals(): + assert common.format_keyvals( + [ + ("aa", "bb"), + None, + ("cc", "dd"), + (None, "dd"), + (None, "dd"), + ] + ) + + +def test_options(): + assert console.master.Options(kill=True) + + +class TestMaster(mastertest.MasterTest): + def mkmaster(self, filt, **options): + o = console.master.Options(filtstr=filt, **options) + return console.master.ConsoleMaster(None, o) + + def test_basic(self): + m = self.mkmaster(None) + for i in (1, 2, 3): + self.dummy_cycle(m, 1, "") + assert len(m.state.flows) == i |