diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2016-11-03 12:44:19 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2016-11-03 12:44:19 +1300 |
commit | fbdce4b629fe0e626818aafe81dc247f746d70cd (patch) | |
tree | f62b84d064924cb36c4872d0c69c6b8f4a8931f2 | |
parent | 5109fd8ecb3e2b6b5c15ab07fc98d354c240b842 (diff) | |
download | mitmproxy-fbdce4b629fe0e626818aafe81dc247f746d70cd.tar.gz mitmproxy-fbdce4b629fe0e626818aafe81dc247f746d70cd.tar.bz2 mitmproxy-fbdce4b629fe0e626818aafe81dc247f746d70cd.zip |
addons filstreamer: tests and bugfixes
- Move tests to taddons
- Fix a bug where options updates caused streaming to halt
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | mitmproxy/addons/filestreamer.py | 34 | ||||
-rw-r--r-- | test/mitmproxy/addons/test_filestreamer.py | 38 |
3 files changed, 31 insertions, 42 deletions
@@ -19,3 +19,4 @@ bower_components *.map sslkeylogfile.log .tox/ +.vscode diff --git a/mitmproxy/addons/filestreamer.py b/mitmproxy/addons/filestreamer.py index 031b44ab..92224d21 100644 --- a/mitmproxy/addons/filestreamer.py +++ b/mitmproxy/addons/filestreamer.py @@ -21,23 +21,23 @@ class FileStreamer: def configure(self, options, updated): # We're already streaming - stop the previous stream and restart - if self.stream: - self.done() - - if options.outfile: - flt = None - if options.get("filtstr"): - flt = flowfilter.parse(options.filtstr) - if not flt: - raise exceptions.OptionsError( - "Invalid filter specification: %s" % options.filtstr - ) - path, mode = options.outfile - if mode not in ("wb", "ab"): - raise exceptions.OptionsError("Invalid mode.") - err = self.start_stream_to_path(path, mode, flt) - if err: - raise exceptions.OptionsError(err) + if "outfile" in updated: + if self.stream: + self.done() + if options.outfile: + flt = None + if options.get("filtstr"): + flt = flowfilter.parse(options.filtstr) + if not flt: + raise exceptions.OptionsError( + "Invalid filter specification: %s" % options.filtstr + ) + path, mode = options.outfile + if mode not in ("wb", "ab"): + raise exceptions.OptionsError("Invalid mode.") + err = self.start_stream_to_path(path, mode, flt) + if err: + raise exceptions.OptionsError(err) def tcp_start(self, flow): if self.stream: diff --git a/test/mitmproxy/addons/test_filestreamer.py b/test/mitmproxy/addons/test_filestreamer.py index 28094c43..f86912fc 100644 --- a/test/mitmproxy/addons/test_filestreamer.py +++ b/test/mitmproxy/addons/test_filestreamer.py @@ -1,44 +1,32 @@ from mitmproxy.test import tflow from mitmproxy.test import tutils - -from .. import mastertest +from mitmproxy.test import taddons import os.path - from mitmproxy.addons import filestreamer -from mitmproxy import master from mitmproxy import io -from mitmproxy import options -from mitmproxy import proxy -class TestStream(mastertest.MasterTest): - def test_stream(self): +def test_stream(): + sa = filestreamer.FileStreamer() + with taddons.context() as tctx: with tutils.tmpdir() as tdir: p = os.path.join(tdir, "foo") def r(): - r = io.FlowReader(open(p, "rb")) - return list(r.stream()) + x = io.FlowReader(open(p, "rb")) + return list(x.stream()) - o = options.Options( - outfile = (p, "wb") - ) - m = master.Master(o, proxy.DummyServer()) - sa = filestreamer.FileStreamer() + tctx.configure(sa, outfile=(p, "wb")) - m.addons.add(sa) f = tflow.tflow(resp=True) - m.request(f) - m.response(f) - m.addons.remove(sa) - + sa.request(f) + sa.response(f) + tctx.configure(sa, outfile=None) assert r()[0].response - m.options.outfile = (p, "ab") - - m.addons.add(sa) + tctx.configure(sa, outfile=(p, "ab")) f = tflow.tflow() - m.request(f) - m.addons.remove(sa) + sa.request(f) + tctx.configure(sa, outfile=None) assert not r()[1].response |