summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-09-18 22:38:48 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-09-18 22:38:48 (GMT)
commit8db3027e6a79836ea8c77e73be77492c68715da5 (patch)
treefa6a5ce926ab826d4ad13f1fa061cebd1832f8bd
parent81c4d36928754cc59a48723e4126b5066cc8e8d6 (diff)
downloadcpython-8db3027e6a79836ea8c77e73be77492c68715da5.zip
cpython-8db3027e6a79836ea8c77e73be77492c68715da5.tar.gz
cpython-8db3027e6a79836ea8c77e73be77492c68715da5.tar.bz2
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 22b6308..da92d59 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']),