diff options
28 files changed, 163 insertions, 168 deletions
diff --git a/mitmproxy/test/tutils.py b/mitmproxy/test/tutils.py index e925b282..f5cec1b1 100644 --- a/mitmproxy/test/tutils.py +++ b/mitmproxy/test/tutils.py @@ -20,6 +20,14 @@ def treader(bytes):  @contextmanager +def chdir(dir): +    orig_dir = os.getcwd() +    os.chdir(dir) +    yield +    os.chdir(orig_dir) + + +@contextmanager  def tmpdir(*args, **kwargs):      orig_workdir = os.getcwd()      temp_workdir = tempfile.mkdtemp(*args, **kwargs) @@ -89,7 +97,7 @@ class RaisesContext:          return True -test_data = data.Data(__name__).push("../../test/mitmproxy/net") +test_data = data.Data(__name__).push("../../test/")  def treq(**kwargs): diff --git a/mitmproxy/utils/data.py b/mitmproxy/utils/data.py index 2e68d184..12298258 100644 --- a/mitmproxy/utils/data.py +++ b/mitmproxy/utils/data.py @@ -6,6 +6,7 @@ import inspect  class Data:      def __init__(self, name): +        self.name = name          m = importlib.import_module(name)          dirname = os.path.dirname(inspect.getsourcefile(m))          self.dirname = os.path.abspath(dirname) @@ -14,8 +15,10 @@ class Data:          """              Change the data object to a path relative to the module.          """ -        self.dirname = os.path.join(self.dirname, subpath) -        return self +        dirname = os.path.join(self.dirname, subpath) +        ret = Data(self.name) +        ret.dirname = dirname +        return ret      def path(self, path):          """ diff --git a/test/mitmproxy/addons/test_filestreamer.py b/test/mitmproxy/addons/test_filestreamer.py index 49baaf3c..28094c43 100644 --- a/test/mitmproxy/addons/test_filestreamer.py +++ b/test/mitmproxy/addons/test_filestreamer.py @@ -1,6 +1,7 @@  from mitmproxy.test import tflow +from mitmproxy.test import tutils -from .. import tutils, mastertest +from .. import mastertest  import os.path diff --git a/test/mitmproxy/addons/test_replace.py b/test/mitmproxy/addons/test_replace.py index e57fd295..94efe9c3 100644 --- a/test/mitmproxy/addons/test_replace.py +++ b/test/mitmproxy/addons/test_replace.py @@ -1,6 +1,7 @@  from mitmproxy.test import tflow +from mitmproxy.test import tutils -from .. import tutils, mastertest, tservers +from .. import mastertest, tservers  from mitmproxy.addons import replace  from mitmproxy import master  from mitmproxy import options diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py index 3ce274d7..c8d7318f 100644 --- a/test/mitmproxy/addons/test_script.py +++ b/test/mitmproxy/addons/test_script.py @@ -4,6 +4,7 @@ import sys  import time  from mitmproxy.test import tflow +from mitmproxy.test import tutils  import re  from mitmproxy import exceptions  from mitmproxy import options @@ -11,7 +12,8 @@ from mitmproxy import proxy  from mitmproxy.addons import script  from mitmproxy import master -from .. import tutils, mastertest +from .. import mastertest +from .. import tutils as ttutils  class TestParseCommand: @@ -32,25 +34,25 @@ class TestParseCommand:      def test_parse_args(self):          with tutils.chdir(tutils.test_data.dirname): -            assert script.parse_command("data/addonscripts/recorder.py") == ("data/addonscripts/recorder.py", []) -            assert script.parse_command("data/addonscripts/recorder.py foo bar") == ("data/addonscripts/recorder.py", ["foo", "bar"]) -            assert script.parse_command("data/addonscripts/recorder.py 'foo bar'") == ("data/addonscripts/recorder.py", ["foo bar"]) +            assert script.parse_command("mitmproxy/data/addonscripts/recorder.py") == ("mitmproxy/data/addonscripts/recorder.py", []) +            assert script.parse_command("mitmproxy/data/addonscripts/recorder.py foo bar") == ("mitmproxy/data/addonscripts/recorder.py", ["foo", "bar"]) +            assert script.parse_command("mitmproxy/data/addonscripts/recorder.py 'foo bar'") == ("mitmproxy/data/addonscripts/recorder.py", ["foo bar"]) -    @tutils.skip_not_windows +    @ttutils.skip_not_windows      def test_parse_windows(self):          with tutils.chdir(tutils.test_data.dirname):              assert script.parse_command( -                "data\\addonscripts\\recorder.py" -            ) == ("data\\addonscripts\\recorder.py", []) +                "mitmproxy/data\\addonscripts\\recorder.py" +            ) == ("mitmproxy/data\\addonscripts\\recorder.py", [])              assert script.parse_command( -                "data\\addonscripts\\recorder.py 'foo \\ bar'" -            ) == ("data\\addonscripts\\recorder.py", ['foo \\ bar']) +                "mitmproxy/data\\addonscripts\\recorder.py 'foo \\ bar'" +            ) == ("mitmproxy/data\\addonscripts\\recorder.py", ['foo \\ bar'])  def test_load_script():      ns = script.load_script(          tutils.test_data.path( -            "data/addonscripts/recorder.py" +            "mitmproxy/data/addonscripts/recorder.py"          ), []      )      assert ns.start @@ -62,7 +64,7 @@ class TestScript(mastertest.MasterTest):          m = master.Master(o, proxy.DummyServer())          sc = script.Script(              tutils.test_data.path( -                "data/addonscripts/recorder.py" +                "mitmproxy/data/addonscripts/recorder.py"              )          )          m.addons.add(sc) @@ -100,7 +102,7 @@ class TestScript(mastertest.MasterTest):          o = options.Options()          m = mastertest.RecordingMaster(o, proxy.DummyServer())          sc = script.Script( -            tutils.test_data.path("data/addonscripts/error.py") +            tutils.test_data.path("mitmproxy/data/addonscripts/error.py")          )          m.addons.add(sc)          f = tflow.tflow(resp=True) @@ -116,7 +118,7 @@ class TestScript(mastertest.MasterTest):          m = master.Master(o, proxy.DummyServer())          sc = script.Script(              tutils.test_data.path( -                "data/addonscripts/addon.py" +                "mitmproxy/data/addonscripts/addon.py"              )          )          m.addons.add(sc) @@ -154,7 +156,7 @@ class TestScriptLoader(mastertest.MasterTest):          with m.handlecontext():              sc = sl.run_once(                  tutils.test_data.path( -                    "data/addonscripts/recorder.py" +                    "mitmproxy/data/addonscripts/recorder.py"                  ), [f]              )          evts = [i[1] for i in sc.ns.call_log] @@ -176,7 +178,7 @@ class TestScriptLoader(mastertest.MasterTest):          assert len(m.addons) == 1          o.update(              scripts = [ -                tutils.test_data.path("data/addonscripts/recorder.py") +                tutils.test_data.path("mitmproxy/data/addonscripts/recorder.py")              ]          )          assert len(m.addons) == 2 @@ -190,7 +192,7 @@ class TestScriptLoader(mastertest.MasterTest):          tutils.raises(exceptions.OptionsError, m.addons.add, o, sc)      def test_order(self): -        rec = tutils.test_data.path("data/addonscripts/recorder.py") +        rec = tutils.test_data.path("mitmproxy/data/addonscripts/recorder.py")          o = options.Options(              scripts = [ diff --git a/test/mitmproxy/addons/test_setheaders.py b/test/mitmproxy/addons/test_setheaders.py index 4cdd8e8e..d7bdef61 100644 --- a/test/mitmproxy/addons/test_setheaders.py +++ b/test/mitmproxy/addons/test_setheaders.py @@ -1,6 +1,7 @@  from mitmproxy.test import tflow +from mitmproxy.test import tutils -from .. import tutils, mastertest +from .. import mastertest  from mitmproxy.addons import setheaders  from mitmproxy import options diff --git a/test/mitmproxy/addons/test_stickycookie.py b/test/mitmproxy/addons/test_stickycookie.py index 56d1ab5d..7f1e83eb 100644 --- a/test/mitmproxy/addons/test_stickycookie.py +++ b/test/mitmproxy/addons/test_stickycookie.py @@ -1,6 +1,7 @@  from mitmproxy.test import tflow +from mitmproxy.test import tutils -from .. import tutils, mastertest +from .. import mastertest  from mitmproxy.addons import stickycookie  from mitmproxy import master  from mitmproxy import options diff --git a/test/mitmproxy/addons/test_view.py b/test/mitmproxy/addons/test_view.py index 63df8307..de752c72 100644 --- a/test/mitmproxy/addons/test_view.py +++ b/test/mitmproxy/addons/test_view.py @@ -1,11 +1,11 @@  from mitmproxy.test import tflow +from mitmproxy.test import tutils +  from mitmproxy.addons import view  from mitmproxy import flowfilter  from mitmproxy import options  from mitmproxy.test import taddons -from .. import tutils -  class Options(options.Options):      def __init__( diff --git a/test/mitmproxy/console/test_pathedit.py b/test/mitmproxy/console/test_pathedit.py index 29f8de17..feb9e7c4 100644 --- a/test/mitmproxy/console/test_pathedit.py +++ b/test/mitmproxy/console/test_pathedit.py @@ -1,18 +1,17 @@  import os  from os.path import normpath  from mitmproxy.tools.console import pathedit +from mitmproxy.test import tutils  from mock import patch -from .. import tutils -  class TestPathCompleter:      def test_lookup_construction(self):          c = pathedit._PathCompleter() -        cd = tutils.test_data.path("completion") +        cd = tutils.test_data.path("mitmproxy/completion")          ca = os.path.join(cd, "a")          assert c.complete(ca).endswith(normpath("/completion/aaa"))          assert c.complete(ca).endswith(normpath("/completion/aab")) @@ -60,7 +59,7 @@ class TestPathEdit:          with patch('urwid.widget.Edit.get_edit_text') as get_text, \                  patch('urwid.widget.Edit.set_edit_text') as set_text: -            cd = tutils.test_data.path("completion") +            cd = tutils.test_data.path("mitmproxy/completion")              get_text.return_value = os.path.join(cd, "a")              # Pressing tab should set completed path diff --git a/test/mitmproxy/net/http/test_authentication.py b/test/mitmproxy/net/http/test_authentication.py index 11b6e2e0..01eae52d 100644 --- a/test/mitmproxy/net/http/test_authentication.py +++ b/test/mitmproxy/net/http/test_authentication.py @@ -29,10 +29,10 @@ class TestPassManHtpasswd:          tutils.raises(              "malformed htpasswd file",              authentication.PassManHtpasswd, -            tutils.test_data.path("data/server.crt")) +            tutils.test_data.path("mitmproxy/net/data/server.crt"))      def test_simple(self): -        pm = authentication.PassManHtpasswd(tutils.test_data.path("data/htpasswd")) +        pm = authentication.PassManHtpasswd(tutils.test_data.path("mitmproxy/net/data/htpasswd"))          vals = ("basic", "test", "test")          authentication.assemble_http_basic_auth(*vals) @@ -118,5 +118,5 @@ class TestAuthAction:      def test_httppasswd(self):          m = Bunch()          aa = authentication.HtpasswdAuthAction(None, "authenticator") -        aa(None, m, tutils.test_data.path("data/htpasswd"), None) +        aa(None, m, tutils.test_data.path("mitmproxy/net/data/htpasswd"), None)          assert m.authenticator diff --git a/test/mitmproxy/net/test_tcp.py b/test/mitmproxy/net/test_tcp.py index 8a7c692a..151cb12b 100644 --- a/test/mitmproxy/net/test_tcp.py +++ b/test/mitmproxy/net/test_tcp.py @@ -164,7 +164,7 @@ class TestServerSSL(tservers.ServerTestBase):      handler = EchoHandler      ssl = dict(          cipher_list="AES256-SHA", -        chain_file=tutils.test_data.path("data/server.crt") +        chain_file=tutils.test_data.path("mitmproxy/net/data/server.crt")      )      def test_echo(self): @@ -203,8 +203,8 @@ class TestSSLUpstreamCertVerificationWBadServerCert(tservers.ServerTestBase):      handler = EchoHandler      ssl = dict( -        cert=tutils.test_data.path("data/verificationcerts/self-signed.crt"), -        key=tutils.test_data.path("data/verificationcerts/self-signed.key") +        cert=tutils.test_data.path("mitmproxy/net/data/verificationcerts/self-signed.crt"), +        key=tutils.test_data.path("mitmproxy/net/data/verificationcerts/self-signed.key")      )      def test_mode_default_should_pass(self): @@ -241,7 +241,7 @@ class TestSSLUpstreamCertVerificationWBadServerCert(tservers.ServerTestBase):                  c.convert_to_ssl(                      sni="example.mitmproxy.org",                      verify_options=SSL.VERIFY_PEER, -                    ca_pemfile=tutils.test_data.path("data/verificationcerts/trusted-root.crt") +                    ca_pemfile=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-root.crt")                  )              assert c.ssl_verification_error @@ -255,8 +255,8 @@ class TestSSLUpstreamCertVerificationWBadHostname(tservers.ServerTestBase):      handler = EchoHandler      ssl = dict( -        cert=tutils.test_data.path("data/verificationcerts/trusted-leaf.crt"), -        key=tutils.test_data.path("data/verificationcerts/trusted-leaf.key") +        cert=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-leaf.crt"), +        key=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-leaf.key")      )      def test_should_fail_without_sni(self): @@ -265,7 +265,7 @@ class TestSSLUpstreamCertVerificationWBadHostname(tservers.ServerTestBase):              with tutils.raises(exceptions.TlsException):                  c.convert_to_ssl(                      verify_options=SSL.VERIFY_PEER, -                    ca_pemfile=tutils.test_data.path("data/verificationcerts/trusted-root.crt") +                    ca_pemfile=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-root.crt")                  )      def test_should_fail(self): @@ -275,7 +275,7 @@ class TestSSLUpstreamCertVerificationWBadHostname(tservers.ServerTestBase):                  c.convert_to_ssl(                      sni="mitmproxy.org",                      verify_options=SSL.VERIFY_PEER, -                    ca_pemfile=tutils.test_data.path("data/verificationcerts/trusted-root.crt") +                    ca_pemfile=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-root.crt")                  )              assert c.ssl_verification_error @@ -284,8 +284,8 @@ class TestSSLUpstreamCertVerificationWValidCertChain(tservers.ServerTestBase):      handler = EchoHandler      ssl = dict( -        cert=tutils.test_data.path("data/verificationcerts/trusted-leaf.crt"), -        key=tutils.test_data.path("data/verificationcerts/trusted-leaf.key") +        cert=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-leaf.crt"), +        key=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-leaf.key")      )      def test_mode_strict_w_pemfile_should_pass(self): @@ -294,7 +294,7 @@ class TestSSLUpstreamCertVerificationWValidCertChain(tservers.ServerTestBase):              c.convert_to_ssl(                  sni="example.mitmproxy.org",                  verify_options=SSL.VERIFY_PEER, -                ca_pemfile=tutils.test_data.path("data/verificationcerts/trusted-root.crt") +                ca_pemfile=tutils.test_data.path("mitmproxy/net/data/verificationcerts/trusted-root.crt")              )              assert c.ssl_verification_error is None @@ -310,7 +310,7 @@ class TestSSLUpstreamCertVerificationWValidCertChain(tservers.ServerTestBase):              c.convert_to_ssl(                  sni="example.mitmproxy.org",                  verify_options=SSL.VERIFY_PEER, -                ca_path=tutils.test_data.path("data/verificationcerts/") +                ca_path=tutils.test_data.path("mitmproxy/net/data/verificationcerts/")              )              assert c.ssl_verification_error is None @@ -342,7 +342,7 @@ class TestSSLClientCert(tservers.ServerTestBase):          c = tcp.TCPClient(("127.0.0.1", self.port))          with c.connect():              c.convert_to_ssl( -                cert=tutils.test_data.path("data/clientcert/client.pem")) +                cert=tutils.test_data.path("mitmproxy/net/data/clientcert/client.pem"))              assert c.rfile.readline().strip() == b"1"      def test_clientcert_err(self): @@ -351,7 +351,7 @@ class TestSSLClientCert(tservers.ServerTestBase):              tutils.raises(                  exceptions.TlsException,                  c.convert_to_ssl, -                cert=tutils.test_data.path("data/clientcert/make") +                cert=tutils.test_data.path("mitmproxy/net/data/clientcert/make")              ) @@ -570,7 +570,7 @@ class TestDHParams(tservers.ServerTestBase):      handler = HangHandler      ssl = dict(          dhparams=certs.CertStore.load_dhparam( -            tutils.test_data.path("data/dhparam.pem"), +            tutils.test_data.path("mitmproxy/net/data/dhparam.pem"),          ),          cipher_list="DHE-RSA-AES256-SHA"      ) diff --git a/test/mitmproxy/net/tservers.py b/test/mitmproxy/net/tservers.py index ba10ef5e..68a2caa0 100644 --- a/test/mitmproxy/net/tservers.py +++ b/test/mitmproxy/net/tservers.py @@ -50,10 +50,10 @@ class _TServer(tcp.TCPServer):          if self.ssl is not None:              cert = self.ssl.get(                  "cert", -                tutils.test_data.path("data/server.crt")) +                tutils.test_data.path("mitmproxy/net/data/server.crt"))              raw_key = self.ssl.get(                  "key", -                tutils.test_data.path("data/server.key")) +                tutils.test_data.path("mitmproxy/net/data/server.key"))              key = OpenSSL.crypto.load_privatekey(                  OpenSSL.crypto.FILETYPE_PEM,                  open(raw_key, "rb").read()) diff --git a/test/mitmproxy/script/test_concurrent.py b/test/mitmproxy/script/test_concurrent.py index fec0d1b7..71b87d28 100644 --- a/test/mitmproxy/script/test_concurrent.py +++ b/test/mitmproxy/script/test_concurrent.py @@ -1,12 +1,16 @@  from mitmproxy.test import tflow -from test.mitmproxy import tutils, mastertest +from mitmproxy.test import tutils  from mitmproxy import controller  from mitmproxy.addons import script  from mitmproxy import options  from mitmproxy import proxy  from mitmproxy import master +  import time +from test.mitmproxy import mastertest +from test.mitmproxy import tutils as ttutils +  class Thing:      def __init__(self): @@ -15,12 +19,12 @@ class Thing:  class TestConcurrent(mastertest.MasterTest): -    @tutils.skip_appveyor +    @ttutils.skip_appveyor      def test_concurrent(self):          m = master.Master(options.Options(), proxy.DummyServer())          sc = script.Script(              tutils.test_data.path( -                "data/addonscripts/concurrent_decorator.py" +                "mitmproxy/data/addonscripts/concurrent_decorator.py"              )          )          m.addons.add(sc) @@ -37,7 +41,7 @@ class TestConcurrent(mastertest.MasterTest):          m = mastertest.RecordingMaster(options.Options(), proxy.DummyServer())          sc = script.Script(              tutils.test_data.path( -                "data/addonscripts/concurrent_decorator_err.py" +                "mitmproxy/data/addonscripts/concurrent_decorator_err.py"              )          )          with m.handlecontext(): diff --git a/test/mitmproxy/test_certs.py b/test/mitmproxy/test_certs.py index 2e706fa6..f1eff9ba 100644 --- a/test/mitmproxy/test_certs.py +++ b/test/mitmproxy/test_certs.py @@ -143,13 +143,13 @@ class TestDummyCert:  class TestSSLCert:      def test_simple(self): -        with open(tutils.test_data.path("data/text_cert"), "rb") as f: +        with open(tutils.test_data.path("mitmproxy/net/data/text_cert"), "rb") as f:              d = f.read()          c1 = certs.SSLCert.from_pem(d)          assert c1.cn == b"google.com"          assert len(c1.altnames) == 436 -        with open(tutils.test_data.path("data/text_cert_2"), "rb") as f: +        with open(tutils.test_data.path("mitmproxy/net/data/text_cert_2"), "rb") as f:              d = f.read()          c2 = certs.SSLCert.from_pem(d)          assert c2.cn == b"www.inode.co.nz" @@ -168,14 +168,14 @@ class TestSSLCert:          assert c1 != c2      def test_err_broken_sans(self): -        with open(tutils.test_data.path("data/text_cert_weird1"), "rb") as f: +        with open(tutils.test_data.path("mitmproxy/net/data/text_cert_weird1"), "rb") as f:              d = f.read()          c = certs.SSLCert.from_pem(d)          # This breaks unless we ignore a decoding error.          assert c.altnames is not None      def test_der(self): -        with open(tutils.test_data.path("data/dercert"), "rb") as f: +        with open(tutils.test_data.path("mitmproxy/net/data/dercert"), "rb") as f:              d = f.read()          s = certs.SSLCert.from_der(d)          assert s.cn diff --git a/test/mitmproxy/test_cmdline.py b/test/mitmproxy/test_cmdline.py index d664430a..d2e0c8a5 100644 --- a/test/mitmproxy/test_cmdline.py +++ b/test/mitmproxy/test_cmdline.py @@ -1,6 +1,6 @@  import argparse  from mitmproxy.tools import cmdline -from . import tutils +from mitmproxy.test import tutils  def test_parse_replace_hook(): @@ -91,7 +91,7 @@ def test_common():          opts      ) -    p = tutils.test_data.path("data/replace") +    p = tutils.test_data.path("mitmproxy/data/replace")      opts.replace_file = [("/foo/bar/%s" % p)]      v = cmdline.get_common_options(opts)["replacements"]      assert len(v) == 1 diff --git a/test/mitmproxy/test_contentview.py b/test/mitmproxy/test_contentview.py index e7d8b1f7..1f16765b 100644 --- a/test/mitmproxy/test_contentview.py +++ b/test/mitmproxy/test_contentview.py @@ -5,8 +5,7 @@ from mitmproxy.net.http import url  from mitmproxy.types import multidict  import mitmproxy.contentviews as cv -from . import tutils -import mitmproxy.test.tutils +from mitmproxy.test import tutils  try:      import pyamf @@ -117,7 +116,7 @@ class TestContentView:      def test_view_css(self):          v = cv.ViewCSS() -        with open(tutils.test_data.path('data/1.css'), 'r') as fp: +        with open(tutils.test_data.path('mitmproxy/data/1.css'), 'r') as fp:              fixture_1 = fp.read()          result = v('a') @@ -140,16 +139,16 @@ class TestContentView:      def test_view_image(self):          v = cv.ViewImage() -        p = tutils.test_data.path("data/image.png") +        p = tutils.test_data.path("mitmproxy/data/image.png")          assert v(open(p, "rb").read()) -        p = tutils.test_data.path("data/image.gif") +        p = tutils.test_data.path("mitmproxy/data/image.gif")          assert v(open(p, "rb").read()) -        p = tutils.test_data.path("data/image-err1.jpg") +        p = tutils.test_data.path("mitmproxy/data/image-err1.jpg")          assert v(open(p, "rb").read()) -        p = tutils.test_data.path("data/image.ico") +        p = tutils.test_data.path("mitmproxy/data/image.ico")          assert v(open(p, "rb").read())          assert not v(b"flibble") @@ -232,7 +231,7 @@ def test_get_content_view():  def test_get_message_content_view(): -    r = mitmproxy.test.tutils.treq() +    r = tutils.treq()      desc, lines, err = cv.get_message_content_view("raw", r)      assert desc == "Raw" @@ -253,22 +252,22 @@ if pyamf:      def test_view_amf_request():          v = cv.ViewAMF() -        p = tutils.test_data.path("data/amf01") +        p = tutils.test_data.path("mitmproxy/data/amf01")          assert v(open(p, "rb").read()) -        p = tutils.test_data.path("data/amf02") +        p = tutils.test_data.path("mitmproxy/data/amf02")          assert v(open(p, "rb").read())      def test_view_amf_response():          v = cv.ViewAMF() -        p = tutils.test_data.path("data/amf03") +        p = tutils.test_data.path("mitmproxy/data/amf03")          assert v(open(p, "rb").read())  if cv.ViewProtobuf.is_available():      def test_view_protobuf_request():          v = cv.ViewProtobuf() -        p = tutils.test_data.path("data/protobuf01") +        p = tutils.test_data.path("mitmproxy/data/protobuf01")          content_type, output = v(open(p, "rb").read())          assert content_type == "Protobuf"          assert output.next()[0][1] == '1: "3bbc333c-e61c-433b-819a-0b9a8cc103b8"' diff --git a/test/mitmproxy/test_controller.py b/test/mitmproxy/test_controller.py index 3bcb7013..5cc36532 100644 --- a/test/mitmproxy/test_controller.py +++ b/test/mitmproxy/test_controller.py @@ -1,4 +1,3 @@ -from test.mitmproxy import tutils  from threading import Thread, Event  from mock import Mock @@ -9,7 +8,7 @@ import queue  from mitmproxy.exceptions import Kill, ControlException  from mitmproxy import proxy  from mitmproxy import master -from mitmproxy.test.tutils import raises +from mitmproxy.test import tutils  class TMsg: @@ -81,7 +80,7 @@ class TestChannel:          done = Event()          done.set()          channel = controller.Channel(q, done) -        with raises(Kill): +        with tutils.raises(Kill):              channel.ask("test", Mock(name="test_ask_shutdown")) diff --git a/test/mitmproxy/test_dump.py b/test/mitmproxy/test_dump.py index 8d699984..aa3228e4 100644 --- a/test/mitmproxy/test_dump.py +++ b/test/mitmproxy/test_dump.py @@ -6,7 +6,8 @@ import mitmproxy.io  from mitmproxy.tools import dump  from mitmproxy import exceptions  from mitmproxy import proxy -from . import tutils, mastertest +from mitmproxy.test import tutils +from . import mastertest  class TestDumpMaster(mastertest.MasterTest): @@ -156,7 +157,7 @@ class TestDumpMaster(mastertest.MasterTest):          ret = self.dummy_cycle(              self.mkmaster(                  None, -                scripts=[tutils.test_data.path("data/scripts/all.py")], +                scripts=[tutils.test_data.path("mitmproxy/data/scripts/all.py")],                  verbosity=2              ),              1, b"", diff --git a/test/mitmproxy/test_examples.py b/test/mitmproxy/test_examples.py index 4275b3c8..7f194a18 100644 --- a/test/mitmproxy/test_examples.py +++ b/test/mitmproxy/test_examples.py @@ -8,16 +8,15 @@ from mitmproxy import options  from mitmproxy import contentviews  from mitmproxy import proxy  from mitmproxy.addons import script -from mitmproxy.utils import data  from mitmproxy import master -from mitmproxy.test import tutils as netutils +from mitmproxy.test import tutils  from mitmproxy.net.http import Headers  from mitmproxy.net.http import cookies -from . import tutils, mastertest +from . import mastertest -example_dir = data.Data(__name__).push("../../examples") +example_dir = tutils.test_data.push("../examples")  class ScriptError(Exception): @@ -42,7 +41,7 @@ def tscript(cmd, args=""):  class TestScripts(mastertest.MasterTest):      def test_add_header(self):          m, _ = tscript("add_header.py") -        f = tflow.tflow(resp=netutils.tresp()) +        f = tflow.tflow(resp=tutils.tresp())          m.response(f)          assert f.response.headers["newheader"] == "foo" @@ -58,7 +57,7 @@ class TestScripts(mastertest.MasterTest):              tscript("iframe_injector.py")          m, sc = tscript("iframe_injector.py", "http://example.org/evil_iframe") -        f = tflow.tflow(resp=netutils.tresp(content=b"<html>mitmproxy</html>")) +        f = tflow.tflow(resp=tutils.tresp(content=b"<html>mitmproxy</html>"))          m.response(f)          content = f.response.content          assert b'iframe' in content and b'evil_iframe' in content @@ -67,7 +66,7 @@ class TestScripts(mastertest.MasterTest):          m, sc = tscript("modify_form.py")          form_header = Headers(content_type="application/x-www-form-urlencoded") -        f = tflow.tflow(req=netutils.treq(headers=form_header)) +        f = tflow.tflow(req=tutils.treq(headers=form_header))          m.request(f)          assert f.request.urlencoded_form[b"mitmproxy"] == b"rocks" @@ -78,7 +77,7 @@ class TestScripts(mastertest.MasterTest):      def test_modify_querystring(self):          m, sc = tscript("modify_querystring.py") -        f = tflow.tflow(req=netutils.treq(path="/search?q=term")) +        f = tflow.tflow(req=tutils.treq(path="/search?q=term"))          m.request(f)          assert f.request.query["mitmproxy"] == "rocks" @@ -89,13 +88,13 @@ class TestScripts(mastertest.MasterTest):      def test_arguments(self):          m, sc = tscript("arguments.py", "mitmproxy rocks") -        f = tflow.tflow(resp=netutils.tresp(content=b"I <3 mitmproxy")) +        f = tflow.tflow(resp=tutils.tresp(content=b"I <3 mitmproxy"))          m.response(f)          assert f.response.content == b"I <3 rocks"      def test_redirect_requests(self):          m, sc = tscript("redirect_requests.py") -        f = tflow.tflow(req=netutils.treq(host="example.org")) +        f = tflow.tflow(req=tutils.treq(host="example.org"))          m.request(f)          assert f.request.host == "mitmproxy.org" @@ -110,8 +109,8 @@ class TestHARDump:          # Create a dummy flow for testing          return tflow.tflow( -            req=netutils.treq(method=b'GET', **times), -            resp=netutils.tresp(content=resp_content, **times) +            req=tutils.treq(method=b'GET', **times), +            resp=tutils.tresp(content=resp_content, **times)          )      def test_no_file_arg(self): diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py index 295e2bea..c297e8f9 100644 --- a/test/mitmproxy/test_flow.py +++ b/test/mitmproxy/test_flow.py @@ -2,7 +2,7 @@ from mitmproxy.test import tflow  import mock  import io -import mitmproxy.test.tutils +from mitmproxy.test import tutils  from mitmproxy.net.http import Headers  import mitmproxy.io  from mitmproxy import flowfilter, options @@ -14,7 +14,7 @@ from mitmproxy import connections  from mitmproxy.proxy import ProxyConfig  from mitmproxy.proxy.server import DummyServer  from mitmproxy import master -from . import tutils, tservers +from . import tservers  class TestHTTPFlow: diff --git a/test/mitmproxy/test_flow_export.py b/test/mitmproxy/test_flow_export.py index bf675d50..457d8836 100644 --- a/test/mitmproxy/test_flow_export.py +++ b/test/mitmproxy/test_flow_export.py @@ -1,10 +1,9 @@  from mitmproxy.test import tflow  import re -import mitmproxy.test.tutils  from mitmproxy.net.http import Headers  from mitmproxy import export  # heh -from . import tutils +from mitmproxy.test import tutils  def clean_blanks(s): @@ -21,15 +20,15 @@ def python_equals(testdata, text):  def req_get(): -    return mitmproxy.test.tutils.treq(method=b'GET', content=b'', path=b"/path?a=foo&a=bar&b=baz") +    return tutils.treq(method=b'GET', content=b'', path=b"/path?a=foo&a=bar&b=baz")  def req_post(): -    return mitmproxy.test.tutils.treq(method=b'POST', headers=()) +    return tutils.treq(method=b'POST', headers=())  def req_patch(): -    return mitmproxy.test.tutils.treq(method=b'PATCH', path=b"/path?query=param") +    return tutils.treq(method=b'PATCH', path=b"/path?query=param")  class TestExportCurlCommand: @@ -52,53 +51,53 @@ class TestExportCurlCommand:  class TestExportPythonCode:      def test_get(self):          flow = tflow.tflow(req=req_get()) -        python_equals("data/test_flow_export/python_get.py", export.python_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/python_get.py", export.python_code(flow))      def test_post(self):          flow = tflow.tflow(req=req_post()) -        python_equals("data/test_flow_export/python_post.py", export.python_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/python_post.py", export.python_code(flow))      def test_post_json(self):          p = req_post()          p.content = b'{"name": "example", "email": "example@example.com"}'          p.headers = Headers(content_type="application/json")          flow = tflow.tflow(req=p) -        python_equals("data/test_flow_export/python_post_json.py", export.python_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/python_post_json.py", export.python_code(flow))      def test_patch(self):          flow = tflow.tflow(req=req_patch()) -        python_equals("data/test_flow_export/python_patch.py", export.python_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/python_patch.py", export.python_code(flow))  class TestExportLocustCode:      def test_get(self):          flow = tflow.tflow(req=req_get()) -        python_equals("data/test_flow_export/locust_get.py", export.locust_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/locust_get.py", export.locust_code(flow))      def test_post(self):          p = req_post()          p.content = b'content'          p.headers = ''          flow = tflow.tflow(req=p) -        python_equals("data/test_flow_export/locust_post.py", export.locust_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/locust_post.py", export.locust_code(flow))      def test_patch(self):          flow = tflow.tflow(req=req_patch()) -        python_equals("data/test_flow_export/locust_patch.py", export.locust_code(flow)) +        python_equals("mitmproxy/data/test_flow_export/locust_patch.py", export.locust_code(flow))  class TestExportLocustTask:      def test_get(self):          flow = tflow.tflow(req=req_get()) -        python_equals("data/test_flow_export/locust_task_get.py", export.locust_task(flow)) +        python_equals("mitmproxy/data/test_flow_export/locust_task_get.py", export.locust_task(flow))      def test_post(self):          flow = tflow.tflow(req=req_post()) -        python_equals("data/test_flow_export/locust_task_post.py", export.locust_task(flow)) +        python_equals("mitmproxy/data/test_flow_export/locust_task_post.py", export.locust_task(flow))      def test_patch(self):          flow = tflow.tflow(req=req_patch()) -        python_equals("data/test_flow_export/locust_task_patch.py", export.locust_task(flow)) +        python_equals("mitmproxy/data/test_flow_export/locust_task_patch.py", export.locust_task(flow))  class TestURL: diff --git a/test/mitmproxy/test_flow_format_compat.py b/test/mitmproxy/test_flow_format_compat.py index 4997aff9..0bb9cf15 100644 --- a/test/mitmproxy/test_flow_format_compat.py +++ b/test/mitmproxy/test_flow_format_compat.py @@ -1,10 +1,10 @@  from mitmproxy import io  from mitmproxy import exceptions -from . import tutils +from mitmproxy.test import tutils  def test_load(): -    with open(tutils.test_data.path("data/dumpfile-011"), "rb") as f: +    with open(tutils.test_data.path("mitmproxy/data/dumpfile-011"), "rb") as f:          flow_reader = io.FlowReader(f)          flows = list(flow_reader.stream())          assert len(flows) == 1 @@ -12,7 +12,7 @@ def test_load():  def test_cannot_convert(): -    with open(tutils.test_data.path("data/dumpfile-010"), "rb") as f: +    with open(tutils.test_data.path("mitmproxy/data/dumpfile-010"), "rb") as f:          flow_reader = io.FlowReader(f)          with tutils.raises(exceptions.FlowReadException):              list(flow_reader.stream()) diff --git a/test/mitmproxy/test_flowfilter.py b/test/mitmproxy/test_flowfilter.py index 16d61d25..a1b77c05 100644 --- a/test/mitmproxy/test_flowfilter.py +++ b/test/mitmproxy/test_flowfilter.py @@ -3,8 +3,8 @@ from mitmproxy.test import tflow  from mock import patch  from mitmproxy import flowfilter - -from . import tutils +from mitmproxy.test import tutils +from . import tutils as ttutils  class TestParsing: @@ -382,10 +382,10 @@ class TestMatchingTCPFlow:  class TestMatchingDummyFlow:      def flow(self): -        return tutils.tdummyflow() +        return ttutils.tdummyflow()      def err(self): -        return tutils.tdummyflow(err=True) +        return ttutils.tdummyflow(err=True)      def q(self, q, o):          return flowfilter.parse(q)(o) diff --git a/test/mitmproxy/test_platform_pf.py b/test/mitmproxy/test_platform_pf.py index 5082fafb..29ecb842 100644 --- a/test/mitmproxy/test_platform_pf.py +++ b/test/mitmproxy/test_platform_pf.py @@ -1,16 +1,16 @@  import sys  from mitmproxy.platform import pf -from . import tutils +from mitmproxy.test import tutils  class TestLookup:      def test_simple(self):          if sys.platform == "freebsd10": -            p = tutils.test_data.path("data/pf02") +            p = tutils.test_data.path("mitmproxy/data/pf02")              d = open(p, "rb").read()          else: -            p = tutils.test_data.path("data/pf01") +            p = tutils.test_data.path("mitmproxy/data/pf01")              d = open(p, "rb").read()          assert pf.lookup("192.168.1.111", 40000, d) == ("5.5.5.5", 80)          tutils.raises( diff --git a/test/mitmproxy/test_proxy.py b/test/mitmproxy/test_proxy.py index ab210e65..7cadb6c2 100644 --- a/test/mitmproxy/test_proxy.py +++ b/test/mitmproxy/test_proxy.py @@ -13,7 +13,9 @@ from mitmproxy.proxy import config  from mitmproxy import exceptions  from pathod import test  from mitmproxy.net.http import http1 -from . import tutils +from mitmproxy.test import tutils + +from . import tutils as ttutils  class TestServerConnection: @@ -127,7 +129,7 @@ class TestProcessProxyOptions:              self.assert_noerr("--client-certs", cadir)              self.assert_noerr(                  "--client-certs", -                os.path.join(tutils.test_data.path("data/clientcert"), "client.pem")) +                os.path.join(tutils.test_data.path("mitmproxy/data/clientcert"), "client.pem"))              self.assert_err(                  "path does not exist",                  "--client-certs", @@ -136,7 +138,7 @@ class TestProcessProxyOptions:      def test_certs(self):          self.assert_noerr(              "--cert", -            tutils.test_data.path("data/testkey.pem")) +            tutils.test_data.path("mitmproxy/data/testkey.pem"))          self.assert_err("does not exist", "--cert", "nonexistent")      def test_auth(self): @@ -145,12 +147,12 @@ class TestProcessProxyOptions:          p = self.assert_noerr(              "--htpasswd", -            tutils.test_data.path("data/htpasswd")) +            tutils.test_data.path("mitmproxy/data/htpasswd"))          assert p.authenticator          self.assert_err(              "malformed htpasswd file",              "--htpasswd", -            tutils.test_data.path("data/htpasswd.invalid")) +            tutils.test_data.path("mitmproxy/data/htpasswd.invalid"))          p = self.assert_noerr("--singleuser", "test:test")          assert p.authenticator @@ -177,7 +179,7 @@ class TestProcessProxyOptions:  class TestProxyServer:      # binding to 0.0.0.0:1 works without special permissions on Windows -    @tutils.skip_windows +    @ttutils.skip_windows      def test_err(self):          conf = ProxyConfig(              options.Options(listen_port=1), @@ -217,5 +219,5 @@ class TestConnectionHandler:              config,              channel          ) -        with tutils.capture_stderr(c.handle) as output: +        with ttutils.capture_stderr(c.handle) as output:              assert "mitmproxy has crashed" in output diff --git a/test/mitmproxy/test_proxy_config.py b/test/mitmproxy/test_proxy_config.py index d8085eb8..e012cb5e 100644 --- a/test/mitmproxy/test_proxy_config.py +++ b/test/mitmproxy/test_proxy_config.py @@ -1,4 +1,4 @@ -from . import tutils +from mitmproxy.test import tutils  import base64  from mitmproxy.proxy import config diff --git a/test/mitmproxy/test_server.py b/test/mitmproxy/test_server.py index 74cb5ae8..9fa6ed06 100644 --- a/test/mitmproxy/test_server.py +++ b/test/mitmproxy/test_server.py @@ -2,7 +2,7 @@ import os  import socket  import time -import mitmproxy.test.tutils +from mitmproxy.test import tutils  from mitmproxy import controller  from mitmproxy import options  from mitmproxy.addons import script @@ -16,11 +16,12 @@ from mitmproxy import exceptions  from mitmproxy.net.http import authentication  from mitmproxy.net.http import http1  from mitmproxy.net.tcp import Address -from mitmproxy.test.tutils import raises  from pathod import pathoc  from pathod import pathod -from . import tutils, tservers +from . import tutils as ttutils + +from . import tservers  """      Note that the choice of response code in these tests matters more than you @@ -159,7 +160,7 @@ class TcpMixin:          # mitmproxy responds with bad gateway          assert self.pathod(spec).status_code == 502          self._ignore_on() -        with raises(exceptions.HttpException): +        with tutils.raises(exceptions.HttpException):              self.pathod(spec)  # pathoc tries to parse answer as HTTP          self._ignore_off() @@ -238,7 +239,7 @@ class TestHTTP(tservers.HTTPProxyTest, CommonMixin):              # There's a race here, which means we can get any of a number of errors.              # Rather than introduce yet another sleep into the test suite, we just              # relax the Exception specification. -            with raises(Exception): +            with tutils.raises(Exception):                  p.request("get:'%s'" % response)      def test_reconnect(self): @@ -277,7 +278,7 @@ class TestHTTP(tservers.HTTPProxyTest, CommonMixin):      def test_stream_modify(self):          s = script.Script( -            tutils.test_data.path("data/addonscripts/stream_modify.py") +            tutils.test_data.path("mitmproxy/data/addonscripts/stream_modify.py")          )          self.master.addons.add(s)          d = self.pathod('200:b"foo"') @@ -327,7 +328,7 @@ class TestHTTPS(tservers.HTTPProxyTest, CommonMixin, TcpMixin):      def test_clientcert_file(self):          try:              self.config.clientcerts = os.path.join( -                tutils.test_data.path("data/clientcert"), "client.pem") +                tutils.test_data.path("mitmproxy/data/clientcert"), "client.pem")              f = self.pathod("304")              assert f.status_code == 304              assert self.server.last_log()["request"]["clientcert"]["keyinfo"] @@ -336,7 +337,7 @@ class TestHTTPS(tservers.HTTPProxyTest, CommonMixin, TcpMixin):      def test_clientcert_dir(self):          try: -            self.config.clientcerts = tutils.test_data.path("data/clientcert") +            self.config.clientcerts = tutils.test_data.path("mitmproxy/data/clientcert")              f = self.pathod("304")              assert f.status_code == 304              assert self.server.last_log()["request"]["clientcert"]["keyinfo"] @@ -375,7 +376,7 @@ class TestHTTPSUpstreamServerVerificationWTrustedCert(tservers.HTTPProxyTest):      ssloptions = pathod.SSLOptions(          cn=b"example.mitmproxy.org",          certs=[ -            ("example.mitmproxy.org", tutils.test_data.path("data/servercert/trusted-leaf.pem")) +            ("example.mitmproxy.org", tutils.test_data.path("mitmproxy/data/servercert/trusted-leaf.pem"))          ]      ) @@ -388,7 +389,7 @@ class TestHTTPSUpstreamServerVerificationWTrustedCert(tservers.HTTPProxyTest):          self.config.options.update(              ssl_insecure=False,              ssl_verify_upstream_trusted_cadir=tutils.test_data.path( -                "data/servercert/" +                "mitmproxy/data/servercert/"              ),              ssl_verify_upstream_trusted_ca=None,          ) @@ -399,7 +400,7 @@ class TestHTTPSUpstreamServerVerificationWTrustedCert(tservers.HTTPProxyTest):              ssl_insecure=False,              ssl_verify_upstream_trusted_cadir=None,              ssl_verify_upstream_trusted_ca=tutils.test_data.path( -                "data/servercert/trusted-root.pem" +                "mitmproxy/data/servercert/trusted-root.pem"              ),          )          assert self._request().status_code == 242 @@ -414,7 +415,7 @@ class TestHTTPSUpstreamServerVerificationWBadCert(tservers.HTTPProxyTest):      ssloptions = pathod.SSLOptions(          cn=b"example.mitmproxy.org",          certs=[ -            ("example.mitmproxy.org", tutils.test_data.path("data/servercert/self-signed.pem")) +            ("example.mitmproxy.org", tutils.test_data.path("mitmproxy/data/servercert/self-signed.pem"))          ])      def _request(self): @@ -426,7 +427,7 @@ class TestHTTPSUpstreamServerVerificationWBadCert(tservers.HTTPProxyTest):      def get_options(cls):          opts = super().get_options()          opts.ssl_verify_upstream_trusted_ca = tutils.test_data.path( -            "data/servercert/trusted-root.pem" +            "mitmproxy/data/servercert/trusted-root.pem"          )          return opts @@ -453,7 +454,7 @@ class TestHTTPSNoCommonName(tservers.HTTPProxyTest):      ssl = True      ssloptions = pathod.SSLOptions(          certs=[ -            (b"*", tutils.test_data.path("data/no_common_name.pem")) +            (b"*", tutils.test_data.path("mitmproxy/data/no_common_name.pem"))          ]      ) @@ -563,7 +564,7 @@ class TestTransparent(tservers.TransparentProxyTest, CommonMixin, TcpMixin):      def test_tcp_stream_modify(self):          s = script.Script( -            tutils.test_data.path("data/addonscripts/tcp_stream_modify.py") +            tutils.test_data.path("mitmproxy/data/addonscripts/tcp_stream_modify.py")          )          self.master.addons.add(s)          self._tcpproxy_on() @@ -594,7 +595,7 @@ class TestProxy(tservers.HTTPProxyTest):          assert "host" in f.request.headers          assert f.response.status_code == 304 -    @tutils.skip_appveyor +    @ttutils.skip_appveyor      def test_response_timestamps(self):          # test that we notice at least 1 sec delay between timestamps          # in response object @@ -605,7 +606,7 @@ class TestProxy(tservers.HTTPProxyTest):          # timestamp_start might fire a bit late, so we play safe and only require 300ms.          assert 0.3 <= response.timestamp_end - response.timestamp_start -    @tutils.skip_appveyor +    @ttutils.skip_appveyor      def test_request_timestamps(self):          # test that we notice a delay between timestamps in request object          connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -833,7 +834,7 @@ class TestKillRequest(tservers.HTTPProxyTest):      masterclass = MasterKillRequest      def test_kill(self): -        with raises(exceptions.HttpReadDisconnect): +        with tutils.raises(exceptions.HttpReadDisconnect):              self.pathod("200")          # Nothing should have hit the server          assert not self.server.last_log() @@ -850,7 +851,7 @@ class TestKillResponse(tservers.HTTPProxyTest):      masterclass = MasterKillResponse      def test_kill(self): -        with raises(exceptions.HttpReadDisconnect): +        with tutils.raises(exceptions.HttpReadDisconnect):              self.pathod("200")          # The server should have seen a request          assert self.server.last_log() @@ -1042,7 +1043,7 @@ class TestProxyChainingSSLReconnect(tservers.HTTPUpstreamProxyTest):  class AddUpstreamCertsToClientChainMixin:      ssl = True -    servercert = tutils.test_data.path("data/servercert/trusted-root.pem") +    servercert = tutils.test_data.path("mitmproxy/data/servercert/trusted-root.pem")      ssloptions = pathod.SSLOptions(          cn=b"example.mitmproxy.org",          certs=[ diff --git a/test/mitmproxy/tutils.py b/test/mitmproxy/tutils.py index e95c5ea3..35e3295d 100644 --- a/test/mitmproxy/tutils.py +++ b/test/mitmproxy/tutils.py @@ -5,12 +5,9 @@ from unittest.case import SkipTest  import io  import mitmproxy.test.tutils  import os -import shutil -import tempfile  from mitmproxy import controller  from mitmproxy import flow  import mitmproxy.test.tflow -from mitmproxy.utils import data  def _skip_windows(*args): @@ -64,30 +61,8 @@ def tdummyflow(client_conn=True, server_conn=True, err=None):  @contextmanager -def chdir(dir): -    orig_dir = os.getcwd() -    os.chdir(dir) -    yield -    os.chdir(orig_dir) - - -@contextmanager -def tmpdir(*args, **kwargs): -    temp_workdir = tempfile.mkdtemp(*args, **kwargs) -    with chdir(temp_workdir): -        yield temp_workdir -    shutil.rmtree(temp_workdir) - - -raises = mitmproxy.test.tutils.raises - - -@contextmanager  def capture_stderr(command, *args, **kwargs):      out, sys.stderr = sys.stderr, io.StringIO()      command(*args, **kwargs)      yield sys.stderr.getvalue()      sys.stderr = out - - -test_data = data.Data(__name__)  | 
