aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2015-09-21 23:03:45 +0200
committerMaximilian Hils <git@maximilianhils.com>2015-09-21 23:03:45 +0200
commit2f670bac99943404952ebd5e76490e9643e50297 (patch)
treeb6b25128692be754084aa35c95191400ef592b95
parent2da4aaf1ede8310bb14c22e82248002b97b5f3e5 (diff)
downloadmitmproxy-2f670bac99943404952ebd5e76490e9643e50297.tar.gz
mitmproxy-2f670bac99943404952ebd5e76490e9643e50297.tar.bz2
mitmproxy-2f670bac99943404952ebd5e76490e9643e50297.zip
fix tests, use pytest
We currently test with unparallelized builds, because there are apparently some race conditions in the test suite, which I can't trigger locally but happen on travis. Squashed commit of the following: commit 7dceb6dd3a1bdbc39688258bc4dff6eee685a33b Author: Maximilian Hils <git@maximilianhils.com> Date: Mon Sep 21 23:00:24 2015 +0200 disable parallelized tests commit fc0c3f12ee9259162e83026851362925d93b69f2 Author: Maximilian Hils <git@maximilianhils.com> Date: Mon Sep 21 22:49:19 2015 +0200 fix tests commit baba3ca5ef49bdbd7aad14f1bf0626738fa3d21c Author: Maximilian Hils <git@maximilianhils.com> Date: Mon Sep 21 22:28:20 2015 +0200 fix tests, use py.test
-rw-r--r--.appveyor.yml2
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml4
-rw-r--r--examples/test_context.py2
-rw-r--r--examples/test_setup.py6
-rw-r--r--examples/test_setupall.py8
-rw-r--r--libpathod/language/websockets.py2
-rw-r--r--setup.py5
-rw-r--r--test/test_language_base.py5
-rw-r--r--test/test_language_websocket.py7
-rw-r--r--test/test_pathoc.py12
-rw-r--r--test/test_pathoc_cmdline.py13
-rw-r--r--test/tutils.py84
13 files changed, 50 insertions, 101 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
index 4e690c06..dbb6d2fa 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -8,4 +8,4 @@ install:
- "%PYTHON%\\python -c \"from OpenSSL import SSL; print(SSL.SSLeay_version(SSL.SSLEAY_VERSION))\""
build: off # Not a C# project
test_script:
- - "%PYTHON%\\Scripts\\nosetests" \ No newline at end of file
+ - "%PYTHON%\\Scripts\\py.test -n 4" \ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 4c8c70a2..7eeeb614 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@ netlib
venv
.idea/
pathod.egg-info/
+.cache/ \ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index cdc57851..832c2501 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -38,7 +38,7 @@ before_script:
- "openssl version -a"
script:
- - "nosetests --with-cov --cov-report term-missing"
+ - "py.test --cov pathod -v"
after_success:
- coveralls
@@ -51,7 +51,7 @@ notifications:
on_failure: always
slack:
rooms:
- - mitmproxy:YaDGC9Gt9TEM7o8zkC2OLNsu
+ - mitmproxy:YaDGC9Gt9TEM7o8zkC2OLNsu
on_success: change
on_failure: always
diff --git a/examples/test_context.py b/examples/test_context.py
index 1f0a7f8b..7c0386c1 100644
--- a/examples/test_context.py
+++ b/examples/test_context.py
@@ -16,7 +16,7 @@ def test_simple():
# Check the returned data
assert r.status_code == 200
- assert len(r.body) == 100
+ assert len(r.content) == 100
# Check pathod's internal log
log = d.last_log()["request"]
diff --git a/examples/test_setup.py b/examples/test_setup.py
index c6e52d00..6085c98a 100644
--- a/examples/test_setup.py
+++ b/examples/test_setup.py
@@ -10,10 +10,10 @@ class Test:
each test.
"""
- def setUp(self):
+ def setup(self):
self.d = test.Daemon()
- def tearDown(self):
+ def teardown(self):
self.d.shutdown()
def test_simple(self):
@@ -24,7 +24,7 @@ class Test:
# Check the returned data
assert r.status_code == 200
- assert len(r.body) == 100
+ assert len(r.content) == 100
# Check pathod's internal log
log = self.d.last_log()["request"]
diff --git a/examples/test_setupall.py b/examples/test_setupall.py
index ddf4d905..f0ba5844 100644
--- a/examples/test_setupall.py
+++ b/examples/test_setupall.py
@@ -10,14 +10,14 @@ class Test:
for the test suite.
"""
@classmethod
- def setUpAll(cls):
+ def setup_class(cls):
cls.d = test.Daemon()
@classmethod
- def tearDownAll(cls):
+ def teardown_class(cls):
cls.d.shutdown()
- def setUp(self):
+ def setup(self):
# Clear the pathod logs between tests
self.d.clear_log()
@@ -29,7 +29,7 @@ class Test:
# Check the returned data
assert r.status_code == 200
- assert len(r.body) == 100
+ assert len(r.content) == 100
# Check pathod's internal log
log = self.d.last_log()["request"]
diff --git a/libpathod/language/websockets.py b/libpathod/language/websockets.py
index 2c0231e6..ea7c870e 100644
--- a/libpathod/language/websockets.py
+++ b/libpathod/language/websockets.py
@@ -212,7 +212,7 @@ class WebsocketFrame(message.Message):
if v is not None:
frameparts[i] = v.value
frame = netlib.websockets.FrameHeader(**frameparts)
- vals = [frame.to_bytes()]
+ vals = [bytes(frame)]
if bodygen:
if frame.masking_key and not self.rawbody:
masker = netlib.websockets.Masker(frame.masking_key)
diff --git a/setup.py b/setup.py
index 041b164d..7acb23b5 100644
--- a/setup.py
+++ b/setup.py
@@ -56,8 +56,9 @@ setup(
extras_require={
'dev': [
"mock>=1.0.1",
- "nose>=1.3.0",
- "nose-cov>=1.6",
+ "pytest>=2.8.0",
+ "pytest-xdist>=1.13.1",
+ "pytest-cov>=2.1.0",
"coveralls>=0.4.1"
]
}
diff --git a/test/test_language_base.py b/test/test_language_base.py
index 7a9d2a54..b18ee5b2 100644
--- a/test/test_language_base.py
+++ b/test/test_language_base.py
@@ -2,7 +2,6 @@ import os
from libpathod import language
from libpathod.language import base, exceptions
import tutils
-import nose.tools as nt
def parse_request(s):
@@ -63,8 +62,8 @@ class TestTokValueLiteral:
e = base.TokValueLiteral.expr()
v = base.TokValueLiteral(spec)
v2 = e.parseString(v.spec())
- nt.assert_equal(v.val, v2[0].val)
- nt.assert_equal(v.spec(), v2[0].spec())
+ assert v.val == v2[0].val
+ assert v.spec() == v2[0].spec()
def test_roundtrip(self):
self.roundtrip("'")
diff --git a/test/test_language_websocket.py b/test/test_language_websocket.py
index 8878f355..d98fd33e 100644
--- a/test/test_language_websocket.py
+++ b/test/test_language_websocket.py
@@ -131,11 +131,8 @@ class TestWebsocketFrame:
assert frm.payload == "abc"
def test_knone(self):
- tutils.raises(
- "expected 4 bytes",
- self.fr,
- "wf:b'foo':mask:knone",
- )
+ with tutils.raises("expected 4 bytes"):
+ self.fr("wf:b'foo':mask:knone")
def test_length(self):
assert self.fr("wf:l3:b'foo'").header.payload_length == 3
diff --git a/test/test_pathoc.py b/test/test_pathoc.py
index 6c0bf039..72af8b13 100644
--- a/test/test_pathoc.py
+++ b/test/test_pathoc.py
@@ -22,10 +22,10 @@ class _TestDaemon:
ssloptions = pathod.SSLOptions()
@classmethod
- def setUpAll(self):
- self.d = test.Daemon(
- ssl=self.ssl,
- ssloptions=self.ssloptions,
+ def setup_class(cls):
+ cls.d = test.Daemon(
+ ssl=cls.ssl,
+ ssloptions=cls.ssloptions,
staticdir=tutils.test_data.path("data"),
anchors=[
(re.compile("/anchor/.*"), "202")
@@ -33,8 +33,8 @@ class _TestDaemon:
)
@classmethod
- def tearDownAll(self):
- self.d.shutdown()
+ def teardown_class(cls):
+ cls.d.shutdown()
def setUp(self):
self.d.clear_log()
diff --git a/test/test_pathoc_cmdline.py b/test/test_pathoc_cmdline.py
index 6c070aed..74dfef57 100644
--- a/test/test_pathoc_cmdline.py
+++ b/test/test_pathoc_cmdline.py
@@ -8,9 +8,8 @@ import mock
def test_pathoc(perror):
assert cmdline.args_pathoc(["pathoc", "foo.com", "get:/"])
s = cStringIO.StringIO()
- tutils.raises(
- SystemExit, cmdline.args_pathoc, [
- "pathoc", "--show-uas"], s, s)
+ with tutils.raises(SystemExit):
+ cmdline.args_pathoc(["pathoc", "--show-uas"], s, s)
a = cmdline.args_pathoc(["pathoc", "foo.com:8888", "get:/"])
assert a.port == 8888
@@ -56,9 +55,5 @@ def test_pathoc(perror):
)
assert len(list(a.requests)) == 1
- tutils.raises(
- SystemExit,
- cmdline.args_pathoc,
- ["pathoc", "foo.com", "invalid"],
- s, s
- )
+ with tutils.raises(SystemExit):
+ cmdline.args_pathoc(["pathoc", "foo.com", "invalid"], s, s)
diff --git a/test/tutils.py b/test/tutils.py
index a728e852..ceef1c15 100644
--- a/test/tutils.py
+++ b/test/tutils.py
@@ -4,6 +4,8 @@ import re
import shutil
import cStringIO
from contextlib import contextmanager
+
+import netlib
from libpathod import utils, test, pathoc, pathod, language
from netlib import tcp
import requests
@@ -27,36 +29,36 @@ class DaemonTests(object):
nocraft = False
@classmethod
- def setUpAll(klass):
- opts = klass.ssloptions or {}
- klass.confdir = tempfile.mkdtemp()
- opts["confdir"] = klass.confdir
+ def setup_class(cls):
+ opts = cls.ssloptions or {}
+ cls.confdir = tempfile.mkdtemp()
+ opts["confdir"] = cls.confdir
so = pathod.SSLOptions(**opts)
- klass.d = test.Daemon(
+ cls.d = test.Daemon(
staticdir=test_data.path("data"),
anchors=[
(re.compile("/anchor/.*"), "202:da")
],
- ssl=klass.ssl,
+ ssl=cls.ssl,
ssloptions=so,
sizelimit=1 * 1024 * 1024,
- noweb=klass.noweb,
- noapi=klass.noapi,
- nohang=klass.nohang,
- timeout=klass.timeout,
- hexdump=klass.hexdump,
- nocraft=klass.nocraft,
+ noweb=cls.noweb,
+ noapi=cls.noapi,
+ nohang=cls.nohang,
+ timeout=cls.timeout,
+ hexdump=cls.hexdump,
+ nocraft=cls.nocraft,
logreq=True,
logresp=True,
explain=True
)
@classmethod
- def tearDownAll(self):
- self.d.shutdown()
- shutil.rmtree(self.confdir)
+ def teardown_class(cls):
+ cls.d.shutdown()
+ shutil.rmtree(cls.confdir)
- def setUp(self):
+ def teardown(self):
if not (self.noweb or self.noapi):
self.d.clear_log()
@@ -114,55 +116,9 @@ class DaemonTests(object):
return ret, logfp.getvalue()
-@contextmanager
-def tmpdir(*args, **kwargs):
- orig_workdir = os.getcwd()
- temp_workdir = tempfile.mkdtemp(*args, **kwargs)
- os.chdir(temp_workdir)
-
- yield temp_workdir
-
- os.chdir(orig_workdir)
- shutil.rmtree(temp_workdir)
-
-
-def raises(exc, obj, *args, **kwargs):
- """
- Assert that a callable raises a specified exception.
-
- :exc An exception class or a string. If a class, assert that an
- exception of this type is raised. If a string, assert that the string
- occurs in the string representation of the exception, based on a
- case-insenstivie match.
-
- :obj A callable object.
+tmpdir = netlib.tutils.tmpdir
- :args Arguments to be passsed to the callable.
-
- :kwargs Arguments to be passed to the callable.
- """
- try:
- obj(*args, **kwargs)
- except (Exception, SystemExit) as v:
- if isinstance(exc, basestring):
- if exc.lower() in str(v).lower():
- return
- else:
- raise AssertionError(
- "Expected %s, but caught %s" % (
- repr(str(exc)), v
- )
- )
- else:
- if isinstance(v, exc):
- return
- else:
- raise AssertionError(
- "Expected %s, but caught %s %s" % (
- exc.__name__, v.__class__.__name__, str(v)
- )
- )
- raise AssertionError("No exception raised.")
+raises = netlib.tutils.raises
test_data = utils.Data(__name__)