summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_subprocess.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_subprocess.py')
-rw-r--r--Lib/test/test_subprocess.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 7bb0492..b91791a 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1702,6 +1702,28 @@ class RunFuncTestCase(BaseTestCase):
msg="TimeoutExpired was delayed! Bad traceback:\n```\n"
f"{stacks}```")
+ @unittest.skipIf(not sysconfig.get_config_var("HAVE_VFORK"),
+ "vfork() not enabled by configure.")
+ def test__use_vfork(self):
+ # Attempts code coverage within _posixsubprocess.c on the code that
+ # probes the subprocess module for the existence and value of this
+ # attribute in 3.10.5.
+ self.assertTrue(subprocess._USE_VFORK) # The default value regardless.
+ with mock.patch.object(subprocess, "_USE_VFORK", False):
+ self.assertEqual(self.run_python("pass").returncode, 0,
+ msg="False _USE_VFORK failed")
+
+ class RaisingBool:
+ def __bool__(self):
+ raise RuntimeError("force PyObject_IsTrue to return -1")
+
+ with mock.patch.object(subprocess, "_USE_VFORK", RaisingBool()):
+ self.assertEqual(self.run_python("pass").returncode, 0,
+ msg="odd bool()-error _USE_VFORK failed")
+ del subprocess._USE_VFORK
+ self.assertEqual(self.run_python("pass").returncode, 0,
+ msg="lack of a _USE_VFORK attribute failed")
+
def _get_test_grp_name():
for name_group in ('staff', 'nogroup', 'grp', 'nobody', 'nfsnobody'):