summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-09-18 22:40:56 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-09-18 22:40:56 (GMT)
commit6fab1f69e244f364b3db73457cb96cb6d0810692 (patch)
tree350b1255ac1f18e57bbb2978ef94ab3d9d62ce98
parentf61045fd151c9726c03384152bfac39753e2308f (diff)
downloadcpython-6fab1f69e244f364b3db73457cb96cb6d0810692.zip
cpython-6fab1f69e244f364b3db73457cb96cb6d0810692.tar.gz
cpython-6fab1f69e244f364b3db73457cb96cb6d0810692.tar.bz2
Merged revisions 84883 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r84883 | antoine.pitrou | 2010-09-19 00:38:48 +0200 (dim., 19 sept. 2010) | 3 lines Issue #9895: speed up test_subprocess ........
-rw-r--r--Lib/test/test_subprocess.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index a23f934..552b9f2 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -445,21 +445,40 @@ class ProcessTestCase(BaseTestCase):
def test_no_leaking(self):
# Make sure we leak no resources
- if (not hasattr(support, "is_resource_enabled") or
- support.is_resource_enabled("subprocess") and not mswindows):
+ if not mswindows:
max_handles = 1026 # too much for most UNIX systems
else:
- max_handles = 65
- for i in range(max_handles):
- p = subprocess.Popen([sys.executable, "-c",
- "import sys;"
- "sys.stdout.write(sys.stdin.read())"],
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- data = p.communicate(b"lime")[0]
- self.assertEqual(data, b"lime")
-
+ max_handles = 2050 # too much for (at least some) Windows setups
+ handles = []
+ try:
+ for i in range(max_handles):
+ try:
+ handles.append(os.open(support.TESTFN,
+ os.O_WRONLY | os.O_CREAT))
+ except OSError as e:
+ if e.errno != errno.EMFILE:
+ raise
+ break
+ else:
+ self.skipTest("failed to reach the file descriptor limit "
+ "(tried %d)" % max_handles)
+ # Close a couple of them (should be enough for a subprocess)
+ for i in range(10):
+ os.close(handles.pop())
+ # Loop creating some subprocesses. If one of them leaks some fds,
+ # the next loop iteration will fail by reaching the max fd limit.
+ for i in range(15):
+ p = subprocess.Popen([sys.executable, "-c",
+ "import sys;"
+ "sys.stdout.write(sys.stdin.read())"],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ data = p.communicate(b"lime")[0]
+ self.assertEqual(data, b"lime")
+ finally:
+ for h in handles:
+ os.close(h)
def test_list2cmdline(self):
self.assertEqual(subprocess.list2cmdline(['a b c', 'd', 'e']),