From b4d33aaebf5fa78736b5d5f6864f672ccd08e716 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 2 Dec 2016 16:15:14 +1300 Subject: options: save defaults, add .reset() to restore defaults Use .reset() in console app to clear options. --- test/mitmproxy/test_optmanager.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 3c845707..47e40d98 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -12,6 +12,43 @@ class TO(optmanager.OptManager): super().__init__() +class TD(optmanager.OptManager): + def __init__(self, one="done", two="dtwo", three="error"): + self.one = one + self.two = two + self.three = three + super().__init__() + + +class TD2(TD): + def __init__(self, *, three="dthree", four="dfour", **kwargs): + self.three = three + self.four = four + super().__init__(**kwargs) + + +def test_defaults(): + o = TD2() + assert o._defaults == { + "one": "done", + "two": "dtwo", + "three": "dthree", + "four": "dfour", + } + newvals = dict( + one="xone", + two="xtwo", + three="xthree", + four="xfour", + ) + o.update(**newvals) + for k, v in newvals.items(): + assert v == o.get(k) + o.reset() + for k, v in o._defaults.items(): + assert v == o.get(k) + + def test_options(): o = TO(two="three") assert o.keys() == set(["one", "two"]) -- cgit v1.2.3 From 297493801ded90ee5b9717115fb2fa25bac43d22 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 3 Dec 2016 09:00:55 +1300 Subject: Clean up dump tests - Remove tests that redundantly test addon funtionality that we've already tested more comprehensively elsewhere. - Extend to 100% coverage for tools/dump.py --- test/mitmproxy/test_dump.py | 163 -------------------------------------- test/mitmproxy/test_tools_dump.py | 38 +++++++++ 2 files changed, 38 insertions(+), 163 deletions(-) delete mode 100644 test/mitmproxy/test_dump.py create mode 100644 test/mitmproxy/test_tools_dump.py (limited to 'test') diff --git a/test/mitmproxy/test_dump.py b/test/mitmproxy/test_dump.py deleted file mode 100644 index c6b15c84..00000000 --- a/test/mitmproxy/test_dump.py +++ /dev/null @@ -1,163 +0,0 @@ -from mitmproxy.test import tflow -import os -import io - -from mitmproxy.tools import dump -from mitmproxy import exceptions -from mitmproxy import proxy -from mitmproxy.test import tutils -from . import mastertest - - -class TestDumpMaster(mastertest.MasterTest): - def dummy_cycle(self, master, n, content): - mastertest.MasterTest.dummy_cycle(self, master, n, content) - return master.options.tfile.getvalue() - - def mkmaster(self, flt, **options): - if "verbosity" not in options: - options["verbosity"] = 0 - if "flow_detail" not in options: - options["flow_detail"] = 0 - o = dump.Options(filtstr=flt, tfile=io.StringIO(), **options) - return dump.DumpMaster(o, proxy.DummyServer()) - - def test_basic(self): - for i in (1, 2, 3): - assert "GET" in self.dummy_cycle( - self.mkmaster("~s", flow_detail=i), - 1, - b"" - ) - assert "GET" in self.dummy_cycle( - self.mkmaster("~s", flow_detail=i), - 1, - b"\x00\x00\x00" - ) - assert "GET" in self.dummy_cycle( - self.mkmaster("~s", flow_detail=i), - 1, - b"ascii" - ) - - def test_error(self): - o = dump.Options( - tfile=io.StringIO(), - flow_detail=1 - ) - m = dump.DumpMaster(o, proxy.DummyServer()) - f = tflow.tflow(err=True) - m.error(f) - assert "error" in o.tfile.getvalue() - - def test_replay(self): - o = dump.Options(http2=False, server_replay=["nonexistent"], replay_kill_extra=True) - tutils.raises(exceptions.OptionsError, dump.DumpMaster, o, proxy.DummyServer()) - - with tutils.tmpdir() as t: - p = os.path.join(t, "rep") - self.flowfile(p) - - o = dump.Options(http2=False, server_replay=[p], replay_kill_extra=True) - o.verbosity = 0 - o.flow_detail = 0 - m = dump.DumpMaster(o, proxy.DummyServer()) - - self.cycle(m, b"content") - self.cycle(m, b"content") - - o = dump.Options(http2=False, server_replay=[p], replay_kill_extra=False) - o.verbosity = 0 - o.flow_detail = 0 - m = dump.DumpMaster(o, proxy.DummyServer()) - self.cycle(m, b"nonexistent") - - o = dump.Options(http2=False, client_replay=[p], replay_kill_extra=False) - o.verbosity = 0 - o.flow_detail = 0 - m = dump.DumpMaster(o, proxy.DummyServer()) - - def test_read(self): - with tutils.tmpdir() as t: - p = os.path.join(t, "read") - self.flowfile(p) - assert "GET" in self.dummy_cycle( - self.mkmaster(None, flow_detail=1, rfile=p), - 1, b"", - ) - tutils.raises( - dump.DumpError, - self.mkmaster, None, verbosity=1, rfile="/nonexistent" - ) - tutils.raises( - dump.DumpError, - self.mkmaster, None, verbosity=1, rfile="test_dump.py" - ) - - def test_options(self): - o = dump.Options(verbosity = 2) - assert o.verbosity == 2 - - def test_filter(self): - assert "GET" not in self.dummy_cycle( - self.mkmaster("~u foo", verbosity=1), 1, b"" - ) - - def test_replacements(self): - o = dump.Options( - replacements=[(".*", "content", "foo")], - tfile = io.StringIO(), - ) - o.verbosity = 0 - o.flow_detail = 0 - m = dump.DumpMaster(o, proxy.DummyServer()) - f = self.cycle(m, b"content") - assert f.request.content == b"foo" - - def test_setheader(self): - o = dump.Options( - setheaders=[(".*", "one", "two")], - tfile=io.StringIO() - ) - o.verbosity = 0 - o.flow_detail = 0 - m = dump.DumpMaster(o, proxy.DummyServer()) - f = self.cycle(m, b"content") - assert f.request.headers["one"] == "two" - - def test_script(self): - ret = self.dummy_cycle( - self.mkmaster( - None, - scripts=[tutils.test_data.path("mitmproxy/data/scripts/all.py")], - verbosity=2 - ), - 1, b"", - ) - assert "XCLIENTCONNECT" in ret - assert "XSERVERCONNECT" in ret - assert "XREQUEST" in ret - assert "XRESPONSE" in ret - assert "XCLIENTDISCONNECT" in ret - tutils.raises( - exceptions.AddonError, - self.mkmaster, - None, scripts=["nonexistent"] - ) - tutils.raises( - exceptions.AddonError, - self.mkmaster, - None, scripts=["starterr.py"] - ) - - def test_stickycookie(self): - self.dummy_cycle( - self.mkmaster(None, stickycookie = ".*"), - 1, b"" - ) - - def test_stickyauth(self): - self.dummy_cycle( - self.mkmaster(None, stickyauth = ".*"), - 1, b"" - ) diff --git a/test/mitmproxy/test_tools_dump.py b/test/mitmproxy/test_tools_dump.py new file mode 100644 index 00000000..1488f33b --- /dev/null +++ b/test/mitmproxy/test_tools_dump.py @@ -0,0 +1,38 @@ +import os + +from mitmproxy.tools import dump +from mitmproxy import proxy +from mitmproxy.test import tutils +from mitmproxy import log +from mitmproxy import controller +from . import mastertest + + +class TestDumpMaster(mastertest.MasterTest): + def mkmaster(self, flt, **options): + o = dump.Options(filtstr=flt, verbosity=-1, flow_detail=0, **options) + return dump.DumpMaster(o, proxy.DummyServer()) + + def test_read(self): + with tutils.tmpdir() as t: + p = os.path.join(t, "read") + self.flowfile(p) + self.dummy_cycle( + self.mkmaster(None, rfile=p), + 1, b"", + ) + tutils.raises( + dump.DumpError, + self.mkmaster, None, rfile="/nonexistent" + ) + tutils.raises( + dump.DumpError, + self.mkmaster, None, rfile="test_dump.py" + ) + + def test_has_error(self): + m = self.mkmaster(None) + ent = log.LogEntry("foo", "error") + ent.reply = controller.DummyReply() + m.log(ent) + assert m.has_errored -- cgit v1.2.3 From b231836c70a68daa6016537e5ec18ed7a7cc3b1a Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 3 Dec 2016 09:20:27 +1300 Subject: Get rid of tfile testing option It's weird, it's ugly, it's getting in the way of my options refactoring, and it must therefore die. --- test/mitmproxy/addons/test_dumper.py | 45 ++++++++++++++++------------------- test/mitmproxy/addons/test_termlog.py | 4 ++-- 2 files changed, 22 insertions(+), 27 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_dumper.py b/test/mitmproxy/addons/test_dumper.py index 0d61f800..f87df329 100644 --- a/test/mitmproxy/addons/test_dumper.py +++ b/test/mitmproxy/addons/test_dumper.py @@ -28,43 +28,40 @@ def test_configure(): def test_simple(): - d = dumper.Dumper() + sio = io.StringIO() + d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - sio = io.StringIO() - ctx.configure(d, tfile = sio, flow_detail = 0) + ctx.configure(d, flow_detail = 0) d.response(tflow.tflow(resp=True)) assert not sio.getvalue() sio.truncate(0) - ctx.configure(d, tfile = sio, flow_detail = 1) + ctx.configure(d, flow_detail = 1) d.response(tflow.tflow(resp=True)) assert sio.getvalue() sio.truncate(0) - ctx.configure(d, tfile = sio, flow_detail = 1) + ctx.configure(d, flow_detail = 1) d.error(tflow.tflow(err=True)) assert sio.getvalue() sio.truncate(0) - ctx.configure(d, tfile = sio, flow_detail = 4) + ctx.configure(d, flow_detail = 4) d.response(tflow.tflow(resp=True)) assert sio.getvalue() sio.truncate(0) - sio = io.StringIO() - ctx.configure(d, tfile = sio, flow_detail = 4) + ctx.configure(d, flow_detail = 4) d.response(tflow.tflow(resp=True)) assert "<<" in sio.getvalue() sio.truncate(0) - sio = io.StringIO() - ctx.configure(d, tfile = sio, flow_detail = 4) + ctx.configure(d, flow_detail = 4) d.response(tflow.tflow(err=True)) assert "<<" in sio.getvalue() sio.truncate(0) - sio = io.StringIO() - ctx.configure(d, tfile = sio, flow_detail = 4) + ctx.configure(d, flow_detail = 4) flow = tflow.tflow() flow.request = tutils.treq() flow.request.stickycookie = True @@ -77,8 +74,7 @@ def test_simple(): assert sio.getvalue() sio.truncate(0) - sio = io.StringIO() - ctx.configure(d, tfile = sio, flow_detail = 4) + ctx.configure(d, flow_detail = 4) flow = tflow.tflow(resp=tutils.tresp(content=b"{")) flow.response.headers["content-type"] = "application/json" flow.response.status_code = 400 @@ -86,8 +82,7 @@ def test_simple(): assert sio.getvalue() sio.truncate(0) - sio = io.StringIO() - ctx.configure(d, tfile = sio, flow_detail = 4) + ctx.configure(d, flow_detail = 4) flow = tflow.tflow() flow.request.content = None flow.response = http.HTTPResponse.wrap(tutils.tresp()) @@ -102,20 +97,20 @@ def test_echo_body(): f.response.headers["content-type"] = "text/html" f.response.content = b"foo bar voing\n" * 100 - d = dumper.Dumper() sio = io.StringIO() + d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, tfile=sio, flow_detail = 3) + ctx.configure(d, flow_detail = 3) d._echo_message(f.response) t = sio.getvalue() assert "cut off" in t def test_echo_request_line(): - d = dumper.Dumper() sio = io.StringIO() + d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, tfile=sio, flow_detail = 3, showhost = True) + ctx.configure(d, flow_detail = 3, showhost = True) f = tflow.tflow(client_conn=None, server_conn=True, resp=True) f.request.is_replay = True d._echo_request_line(f) @@ -139,19 +134,19 @@ class TestContentView: @mock.patch("mitmproxy.contentviews.ViewAuto.__call__") def test_contentview(self, view_auto): view_auto.side_effect = exceptions.ContentViewException("") - d = dumper.Dumper() + sio = io.StringIO() + d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - sio = io.StringIO() - ctx.configure(d, flow_detail=4, verbosity=3, tfile=sio) + ctx.configure(d, flow_detail=4, verbosity=3) d.response(tflow.tflow()) assert "Content viewer failed" in ctx.master.event_log[0][1] def test_tcp(): - d = dumper.Dumper() sio = io.StringIO() + d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, tfile=sio, flow_detail = 3, showhost = True) + ctx.configure(d, flow_detail = 3, showhost = True) f = tflow.ttcpflow(client_conn=True, server_conn=True) d.tcp_message(f) assert "it's me" in sio.getvalue() diff --git a/test/mitmproxy/addons/test_termlog.py b/test/mitmproxy/addons/test_termlog.py index 880fcb51..d9e18134 100644 --- a/test/mitmproxy/addons/test_termlog.py +++ b/test/mitmproxy/addons/test_termlog.py @@ -7,9 +7,9 @@ from mitmproxy.tools import dump class TestTermLog: def test_simple(self): - t = termlog.TermLog() sio = io.StringIO() - t.configure(dump.Options(tfile = sio, verbosity = 2), set([])) + t = termlog.TermLog(outfile=sio) + t.configure(dump.Options(verbosity = 2), set([])) t.log(log.LogEntry("one", "info")) assert "one" in sio.getvalue() t.log(log.LogEntry("two", "debug")) -- cgit v1.2.3 From 0c091bd92b9f0f59c65cf392f334719294ef397e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 3 Dec 2016 09:42:14 +1300 Subject: Options - avoid mutation, API cleanup, has_changed - Always return a deepcopy of options to avoid accidental mutation of options state. - Remove .get(opt, default). This is an inappropriate API for Options - trying to retrieve an option that doesn't exist should always be an error. - Add the has_changed method that checks if an option differs from the default, use it in mitmproxy console. --- test/mitmproxy/test_optmanager.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 47e40d98..345512fd 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -35,6 +35,7 @@ def test_defaults(): "three": "dthree", "four": "dfour", } + assert not o.has_changed("one") newvals = dict( one="xone", two="xtwo", @@ -42,11 +43,13 @@ def test_defaults(): four="xfour", ) o.update(**newvals) + assert o.has_changed("one") for k, v in newvals.items(): - assert v == o.get(k) + assert v == getattr(o, k) o.reset() + assert not o.has_changed("one") for k, v in o._defaults.items(): - assert v == o.get(k) + assert v == getattr(o, k) def test_options(): -- cgit v1.2.3 From c062e302e9281e4d8e216595b14fb089ed784b4e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 3 Dec 2016 11:54:04 +1300 Subject: Add OptManager.subscribe, use it to clean up palettes in console .subscribe lets you subscribe a function to a specified set of options. --- test/mitmproxy/test_optmanager.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 345512fd..c7808391 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -104,6 +104,29 @@ def test_toggler(): o.toggler("nonexistent") +class Rec(): + def __init__(self): + self.called = None + + def __call__(self, *args, **kwargs): + self.called = (args, kwargs) + + +def test_subscribe(): + o = TO() + r = Rec() + o.subscribe(r, ["two"]) + o.one = "foo" + assert not r.called + o.two = "foo" + assert r.called + + assert len(o.changed.receivers) == 1 + del r + o.two = "bar" + assert len(o.changed.receivers) == 0 + + def test_rollback(): o = TO(one="two") -- cgit v1.2.3 From c94cd512d108fd9a12c87015791ce977b895fa2d Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 3 Dec 2016 12:16:50 +1300 Subject: options: defaults are a class attribute --- test/mitmproxy/test_optmanager.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index c7808391..385cf621 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -28,6 +28,11 @@ class TD2(TD): def test_defaults(): + assert TD2.default("one") == "done" + assert TD2.default("two") == "dtwo" + assert TD2.default("three") == "dthree" + assert TD2.default("four") == "dfour" + o = TD2() assert o._defaults == { "one": "done", -- cgit v1.2.3 From d74cac265a9d1d8ce176a7ef96be2d91c4f40819 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 5 Dec 2016 07:18:53 +1300 Subject: Add YAML serialization of options This uses ruamel.yaml. The library seems well-supported, and can do in-place modification of config files that retains user comments and file structure. --- test/mitmproxy/test_optmanager.py | 55 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 385cf621..0c98daea 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -1,5 +1,7 @@ import copy +import os +from mitmproxy import options from mitmproxy import optmanager from mitmproxy import exceptions from mitmproxy.test import tutils @@ -24,7 +26,7 @@ class TD2(TD): def __init__(self, *, three="dthree", four="dfour", **kwargs): self.three = three self.four = four - super().__init__(**kwargs) + super().__init__(three=three, **kwargs) def test_defaults(): @@ -167,3 +169,54 @@ def test_repr(): 'one': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'two': None })""" + + +def test_serialize(): + o = TD2() + o.three = "set" + assert "dfour" in o.serialize(None, defaults=True) + + data = o.serialize(None) + assert "dfour" not in data + + o2 = TD2() + o2.load(data) + assert o2 == o + + t = """ + unknown: foo + """ + data = o.serialize(t) + o2 = TD2() + o2.load(data) + assert o2 == o + + t = "invalid: foo\ninvalid" + tutils.raises("config error", o2.load, t) + + t = "invalid" + tutils.raises("config error", o2.load, t) + + t = "" + o2.load(t) + + +def test_serialize_defaults(): + o = options.Options() + assert o.serialize(None, defaults=True) + + +def test_saving(): + o = TD2() + o.three = "set" + with tutils.tmpdir() as tdir: + dst = os.path.join(tdir, "conf") + o.save(dst, defaults=True) + + o2 = TD2() + o2.load_paths(dst) + o2.three = "foo" + o2.save(dst, defaults=True) + + o.load_paths(dst) + assert o.three == "foo" -- cgit v1.2.3 From 00c897a185b4bba7116fa22d14214dff68ce6e69 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 2 Dec 2016 16:15:14 +1300 Subject: options: save defaults, add .reset() to restore defaults Use .reset() in console app to clear options. --- test/mitmproxy/test_optmanager.py | 5 ----- 1 file changed, 5 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 0c98daea..97124368 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -30,11 +30,6 @@ class TD2(TD): def test_defaults(): - assert TD2.default("one") == "done" - assert TD2.default("two") == "dtwo" - assert TD2.default("three") == "dthree" - assert TD2.default("four") == "dfour" - o = TD2() assert o._defaults == { "one": "done", -- cgit v1.2.3 From 150372e29728459b93f0fb46028ced9c2afe1d15 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 3 Dec 2016 12:16:50 +1300 Subject: options: defaults are a class attribute --- test/mitmproxy/test_optmanager.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 97124368..0c98daea 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -30,6 +30,11 @@ class TD2(TD): def test_defaults(): + assert TD2.default("one") == "done" + assert TD2.default("two") == "dtwo" + assert TD2.default("three") == "dthree" + assert TD2.default("four") == "dfour" + o = TD2() assert o._defaults == { "one": "done", -- cgit v1.2.3 From d742d4fb8c8d601c19f7aa5ff746a4167d864f7e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 5 Dec 2016 15:55:43 +1300 Subject: Replace configargparse with argparse, enable new options loading This commit ditches configargparse and enables the new config file format. The default location is ~/.mitmproxy/config.yaml. Unifying all of the various Options objects will follow in the next patch. --- test/mitmproxy/test_proxy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/mitmproxy/test_proxy.py b/test/mitmproxy/test_proxy.py index 177bac1f..91da47a0 100644 --- a/test/mitmproxy/test_proxy.py +++ b/test/mitmproxy/test_proxy.py @@ -5,6 +5,7 @@ import argparse from OpenSSL import SSL from mitmproxy.tools import cmdline +from mitmproxy.tools import main from mitmproxy import options from mitmproxy.proxy import ProxyConfig from mitmproxy import connections @@ -76,7 +77,7 @@ class TestProcessProxyOptions: cmdline.common_options(parser) args = parser.parse_args(args=args) opts = cmdline.get_common_options(args) - pconf = config.ProxyConfig(options.Options(**opts)) + pconf = config.ProxyConfig(options.Options(**main.notnone(opts))) return parser, pconf def assert_err(self, err, *args): -- cgit v1.2.3 From a617e3b5f717b95d1ffc8c87dd70712e36445be9 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 5 Dec 2016 17:49:16 +1300 Subject: Amalgamate all the Options objects --- test/mitmproxy/console/test_master.py | 11 ++++++----- test/mitmproxy/test_web_app.py | 3 ++- test/mitmproxy/test_web_master.py | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/console/test_master.py b/test/mitmproxy/console/test_master.py index eb840187..fb3c2527 100644 --- a/test/mitmproxy/console/test_master.py +++ b/test/mitmproxy/console/test_master.py @@ -2,6 +2,7 @@ from mitmproxy.test import tflow import mitmproxy.test.tutils from mitmproxy.tools import console from mitmproxy import proxy +from mitmproxy import options from mitmproxy.tools.console import common from .. import mastertest @@ -20,14 +21,14 @@ def test_format_keyvals(): def test_options(): - assert console.master.Options(replay_kill_extra=True) + assert options.Options(replay_kill_extra=True) class TestMaster(mastertest.MasterTest): - def mkmaster(self, **options): - if "verbosity" not in options: - options["verbosity"] = 0 - o = console.master.Options(**options) + def mkmaster(self, **opts): + if "verbosity" not in opts: + opts["verbosity"] = 0 + o = options.Options(**opts) return console.master.ConsoleMaster(o, proxy.DummyServer()) def test_basic(self): diff --git a/test/mitmproxy/test_web_app.py b/test/mitmproxy/test_web_app.py index be195528..2cab5bf4 100644 --- a/test/mitmproxy/test_web_app.py +++ b/test/mitmproxy/test_web_app.py @@ -4,6 +4,7 @@ import mock import tornado.testing from mitmproxy import exceptions from mitmproxy import proxy +from mitmproxy import options from mitmproxy.test import tflow from mitmproxy.tools.web import app from mitmproxy.tools.web import master as webmaster @@ -17,7 +18,7 @@ def json(resp: httpclient.HTTPResponse): class TestApp(tornado.testing.AsyncHTTPTestCase): def get_app(self): - o = webmaster.Options() + o = options.Options() m = webmaster.WebMaster(o, proxy.DummyServer()) f = tflow.tflow(resp=True) f.id = "42" diff --git a/test/mitmproxy/test_web_master.py b/test/mitmproxy/test_web_master.py index 298b14eb..08dce8f3 100644 --- a/test/mitmproxy/test_web_master.py +++ b/test/mitmproxy/test_web_master.py @@ -1,11 +1,12 @@ from mitmproxy.tools.web import master from mitmproxy import proxy +from mitmproxy import options from . import mastertest class TestWebMaster(mastertest.MasterTest): - def mkmaster(self, **options): - o = master.Options(**options) + def mkmaster(self, **opts): + o = options.Options(**opts) return master.WebMaster(o, proxy.DummyServer(o)) def test_basic(self): -- cgit v1.2.3 From b2695dbc6a170cb21771b001059efa7dc5201722 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Thu, 8 Dec 2016 10:18:50 +1300 Subject: Minor tweaks --- test/mitmproxy/addons/test_dumper.py | 24 ++++++++++++------------ test/mitmproxy/test_optmanager.py | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'test') diff --git a/test/mitmproxy/addons/test_dumper.py b/test/mitmproxy/addons/test_dumper.py index f87df329..760efa08 100644 --- a/test/mitmproxy/addons/test_dumper.py +++ b/test/mitmproxy/addons/test_dumper.py @@ -31,37 +31,37 @@ def test_simple(): sio = io.StringIO() d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, flow_detail = 0) + ctx.configure(d, flow_detail=0) d.response(tflow.tflow(resp=True)) assert not sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 1) + ctx.configure(d, flow_detail=1) d.response(tflow.tflow(resp=True)) assert sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 1) + ctx.configure(d, flow_detail=1) d.error(tflow.tflow(err=True)) assert sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 4) + ctx.configure(d, flow_detail=4) d.response(tflow.tflow(resp=True)) assert sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 4) + ctx.configure(d, flow_detail=4) d.response(tflow.tflow(resp=True)) assert "<<" in sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 4) + ctx.configure(d, flow_detail=4) d.response(tflow.tflow(err=True)) assert "<<" in sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 4) + ctx.configure(d, flow_detail=4) flow = tflow.tflow() flow.request = tutils.treq() flow.request.stickycookie = True @@ -74,7 +74,7 @@ def test_simple(): assert sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 4) + ctx.configure(d, flow_detail=4) flow = tflow.tflow(resp=tutils.tresp(content=b"{")) flow.response.headers["content-type"] = "application/json" flow.response.status_code = 400 @@ -82,7 +82,7 @@ def test_simple(): assert sio.getvalue() sio.truncate(0) - ctx.configure(d, flow_detail = 4) + ctx.configure(d, flow_detail=4) flow = tflow.tflow() flow.request.content = None flow.response = http.HTTPResponse.wrap(tutils.tresp()) @@ -100,7 +100,7 @@ def test_echo_body(): sio = io.StringIO() d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, flow_detail = 3) + ctx.configure(d, flow_detail=3) d._echo_message(f.response) t = sio.getvalue() assert "cut off" in t @@ -110,7 +110,7 @@ def test_echo_request_line(): sio = io.StringIO() d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, flow_detail = 3, showhost = True) + ctx.configure(d, flow_detail=3, showhost=True) f = tflow.tflow(client_conn=None, server_conn=True, resp=True) f.request.is_replay = True d._echo_request_line(f) @@ -146,7 +146,7 @@ def test_tcp(): sio = io.StringIO() d = dumper.Dumper(sio) with taddons.context(options=dump.Options()) as ctx: - ctx.configure(d, flow_detail = 3, showhost = True) + ctx.configure(d, flow_detail=3, showhost=True) f = tflow.ttcpflow(client_conn=True, server_conn=True) d.tcp_message(f) assert "it's me" in sio.getvalue() diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 0c98daea..c6eb2534 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -15,7 +15,7 @@ class TO(optmanager.OptManager): class TD(optmanager.OptManager): - def __init__(self, one="done", two="dtwo", three="error"): + def __init__(self, *, one="done", two="dtwo", three="error"): self.one = one self.two = two self.three = three -- cgit v1.2.3