[py-svn] r35571 - in py/branch/rsession-cleanup/py/test/rsession: . testing
fijal at codespeak.net
fijal at codespeak.net
Mon Dec 11 14:18:45 CET 2006
Author: fijal
Date: Mon Dec 11 14:18:42 2006
New Revision: 35571
Modified:
py/branch/rsession-cleanup/py/test/rsession/box.py
py/branch/rsession-cleanup/py/test/rsession/testing/test_boxing.py
Log:
Added (a bit sophisticated) test for box having pid stored. I guess it should be refined at some point for box to return self.parent or to call some callback.
Modified: py/branch/rsession-cleanup/py/test/rsession/box.py
==============================================================================
--- py/branch/rsession-cleanup/py/test/rsession/box.py (original)
+++ py/branch/rsession-cleanup/py/test/rsession/box.py Mon Dec 11 14:18:42 2006
@@ -18,9 +18,10 @@
from StringIO import StringIO
class SimpleBox(object):
- def __init__(self, fun, args = [], kwargs = {}):
+ def __init__(self, fun, args = [], kwargs = {}, info=None):
self.fun = fun
self.args = args
+ self.info = info
self.kwargs = kwargs
def run(self):
@@ -39,12 +40,13 @@
class FileBox(object):
count = 0
- def __init__(self, fun, args=None, kwargs=None):
+ def __init__(self, fun, args=None, kwargs=None, info=None):
if args is None:
args = []
if kwargs is None:
kwargs = {}
self.fun = fun
+ self.info = info
self.args = args
self.kwargs = kwargs
@@ -59,6 +61,8 @@
nice_level = py.test.remote.nice_level
pid = os.fork()
if pid:
+ if self.info is not None:
+ self.info.pid = pid
self.parent(pid)
else:
try:
Modified: py/branch/rsession-cleanup/py/test/rsession/testing/test_boxing.py
==============================================================================
--- py/branch/rsession-cleanup/py/test/rsession/testing/test_boxing.py (original)
+++ py/branch/rsession-cleanup/py/test/rsession/testing/test_boxing.py Mon Dec 11 14:18:42 2006
@@ -2,7 +2,7 @@
""" test boxing functionality
"""
-import py, sys
+import py, sys, os
if sys.platform == 'win32':
py.test.skip("rsession is unsupported on Windows.")
@@ -74,3 +74,34 @@
assert b.exitstat == 0
assert b.signal == 0
assert b.retval == 2
+
+def test_box_killer():
+ class A:
+ pass
+ info = A()
+ import time
+
+ def box_fun():
+ time.sleep(300) # we don't want to last forever here
+
+ b = RealBox(box_fun, info=info)
+ import thread
+ def f():
+ b.run()
+ lock.release()
+ lock = thread.allocate_lock()
+ lock.acquire()
+ thread.start_new_thread(f, ())
+ count = 0
+ while count < 3000:
+ # we don't want to wait forever
+ time.sleep(.1)
+ if hasattr(info, 'pid'):
+ os.kill(info.pid, 15)
+ break
+ count += 1
+ lock.acquire()
+ assert count < 3000
+ assert b.signal == 15
+
+
More information about the pytest-commit
mailing list