From f7d7e31f06dadcf0f7801ab1db055f8609c88a71 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 8 May 2018 10:56:00 +1200 Subject: options: add the concept of deferred settings We've had a perpetual sequencing problem with addon startup. Users need to be able to specify options to addons on the command-line, before addons are actually loaded. This is only exacerbated with the new async core, where load order can't be relied on. This patch introduces deferred options. Options passed with "--set" on the command line are deferred if they are unknown, and are automatically applied by the addon manager once matching addons are registered and their options are defined. --- test/mitmproxy/test_optmanager.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 1c49c0b8..77bcc007 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -426,4 +426,13 @@ def test_set(): assert opts.seqstr == [] with pytest.raises(exceptions.OptionsError): - opts.set("nonexistent=wobble") + opts.set("deferred=wobble") + + opts.set("deferred=wobble", defer=True) + assert "deferred" in opts._deferred + opts.process_deferred() + assert "deferred" in opts._deferred + opts.add_option("deferred", str, "default", "help") + opts.process_deferred() + assert "deferred" not in opts._deferred + assert opts.deferred == "wobble" -- cgit v1.2.3 From 9b51393b6ddaec52298cdcf8e800312f41f809fd Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 8 May 2018 11:00:20 +1200 Subject: benchmark: keep track of requests/responses seen by proxy --- test/bench/benchmark.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'test') diff --git a/test/bench/benchmark.py b/test/bench/benchmark.py index 8d208088..84ec6005 100644 --- a/test/bench/benchmark.py +++ b/test/bench/benchmark.py @@ -11,6 +11,15 @@ class Benchmark: self.pr = cProfile.Profile() self.started = False + self.resps = 0 + self.reqs = 0 + + def request(self, f): + self.reqs += 1 + + def response(self, f): + self.resps += 1 + async def procs(self): ctx.log.error("starting benchmark") backend = await asyncio.create_subprocess_exec("devd", "-q", "-p", "10001", ".") @@ -23,6 +32,7 @@ class Benchmark: ) stdout, _ = await traf.communicate() open(ctx.options.benchmark_save_path + ".bench", mode="wb").write(stdout) + ctx.log.error("Proxy saw %s requests, %s responses" % (self.reqs, self.resps)) ctx.log.error(stdout.decode("ascii")) backend.kill() ctx.master.shutdown() -- cgit v1.2.3 From 1b0eed19d1429b291349bcd92c19bb6f41cf867a Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 8 May 2018 11:08:37 +1200 Subject: benchmarks: quick-run scripts for mitmproxy and mitmdump --- test/bench/run | 4 ---- test/bench/run-mitmdump | 4 ++++ test/bench/run-mitmproxy | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) delete mode 100755 test/bench/run create mode 100755 test/bench/run-mitmdump create mode 100755 test/bench/run-mitmproxy (limited to 'test') diff --git a/test/bench/run b/test/bench/run deleted file mode 100755 index 9925b578..00000000 --- a/test/bench/run +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -mkdir -p results -mitmdump -p0 -q --set benchmark_save_path=./results/mitmdump -s ./benchmark.py \ No newline at end of file diff --git a/test/bench/run-mitmdump b/test/bench/run-mitmdump new file mode 100755 index 00000000..9925b578 --- /dev/null +++ b/test/bench/run-mitmdump @@ -0,0 +1,4 @@ +#!/bin/sh + +mkdir -p results +mitmdump -p0 -q --set benchmark_save_path=./results/mitmdump -s ./benchmark.py \ No newline at end of file diff --git a/test/bench/run-mitmproxy b/test/bench/run-mitmproxy new file mode 100755 index 00000000..4f1f626e --- /dev/null +++ b/test/bench/run-mitmproxy @@ -0,0 +1,4 @@ +#!/bin/sh + +mkdir -p results +mitmproxy -p0 -q --set benchmark_save_path=./results/mitmproxy -s ./benchmark.py \ No newline at end of file -- cgit v1.2.3 From 717fbaa99076545d11f554187759005dce1aa67b Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 8 May 2018 14:24:41 +1200 Subject: optmanager: refactor for coverage and clarity --- test/mitmproxy/test_optmanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test') diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py index 77bcc007..4356434b 100644 --- a/test/mitmproxy/test_optmanager.py +++ b/test/mitmproxy/test_optmanager.py @@ -70,7 +70,7 @@ def test_defaults(): def test_required_int(): o = TO() with pytest.raises(exceptions.OptionsError): - o.parse_setval("required_int", None) + o.parse_setval(o._options["required_int"], None) def test_deepcopy(): -- cgit v1.2.3