]> granicus.if.org Git - python/commitdiff
Issue #18623: Factor out the _SuppressCoreFiles context manager into test.support.
authorAntoine Pitrou <solipsis@pitrou.net>
Fri, 6 Sep 2013 18:50:00 +0000 (20:50 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Fri, 6 Sep 2013 18:50:00 +0000 (20:50 +0200)
Patch by Valerie Lambert.

Lib/test/support/__init__.py
Lib/test/test_subprocess.py
Lib/test/test_support.py
Misc/NEWS

index d496bd6f63ebb30f1f0e11e472827049be80f32a..0a5d1d4b6722a1a5754431d4be7a4e729b9632ec 100644 (file)
@@ -57,6 +57,11 @@ try:
 except ImportError:
     lzma = None
 
+try:
+    import resource
+except ImportError:
+    resource = None
+
 __all__ = [
     "Error", "TestFailed", "ResourceDenied", "import_module", "verbose",
     "use_resources", "max_memuse", "record_original_stdout",
@@ -77,6 +82,7 @@ __all__ = [
     "skip_unless_xattr", "import_fresh_module", "requires_zlib",
     "PIPE_MAX_SIZE", "failfast", "anticipate_failure", "run_with_tz",
     "requires_gzip", "requires_bz2", "requires_lzma", "suppress_crash_popup",
+    "SuppressCoreFiles",
     ]
 
 class Error(Exception):
@@ -2055,3 +2061,42 @@ def patch(test_instance, object_to_patch, attr_name, new_value):
 
     # actually override the attribute
     setattr(object_to_patch, attr_name, new_value)
+
+
+class SuppressCoreFiles(object):
+
+    """Try to prevent core files from being created."""
+    old_limit = None
+
+    def __enter__(self):
+        """Try to save previous ulimit, then set the soft limit to 0."""
+        if resource is not None:
+            try:
+                self.old_limit = resource.getrlimit(resource.RLIMIT_CORE)
+                resource.setrlimit(resource.RLIMIT_CORE, (0, self.old_limit[1]))
+            except (ValueError, OSError):
+                pass
+        if sys.platform == 'darwin':
+            # Check if the 'Crash Reporter' on OSX was configured
+            # in 'Developer' mode and warn that it will get triggered
+            # when it is.
+            #
+            # This assumes that this context manager is used in tests
+            # that might trigger the next manager.
+            value = subprocess.Popen(['/usr/bin/defaults', 'read',
+                    'com.apple.CrashReporter', 'DialogType'],
+                    stdout=subprocess.PIPE).communicate()[0]
+            if value.strip() == b'developer':
+                print("this test triggers the Crash Reporter, "
+                      "that is intentional", end='')
+                sys.stdout.flush()
+
+    def __exit__(self, *ignore_exc):
+        """Return core file behavior to default."""
+        if self.old_limit is None:
+            return
+        if resource is not None:
+            try:
+                resource.setrlimit(resource.RLIMIT_CORE, self.old_limit)
+            except (ValueError, OSError):
+                pass
index c00fc5c5d877f446ba4afc94c82170343bf6700f..4c15ee34d438d46e6332501b8a7dc1cf82018026 100644 (file)
@@ -18,10 +18,6 @@ import shutil
 import gc
 import textwrap
 
-try:
-    import resource
-except ImportError:
-    resource = None
 try:
     import threading
 except ImportError:
@@ -1147,47 +1143,6 @@ class ProcessTestCase(BaseTestCase):
         fds_after_exception = os.listdir(fd_directory)
         self.assertEqual(fds_before_popen, fds_after_exception)
 
-
-# context manager
-class _SuppressCoreFiles(object):
-    """Try to prevent core files from being created."""
-    old_limit = None
-
-    def __enter__(self):
-        """Try to save previous ulimit, then set it to (0, 0)."""
-        if resource is not None:
-            try:
-                self.old_limit = resource.getrlimit(resource.RLIMIT_CORE)
-                resource.setrlimit(resource.RLIMIT_CORE, (0, self.old_limit[1]))
-            except (ValueError, resource.error):
-                pass
-
-        if sys.platform == 'darwin':
-            # Check if the 'Crash Reporter' on OSX was configured
-            # in 'Developer' mode and warn that it will get triggered
-            # when it is.
-            #
-            # This assumes that this context manager is used in tests
-            # that might trigger the next manager.
-            value = subprocess.Popen(['/usr/bin/defaults', 'read',
-                    'com.apple.CrashReporter', 'DialogType'],
-                    stdout=subprocess.PIPE).communicate()[0]
-            if value.strip() == b'developer':
-                print("this tests triggers the Crash Reporter, "
-                      "that is intentional", end='')
-                sys.stdout.flush()
-
-    def __exit__(self, *args):
-        """Return core file behavior to default."""
-        if self.old_limit is None:
-            return
-        if resource is not None:
-            try:
-                resource.setrlimit(resource.RLIMIT_CORE, self.old_limit)
-            except (ValueError, resource.error):
-                pass
-
-
 @unittest.skipIf(mswindows, "POSIX specific tests")
 class POSIXProcessTestCase(BaseTestCase):
 
@@ -1276,7 +1231,7 @@ class POSIXProcessTestCase(BaseTestCase):
 
     def test_run_abort(self):
         # returncode handles signal termination
-        with _SuppressCoreFiles():
+        with support.SuppressCoreFiles():
             p = subprocess.Popen([sys.executable, "-c",
                                   'import os; os.abort()'])
             p.wait()
index 4edb1a8e01ce5a3774302f37cde209295074d14a..9afc1d066d609510369e92a7953ca09b57b0d2cb 100644 (file)
@@ -306,6 +306,7 @@ class TestSupport(unittest.TestCase):
     # args_from_interpreter_flags
     # can_symlink
     # skip_unless_symlink
+    # SuppressCoreFiles
 
 
 def test_main():
index e235e7dfb0e210179fe690822b12c3ea91d3cb34..b5cf807e5fa734222dc0e240eafac5c842bf7c49 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -202,6 +202,9 @@ Library
 Tests
 -----
 
+- Issue #18623: Factor out the _SuppressCoreFiles context manager into
+  test.support.  Patch by Valerie Lambert.
+
 - Issue #12037: Fix test_email for desktop Windows.
 
 - Issue #15507: test_subprocess's test_send_signal could fail if the test