aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.rst5
-rw-r--r--mitmproxy/addons/streambodies.py2
-rw-r--r--mitmproxy/addons/view.py2
-rw-r--r--test/mitmproxy/addons/test_streambodies.py24
-rw-r--r--test/mitmproxy/addons/test_view.py52
5 files changed, 67 insertions, 18 deletions
diff --git a/README.rst b/README.rst
index 33304b70..e36a2c5e 100644
--- a/README.rst
+++ b/README.rst
@@ -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