mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-25 18:03:50 +00:00
cleanup test utils
This commit is contained in:
parent
c1bc1ea584
commit
ec92d7f67e
@ -115,6 +115,26 @@ def tflow(client_conn=True, server_conn=True, req=True, resp=None, err=None):
|
|||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
||||||
|
def tdummyflow(client_conn=True, server_conn=True, err=None):
|
||||||
|
class DummyFlow(flow.Flow):
|
||||||
|
"""A flow that is neither HTTP nor TCP."""
|
||||||
|
|
||||||
|
def __init__(self, client_conn, server_conn, live=None):
|
||||||
|
super().__init__("dummy", client_conn, server_conn, live)
|
||||||
|
|
||||||
|
if client_conn is True:
|
||||||
|
client_conn = tclient_conn()
|
||||||
|
if server_conn is True:
|
||||||
|
server_conn = tserver_conn()
|
||||||
|
if err is True:
|
||||||
|
err = terr()
|
||||||
|
|
||||||
|
f = DummyFlow(client_conn, server_conn)
|
||||||
|
f.error = err
|
||||||
|
f.reply = controller.DummyReply()
|
||||||
|
return f
|
||||||
|
|
||||||
|
|
||||||
def tclient_conn():
|
def tclient_conn():
|
||||||
"""
|
"""
|
||||||
@return: mitmproxy.proxy.connection.ClientConnection
|
@return: mitmproxy.proxy.connection.ClientConnection
|
||||||
|
@ -11,12 +11,7 @@ from mitmproxy.net import tcp
|
|||||||
from mitmproxy.net import http
|
from mitmproxy.net import http
|
||||||
|
|
||||||
|
|
||||||
def treader(bytes):
|
test_data = data.Data(__name__).push("../../test/")
|
||||||
"""
|
|
||||||
Construct a tcp.Read object from bytes.
|
|
||||||
"""
|
|
||||||
fp = BytesIO(bytes)
|
|
||||||
return tcp.Reader(fp)
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
@ -89,7 +84,12 @@ class RaisesContext:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
test_data = data.Data(__name__).push("../../test/")
|
def treader(bytes):
|
||||||
|
"""
|
||||||
|
Construct a tcp.Read object from bytes.
|
||||||
|
"""
|
||||||
|
fp = BytesIO(bytes)
|
||||||
|
return tcp.Reader(fp)
|
||||||
|
|
||||||
|
|
||||||
def treq(**kwargs):
|
def treq(**kwargs):
|
||||||
|
@ -9,6 +9,21 @@ requires_alpn = pytest.mark.skipif(
|
|||||||
not mitmproxy.net.tcp.HAS_ALPN,
|
not mitmproxy.net.tcp.HAS_ALPN,
|
||||||
reason='requires OpenSSL with ALPN support')
|
reason='requires OpenSSL with ALPN support')
|
||||||
|
|
||||||
|
skip_windows = pytest.mark.skipif(
|
||||||
|
os.name == "nt",
|
||||||
|
reason='Skipping due to Windows'
|
||||||
|
)
|
||||||
|
|
||||||
|
skip_not_windows = pytest.mark.skipif(
|
||||||
|
os.name != "nt",
|
||||||
|
reason='Skipping due to not Windows'
|
||||||
|
)
|
||||||
|
|
||||||
|
skip_appveyor = pytest.mark.skipif(
|
||||||
|
"APPVEYOR" in os.environ,
|
||||||
|
reason='Skipping due to Appveyor'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def disable_alpn(monkeypatch):
|
def disable_alpn(monkeypatch):
|
||||||
|
@ -2,6 +2,7 @@ import traceback
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
|
import watchdog.events
|
||||||
|
|
||||||
from mitmproxy.test import tflow
|
from mitmproxy.test import tflow
|
||||||
from mitmproxy.test import tutils
|
from mitmproxy.test import tutils
|
||||||
@ -11,12 +12,9 @@ from mitmproxy import options
|
|||||||
from mitmproxy import proxy
|
from mitmproxy import proxy
|
||||||
from mitmproxy import master
|
from mitmproxy import master
|
||||||
from mitmproxy import utils
|
from mitmproxy import utils
|
||||||
|
|
||||||
from mitmproxy.addons import script
|
from mitmproxy.addons import script
|
||||||
|
|
||||||
import watchdog.events
|
from ...conftest import skip_not_windows
|
||||||
|
|
||||||
from .. import tutils as ttutils
|
|
||||||
|
|
||||||
|
|
||||||
def test_scriptenv():
|
def test_scriptenv():
|
||||||
@ -84,7 +82,7 @@ class TestParseCommand:
|
|||||||
"mitmproxy/data/addonscripts/recorder.py 'foo bar'"
|
"mitmproxy/data/addonscripts/recorder.py 'foo bar'"
|
||||||
) == ("mitmproxy/data/addonscripts/recorder.py", ["foo bar"])
|
) == ("mitmproxy/data/addonscripts/recorder.py", ["foo bar"])
|
||||||
|
|
||||||
@ttutils.skip_not_windows
|
@skip_not_windows
|
||||||
def test_parse_windows(self):
|
def test_parse_windows(self):
|
||||||
with utils.chdir(tutils.test_data.dirname):
|
with utils.chdir(tutils.test_data.dirname):
|
||||||
assert script.parse_command(
|
assert script.parse_command(
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
from mitmproxy.test import tflow
|
from mitmproxy.test import tflow
|
||||||
from mitmproxy.tools.console import common
|
from mitmproxy.tools.console import common
|
||||||
from .. import tutils
|
|
||||||
|
from ...conftest import skip_appveyor
|
||||||
|
|
||||||
|
|
||||||
@tutils.skip_appveyor
|
@skip_appveyor
|
||||||
def test_format_flow():
|
def test_format_flow():
|
||||||
f = tflow.tflow(resp=True)
|
f = tflow.tflow(resp=True)
|
||||||
assert common.format_flow(f, True)
|
assert common.format_flow(f, True)
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import mitmproxy.tools.console.help as help
|
import mitmproxy.tools.console.help as help
|
||||||
from .. import tutils
|
|
||||||
|
from ...conftest import skip_appveyor
|
||||||
|
|
||||||
|
|
||||||
@tutils.skip_appveyor
|
@skip_appveyor
|
||||||
class TestHelp:
|
class TestHelp:
|
||||||
|
|
||||||
def test_helptext(self):
|
def test_helptext(self):
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import mitmproxy.tools.console.palettes as palettes
|
import mitmproxy.tools.console.palettes as palettes
|
||||||
from .. import tutils
|
|
||||||
|
from ...conftest import skip_appveyor
|
||||||
|
|
||||||
|
|
||||||
@tutils.skip_appveyor
|
@skip_appveyor
|
||||||
class TestPalette:
|
class TestPalette:
|
||||||
|
|
||||||
def test_helptext(self):
|
def test_helptext(self):
|
||||||
|
@ -4,7 +4,6 @@ from unittest.mock import patch
|
|||||||
from mitmproxy.test import tflow
|
from mitmproxy.test import tflow
|
||||||
|
|
||||||
from mitmproxy import flowfilter
|
from mitmproxy import flowfilter
|
||||||
from . import tutils as ttutils
|
|
||||||
|
|
||||||
|
|
||||||
class TestParsing:
|
class TestParsing:
|
||||||
@ -382,10 +381,10 @@ class TestMatchingTCPFlow:
|
|||||||
class TestMatchingDummyFlow:
|
class TestMatchingDummyFlow:
|
||||||
|
|
||||||
def flow(self):
|
def flow(self):
|
||||||
return ttutils.tdummyflow()
|
return tflow.tdummyflow()
|
||||||
|
|
||||||
def err(self):
|
def err(self):
|
||||||
return ttutils.tdummyflow(err=True)
|
return tflow.tdummyflow(err=True)
|
||||||
|
|
||||||
def q(self, q, o):
|
def q(self, q, o):
|
||||||
return flowfilter.parse(q)(o)
|
return flowfilter.parse(q)(o)
|
||||||
|
@ -15,8 +15,7 @@ from pathod import test
|
|||||||
from mitmproxy.net.http import http1
|
from mitmproxy.net.http import http1
|
||||||
from mitmproxy.test import tutils
|
from mitmproxy.test import tutils
|
||||||
|
|
||||||
from . import tutils as ttutils
|
from ..conftest import skip_windows
|
||||||
|
|
||||||
|
|
||||||
class TestServerConnection:
|
class TestServerConnection:
|
||||||
|
|
||||||
@ -149,7 +148,7 @@ class TestProcessProxyOptions:
|
|||||||
class TestProxyServer:
|
class TestProxyServer:
|
||||||
# binding to 0.0.0.0:1 works without special permissions on Windows
|
# binding to 0.0.0.0:1 works without special permissions on Windows
|
||||||
|
|
||||||
@ttutils.skip_windows
|
@skip_windows
|
||||||
def test_err(self):
|
def test_err(self):
|
||||||
conf = ProxyConfig(
|
conf = ProxyConfig(
|
||||||
options.Options(listen_port=1),
|
options.Options(listen_port=1),
|
||||||
@ -173,7 +172,7 @@ class TestDummyServer:
|
|||||||
|
|
||||||
class TestConnectionHandler:
|
class TestConnectionHandler:
|
||||||
|
|
||||||
def test_fatal_error(self):
|
def test_fatal_error(self, capsys):
|
||||||
config = mock.Mock()
|
config = mock.Mock()
|
||||||
root_layer = mock.Mock()
|
root_layer = mock.Mock()
|
||||||
root_layer.side_effect = RuntimeError
|
root_layer.side_effect = RuntimeError
|
||||||
@ -189,5 +188,7 @@ class TestConnectionHandler:
|
|||||||
config,
|
config,
|
||||||
channel
|
channel
|
||||||
)
|
)
|
||||||
with ttutils.capture_stderr(c.handle) as output:
|
c.handle()
|
||||||
assert "mitmproxy has crashed" in output
|
|
||||||
|
_, err = capsys.readouterr()
|
||||||
|
assert "mitmproxy has crashed" in err
|
||||||
|
@ -21,9 +21,9 @@ from mitmproxy.net.tcp import Address
|
|||||||
from pathod import pathoc
|
from pathod import pathoc
|
||||||
from pathod import pathod
|
from pathod import pathod
|
||||||
|
|
||||||
from . import tutils as ttutils
|
|
||||||
|
|
||||||
from . import tservers
|
from . import tservers
|
||||||
|
from ..conftest import skip_appveyor
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Note that the choice of response code in these tests matters more than you
|
Note that the choice of response code in these tests matters more than you
|
||||||
@ -611,7 +611,7 @@ class TestProxy(tservers.HTTPProxyTest):
|
|||||||
assert "host" in f.request.headers
|
assert "host" in f.request.headers
|
||||||
assert f.response.status_code == 304
|
assert f.response.status_code == 304
|
||||||
|
|
||||||
@ttutils.skip_appveyor
|
@skip_appveyor
|
||||||
def test_response_timestamps(self):
|
def test_response_timestamps(self):
|
||||||
# test that we notice at least 1 sec delay between timestamps
|
# test that we notice at least 1 sec delay between timestamps
|
||||||
# in response object
|
# in response object
|
||||||
@ -622,7 +622,7 @@ class TestProxy(tservers.HTTPProxyTest):
|
|||||||
# timestamp_start might fire a bit late, so we play safe and only require 300ms.
|
# timestamp_start might fire a bit late, so we play safe and only require 300ms.
|
||||||
assert 0.3 <= response.timestamp_end - response.timestamp_start
|
assert 0.3 <= response.timestamp_end - response.timestamp_start
|
||||||
|
|
||||||
@ttutils.skip_appveyor
|
@skip_appveyor
|
||||||
def test_request_timestamps(self):
|
def test_request_timestamps(self):
|
||||||
# test that we notice a delay between timestamps in request object
|
# test that we notice a delay between timestamps in request object
|
||||||
connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
import sys
|
|
||||||
from contextlib import contextmanager
|
|
||||||
from unittest.case import SkipTest
|
|
||||||
|
|
||||||
import io
|
|
||||||
import mitmproxy.test.tutils
|
|
||||||
import os
|
|
||||||
from mitmproxy import controller
|
|
||||||
from mitmproxy import flow
|
|
||||||
import mitmproxy.test.tflow
|
|
||||||
|
|
||||||
|
|
||||||
def _skip_windows(*args):
|
|
||||||
raise SkipTest("Skipped on Windows.")
|
|
||||||
|
|
||||||
|
|
||||||
def skip_windows(fn):
|
|
||||||
if os.name == "nt":
|
|
||||||
return _skip_windows
|
|
||||||
else:
|
|
||||||
return fn
|
|
||||||
|
|
||||||
|
|
||||||
def skip_not_windows(fn):
|
|
||||||
if os.name == "nt":
|
|
||||||
return fn
|
|
||||||
else:
|
|
||||||
return _skip_windows
|
|
||||||
|
|
||||||
|
|
||||||
def _skip_appveyor(*args):
|
|
||||||
raise SkipTest("Skipped on AppVeyor.")
|
|
||||||
|
|
||||||
|
|
||||||
def skip_appveyor(fn):
|
|
||||||
if "APPVEYOR" in os.environ:
|
|
||||||
return _skip_appveyor
|
|
||||||
else:
|
|
||||||
return fn
|
|
||||||
|
|
||||||
|
|
||||||
class DummyFlow(flow.Flow):
|
|
||||||
"""A flow that is neither HTTP nor TCP."""
|
|
||||||
|
|
||||||
def __init__(self, client_conn, server_conn, live=None):
|
|
||||||
super().__init__("dummy", client_conn, server_conn, live)
|
|
||||||
|
|
||||||
|
|
||||||
def tdummyflow(client_conn=True, server_conn=True, err=None):
|
|
||||||
if client_conn is True:
|
|
||||||
client_conn = mitmproxy.test.tflow.tclient_conn()
|
|
||||||
if server_conn is True:
|
|
||||||
server_conn = mitmproxy.test.tflow.tserver_conn()
|
|
||||||
if err is True:
|
|
||||||
err = mitmproxy.test.tflow.terr()
|
|
||||||
|
|
||||||
f = DummyFlow(client_conn, server_conn)
|
|
||||||
f.error = err
|
|
||||||
f.reply = controller.DummyReply()
|
|
||||||
return f
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def capture_stderr(command, *args, **kwargs):
|
|
||||||
out, sys.stderr = sys.stderr, io.StringIO()
|
|
||||||
command(*args, **kwargs)
|
|
||||||
yield sys.stderr.getvalue()
|
|
||||||
sys.stderr = out
|
|
Loading…
Reference in New Issue
Block a user