from __future__ import absolute_import
import os
import signal
import mozinfo
import mozunit
import proctest
from mozprocess import processhandler
here = os.path.dirname(os.path.abspath(__file__))
class ProcTestWait(proctest.ProcTest):
def test_normal_finish(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_normal_finish.ini"],
cwd=here)
p.run()
p.wait()
self.determine_status(p)
def test_wait(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_waittimeout_10s.ini"],
cwd=here)
p.run()
p.wait()
self.determine_status(p)
def test_timeout(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_waittimeout.ini"],
cwd=here)
p.run(timeout=10)
p.wait()
if mozinfo.isUnix:
self.assertLess(p.proc.returncode, 0)
self.determine_status(p, False, ['returncode', 'didtimeout'])
def test_waittimeout(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_waittimeout_10s.ini"],
cwd=here)
p.run()
p.wait(timeout=0)
self.determine_status(p, True, ())
def test_waitnotimeout(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_waittimeout_10s.ini"],
cwd=here)
p.run(timeout=30)
p.wait()
self.determine_status(p)
def test_wait_twice_after_kill(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_waittimeout.ini"],
cwd=here)
p.run()
p.kill()
returncode1 = p.wait()
returncode2 = p.wait()
self.determine_status(p)
if mozinfo.isWin:
self.assertGreater(returncode2, 0,
'Positive returncode expected, got "%s"' % returncode2)
else:
self.assertLess(returncode2, 0,
'Negative returncode expected, got "%s"' % returncode2)
self.assertEqual(returncode1, returncode2,
'Expected both returncodes of wait() to be equal')
def test_wait_after_external_kill(self):
p = processhandler.ProcessHandler([self.python, self.proclaunch,
"process_normal_finish.ini"],
cwd=here)
p.run()
os.kill(p.pid, signal.SIGTERM)
returncode = p.wait()
if mozinfo.isWin:
self.assertEqual(returncode, signal.SIGTERM,
'Positive returncode expected, got "%s"' % returncode)
else:
self.assertEqual(returncode, -signal.SIGTERM,
'%s expected, got "%s"' % (-signal.SIGTERM, returncode))
self.assertEqual(returncode, p.poll())
self.determine_status(p)
if __name__ == '__main__':
mozunit.main()