diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2020-05-02 13:29:46 +0200 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2020-05-02 13:29:46 +0200 |
commit | 25570f74fab10c23c23613c0abd54c3b3f86fee4 (patch) | |
tree | 384cfd8359f27ced416d5b7941263d284ccc75a5 | |
parent | 3c14211b58492d27144a40170e4ce0e2f979af44 (diff) | |
download | psutil-25570f74fab10c23c23613c0abd54c3b3f86fee4.tar.gz |
move tests
-rw-r--r-- | psutil/_psposix.py | 2 | ||||
-rwxr-xr-x | psutil/tests/test_process.py | 103 |
2 files changed, 39 insertions, 66 deletions
diff --git a/psutil/_psposix.py b/psutil/_psposix.py index b7b57477..fd822fc6 100644 --- a/psutil/_psposix.py +++ b/psutil/_psposix.py @@ -121,6 +121,8 @@ def wait_pid(pid, timeout=None, proc_name=None, # # waitpid() was called with WUNTRACED flag. Anyway, it's # # still alive. From now on waitpid() will keep returning # # (0, 0) until the process state doesn't change. + # # This can be important to catch since stopped PIDs can't + # # be terminated by SIGTERM. # interval = sleep(interval) # continue # elif os.WIFCONTINUED(status): diff --git a/psutil/tests/test_process.py b/psutil/tests/test_process.py index 3caeb420..7b55c5d5 100755 --- a/psutil/tests/test_process.py +++ b/psutil/tests/test_process.py @@ -136,21 +136,44 @@ class TestProcess(PsutilTestCase): p = psutil.Process(0) self.assertRaises(ValueError, p.send_signal, signal.SIGTERM) - def test_wait_sysexit(self): - # check sys.exit() code - pycode = "import time, sys; time.sleep(0.01); sys.exit(5);" - p = self.spawn_psproc([PYTHON_EXE, "-c", pycode]) - self.assertEqual(p.wait(), 5) - assert not p.is_running() + def test_wait_exited(self): + # Test waitpid() + WIFEXITED -> WEXITSTATUS. + # normal return, same as exit(0) + cmd = [PYTHON_EXE, "-c", "pass"] + code = self.spawn_psproc(cmd).wait() + self.assertEqual(code, 0) + # exit(1), implicit in case of error + cmd = [PYTHON_EXE, "-c", "1 / 0"] + code = self.spawn_psproc(cmd, stderr=subprocess.PIPE).wait() + self.assertEqual(code, 1) + # via sys.exit() + cmd = [PYTHON_EXE, "-c", "import sys; sys.exit(5);"] + code = self.spawn_psproc(cmd).wait() + self.assertEqual(code, 5) + # via os._exit() + cmd = [PYTHON_EXE, "-c", "import os; os._exit(5);"] + code = self.spawn_psproc(cmd).wait() + self.assertEqual(code, 5) + + def test_wait_signaled(self): + # Test waitpid() + WIFSIGNALED -> WTERMSIG. + p = self.spawn_psproc() + p.send_signal(signal.SIGTERM) + code = p.wait() + self.assertEqual(code, -signal.SIGTERM) + self.assertIsNone(p.wait(0)) - def test_wait_issued_twice(self): - # It is not supposed to raise NSP when the process is gone. - # On UNIX this should return None, on Windows it should keep - # returning the exit code. - pycode = "import time, sys; time.sleep(0.01); sys.exit(5);" - p = self.spawn_psproc([PYTHON_EXE, "-c", pycode]) - self.assertEqual(p.wait(), 5) - self.assertIn(p.wait(), (5, None)) + def test_wait_stopped(self): + # Test waitpid() + WIFSTOPPED and WIFCONTINUED. + p = self.spawn_psproc() + p.send_signal(signal.SIGSTOP) + self.assertRaises(psutil.TimeoutExpired, p.wait, timeout=0.001) + p.send_signal(signal.SIGCONT) + self.assertRaises(psutil.TimeoutExpired, p.wait, timeout=0.001) + p.send_signal(signal.SIGTERM) + code = p.wait() + self.assertEqual(code, -signal.SIGTERM) + self.assertIsNone(p.wait(0)) def test_wait_non_children(self): # Test wait() against a process which is not our direct @@ -1519,58 +1542,6 @@ if POSIX and os.getuid() == 0: # =================================================================== -# --- psutil.Process.wait() tests -# =================================================================== - - -@unittest.skipIf(not POSIX, "POSIX only") -class TestProcessWait(PsutilTestCase): - """Tests for psutil.Process class.""" - - def spawn_psproc(self, *args, **kwargs): - sproc = self.spawn_testproc(*args, **kwargs) - return psutil.Process(sproc.pid) - - def test_wait_exited(self): - # Test waitpid() + WIFEXITED -> WEXITSTATUS. - # normal return, same as exit(0) - cmd = [PYTHON_EXE, "-c", "pass"] - code = self.spawn_psproc(cmd).wait() - self.assertEqual(code, 0) - # exit(1), implicit in case of error - cmd = [PYTHON_EXE, "-c", "1 / 0"] - code = self.spawn_psproc(cmd, stderr=subprocess.PIPE).wait() - self.assertEqual(code, 1) - # via sys.exit() - cmd = [PYTHON_EXE, "-c", "import sys; sys.exit(5);"] - code = self.spawn_psproc(cmd).wait() - self.assertEqual(code, 5) - # via os._exit() - cmd = [PYTHON_EXE, "-c", "import os; os._exit(5);"] - code = self.spawn_psproc(cmd).wait() - self.assertEqual(code, 5) - - def test_wait_signaled(self): - # Test waitpid() + WIFSIGNALED -> WTERMSIG. - p = self.spawn_psproc() - p.send_signal(signal.SIGTERM) - code = p.wait() - self.assertEqual(code, -signal.SIGTERM) - - def test_wait_stopped(self): - # Test waitpid() + WIFSTOPPED and WIFCONTINUED. - p = self.spawn_psproc() - p.send_signal(signal.SIGSTOP) - self.assertRaises(psutil.TimeoutExpired, p.wait, timeout=0.001) - p.send_signal(signal.SIGCONT) - self.assertRaises(psutil.TimeoutExpired, p.wait, timeout=0.001) - p.send_signal(signal.SIGTERM) - code = p.wait() - self.assertEqual(code, -signal.SIGTERM) - self.assertIsNone(p.wait(0)) - - -# =================================================================== # --- psutil.Popen tests # =================================================================== |