aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-10-28 12:32:23 +1300
committerAldo Cortesi <aldo@nullcube.com>2016-10-29 08:25:19 +1300
commit9dcc3a3e2026abecc98d0eb3c4af80ea18ca0a69 (patch)
treea41ab8a7a1dbecc25c6170b02c207df2be2607e3 /test
parent69bacee1d8f181bc00f632372ee3b7bc4eb48388 (diff)
downloadmitmproxy-9dcc3a3e2026abecc98d0eb3c4af80ea18ca0a69.tar.gz
mitmproxy-9dcc3a3e2026abecc98d0eb3c4af80ea18ca0a69.tar.bz2
mitmproxy-9dcc3a3e2026abecc98d0eb3c4af80ea18ca0a69.zip
addons.View: hook up signals
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/addons/test_view.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/test/mitmproxy/addons/test_view.py b/test/mitmproxy/addons/test_view.py
index 3e01d71f..cff99621 100644
--- a/test/mitmproxy/addons/test_view.py
+++ b/test/mitmproxy/addons/test_view.py
@@ -1,5 +1,6 @@
from mitmproxy.addons import view
from mitmproxy import flowfilter
+
from .. import tutils
@@ -90,3 +91,73 @@ def test_update():
v.update(f)
assert f in v
+
+
+class Record:
+ def __init__(self):
+ self.calls = []
+
+ def __bool__(self):
+ return bool(self.calls)
+
+ def __repr__(self):
+ return repr(self.calls)
+
+ def __call__(self, *args, **kwargs):
+ self.calls.append((args, kwargs))
+
+
+def test_signals():
+ v = view.View()
+ rec_add = Record()
+ rec_update = Record()
+ rec_remove = Record()
+ rec_refresh = Record()
+
+ def clearrec():
+ rec_add.calls = []
+ rec_update.calls = []
+ rec_remove.calls = []
+ rec_refresh.calls = []
+
+ v.sig_add.connect(rec_add)
+ v.sig_update.connect(rec_update)
+ v.sig_remove.connect(rec_remove)
+ v.sig_refresh.connect(rec_refresh)
+
+ assert not any([rec_add, rec_update, rec_remove, rec_refresh])
+
+ # Simple add
+ v.add(tft())
+ assert rec_add
+ assert not any([rec_update, rec_remove, rec_refresh])
+
+ # Filter change triggers refresh
+ clearrec()
+ v.set_filter(flowfilter.parse("~m put"))
+ assert rec_refresh
+ assert not any([rec_update, rec_add, rec_remove])
+
+ v.set_filter(flowfilter.parse("~m get"))
+
+ # An update that results in a flow being added to the view
+ clearrec()
+ v[0].request.method = "PUT"
+ v.update(v[0])
+ assert rec_remove
+ assert not any([rec_update, rec_refresh, rec_add])
+
+ # An update that does not affect the view just sends update
+ v.set_filter(flowfilter.parse("~m put"))
+ clearrec()
+ v.update(v[0])
+ assert rec_update
+ assert not any([rec_remove, rec_refresh, rec_add])
+
+ # An update for a flow in state but not view does not do anything
+ f = v[0]
+ v.set_filter(flowfilter.parse("~m get"))
+ assert not len(v)
+ clearrec()
+ v.update(f)
+ assert not any([rec_add, rec_update, rec_remove, rec_refresh])