Skip to content

Commit

Permalink
gh-104522: Fix test_subprocess failure when build Python in the root …
Browse files Browse the repository at this point in the history
…home directory (GH-114236)

* gh-104522: Fix test_subprocess failure when build Python in the root home directory

EPERM is raised when setreuid() fails.
EACCES is set in execve() when the test user has not access to sys.executable.
  • Loading branch information
serhiy-storchaka committed Jan 18, 2024
1 parent ba683c2 commit 311d1e2
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions Lib/test/test_subprocess.py
Expand Up @@ -1991,9 +1991,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]
Expand All @@ -2018,11 +2018,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
Expand Down

0 comments on commit 311d1e2

Please sign in to comment.