https://github.com/python/cpython/commit/363dddba14741ad1a63b62dde7dc54a8e0ab1f87
commit: 363dddba14741ad1a63b62dde7dc54a8e0ab1f87
branch: 3.11
author: Miss Islington (bot) <[email protected]>
committer: encukou <[email protected]>
date: 2024-01-18T13:19:18+01:00
summary:

[3.11] gh-104522: Fix test_subprocess failure when build Python in the root 
home directory (GH-114236) (GH-114245)

EPERM is raised when setreuid() fails.
EACCES is set in execve() when the test user has not access to sys.executable.
(cherry picked from commit 311d1e2701037952eaf75f993be76f3092c1f01c)

Co-authored-by: Serhiy Storchaka <[email protected]>

files:
M Lib/test/test_subprocess.py

diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index b4206c7bea897d..7f7d84214b0e86 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -2004,9 +2004,9 @@ def test_process_group_0(self):
 
     @unittest.skipUnless(hasattr(os, 'setreuid'), 'no setreuid on platform')
     def test_user(self):
-        # For code coverage of the user parameter.  We don't care if we get an
-        # EPERM error from it depending on the test execution environment, that
-        # still indicates that it was called.
+        # For code coverage of the user parameter.  We don't care if we get a
+        # permission error from it depending on the test execution environment,
+        # that still indicates that it was called.
 
         uid = os.geteuid()
         test_users = [65534 if uid != 65534 else 65533, uid]
@@ -2031,11 +2031,10 @@ def test_user(self):
                                 user=user,
                                 close_fds=close_fds)
                     except PermissionError as e:  # (EACCES, EPERM)
-                        self.assertIsNone(e.filename)
-                    except OSError as e:
-                        if e.errno not in (errno.EACCES, errno.EPERM):
-                            raise
-                        self.assertIsNone(e.filename)
+                        if e.errno == errno.EACCES:
+                            self.assertEqual(e.filename, sys.executable)
+                        else:
+                            self.assertIsNone(e.filename)
                     else:
                         if isinstance(user, str):
                             user_uid = pwd.getpwnam(user).pw_uid

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to