aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/addons/test_readfile.py94
-rw-r--r--test/mitmproxy/addons/test_script.py23
-rw-r--r--test/mitmproxy/data/addonscripts/recorder/error.py7
3 files changed, 78 insertions, 46 deletions
diff --git a/test/mitmproxy/addons/test_readfile.py b/test/mitmproxy/addons/test_readfile.py
index a0826a26..f7e0c5c5 100644
--- a/test/mitmproxy/addons/test_readfile.py
+++ b/test/mitmproxy/addons/test_readfile.py
@@ -1,7 +1,9 @@
+import asyncio
import io
from unittest import mock
import pytest
+import asynctest
import mitmproxy.io
from mitmproxy import exceptions
@@ -38,69 +40,83 @@ def corrupt_data():
class TestReadFile:
- @mock.patch('mitmproxy.master.Master.load_flow')
- def test_configure(self, mck, tmpdir, data, corrupt_data):
+ def test_configure(self):
+ rf = readfile.ReadFile()
+ with taddons.context() as tctx:
+ tctx.configure(rf, readfile_filter="~q")
+ with pytest.raises(Exception, match="Invalid readfile filter"):
+ tctx.configure(rf, readfile_filter="~~")
+
+ @pytest.mark.asyncio
+ async def test_read(self, tmpdir, data, corrupt_data):
rf = readfile.ReadFile()
with taddons.context(rf) as tctx:
tf = tmpdir.join("tfile")
- tf.write(data.getvalue())
- tctx.configure(rf, rfile=str(tf))
- assert not mck.called
- rf.running()
- assert mck.called
+ with asynctest.patch('mitmproxy.master.Master.load_flow') as mck:
+ tf.write(data.getvalue())
+ tctx.configure(
+ rf,
+ rfile = str(tf),
+ readfile_filter = ".*"
+ )
+ assert not mck.awaited
+ rf.running()
+ await asyncio.sleep(0)
+ assert mck.awaited
tf.write(corrupt_data.getvalue())
tctx.configure(rf, rfile=str(tf))
- with pytest.raises(exceptions.OptionsError):
- rf.running()
+ rf.running()
+ assert await tctx.master.await_log("corrupted")
@pytest.mark.asyncio
async def test_corrupt(self, corrupt_data):
rf = readfile.ReadFile()
with taddons.context(rf) as tctx:
- with mock.patch('mitmproxy.master.Master.load_flow') as mck:
- with pytest.raises(exceptions.FlowReadException):
- rf.load_flows(io.BytesIO(b"qibble"))
- assert not mck.called
+ with pytest.raises(exceptions.FlowReadException):
+ await rf.load_flows(io.BytesIO(b"qibble"))
- tctx.master.clear()
- with pytest.raises(exceptions.FlowReadException):
- rf.load_flows(corrupt_data)
- assert await tctx.master.await_log("file corrupted")
- assert mck.called
+ tctx.master.clear()
+ with pytest.raises(exceptions.FlowReadException):
+ await rf.load_flows(corrupt_data)
+ assert await tctx.master.await_log("file corrupted")
@pytest.mark.asyncio
- async def test_nonexisting_file(self):
+ async def test_nonexistent_file(self):
rf = readfile.ReadFile()
with taddons.context(rf) as tctx:
with pytest.raises(exceptions.FlowReadException):
- rf.load_flows_from_path("nonexistent")
+ await rf.load_flows_from_path("nonexistent")
assert await tctx.master.await_log("nonexistent")
class TestReadFileStdin:
- @mock.patch('mitmproxy.master.Master.load_flow')
- @mock.patch('sys.stdin')
- def test_stdin(self, stdin, load_flow, data, corrupt_data):
+ @asynctest.patch('sys.stdin')
+ @pytest.mark.asyncio
+ async def test_stdin(self, stdin, data, corrupt_data):
rf = readfile.ReadFileStdin()
- with taddons.context(rf) as tctx:
- stdin.buffer = data
- tctx.configure(rf, rfile="-")
- assert not load_flow.called
- rf.running()
- assert load_flow.called
+ with taddons.context(rf):
+ with asynctest.patch('mitmproxy.master.Master.load_flow') as mck:
+ stdin.buffer = data
+ assert not mck.awaited
+ await rf.load_flows(stdin.buffer)
+ assert mck.awaited
- stdin.buffer = corrupt_data
- tctx.configure(rf, rfile="-")
- with pytest.raises(exceptions.OptionsError):
- rf.running()
+ stdin.buffer = corrupt_data
+ with pytest.raises(exceptions.FlowReadException):
+ await rf.load_flows(stdin.buffer)
+ @pytest.mark.asyncio
@mock.patch('mitmproxy.master.Master.load_flow')
- def test_normal(self, load_flow, tmpdir, data):
+ async def test_normal(self, load_flow, tmpdir, data):
rf = readfile.ReadFileStdin()
- with taddons.context(rf):
- tfile = tmpdir.join("tfile")
- tfile.write(data.getvalue())
- rf.load_flows_from_path(str(tfile))
- assert load_flow.called
+ with taddons.context(rf) as tctx:
+ tf = tmpdir.join("tfile")
+ with asynctest.patch('mitmproxy.master.Master.load_flow') as mck:
+ tf.write(data.getvalue())
+ tctx.configure(rf, rfile=str(tf))
+ assert not mck.awaited
+ rf.running()
+ await asyncio.sleep(0)
+ assert mck.awaited
diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py
index 3f0ce68c..96e19841 100644
--- a/test/mitmproxy/addons/test_script.py
+++ b/test/mitmproxy/addons/test_script.py
@@ -12,18 +12,27 @@ from mitmproxy.test import tflow
from mitmproxy.test import tutils
-def test_load_script():
- ns = script.load_script(
- tutils.test_data.path(
- "mitmproxy/data/addonscripts/recorder/recorder.py"
+@pytest.mark.asyncio
+async def test_load_script():
+ with taddons.context() as tctx:
+ ns = script.load_script(
+ tutils.test_data.path(
+ "mitmproxy/data/addonscripts/recorder/recorder.py"
+ )
)
- )
- assert ns.addons
+ assert ns.addons
- with pytest.raises(FileNotFoundError):
script.load_script(
"nonexistent"
)
+ assert await tctx.master.await_log("No such file or directory")
+
+ script.load_script(
+ tutils.test_data.path(
+ "mitmproxy/data/addonscripts/recorder/error.py"
+ )
+ )
+ assert await tctx.master.await_log("invalid syntax")
def test_load_fullname():
diff --git a/test/mitmproxy/data/addonscripts/recorder/error.py b/test/mitmproxy/data/addonscripts/recorder/error.py
new file mode 100644
index 00000000..2e7e648a
--- /dev/null
+++ b/test/mitmproxy/data/addonscripts/recorder/error.py
@@ -0,0 +1,7 @@
+"""
+This file is intended to have syntax errors for test purposes
+"""
+
+impotr recorder # Intended Syntax Error
+
+addons = [recorder.Recorder("e")]