def test_stream_process_output(self): """ Process output stream does not buffer """ expected = '\n'.join([str(n) for n in range(0,10)]) stream = io.BytesIO() buf = io.BufferedRandom(stream) p = processhandler.ProcessHandler([self.python, "proccountfive.py"], cwd=here, stream=buf) p.run() p.wait() for i in range(5, 10): stream.write(str(i)+'\n') buf.flush() self.assertEquals(stream.getvalue().strip(), expected) # make sure mozprocess doesn't close the stream # since mozprocess didn't create it self.assertFalse(buf.closed) buf.close() detected, output = proctest.check_for_process("proccountfive.py") self.determine_status(detected, output, p.proc.returncode, p.didTimeout, False, ())
def test_poll_while_running(self): """Process is started, and poll() is called""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_finish_python.ini"], cwd=here) p.run() returncode = p.poll() self.assertEqual(returncode, None) detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, returncode, p.didTimeout, True) p.kill()
def test_process_kill_broad(self): """Process is started, we kill it, we use a broad process tree""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_broad_python.ini"], cwd=here) p.run() p.kill() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout)
def test_poll_after_kill(self): """Process is killed, and poll() is called""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_finish_python.ini"], cwd=here) p.run() returncode = p.kill() # We killed the process, so the returncode should be < 0 self.assertLess(returncode, 0) self.assertEqual(returncode, p.poll()) detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, returncode, p.didTimeout)
def test_normal_finish(self): """Process is started, runs to completion while we wait for it""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_finish_python.ini"], cwd=here) p.run() p.wait() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout)
def test_process_kill(self): """Process is started, we kill it""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_finish_python.ini"], cwd=here) p.run() p.kill() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, expectedfail=('returncode',))
def test_waitnotimeout(self): """ Process is started, runs to completion before our wait times out """ p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_10s_python.ini"], cwd=here) p.run(timeout=30) p.wait() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout)
def test_process_timeout(self): """ Process is started, runs but we time out waiting on it to complete """ p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_python.ini"], cwd=here) p.run(timeout=10) p.wait() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, False, ['returncode', 'didtimeout'])
def test_process_kill_broad_wait(self): """Process is started, we use a broad process tree, we let it spawn for a bit, we kill it""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_broad_python.ini"], cwd=here) p.run() # Let the tree spawn a bit, before attempting to kill time.sleep(3) p.kill() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout)
def test_poll_after_kill_no_process_group(self): """Process (no group) is killed, and poll() is called""" p = processhandler.ProcessHandler([ self.python, self.proclaunch, "process_normal_finish_no_process_group.ini" ], cwd=here, ignore_children=True) p.run() returncode = p.kill() # We killed the process, so the returncode should be < 0 self.assertLess(returncode, 0) self.assertEqual(returncode, p.poll()) detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, returncode, p.didTimeout)
def test_process_output_nonewline(self): """ Process is started, outputs data with no newline """ p = processhandler.ProcessHandler([self.python, "procnonewline.py"], cwd=here) p.run() p.processOutput(timeout=5) p.wait() detected, output = proctest.check_for_process("procnonewline.py") self.determine_status(detected, output, p.proc.returncode, p.didTimeout, False, ())
def test_process_kill_deep_wait(self): """Process is started, we use a deep process tree, we let it spawn for a bit, we kill it""" p = processhandler.ProcessHandler( [self.python, self.proclaunch, "process_normal_deep_python.ini"], cwd=here) p.run() # Let the tree spawn a bit, before attempting to kill time.sleep(3) p.kill() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, expectedfail=('returncode', ))
def test_process_waittimeout(self): """ Process is started, then wait is called and times out. Process is still running and didn't timeout """ p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_10s_python.ini"], cwd=here) p.run() p.wait(timeout=5) detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, True, ())
def test_poll_after_external_kill(self): """Process is killed externally, and poll() is called""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_normal_finish_python.ini"], cwd=here) p.run() os.kill(p.pid, signal.SIGTERM) returncode = p.wait() # We killed the process, so the returncode should be < 0 self.assertEqual(returncode, -signal.SIGTERM) self.assertEqual(returncode, p.poll()) detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, returncode, p.didTimeout)
def test_process_output_twice(self): """ Process is started, then processOutput is called a second time explicitly """ p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_10s_python.ini"], cwd=here) p.run() p.processOutput(timeout=5) p.wait() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, False, ())
def test_process_timeout(self): """ Process is started, runs but we time out waiting on it to complete """ p = processhandler.ProcessHandler( [self.python, self.proclaunch, "process_waittimeout_python.ini"], cwd=here) p.run(timeout=10) p.wait() detected, output = proctest.check_for_process(self.proclaunch) if mozinfo.isUnix: # process was killed, so returncode should be negative self.assertLess(p.proc.returncode, 0) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, False, ['returncode', 'didtimeout'])
def test_waittimeout(self): """ Process is started, then wait is called and times out. Process is still running and didn't timeout """ p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_10s_python.ini"], cwd=here) p.run() p.wait(timeout=5) detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, True, ())
def test_wait_twice_after_kill(self): """Bug 968718: Process is started and stopped. wait() twice afterward.""" p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_python.ini"], cwd=here) p.run() p.kill() returncode1 = p.wait() returncode2 = p.wait() detected, output = proctest.check_for_process(self.proclaunch) self.determine_status(detected, output, returncode2, p.didTimeout) self.assertLess(returncode2, 0, 'Negative returncode expected, got "%s"' % returncode2) self.assertEqual(returncode1, returncode2, 'Expected both returncodes of wait() to be equal')
def test_timeout(self): """ Process is started, runs but we time out waiting on it to complete """ p = processhandler.ProcessHandler([self.python, self.proclaunch, "process_waittimeout_python.ini"], cwd=here) p.run(timeout=10) p.wait() detected, output = proctest.check_for_process(self.proclaunch) if mozinfo.isUnix: # process was killed, so returncode should be negative self.assertLess(p.proc.returncode, 0) self.determine_status(detected, output, p.proc.returncode, p.didTimeout, False, ['returncode', 'didtimeout'])