92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
 | |
| """ 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.signal == 11
 | |
|     assert b.retval is None
 | |
| 
 | |
| 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)
 | |
|     assert b.signal == 15
 |