summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_subprocess.py
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2022-05-05 23:22:32 (GMT)
committerGitHub <noreply@github.com>2022-05-05 23:22:32 (GMT)
commitf6dd14c65336cda4e2ebccbc6408dfe3b0a68a34 (patch)
tree75e0b51fc5787a7ba02cf1f0534b292fb9a0a528 /Lib/test/test_subprocess.py
parent49fda0cc51c09e26d68431d5f86e11d923cf7b8e (diff)
downloadcpython-f6dd14c65336cda4e2ebccbc6408dfe3b0a68a34.zip
cpython-f6dd14c65336cda4e2ebccbc6408dfe3b0a68a34.tar.gz
cpython-f6dd14c65336cda4e2ebccbc6408dfe3b0a68a34.tar.bz2
gh-82616: Add process_group support to subprocess.Popen (#23930)
One more thing that can help prevent people from using `preexec_fn`. Also adds conditional skips to two tests exposing ASAN flakiness on the Ubuntu 20.04 Address Sanitizer Github CI system. When that build is run on more modern systems the "problem" does not show up. It seems ASAN implementation related. Co-authored-by: Zackery Spytz <zspytz@gmail.com> Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Lib/test/test_subprocess.py')
-rw-r--r--Lib/test/test_subprocess.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 0764120..f685492 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1905,14 +1905,32 @@ class POSIXProcessTestCase(BaseTestCase):
output = subprocess.check_output(
[sys.executable, "-c", "import os; print(os.getsid(0))"],
start_new_session=True)
- except OSError as e:
+ except PermissionError as e:
if e.errno != errno.EPERM:
- raise
+ raise # EACCES?
else:
parent_sid = os.getsid(0)
child_sid = int(output)
self.assertNotEqual(parent_sid, child_sid)
+ @unittest.skipUnless(hasattr(os, 'setpgid') and hasattr(os, 'getpgid'),
+ 'no setpgid or getpgid on platform')
+ def test_process_group_0(self):
+ # For code coverage of calling setpgid(). 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.
+ try:
+ output = subprocess.check_output(
+ [sys.executable, "-c", "import os; print(os.getpgid(0))"],
+ process_group=0)
+ except PermissionError as e:
+ if e.errno != errno.EPERM:
+ raise # EACCES?
+ else:
+ parent_pgid = os.getpgid(0)
+ child_pgid = int(output)
+ self.assertNotEqual(parent_pgid, child_pgid)
+
@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
@@ -3134,7 +3152,7 @@ class POSIXProcessTestCase(BaseTestCase):
True, (), cwd, env_list,
-1, -1, -1, -1,
1, 2, 3, 4,
- True, True,
+ True, True, 0,
False, [], 0, -1,
func, False)
# Attempt to prevent
@@ -3183,7 +3201,7 @@ class POSIXProcessTestCase(BaseTestCase):
True, fds_to_keep, None, [b"env"],
-1, -1, -1, -1,
1, 2, 3, 4,
- True, True,
+ True, True, 0,
None, None, None, -1,
None, "no vfork")
self.assertIn('fds_to_keep', str(c.exception))