pypy compatibility
This commit is contained in:

committed by
Sergey Shepelev

parent
fa40e18ce3
commit
0cefaea271
@@ -24,8 +24,11 @@ matrix:
|
|||||||
install:
|
install:
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
- sudo apt-get install -qq libssl-dev libmysqlclient-dev libpq-dev libzmq3-dev
|
- sudo apt-get install -qq libssl-dev libmysqlclient-dev libpq-dev libzmq3-dev
|
||||||
- pip install --upgrade tox setuptools virtualenv
|
- pip install --upgrade pip setuptools tox virtualenv
|
||||||
before_script:
|
before_script:
|
||||||
- "export EVENTLET_DB_TEST_AUTH='{\"psycopg2\": {\"user\": \"postgres\"}, \"MySQLdb\": {\"passwd\": \"\", \"host\": \"localhost\", \"user\": \"root\"}}'"
|
- "export EVENTLET_DB_TEST_AUTH='{\"psycopg2\": {\"user\": \"postgres\"}, \"MySQLdb\": {\"passwd\": \"\", \"host\": \"localhost\", \"user\": \"root\"}}'"
|
||||||
script:
|
script:
|
||||||
- tox -e $TOX_ENV
|
- tox -v -v -e $TOX_ENV
|
||||||
|
after_failure:
|
||||||
|
- for X in .tox/$TOX_ENV/log/*; do echo "$X\n"; cat "$X"; echo "\n\n"; done
|
||||||
|
- echo "pip.log\n"; cat $HOME/.pip/pip.log
|
||||||
|
@@ -391,6 +391,9 @@ class _SocketDuckForFd(object):
|
|||||||
raise IOError(*e.args)
|
raise IOError(*e.args)
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
self._close()
|
||||||
|
|
||||||
|
def _close(self):
|
||||||
try:
|
try:
|
||||||
os.close(self._fileno)
|
os.close(self._fileno)
|
||||||
except:
|
except:
|
||||||
@@ -401,11 +404,15 @@ class _SocketDuckForFd(object):
|
|||||||
return "%s:%d" % (self.__class__.__name__, self._fileno)
|
return "%s:%d" % (self.__class__.__name__, self._fileno)
|
||||||
|
|
||||||
if "__pypy__" in sys.builtin_module_names:
|
if "__pypy__" in sys.builtin_module_names:
|
||||||
|
_refcount = 0
|
||||||
|
|
||||||
def _reuse(self):
|
def _reuse(self):
|
||||||
pass
|
self._refcount += 1
|
||||||
|
|
||||||
def _drop(self):
|
def _drop(self):
|
||||||
pass
|
self._refcount -= 1
|
||||||
|
if self._refcount == 0:
|
||||||
|
self._close()
|
||||||
|
|
||||||
|
|
||||||
def _operationOnClosedFile(*args, **kwargs):
|
def _operationOnClosedFile(*args, **kwargs):
|
||||||
|
@@ -41,7 +41,7 @@ class Hub(BaseHub):
|
|||||||
def _control(self, events, max_events, timeout):
|
def _control(self, events, max_events, timeout):
|
||||||
try:
|
try:
|
||||||
return self.kqueue.control(events, max_events, timeout)
|
return self.kqueue.control(events, max_events, timeout)
|
||||||
except OSError:
|
except (OSError, IOError):
|
||||||
# have we forked?
|
# have we forked?
|
||||||
if os.getpid() != self._pid:
|
if os.getpid() != self._pid:
|
||||||
self._reinit_kqueue()
|
self._reinit_kqueue()
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
|
import gc
|
||||||
import os
|
import os
|
||||||
try:
|
try:
|
||||||
import resource
|
import resource
|
||||||
@@ -181,6 +182,8 @@ class LimitedTestCase(unittest.TestCase):
|
|||||||
signal.alarm(self.previous_alarm[1])
|
signal.alarm(self.previous_alarm[1])
|
||||||
|
|
||||||
tpool.killall()
|
tpool.killall()
|
||||||
|
gc.collect()
|
||||||
|
eventlet.sleep(0)
|
||||||
verify_hub_empty()
|
verify_hub_empty()
|
||||||
|
|
||||||
def assert_less_than(self, a,b,msg=None):
|
def assert_less_than(self, a,b,msg=None):
|
||||||
|
@@ -27,6 +27,7 @@ class DBTester(object):
|
|||||||
);""")
|
);""")
|
||||||
connection.commit()
|
connection.commit()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
connection.close()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
if self.connection:
|
if self.connection:
|
||||||
@@ -180,7 +181,7 @@ class DBConnectionPool(DBTester):
|
|||||||
self.pool.put(conn2)
|
self.pool.put(conn2)
|
||||||
|
|
||||||
def test_visibility_from_other_connections(self):
|
def test_visibility_from_other_connections(self):
|
||||||
self.pool = self.create_pool(3)
|
self.pool = self.create_pool(max_size=3)
|
||||||
conn = self.pool.get()
|
conn = self.pool.get()
|
||||||
conn2 = self.pool.get()
|
conn2 = self.pool.get()
|
||||||
curs = conn.cursor()
|
curs = conn.cursor()
|
||||||
@@ -213,7 +214,7 @@ class DBConnectionPool(DBTester):
|
|||||||
def test_two_simultaneous_connections(self):
|
def test_two_simultaneous_connections(self):
|
||||||
# timing-sensitive test, disabled until we come up with a better
|
# timing-sensitive test, disabled until we come up with a better
|
||||||
# way to do this
|
# way to do this
|
||||||
self.pool = self.create_pool(2)
|
self.pool = self.create_pool(max_size=2)
|
||||||
conn = self.pool.get()
|
conn = self.pool.get()
|
||||||
self.set_up_dummy_table(conn)
|
self.set_up_dummy_table(conn)
|
||||||
self.fill_up_table(conn)
|
self.fill_up_table(conn)
|
||||||
@@ -629,7 +630,7 @@ class Psycopg2ConnectionPool(object):
|
|||||||
db = conn.cursor()
|
db = conn.cursor()
|
||||||
db.execute("create database "+dbname)
|
db.execute("create database "+dbname)
|
||||||
db.close()
|
db.close()
|
||||||
del db
|
conn.close()
|
||||||
|
|
||||||
def drop_db(self):
|
def drop_db(self):
|
||||||
auth = self._auth.copy()
|
auth = self._auth.copy()
|
||||||
@@ -639,7 +640,7 @@ class Psycopg2ConnectionPool(object):
|
|||||||
db = conn.cursor()
|
db = conn.cursor()
|
||||||
db.execute("drop database "+self._auth['database'])
|
db.execute("drop database "+self._auth['database'])
|
||||||
db.close()
|
db.close()
|
||||||
del db
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
class TestPsycopg2Base(TestCase):
|
class TestPsycopg2Base(TestCase):
|
||||||
|
@@ -2,12 +2,13 @@ import socket as _orig_sock
|
|||||||
from tests import LimitedTestCase, skip_with_pyevent, main, skipped, s2b, skip_if, skip_on_windows
|
from tests import LimitedTestCase, skip_with_pyevent, main, skipped, s2b, skip_if, skip_on_windows
|
||||||
from eventlet import event, greenio, debug
|
from eventlet import event, greenio, debug
|
||||||
from eventlet.hubs import get_hub
|
from eventlet.hubs import get_hub
|
||||||
from eventlet.green import select, socket, time
|
from eventlet.green import select, socket, time, ssl
|
||||||
from eventlet.support import get_errno
|
from eventlet.support import get_errno
|
||||||
|
|
||||||
import array
|
import array
|
||||||
import errno
|
import errno
|
||||||
import eventlet
|
import eventlet
|
||||||
|
import gc
|
||||||
import fcntl
|
import fcntl
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -321,6 +322,7 @@ class TestGreenSocket(LimitedTestCase):
|
|||||||
conn = conn.makefile('w')
|
conn = conn.makefile('w')
|
||||||
conn.write('hello\n')
|
conn.write('hello\n')
|
||||||
conn.close()
|
conn.close()
|
||||||
|
gc.collect()
|
||||||
self.assertWriteToClosedFileRaises(conn)
|
self.assertWriteToClosedFileRaises(conn)
|
||||||
finally:
|
finally:
|
||||||
listener.close()
|
listener.close()
|
||||||
@@ -423,11 +425,6 @@ class TestGreenSocket(LimitedTestCase):
|
|||||||
test_sendall_impl(how_many)
|
test_sendall_impl(how_many)
|
||||||
|
|
||||||
def test_wrap_socket(self):
|
def test_wrap_socket(self):
|
||||||
try:
|
|
||||||
import ssl
|
|
||||||
except ImportError:
|
|
||||||
pass # pre-2.6
|
|
||||||
else:
|
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
sock.bind(('127.0.0.1', 0))
|
sock.bind(('127.0.0.1', 0))
|
||||||
@@ -535,7 +532,9 @@ class TestGreenSocket(LimitedTestCase):
|
|||||||
|
|
||||||
def test_invalid_connection(self):
|
def test_invalid_connection(self):
|
||||||
# find an unused port by creating a socket then closing it
|
# find an unused port by creating a socket then closing it
|
||||||
port = eventlet.listen(('127.0.0.1', 0)).getsockname()[1]
|
listening_socket = eventlet.listen(('127.0.0.1', 0))
|
||||||
|
port = listening_socket.getsockname()[1]
|
||||||
|
listening_socket.close()
|
||||||
self.assertRaises(socket.error, eventlet.connect, ('127.0.0.1', port))
|
self.assertRaises(socket.error, eventlet.connect, ('127.0.0.1', port))
|
||||||
|
|
||||||
def test_zero_timeout_and_back(self):
|
def test_zero_timeout_and_back(self):
|
||||||
|
@@ -101,7 +101,7 @@ class Spawn(LimitedTestCase, Asserts):
|
|||||||
gt.wait()
|
gt.wait()
|
||||||
self.assertEquals(called, [True])
|
self.assertEquals(called, [True])
|
||||||
|
|
||||||
class SpawnAfter(LimitedTestCase, Asserts):
|
class SpawnAfter(Spawn):
|
||||||
def test_basic(self):
|
def test_basic(self):
|
||||||
gt = greenthread.spawn_after(0.1, passthru, 20)
|
gt = greenthread.spawn_after(0.1, passthru, 20)
|
||||||
self.assertEquals(gt.wait(), ((20,), {}))
|
self.assertEquals(gt.wait(), ((20,), {}))
|
||||||
|
@@ -63,6 +63,7 @@ def run_interaction(run_client):
|
|||||||
def run_and_check(run_client):
|
def run_and_check(run_client):
|
||||||
w = run_interaction(run_client=run_client)
|
w = run_interaction(run_client=run_client)
|
||||||
clear_sys_exc_info()
|
clear_sys_exc_info()
|
||||||
|
gc.collect()
|
||||||
if w():
|
if w():
|
||||||
print(pformat(gc.get_referrers(w())))
|
print(pformat(gc.get_referrers(w())))
|
||||||
for x in gc.get_referrers(w()):
|
for x in gc.get_referrers(w()):
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import gc
|
||||||
import weakref
|
import weakref
|
||||||
|
|
||||||
from eventlet.green import thread
|
from eventlet.green import thread
|
||||||
@@ -109,5 +110,8 @@ class Locals(LimitedTestCase):
|
|||||||
p.spawn(do_something, i)
|
p.spawn(do_something, i)
|
||||||
p.waitall()
|
p.waitall()
|
||||||
del p
|
del p
|
||||||
|
gc.collect()
|
||||||
|
eventlet.sleep(0)
|
||||||
|
gc.collect()
|
||||||
# at this point all our coros have terminated
|
# at this point all our coros have terminated
|
||||||
self.assertEqual(len(refs), 1)
|
self.assertEqual(len(refs), 1)
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
"""Tests with-statement behavior of Timeout class."""
|
"""Tests with-statement behavior of Timeout class."""
|
||||||
|
|
||||||
|
import gc
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
@@ -109,6 +110,7 @@ class Test(LimitedTestCase):
|
|||||||
with Timeout(DELAY*2, err):
|
with Timeout(DELAY*2, err):
|
||||||
sleep(DELAY)
|
sleep(DELAY)
|
||||||
del err
|
del err
|
||||||
|
gc.collect()
|
||||||
assert not err_ref(), repr(err_ref())
|
assert not err_ref(), repr(err_ref())
|
||||||
|
|
||||||
def test_nested_timeout(self):
|
def test_nested_timeout(self):
|
||||||
|
@@ -10,6 +10,7 @@ from unittest import main
|
|||||||
|
|
||||||
from eventlet import greenio
|
from eventlet import greenio
|
||||||
from eventlet import event
|
from eventlet import event
|
||||||
|
from eventlet import hubs
|
||||||
from eventlet.green import socket as greensocket
|
from eventlet.green import socket as greensocket
|
||||||
from eventlet import wsgi
|
from eventlet import wsgi
|
||||||
from eventlet.support import get_errno
|
from eventlet.support import get_errno
|
||||||
@@ -154,6 +155,7 @@ def read_http(sock):
|
|||||||
if not response_line:
|
if not response_line:
|
||||||
raise ConnectionClosed(response_line)
|
raise ConnectionClosed(response_line)
|
||||||
|
|
||||||
|
|
||||||
header_lines = []
|
header_lines = []
|
||||||
while True:
|
while True:
|
||||||
line = fd.readline()
|
line = fd.readline()
|
||||||
@@ -161,6 +163,7 @@ def read_http(sock):
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
header_lines.append(line)
|
header_lines.append(line)
|
||||||
|
|
||||||
headers = dict()
|
headers = dict()
|
||||||
for x in header_lines:
|
for x in header_lines:
|
||||||
x = x.strip()
|
x = x.strip()
|
||||||
@@ -170,6 +173,7 @@ def read_http(sock):
|
|||||||
assert key.lower() not in headers, "%s header duplicated" % key
|
assert key.lower() not in headers, "%s header duplicated" % key
|
||||||
headers[key.lower()] = value
|
headers[key.lower()] = value
|
||||||
|
|
||||||
|
|
||||||
if CONTENT_LENGTH in headers:
|
if CONTENT_LENGTH in headers:
|
||||||
num = int(headers[CONTENT_LENGTH])
|
num = int(headers[CONTENT_LENGTH])
|
||||||
body = fd.read(num)
|
body = fd.read(num)
|
||||||
@@ -255,6 +259,7 @@ class TestHttpd(_TestBase):
|
|||||||
fd.flush()
|
fd.flush()
|
||||||
read_http(sock)
|
read_http(sock)
|
||||||
fd.close()
|
fd.close()
|
||||||
|
sock.close()
|
||||||
|
|
||||||
def test_003_passing_non_int_to_read(self):
|
def test_003_passing_non_int_to_read(self):
|
||||||
# This should go in greenio_test
|
# This should go in greenio_test
|
||||||
@@ -356,6 +361,7 @@ class TestHttpd(_TestBase):
|
|||||||
response_line_test,_,_ = read_http(sock)
|
response_line_test,_,_ = read_http(sock)
|
||||||
self.assertEqual(response_line_200,response_line_test)
|
self.assertEqual(response_line_200,response_line_test)
|
||||||
fd.close()
|
fd.close()
|
||||||
|
sock.close()
|
||||||
|
|
||||||
def test_009_chunked_response(self):
|
def test_009_chunked_response(self):
|
||||||
self.site.application = chunked_app
|
self.site.application = chunked_app
|
||||||
@@ -579,6 +585,7 @@ class TestHttpd(_TestBase):
|
|||||||
response_line, headers, body = read_http(sock)
|
response_line, headers, body = read_http(sock)
|
||||||
self.assert_('connection' in headers)
|
self.assert_('connection' in headers)
|
||||||
self.assertEqual('keep-alive', headers['connection'])
|
self.assertEqual('keep-alive', headers['connection'])
|
||||||
|
sock.close()
|
||||||
|
|
||||||
def test_019_fieldstorage_compat(self):
|
def test_019_fieldstorage_compat(self):
|
||||||
def use_fieldstorage(environ, start_response):
|
def use_fieldstorage(environ, start_response):
|
||||||
@@ -744,6 +751,7 @@ class TestHttpd(_TestBase):
|
|||||||
self.assert_(header_lines[0].startswith('HTTP/1.1 200 OK'))
|
self.assert_(header_lines[0].startswith('HTTP/1.1 200 OK'))
|
||||||
self.assertEquals(fd.read(7), 'testing')
|
self.assertEquals(fd.read(7), 'testing')
|
||||||
fd.close()
|
fd.close()
|
||||||
|
sock.close()
|
||||||
|
|
||||||
def test_025_accept_errors(self):
|
def test_025_accept_errors(self):
|
||||||
from eventlet import debug
|
from eventlet import debug
|
||||||
@@ -800,6 +808,7 @@ class TestHttpd(_TestBase):
|
|||||||
read_http(sock)
|
read_http(sock)
|
||||||
|
|
||||||
self.assertEqual(wsgi.HttpProtocol.minimum_chunk_size, start_size)
|
self.assertEqual(wsgi.HttpProtocol.minimum_chunk_size, start_size)
|
||||||
|
sock.close()
|
||||||
|
|
||||||
def test_error_in_chunked_closes_connection(self):
|
def test_error_in_chunked_closes_connection(self):
|
||||||
# From http://rhodesmill.org/brandon/2013/chunked-wsgi/
|
# From http://rhodesmill.org/brandon/2013/chunked-wsgi/
|
||||||
@@ -845,6 +854,7 @@ class TestHttpd(_TestBase):
|
|||||||
fd.write('PUT /a HTTP/1.1\r\nHost: localhost\r\nTransfer-Encoding: chunked\r\n\r\n10\r\n0123456789abcdef\r\n0\r\n\r\n')
|
fd.write('PUT /a HTTP/1.1\r\nHost: localhost\r\nTransfer-Encoding: chunked\r\n\r\n10\r\n0123456789abcdef\r\n0\r\n\r\n')
|
||||||
fd.flush()
|
fd.flush()
|
||||||
read_http(sock)
|
read_http(sock)
|
||||||
|
sock.close()
|
||||||
|
|
||||||
@skip_if_no_ssl
|
@skip_if_no_ssl
|
||||||
def test_028_ssl_handshake_errors(self):
|
def test_028_ssl_handshake_errors(self):
|
||||||
@@ -1357,6 +1367,7 @@ class TestChunkedInput(_TestBase):
|
|||||||
self.assertEquals(read_http(fd)[-1], "this is ch")
|
self.assertEquals(read_http(fd)[-1], "this is ch")
|
||||||
|
|
||||||
self.ping(fd)
|
self.ping(fd)
|
||||||
|
fd.close()
|
||||||
|
|
||||||
def test_short_read_with_zero_content_length(self):
|
def test_short_read_with_zero_content_length(self):
|
||||||
body = self.body()
|
body = self.body()
|
||||||
@@ -1366,6 +1377,7 @@ class TestChunkedInput(_TestBase):
|
|||||||
self.assertEquals(read_http(fd)[-1], "this is ch")
|
self.assertEquals(read_http(fd)[-1], "this is ch")
|
||||||
|
|
||||||
self.ping(fd)
|
self.ping(fd)
|
||||||
|
fd.close()
|
||||||
|
|
||||||
def test_short_read(self):
|
def test_short_read(self):
|
||||||
body = self.body()
|
body = self.body()
|
||||||
@@ -1376,6 +1388,7 @@ class TestChunkedInput(_TestBase):
|
|||||||
self.assertEquals(read_http(fd)[-1], "this is ch")
|
self.assertEquals(read_http(fd)[-1], "this is ch")
|
||||||
|
|
||||||
self.ping(fd)
|
self.ping(fd)
|
||||||
|
fd.close()
|
||||||
|
|
||||||
def test_dirt(self):
|
def test_dirt(self):
|
||||||
body = self.body(dirt="; here is dirt\0bla")
|
body = self.body(dirt="; here is dirt\0bla")
|
||||||
@@ -1386,6 +1399,7 @@ class TestChunkedInput(_TestBase):
|
|||||||
self.assertEquals(read_http(fd)[-1], "pong")
|
self.assertEquals(read_http(fd)[-1], "pong")
|
||||||
|
|
||||||
self.ping(fd)
|
self.ping(fd)
|
||||||
|
fd.close()
|
||||||
|
|
||||||
def test_chunked_readline(self):
|
def test_chunked_readline(self):
|
||||||
body = self.body()
|
body = self.body()
|
||||||
@@ -1394,6 +1408,7 @@ class TestChunkedInput(_TestBase):
|
|||||||
fd = self.connect()
|
fd = self.connect()
|
||||||
fd.sendall(req)
|
fd.sendall(req)
|
||||||
self.assertEquals(read_http(fd)[-1], 'this is chunked\nline 2\nline3')
|
self.assertEquals(read_http(fd)[-1], 'this is chunked\nline 2\nline3')
|
||||||
|
fd.close()
|
||||||
|
|
||||||
def test_chunked_readline_wsgi_override_minimum_chunk_size(self):
|
def test_chunked_readline_wsgi_override_minimum_chunk_size(self):
|
||||||
|
|
||||||
|
@@ -13,6 +13,9 @@ except ImportError:
|
|||||||
zmq = {} # for systems lacking zmq, skips tests instead of barfing
|
zmq = {} # for systems lacking zmq, skips tests instead of barfing
|
||||||
|
|
||||||
|
|
||||||
|
RECV_ON_CLOSED_SOCKET_ERRNOS = (zmq.ENOTSUP, zmq.ENOTSOCK)
|
||||||
|
|
||||||
|
|
||||||
def zmq_supported(_):
|
def zmq_supported(_):
|
||||||
try:
|
try:
|
||||||
import zmq
|
import zmq
|
||||||
@@ -49,12 +52,20 @@ class TestUpstreamDownStream(LimitedTestCase):
|
|||||||
self.sockets = None
|
self.sockets = None
|
||||||
self.context.destroy(0)
|
self.context.destroy(0)
|
||||||
|
|
||||||
def assertRaisesErrno(self, errno, func, *args):
|
def assertRaisesErrno(self, errnos, func, *args):
|
||||||
try:
|
try:
|
||||||
func(*args)
|
func(*args)
|
||||||
except zmq.ZMQError as e:
|
except zmq.ZMQError as e:
|
||||||
self.assertEqual(e.errno, errno, "wrong error raised, expected '%s' \
|
if not hasattr(errnos, '__iter__'):
|
||||||
got '%s'" % (zmq.ZMQError(errno), zmq.ZMQError(e.errno)))
|
errnos = (errnos,)
|
||||||
|
|
||||||
|
if e.errno not in errnos:
|
||||||
|
raise AssertionError(
|
||||||
|
"wrong error raised, expected one of ['%s'], got '%s'" % (
|
||||||
|
", ".join("%s" % zmq.ZMQError(errno) for errno in errnos),
|
||||||
|
zmq.ZMQError(e.errno)
|
||||||
|
),
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.fail("Function did not raise any error")
|
self.fail("Function did not raise any error")
|
||||||
|
|
||||||
@@ -92,8 +103,8 @@ got '%s'" % (zmq.ZMQError(errno), zmq.ZMQError(e.errno)))
|
|||||||
|
|
||||||
rep.close()
|
rep.close()
|
||||||
req.close()
|
req.close()
|
||||||
self.assertRaisesErrno(zmq.ENOTSUP, rep.recv)
|
self.assertRaisesErrno(RECV_ON_CLOSED_SOCKET_ERRNOS, rep.recv)
|
||||||
self.assertRaisesErrno(zmq.ENOTSUP, req.send, 'test')
|
self.assertRaisesErrno(RECV_ON_CLOSED_SOCKET_ERRNOS, req.send, 'test')
|
||||||
|
|
||||||
@skip_unless(zmq_supported)
|
@skip_unless(zmq_supported)
|
||||||
def test_close_xsocket_raises_enotsup(self):
|
def test_close_xsocket_raises_enotsup(self):
|
||||||
@@ -101,8 +112,8 @@ got '%s'" % (zmq.ZMQError(errno), zmq.ZMQError(e.errno)))
|
|||||||
|
|
||||||
rep.close()
|
rep.close()
|
||||||
req.close()
|
req.close()
|
||||||
self.assertRaisesErrno(zmq.ENOTSUP, rep.recv)
|
self.assertRaisesErrno(RECV_ON_CLOSED_SOCKET_ERRNOS, rep.recv)
|
||||||
self.assertRaisesErrno(zmq.ENOTSUP, req.send, 'test')
|
self.assertRaisesErrno(RECV_ON_CLOSED_SOCKET_ERRNOS, req.send, 'test')
|
||||||
|
|
||||||
@skip_unless(zmq_supported)
|
@skip_unless(zmq_supported)
|
||||||
def test_send_1k_req_rep(self):
|
def test_send_1k_req_rep(self):
|
||||||
@@ -378,7 +389,7 @@ got '%s'" % (zmq.ZMQError(errno), zmq.ZMQError(e.errno)))
|
|||||||
done2 = event.Event()
|
done2 = event.Event()
|
||||||
|
|
||||||
def rx(e):
|
def rx(e):
|
||||||
self.assertRaisesErrno(zmq.ENOTSUP, receiver.recv)
|
self.assertRaisesErrno(RECV_ON_CLOSED_SOCKET_ERRNOS, receiver.recv)
|
||||||
e.send()
|
e.send()
|
||||||
|
|
||||||
spawn(rx, done1)
|
spawn(rx, done1)
|
||||||
|
2
tox.ini
2
tox.ini
@@ -15,7 +15,7 @@ envlist =
|
|||||||
py26selects,py26poll,py26epolls,
|
py26selects,py26poll,py26epolls,
|
||||||
py27selects,py27poll,py27epolls,
|
py27selects,py27poll,py27epolls,
|
||||||
py33selects,py33poll,py33epolls,
|
py33selects,py33poll,py33epolls,
|
||||||
pypyselects,pypypoll,pypyepoll
|
pypyselects,pypypoll,pypyepolls,
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
downloadcache = {toxworkdir}/pip_download_cache
|
downloadcache = {toxworkdir}/pip_download_cache
|
||||||
|
Reference in New Issue
Block a user