Skip to content
This repository has been archived by the owner on Jun 1, 2018. It is now read-only.

Commit

Permalink
fix tests, use pytest
Browse files Browse the repository at this point in the history
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 7dceb6d
Author: Maximilian Hils <git@maximilianhils.com>
Date:   Mon Sep 21 23:00:24 2015 +0200

    disable parallelized tests

commit fc0c3f1
Author: Maximilian Hils <git@maximilianhils.com>
Date:   Mon Sep 21 22:49:19 2015 +0200

    fix tests

commit baba3ca
Author: Maximilian Hils <git@maximilianhils.com>
Date:   Mon Sep 21 22:28:20 2015 +0200

    fix tests, use py.test
  • Loading branch information
mhils committed Sep 21, 2015
1 parent 2da4aaf commit 2f670ba
Show file tree
Hide file tree
Showing 13 changed files with 50 additions and 101 deletions.
2 changes: 1 addition & 1 deletion .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
- "%PYTHON%\\Scripts\\py.test -n 4"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ netlib
venv
.idea/
pathod.egg-info/
.cache/
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -51,7 +51,7 @@ notifications:
on_failure: always
slack:
rooms:
- mitmproxy:YaDGC9Gt9TEM7o8zkC2OLNsu
- mitmproxy:YaDGC9Gt9TEM7o8zkC2OLNsu
on_success: change
on_failure: always

Expand Down
2 changes: 1 addition & 1 deletion examples/test_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down
6 changes: 3 additions & 3 deletions examples/test_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -24,7 +24,7 @@ def test_simple(self):

# 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"]
Expand Down
8 changes: 4 additions & 4 deletions examples/test_setupall.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand All @@ -29,7 +29,7 @@ def test_simple(self):

# 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"]
Expand Down
2 changes: 1 addition & 1 deletion libpathod/language/websockets.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ def values(self, settings):
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)
Expand Down
5 changes: 3 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,9 @@
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"
]
}
Expand Down
5 changes: 2 additions & 3 deletions test/test_language_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from libpathod import language
from libpathod.language import base, exceptions
import tutils
import nose.tools as nt


def parse_request(s):
Expand Down Expand Up @@ -63,8 +62,8 @@ def roundtrip(self, spec):
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("'")
Expand Down
7 changes: 2 additions & 5 deletions test/test_language_websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,8 @@ def test_construction(self):
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
Expand Down
12 changes: 6 additions & 6 deletions test/test_pathoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ 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")
]
)

@classmethod
def tearDownAll(self):
self.d.shutdown()
def teardown_class(cls):
cls.d.shutdown()

def setUp(self):
self.d.clear_log()
Expand Down
13 changes: 4 additions & 9 deletions test/test_pathoc_cmdline.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@
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
Expand Down Expand Up @@ -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)
84 changes: 20 additions & 64 deletions test/tutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import shutil
import cStringIO
from contextlib import contextmanager

import netlib
from libpathod import utils, test, pathoc, pathod, language
from netlib import tcp
import requests
Expand All @@ -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()

Expand Down Expand Up @@ -114,55 +116,9 @@ def pathoc(
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__)

Expand Down

0 comments on commit 2f670ba

Please sign in to comment.