diff options
-rw-r--r-- | README.rst | 5 | ||||
-rw-r--r-- | mitmproxy/addons/streambodies.py | 2 | ||||
-rw-r--r-- | mitmproxy/addons/view.py | 2 | ||||
-rw-r--r-- | test/mitmproxy/addons/test_streambodies.py | 24 | ||||
-rw-r--r-- | test/mitmproxy/addons/test_view.py | 52 |
5 files changed, 67 insertions, 18 deletions
@@ -139,11 +139,12 @@ contribute and collaborate. Please stick to the guidelines in good reason not to. This is automatically enforced on every PR. If we detect a linting error, the -PR checks will fail and block merging. We are using this command to check for style compliance: +PR checks will fail and block merging. You can run our lint checks yourself +with the following command: .. code-block:: text - flake8 --jobs 8 --count mitmproxy pathod examples test + tox -e lint .. |mitmproxy_site| image:: https://shields.mitmproxy.org/api/https%3A%2F%2F-mitmproxy.org-blue.svg diff --git a/mitmproxy/addons/streambodies.py b/mitmproxy/addons/streambodies.py index 88cb74f3..3c2a153b 100644 --- a/mitmproxy/addons/streambodies.py +++ b/mitmproxy/addons/streambodies.py @@ -17,7 +17,7 @@ class StreamBodies: expected_size = http1.expected_http_body_size( f.request, f.response if not is_request else None ) - except exceptions.HTTPException: + except exceptions.HttpException: f.reply.kill() return if expected_size and not r.raw_content and not (0 <= expected_size <= self.max_size): diff --git a/mitmproxy/addons/view.py b/mitmproxy/addons/view.py index 8fa5dc50..f4c56883 100644 --- a/mitmproxy/addons/view.py +++ b/mitmproxy/addons/view.py @@ -34,7 +34,7 @@ class _OrderKey: def __init__(self, view): self.view = view - def generate(self, f: mitmproxy.flow.Flow) -> typing.Any: + def generate(self, f: mitmproxy.flow.Flow) -> typing.Any: # pragma: no cover pass def refresh(self, f): diff --git a/test/mitmproxy/addons/test_streambodies.py b/test/mitmproxy/addons/test_streambodies.py index afd2cc51..b982c66d 100644 --- a/test/mitmproxy/addons/test_streambodies.py +++ b/test/mitmproxy/addons/test_streambodies.py @@ -1,30 +1,28 @@ from mitmproxy.test import tflow - -from .. import mastertest -from mitmproxy import master -from mitmproxy import options -from mitmproxy import proxy +from mitmproxy.test import taddons from mitmproxy.addons import streambodies -class TestStreamBodies(mastertest.MasterTest): - def test_simple(self): - o = options.Options(stream_large_bodies = 10) - m = master.Master(o, proxy.DummyServer()) - sa = streambodies.StreamBodies() - m.addons.add(sa) +def test_simple(): + sa = streambodies.StreamBodies() + with taddons.context() as tctx: + tctx.configure(sa, stream_large_bodies = 10) f = tflow.tflow() f.request.content = b"" f.request.headers["Content-Length"] = "1024" assert not f.request.stream - m.requestheaders(f) + sa.requestheaders(f) assert f.request.stream f = tflow.tflow(resp=True) f.response.content = b"" f.response.headers["Content-Length"] = "1024" assert not f.response.stream - m.responseheaders(f) + sa.responseheaders(f) assert f.response.stream + + f = tflow.tflow(resp=True) + f.response.headers["content-length"] = "invalid" + tctx.cycle(sa, f) diff --git a/test/mitmproxy/addons/test_view.py b/test/mitmproxy/addons/test_view.py index de752c72..5243e9d4 100644 --- a/test/mitmproxy/addons/test_view.py +++ b/test/mitmproxy/addons/test_view.py @@ -9,27 +9,68 @@ from mitmproxy.test import taddons class Options(options.Options): def __init__( - self, *, + self, + *, filter=None, order=None, order_reversed=False, + focus_follow=False, **kwargs ): self.filter = filter self.order = order self.order_reversed = order_reversed + self.focus_follow = focus_follow super().__init__(**kwargs) +def test_order_refresh(): + v = view.View() + sargs = [] + + def save(*args, **kwargs): + sargs.extend([args, kwargs]) + + v.sig_refresh.connect(save) + + tf = tflow.tflow(resp=True) + with taddons.context(options=Options()) as tctx: + tctx.configure(v, order="time") + v.add(tf) + tf.request.timestamp_start = 1 + assert not sargs + v.update(tf) + assert sargs + + +def test_order_generators(): + v = view.View() + tf = tflow.tflow(resp=True) + + rs = view.OrderRequestStart(v) + assert rs.generate(tf) == 0 + + rm = view.OrderRequestMethod(v) + assert rm.generate(tf) == tf.request.method + + ru = view.OrderRequestURL(v) + assert ru.generate(tf) == tf.request.url + + sz = view.OrderKeySize(v) + assert sz.generate(tf) == len(tf.request.raw_content) + len(tf.response.raw_content) + + def test_simple(): v = view.View() f = tflow.tflow() + assert v.store_count() == 0 f.request.timestamp_start = 1 v.request(f) assert list(v) == [f] v.request(f) assert list(v) == [f] assert len(v._store) == 1 + assert v.store_count() == 1 f2 = tflow.tflow() f2.request.timestamp_start = 3 @@ -39,6 +80,10 @@ def test_simple(): assert list(v) == [f, f2] assert len(v._store) == 2 + assert v.inbounds(0) + assert not v.inbounds(-1) + assert not v.inbounds(100) + f3 = tflow.tflow() f3.request.timestamp_start = 2 v.request(f3) @@ -289,3 +334,8 @@ def test_configure(): tutils.raises("unknown flow order", tctx.configure, v, order="no") tctx.configure(v, order_reversed=True) + + tctx.configure(v, order=None) + + tctx.configure(v, focus_follow=True) + assert v.focus_follow |