[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