made test suite runnable under 2.4; it logs the Python version in the output
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
|
||||
# package is named greentest, not test, so it won't be confused with test in stdlib
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
disabled_marker = '-*-*-*-*-*- disabled -*-*-*-*-*-'
|
||||
def exit_disabled():
|
||||
@@ -30,4 +31,18 @@ def exit_unless_twisted():
|
||||
if 'Twisted' not in type(get_hub()).__name__:
|
||||
exit_disabled()
|
||||
|
||||
def exit_unless_25():
|
||||
print sys.version_info[:2]<(2, 5)
|
||||
if sys.version_info[:2]<(2, 5):
|
||||
exit_disabled()
|
||||
|
||||
class LimitedTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
from eventlet import api
|
||||
self.timer = api.exc_after(1, RuntimeError('test is taking too long'))
|
||||
|
||||
def tearDown(self):
|
||||
self.timer.cancel()
|
||||
|
||||
|
||||
|
@@ -7,7 +7,7 @@ import glob
|
||||
|
||||
def parse_stdout(s):
|
||||
argv = re.search('^===ARGV=(.*?)$', s, re.M).group(1)
|
||||
argv = eval(argv)
|
||||
argv = argv.split()
|
||||
testname = argv[-1]
|
||||
del argv[-1]
|
||||
hub = None
|
||||
@@ -86,6 +86,7 @@ def main(db):
|
||||
except Exception:
|
||||
parse_error += 1
|
||||
sys.stderr.write('Failed to parse id=%s\n' % id)
|
||||
print repr(stdout)
|
||||
traceback.print_exc()
|
||||
else:
|
||||
print id, hub, testname, runs, errors, fails, timeouts
|
||||
|
@@ -5,7 +5,10 @@ Usage: %prog program [args]
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
import sqlite3
|
||||
try:
|
||||
import sqlite3
|
||||
except ImportError:
|
||||
import pysqlite2.dbapi2 as sqlite3
|
||||
import warnings
|
||||
from greentest import disabled_marker
|
||||
|
||||
|
@@ -32,7 +32,7 @@ from with_eventlet import import_reactor
|
||||
first_hubs = ['selecthub', 'poll', 'selects', 'twistedr']
|
||||
first_reactors = ['selectreactor', 'pollreactor', 'epollreactor']
|
||||
|
||||
COMMAND = './record_results.py ./with_timeout.py ./with_eventlet.py %(setup)s %(test)s'
|
||||
COMMAND = './record_results.py ' + sys.executable + ' ./with_timeout.py ./with_eventlet.py %(setup)s %(test)s'
|
||||
PARSE_PERIOD = 10
|
||||
|
||||
# the following aren't in the default list unless --all option present
|
||||
|
@@ -18,11 +18,11 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from __future__ import with_statement
|
||||
import unittest
|
||||
from eventlet import api, coros
|
||||
from greentest import LimitedTestCase
|
||||
|
||||
class TestSemaphore(unittest.TestCase):
|
||||
class TestSemaphore(LimitedTestCase):
|
||||
|
||||
def test_bounded(self):
|
||||
# this was originally semaphore's doctest
|
||||
@@ -42,8 +42,7 @@ class TestSemaphore(unittest.TestCase):
|
||||
def test_bounded_with_zero_limit(self):
|
||||
sem = coros.semaphore(0, 0)
|
||||
api.spawn(sem.acquire)
|
||||
with api.timeout(0.001):
|
||||
sem.release()
|
||||
sem.release()
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
|
@@ -18,14 +18,14 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from __future__ import with_statement
|
||||
import unittest
|
||||
from eventlet.coros import event
|
||||
from eventlet.api import spawn, sleep, exc_after, timeout
|
||||
from eventlet.api import spawn, sleep, exc_after, with_timeout
|
||||
from greentest import LimitedTestCase
|
||||
|
||||
DELAY= 0.01
|
||||
|
||||
class TestEvent(unittest.TestCase):
|
||||
class TestEvent(LimitedTestCase):
|
||||
|
||||
def test_send_exc(self):
|
||||
log = []
|
||||
@@ -36,12 +36,13 @@ class TestEvent(unittest.TestCase):
|
||||
result = e.wait()
|
||||
log.append(('received', result))
|
||||
except Exception, ex:
|
||||
log.append(('catched', type(ex).__name__))
|
||||
log.append(('catched', ex))
|
||||
spawn(waiter)
|
||||
sleep(0) # let waiter to block on e.wait()
|
||||
e.send(exc=Exception())
|
||||
obj = Exception()
|
||||
e.send(exc=obj)
|
||||
sleep(0)
|
||||
assert log == [('catched', 'Exception')], log
|
||||
assert log == [('catched', obj)], log
|
||||
|
||||
def test_send(self):
|
||||
event1 = event()
|
||||
@@ -52,9 +53,9 @@ class TestEvent(unittest.TestCase):
|
||||
try:
|
||||
result = event1.wait()
|
||||
except ValueError:
|
||||
with timeout(DELAY, None):
|
||||
result = event2.wait()
|
||||
raise AssertionError('Nobody sent anything to event2 yet it received %r' % (result, ))
|
||||
X = object()
|
||||
result = with_timeout(DELAY, event2.wait, timeout_value=X)
|
||||
assert result is X, 'Nobody sent anything to event2 yet it received %r' % (result, )
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
|
@@ -18,22 +18,14 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
from __future__ import with_statement
|
||||
import sys
|
||||
import unittest
|
||||
from eventlet.api import sleep, timeout
|
||||
from eventlet.api import sleep, with_timeout
|
||||
from eventlet import api, proc, coros
|
||||
from greentest import LimitedTestCase
|
||||
|
||||
DELAY = 0.01
|
||||
|
||||
class LimitedTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.timer = api.exc_after(1, api.TimeoutError('test is taking too long'))
|
||||
|
||||
def tearDown(self):
|
||||
self.timer.cancel()
|
||||
|
||||
class TestEventSource(LimitedTestCase):
|
||||
|
||||
def test_send(self):
|
||||
@@ -157,17 +149,10 @@ class TestCase(LimitedTestCase):
|
||||
return event, myproc, proc_finished_flag, queue
|
||||
|
||||
def check_timed_out(self, event, myproc, proc_finished_flag, queue):
|
||||
with timeout(DELAY, None):
|
||||
event.wait()
|
||||
raise AssertionError('should not get there')
|
||||
|
||||
with timeout(DELAY, None):
|
||||
queue.wait()
|
||||
raise AssertionError('should not get there')
|
||||
|
||||
with timeout(DELAY, None):
|
||||
print repr(proc.waitall([myproc]))
|
||||
raise AssertionError('should not get there')
|
||||
X = object()
|
||||
assert with_timeout(DELAY, event.wait, timeout_value=X) is X
|
||||
assert with_timeout(DELAY, queue.wait, timeout_value=X) is X
|
||||
assert with_timeout(DELAY, proc.waitall, [myproc], timeout_value=X) is X
|
||||
assert proc_finished_flag == [], proc_finished_flag
|
||||
|
||||
|
||||
@@ -230,10 +215,9 @@ class TestRaise_link(TestCase):
|
||||
|
||||
assert not p, p
|
||||
|
||||
with timeout(DELAY):
|
||||
self.assertRaises(ValueError, event.wait)
|
||||
self.assertRaises(ValueError, queue.wait)
|
||||
self.assertRaises(kill_exc_type, proc.waitall, [receiver])
|
||||
self.assertRaises(ValueError, event.wait)
|
||||
self.assertRaises(ValueError, queue.wait)
|
||||
self.assertRaises(kill_exc_type, proc.waitall, [receiver])
|
||||
sleep(DELAY)
|
||||
assert not proc_flag, proc_flag
|
||||
assert not callback_flag, callback_flag
|
||||
@@ -261,10 +245,9 @@ class TestRaise_link(TestCase):
|
||||
|
||||
assert not p, p
|
||||
|
||||
with timeout(DELAY):
|
||||
self.assertRaises(proc.ProcExit, event.wait)
|
||||
self.assertRaises(proc.ProcExit, queue.wait)
|
||||
self.assertRaises(kill_exc_type, proc.waitall, [receiver])
|
||||
self.assertRaises(proc.ProcExit, event.wait)
|
||||
self.assertRaises(proc.ProcExit, queue.wait)
|
||||
self.assertRaises(kill_exc_type, proc.waitall, [receiver])
|
||||
|
||||
sleep(DELAY)
|
||||
assert not proc_flag, proc_flag
|
||||
@@ -386,9 +369,10 @@ class TestStuff(unittest.TestCase):
|
||||
e.send_exception(*sys.exc_info())
|
||||
p = proc.spawn_link(func)
|
||||
try:
|
||||
e.wait()
|
||||
except ZeroDivisionError:
|
||||
pass
|
||||
try:
|
||||
e.wait()
|
||||
except ZeroDivisionError:
|
||||
pass
|
||||
finally:
|
||||
p.unlink()
|
||||
sleep(DELAY)
|
||||
|
@@ -30,31 +30,36 @@ import eventlet.twistedutil.protocol as pr
|
||||
from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport
|
||||
from eventlet.api import spawn, sleep, with_timeout, call_after
|
||||
from eventlet.coros import event
|
||||
from eventlet.green import socket
|
||||
|
||||
try:
|
||||
from eventlet.green import socket
|
||||
except SyntaxError:
|
||||
socket = None
|
||||
|
||||
DELAY=0.01
|
||||
|
||||
def setup_server_socket(self, delay=DELAY, port=0):
|
||||
s = socket.socket()
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.bind(('127.0.0.1', port))
|
||||
port = s.getsockname()[1]
|
||||
s.listen(5)
|
||||
s.settimeout(delay*3)
|
||||
def serve():
|
||||
conn, addr = s.accept()
|
||||
conn.settimeout(delay+1)
|
||||
try:
|
||||
hello = conn.makefile().readline()[:-2]
|
||||
except socket.timeout:
|
||||
return
|
||||
conn.sendall('you said %s. ' % hello)
|
||||
sleep(delay)
|
||||
conn.sendall('BYE')
|
||||
sleep(delay)
|
||||
#conn.close()
|
||||
spawn(serve)
|
||||
return port
|
||||
if socket is not None:
|
||||
def setup_server_socket(self, delay=DELAY, port=0):
|
||||
s = socket.socket()
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.bind(('127.0.0.1', port))
|
||||
port = s.getsockname()[1]
|
||||
s.listen(5)
|
||||
s.settimeout(delay*3)
|
||||
def serve():
|
||||
conn, addr = s.accept()
|
||||
conn.settimeout(delay+1)
|
||||
try:
|
||||
hello = conn.makefile().readline()[:-2]
|
||||
except socket.timeout:
|
||||
return
|
||||
conn.sendall('you said %s. ' % hello)
|
||||
sleep(delay)
|
||||
conn.sendall('BYE')
|
||||
sleep(delay)
|
||||
#conn.close()
|
||||
spawn(serve)
|
||||
return port
|
||||
|
||||
def setup_server_SpawnFactory(self, delay=DELAY, port=0):
|
||||
def handle(conn):
|
||||
@@ -86,7 +91,7 @@ class TestCase(unittest.TestCase):
|
||||
|
||||
class TestUnbufferedTransport(TestCase):
|
||||
gtransportClass = pr.UnbufferedTransport
|
||||
setup_server = setup_server_socket
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
def test_full_read(self):
|
||||
self.conn.write('hello\r\n')
|
||||
@@ -102,17 +107,9 @@ class TestUnbufferedTransport_bufsize1(TestUnbufferedTransport):
|
||||
transportBufferSize = 1
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
class TestUnbufferedTransport_SpawnFactory(TestUnbufferedTransport):
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
class TestUnbufferedTransport_SpawnFactory_bufsize1(TestUnbufferedTransport):
|
||||
transportBufferSize = 1
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
|
||||
class TestGreenTransport(TestUnbufferedTransport):
|
||||
gtransportClass = pr.GreenTransport
|
||||
setup_server = setup_server_socket
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
def test_read(self):
|
||||
self.conn.write('hello\r\n')
|
||||
@@ -158,15 +155,8 @@ class TestGreenTransport(TestUnbufferedTransport):
|
||||
class TestGreenTransport_bufsize1(TestGreenTransport):
|
||||
transportBufferSize = 1
|
||||
|
||||
class TestGreenTransport_SpawnFactory(TestGreenTransport):
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
class TestGreenTransport_SpawnFactory_bufsize1(TestGreenTransport):
|
||||
transportBufferSize = 1
|
||||
setup_server = setup_server_SpawnFactory
|
||||
|
||||
class TestGreenTransportError(TestCase):
|
||||
setup_server = setup_server_socket
|
||||
setup_server = setup_server_SpawnFactory
|
||||
gtransportClass = pr.GreenTransport
|
||||
|
||||
def test_read_error(self):
|
||||
@@ -201,6 +191,23 @@ class TestGreenTransportError(TestCase):
|
||||
# self.assertEqual('', self.conn.recv())
|
||||
#
|
||||
|
||||
if socket is not None:
|
||||
|
||||
class TestUnbufferedTransport_socketserver(TestUnbufferedTransport):
|
||||
setup_server = setup_server_socket
|
||||
|
||||
class TestUnbufferedTransport_socketserver_bufsize1(TestUnbufferedTransport):
|
||||
transportBufferSize = 1
|
||||
setup_server = setup_server_socket
|
||||
|
||||
class TestGreenTransport_socketserver(TestGreenTransport):
|
||||
setup_server = setup_server_socket
|
||||
|
||||
class TestGreenTransport_socketserver_bufsize1(TestGreenTransport):
|
||||
transportBufferSize = 1
|
||||
setup_server = setup_server_socket
|
||||
|
||||
|
||||
class TestTLSError(unittest.TestCase):
|
||||
|
||||
def test_server_connectionMade_never_called(self):
|
||||
|
@@ -99,7 +99,11 @@ def execf():
|
||||
class TestCase(unittest.TestCase):
|
||||
base = unittest.TestCase
|
||||
def run(self, result=None):
|
||||
name = "%s.%s" % (self.__class__.__name__, self._testMethodName)
|
||||
try:
|
||||
testMethodName = self._testMethodName
|
||||
except:
|
||||
testMethodName = self.__testMethodName
|
||||
name = "%s.%s" % (self.__class__.__name__, testMethodName)
|
||||
if name in disabled_tests:
|
||||
return
|
||||
print name, ' '
|
||||
@@ -123,11 +127,12 @@ while True:
|
||||
os.unlink(CURRENT_TEST_FILENAME)
|
||||
except:
|
||||
pass
|
||||
print '===ARGV=%r' % (sys.argv,)
|
||||
print '===TIMEOUT=%r' % TIMEOUT
|
||||
sys.stdout.flush()
|
||||
child = os.fork()
|
||||
if child == 0:
|
||||
print '===PYTHON=%s.%s.%s' % sys.version_info[:3]
|
||||
print '===ARGV=%s' % ' '.join(sys.argv)
|
||||
print '===TIMEOUT=%r' % TIMEOUT
|
||||
sys.stdout.flush()
|
||||
execf()
|
||||
break
|
||||
else:
|
||||
|
Reference in New Issue
Block a user