]> granicus.if.org Git - python/commitdiff
[Patch #1520905] Attempt to suppress core file created by test_subprocess.py.
authorAndrew M. Kuchling <amk@amk.ca>
Tue, 1 Aug 2006 18:16:15 +0000 (18:16 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Tue, 1 Aug 2006 18:16:15 +0000 (18:16 +0000)
Patch by Douglas Greiman.

The test_run_abort() testcase produces a core file on Unix systems,
even though the test is successful. This can be confusing or alarming
to someone who runs 'make test' and then finds that the Python
interpreter apparently crashed.

Lib/test/test_subprocess.py

index f2c3083d9c04b6317506d83d81bd609f736e6fd7..1e18eca46552f0876cb49303e61f3b827a8dbb72 100644 (file)
@@ -476,10 +476,36 @@ class ProcessTestCase(unittest.TestCase):
             else:
                 self.fail("Expected OSError")
 
+        def _suppress_core_files(self):
+            """Try to prevent core files from being created.
+            Returns previous ulimit if successful, else None.
+            """
+            try:
+                import resource
+                old_limit = resource.getrlimit(resource.RLIMIT_CORE)
+                resource.setrlimit(resource.RLIMIT_CORE, (0,0))
+                return old_limit
+            except (ImportError, ValueError, resource.error):
+                return None
+
+        def _unsuppress_core_files(self, old_limit):
+            """Return core file behavior to default."""
+            if old_limit is None:
+                return
+            try:
+                import resource
+                resource.setrlimit(resource.RLIMIT_CORE, old_limit)
+            except (ImportError, ValueError, resource.error):
+                return
+            
         def test_run_abort(self):
             # returncode handles signal termination
-            p = subprocess.Popen([sys.executable,
-                                  "-c", "import os; os.abort()"])
+            old_limit = self._suppress_core_files()
+            try:
+                p = subprocess.Popen([sys.executable,
+                                      "-c", "import os; os.abort()"])
+            finally:
+                self._unsuppress_core_files(old_limit)
             p.wait()
             self.assertEqual(-p.returncode, signal.SIGABRT)