summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozprocess/tests/test_run_and_wait.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/mozprocess/tests/test_run_and_wait.py')
-rw-r--r--testing/mozbase/mozprocess/tests/test_run_and_wait.py126
1 files changed, 126 insertions, 0 deletions
diff --git a/testing/mozbase/mozprocess/tests/test_run_and_wait.py b/testing/mozbase/mozprocess/tests/test_run_and_wait.py
new file mode 100644
index 0000000000..7cda4d2274
--- /dev/null
+++ b/testing/mozbase/mozprocess/tests/test_run_and_wait.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+
+import os
+import signal
+
+import mozprocess
+import mozunit
+import proctest
+
+here = os.path.dirname(os.path.abspath(__file__))
+
+
+def kill(proc):
+ is_win = os.name == "nt"
+ if is_win:
+ proc.send_signal(signal.CTRL_BREAK_EVENT)
+ else:
+ os.killpg(proc.pid, signal.SIGKILL)
+ proc.wait()
+
+
+class ProcTestSimpleRunAndWait(proctest.ProcTest):
+ """Class to test mozprocess.run_and_wait"""
+
+ def test_normal_finish(self):
+ """Process is started, runs to completion while we wait for it"""
+
+ p = mozprocess.run_and_wait(
+ [self.python, self.proclaunch, "process_normal_finish.ini"], cwd=here
+ )
+ self.assertEqual(p.returncode, 0)
+
+ def test_outputhandler(self):
+ """Output handler receives output generated by process"""
+ found = False
+
+ def olh(p, line):
+ nonlocal found
+ self.assertEqual(line, "XYZ\n")
+ found = True
+
+ p = mozprocess.run_and_wait(
+ [self.python, "-c", "print('XYZ')"], cwd=here, output_line_handler=olh
+ )
+ self.assertTrue(found)
+ self.assertEqual(p.returncode, 0)
+
+ def test_wait(self):
+ """Process is started runs to completion while we wait indefinitely"""
+
+ p = mozprocess.run_and_wait(
+ [self.python, self.proclaunch, "process_waittimeout_10s.ini"], cwd=here
+ )
+ self.assertEqual(p.returncode, 0)
+
+ def test_timeout(self):
+ """Process is started, runs but we time out waiting on it
+ to complete
+ """
+ timed_out = False
+
+ def th(p):
+ nonlocal timed_out
+ timed_out = True
+ kill(p)
+
+ mozprocess.run_and_wait(
+ [self.python, self.proclaunch, "process_waittimeout.ini"],
+ cwd=here,
+ timeout=10,
+ timeout_handler=th,
+ )
+ self.assertTrue(timed_out)
+
+ def test_waitnotimeout(self):
+ """Process is started, runs to completion before our wait times out"""
+ p = mozprocess.run_and_wait(
+ [self.python, self.proclaunch, "process_waittimeout_10s.ini"],
+ cwd=here,
+ timeout=30,
+ )
+ self.assertEqual(p.returncode, 0)
+
+ def test_outputtimeout(self):
+ """Process produces output, but output stalls and exceeds output timeout"""
+
+ pgm = """
+import time
+
+for i in range(10):
+ print(i)
+ time.sleep(1)
+time.sleep(10)
+print("survived sleep!")
+ """
+ found = False
+ found9 = False
+ timed_out = False
+
+ def olh(p, line):
+ nonlocal found
+ nonlocal found9
+ if "9" in line:
+ found9 = True
+ if "survived" in line:
+ found = True
+
+ def oth(p):
+ nonlocal timed_out
+ timed_out = True
+ kill(p)
+
+ mozprocess.run_and_wait(
+ [self.python, "-u", "-c", pgm],
+ cwd=here,
+ output_timeout=5,
+ output_timeout_handler=oth,
+ output_line_handler=olh,
+ )
+ self.assertFalse(found)
+ self.assertTrue(found9)
+ self.assertTrue(timed_out)
+
+
+if __name__ == "__main__":
+ mozunit.main()