From 23084020155d36ed84c36c792096abd0b05c1c95 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 25 Jan 2018 19:06:05 +0100 Subject: [PATCH] bpo-32667: Fix tests when $PATH contains a file (GH-5322) Some tests failed when the PATH environment variable contained a path to an existing file. Fix tests to ignore also NotADirectoryError, not only FileNotFoundError and PermissionError. (cherry picked from commit b31206a223955d614d7769f95fb979d60f77bf87) --- Lib/test/test_dtrace.py | 2 +- Lib/test/test_subprocess.py | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Lib/test/test_dtrace.py b/Lib/test/test_dtrace.py index 47a501018a32b1..8612e276d76588 100644 --- a/Lib/test/test_dtrace.py +++ b/Lib/test/test_dtrace.py @@ -79,7 +79,7 @@ def assert_usable(self): try: output = self.trace(abspath("assert_usable" + self.EXTENSION)) output = output.strip() - except (FileNotFoundError, PermissionError) as fnfe: + except (FileNotFoundError, NotADirectoryError, PermissionError) as fnfe: output = str(fnfe) if output != "probe: success": raise unittest.SkipTest( diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 5016513decd8c7..d7eb982dc574b9 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -50,6 +50,8 @@ SETBINARY = '' NONEXISTING_CMD = ('nonexisting_i_hope',) +# Ignore errors that indicate the command was not found +NONEXISTING_ERRORS = (FileNotFoundError, NotADirectoryError, PermissionError) class BaseTestCase(unittest.TestCase): @@ -310,9 +312,9 @@ def test_executable_takes_precedence(self): # Verify first that the call succeeds without the executable arg. pre_args = [sys.executable, "-c"] self._assert_python(pre_args) - self.assertRaises((FileNotFoundError, PermissionError), + self.assertRaises(NONEXISTING_ERRORS, self._assert_python, pre_args, - executable="doesnotexist") + executable=NONEXISTING_CMD[0]) @unittest.skipIf(mswindows, "executable argument replaces shell") def test_executable_replaces_shell(self): @@ -1150,13 +1152,10 @@ def test_leaking_fds_on_error(self): # value for that limit, but Windows has 2048, so we loop # 1024 times (each call leaked two fds). for i in range(1024): - with self.assertRaises(OSError) as c: + with self.assertRaises(NONEXISTING_ERRORS): subprocess.Popen(NONEXISTING_CMD, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - # ignore errors that indicate the command was not found - if c.exception.errno not in (errno.ENOENT, errno.EACCES): - raise c.exception def test_nonexisting_with_pipes(self): # bpo-30121: Popen with pipes must close properly pipes on error. @@ -2539,7 +2538,7 @@ def test_leak_fast_process_del_killed(self): # let some time for the process to exit, and create a new Popen: this # should trigger the wait() of p time.sleep(0.2) - with self.assertRaises(OSError) as c: + with self.assertRaises(OSError): with subprocess.Popen(NONEXISTING_CMD, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: @@ -2978,7 +2977,7 @@ def test_communicate_stdin(self): self.assertEqual(proc.returncode, 1) def test_invalid_args(self): - with self.assertRaises((FileNotFoundError, PermissionError)) as c: + with self.assertRaises(NONEXISTING_ERRORS): with subprocess.Popen(NONEXISTING_CMD, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: