made test suite runnable under 2.4; it logs the Python version in the output

This commit is contained in:
Denis Bilenko
2009-01-12 19:28:35 +06:00
parent 2948ef52ae
commit 227fdbc1c8
9 changed files with 107 additions and 92 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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__':

View File

@@ -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__':

View File

@@ -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)

View File

@@ -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):

View File

@@ -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: