diff options
-rw-r--r-- | .appveyor.yml | 2 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .travis.yml | 4 | ||||
-rw-r--r-- | examples/test_context.py | 2 | ||||
-rw-r--r-- | examples/test_setup.py | 6 | ||||
-rw-r--r-- | examples/test_setupall.py | 8 | ||||
-rw-r--r-- | libpathod/language/websockets.py | 2 | ||||
-rw-r--r-- | setup.py | 5 | ||||
-rw-r--r-- | test/test_language_base.py | 5 | ||||
-rw-r--r-- | test/test_language_websocket.py | 7 | ||||
-rw-r--r-- | test/test_pathoc.py | 12 | ||||
-rw-r--r-- | test/test_pathoc_cmdline.py | 13 | ||||
-rw-r--r-- | test/tutils.py | 84 |
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 @@ -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) @@ -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__) |