aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/addons/test_readfile.py62
-rw-r--r--test/mitmproxy/addons/test_readstdin.py59
-rw-r--r--test/mitmproxy/test_flow.py53
-rw-r--r--test/mitmproxy/tools/console/test_master.py6
-rw-r--r--test/mitmproxy/tools/test_dump.py13
5 files changed, 140 insertions, 53 deletions
diff --git a/test/mitmproxy/addons/test_readfile.py b/test/mitmproxy/addons/test_readfile.py
new file mode 100644
index 00000000..c0cf97ae
--- /dev/null
+++ b/test/mitmproxy/addons/test_readfile.py
@@ -0,0 +1,62 @@
+from mitmproxy.addons import readfile
+from mitmproxy.test import taddons
+from mitmproxy.test import tflow
+from mitmproxy import io
+from mitmproxy import exceptions
+from unittest import mock
+
+import pytest
+
+
+def write_data(path, corrupt=False):
+ with open(path, "wb") as tf:
+ w = io.FlowWriter(tf)
+ for i in range(3):
+ f = tflow.tflow(resp=True)
+ w.add(f)
+ for i in range(3):
+ f = tflow.tflow(err=True)
+ w.add(f)
+ f = tflow.ttcpflow()
+ w.add(f)
+ f = tflow.ttcpflow(err=True)
+ w.add(f)
+ if corrupt:
+ tf.write(b"flibble")
+
+
+@mock.patch('mitmproxy.master.Master.load_flow')
+def test_configure(mck, tmpdir):
+
+ rf = readfile.ReadFile()
+ with taddons.context() as tctx:
+ tf = str(tmpdir.join("tfile"))
+ write_data(tf)
+ tctx.configure(rf, rfile=str(tf), keepserving=False)
+ assert not mck.called
+ rf.running()
+ assert mck.called
+
+ write_data(tf, corrupt=True)
+ tctx.configure(rf, rfile=str(tf), keepserving=False)
+ with pytest.raises(exceptions.OptionsError):
+ rf.running()
+
+
+@mock.patch('mitmproxy.master.Master.load_flow')
+def test_corruption(mck, tmpdir):
+
+ rf = readfile.ReadFile()
+ with taddons.context() as tctx:
+ with pytest.raises(exceptions.FlowReadException):
+ rf.load_flows_file("nonexistent")
+ assert not mck.called
+ assert len(tctx.master.event_log) == 1
+
+ tfc = str(tmpdir.join("tfile"))
+ write_data(tfc, corrupt=True)
+
+ with pytest.raises(exceptions.FlowReadException):
+ rf.load_flows_file(tfc)
+ assert mck.called
+ assert len(tctx.master.event_log) == 2
diff --git a/test/mitmproxy/addons/test_readstdin.py b/test/mitmproxy/addons/test_readstdin.py
new file mode 100644
index 00000000..bbef81fc
--- /dev/null
+++ b/test/mitmproxy/addons/test_readstdin.py
@@ -0,0 +1,59 @@
+
+import io
+from mitmproxy.addons import readstdin
+from mitmproxy.test import taddons
+from mitmproxy.test import tflow
+import mitmproxy.io
+from unittest import mock
+
+
+def gen_data(corrupt=False):
+ tf = io.BytesIO()
+ w = mitmproxy.io.FlowWriter(tf)
+ for i in range(3):
+ f = tflow.tflow(resp=True)
+ w.add(f)
+ for i in range(3):
+ f = tflow.tflow(err=True)
+ w.add(f)
+ f = tflow.ttcpflow()
+ w.add(f)
+ f = tflow.ttcpflow(err=True)
+ w.add(f)
+ if corrupt:
+ tf.write(b"flibble")
+ tf.seek(0)
+ return tf
+
+
+def test_configure(tmpdir):
+ rf = readstdin.ReadStdin()
+ with taddons.context() as tctx:
+ tctx.configure(rf, keepserving=False)
+
+
+class mStdin:
+ def __init__(self, d):
+ self.buffer = d
+
+ def isatty(self):
+ return False
+
+
+@mock.patch('mitmproxy.master.Master.load_flow')
+def test_read(m, tmpdir):
+ rf = readstdin.ReadStdin()
+ with taddons.context() as tctx:
+ assert not m.called
+ rf.running(stdin=mStdin(gen_data()))
+ assert m.called
+
+ rf.running(stdin=mStdin(None))
+ assert tctx.master.event_log
+ tctx.master.clear()
+
+ m.reset_mock()
+ assert not m.called
+ rf.running(stdin=mStdin(gen_data(corrupt=True)))
+ assert m.called
+ assert tctx.master.event_log
diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py
index f4d32cbb..1fb33bb2 100644
--- a/test/mitmproxy/test_flow.py
+++ b/test/mitmproxy/test_flow.py
@@ -3,12 +3,13 @@ import pytest
from mitmproxy.test import tflow
import mitmproxy.io
-from mitmproxy import flowfilter, options
+from mitmproxy import flowfilter
+from mitmproxy import options
+from mitmproxy.proxy import config
from mitmproxy.contrib import tnetstring
from mitmproxy.exceptions import FlowReadException
from mitmproxy import flow
from mitmproxy import http
-from mitmproxy.proxy import ProxyConfig
from mitmproxy.proxy.server import DummyServer
from mitmproxy import master
from . import tservers
@@ -16,23 +17,6 @@ from . import tservers
class TestSerialize:
- def _treader(self):
- sio = io.BytesIO()
- w = mitmproxy.io.FlowWriter(sio)
- for i in range(3):
- f = tflow.tflow(resp=True)
- w.add(f)
- for i in range(3):
- f = tflow.tflow(err=True)
- w.add(f)
- f = tflow.ttcpflow()
- w.add(f)
- f = tflow.ttcpflow(err=True)
- w.add(f)
-
- sio.seek(0)
- return mitmproxy.io.FlowReader(sio)
-
def test_roundtrip(self):
sio = io.BytesIO()
f = tflow.tflow()
@@ -51,26 +35,6 @@ class TestSerialize:
assert f2.request == f.request
assert f2.marked
- def test_load_flows(self):
- r = self._treader()
- s = tservers.TestState()
- fm = master.Master(None, DummyServer())
- fm.addons.add(s)
- fm.load_flows(r)
- assert len(s.flows) == 6
-
- def test_load_flows_reverse(self):
- r = self._treader()
- s = tservers.TestState()
- opts = options.Options(
- mode="reverse:https://use-this-domain"
- )
- conf = ProxyConfig(opts)
- fm = master.Master(opts, DummyServer(conf))
- fm.addons.add(s)
- fm.load_flows(r)
- assert s.flows[0].request.host == "use-this-domain"
-
def test_filter(self):
sio = io.BytesIO()
flt = flowfilter.parse("~c 200")
@@ -122,6 +86,17 @@ class TestSerialize:
class TestFlowMaster:
+ def test_load_flow_reverse(self):
+ s = tservers.TestState()
+ opts = options.Options(
+ mode="reverse:https://use-this-domain"
+ )
+ conf = config.ProxyConfig(opts)
+ fm = master.Master(opts, DummyServer(conf))
+ fm.addons.add(s)
+ f = tflow.tflow(resp=True)
+ fm.load_flow(f)
+ assert s.flows[0].request.host == "use-this-domain"
def test_replay(self):
fm = master.Master(None, DummyServer())
diff --git a/test/mitmproxy/tools/console/test_master.py b/test/mitmproxy/tools/console/test_master.py
index 6c716ad1..45908450 100644
--- a/test/mitmproxy/tools/console/test_master.py
+++ b/test/mitmproxy/tools/console/test_master.py
@@ -5,6 +5,7 @@ from mitmproxy import proxy
from mitmproxy import options
from mitmproxy.tools.console import common
from ... import tservers
+import urwid
def test_format_keyvals():
@@ -35,7 +36,10 @@ class TestMaster(tservers.MasterTest):
def test_basic(self):
m = self.mkmaster()
for i in (1, 2, 3):
- self.dummy_cycle(m, 1, b"")
+ try:
+ self.dummy_cycle(m, 1, b"")
+ except urwid.ExitMainLoop:
+ pass
assert len(m.view) == i
def test_run_script_once(self):
diff --git a/test/mitmproxy/tools/test_dump.py b/test/mitmproxy/tools/test_dump.py
index a15bf583..624bf08f 100644
--- a/test/mitmproxy/tools/test_dump.py
+++ b/test/mitmproxy/tools/test_dump.py
@@ -2,7 +2,6 @@ import pytest
from unittest import mock
from mitmproxy import proxy
-from mitmproxy import exceptions
from mitmproxy import log
from mitmproxy import controller
from mitmproxy import options
@@ -17,18 +16,6 @@ class TestDumpMaster(tservers.MasterTest):
m = dump.DumpMaster(o, proxy.DummyServer(), with_termlog=False, with_dumper=False)
return m
- def test_read(self, tmpdir):
- p = str(tmpdir.join("read"))
- self.flowfile(p)
- self.dummy_cycle(
- self.mkmaster(None, rfile=p),
- 1, b"",
- )
- with pytest.raises(exceptions.OptionsError):
- self.mkmaster(None, rfile="/nonexistent")
- with pytest.raises(exceptions.OptionsError):
- self.mkmaster(None, rfile="test_dump.py")
-
def test_has_error(self):
m = self.mkmaster(None)
ent = log.LogEntry("foo", "error")