test_ok1/py/test/rsession/testing/test_boxing.py

96 lines
2.5 KiB
Python
Raw Normal View History

""" test boxing functionality
"""
import py, sys, os
if sys.platform == 'win32':
py.test.skip("rsession is unsupported on Windows.")
from py.__.test.rsession.box import Box
from py.__.test.rsession.testing import example2
def setup_module(mod):
mod.rootdir = py.path.local(py.__file__).dirpath().dirpath()
mod.config = py.test.config._reparse([mod.rootdir])
def test_basic_boxing():
# XXX: because we do not have option transfer
## if not hasattr(option, 'nocapture') or not option.nocapture:
## py.test.skip("Interacts with pylib i/o skipping which is bad actually")
b = Box(example2.boxf1, config=config)
b.run()
assert b.stdoutrepr == "some out\n"
assert b.stderrrepr == "some err\n"
assert b.exitstat == 0
assert b.signal == 0
assert b.retval == 1
def test_boxing_on_fds():
b = Box(example2.boxf2, config=config)
b.run()
assert b.stdoutrepr == "someout"
assert b.stderrrepr == "someerr"
assert b.exitstat == 0
assert b.signal == 0
assert b.retval == 2
def test_boxing_signal():
b = Box(example2.boxseg, config=config)
b.run()
assert b.retval is None
if py.std.sys.version_info < (2,4):
py.test.skip("signal detection does not work with python prior 2.4")
assert b.signal == 11
def test_boxing_huge_data():
b = Box(example2.boxhuge, config=config)
b.run()
assert b.stdoutrepr
assert b.exitstat == 0
assert b.signal == 0
assert b.retval == 3
def test_box_seq():
# we run many boxes with huge data, just one after another
for i in xrange(100):
b = Box(example2.boxhuge, config=config)
b.run()
assert b.stdoutrepr
assert b.exitstat == 0
assert b.signal == 0
assert b.retval == 3
def test_box_in_a_box():
def boxfun():
b = Box(example2.boxf2, config=config)
b.run()
print b.stdoutrepr
print >>sys.stderr, b.stderrrepr
return b.retval
b = Box(boxfun, config=config)
b.run()
assert b.stdoutrepr == "someout\n"
assert b.stderrrepr == "someerr\n"
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(10) # we don't want to last forever here
b = Box(box_fun, config=config)
par, pid = b.run(continuation=True)
os.kill(pid, 15)
par(pid)
if py.std.sys.version_info < (2,4):
py.test.skip("signal detection does not work with python prior 2.4")
assert b.signal == 15