[Python-checkins] cpython (3.3): Issue #18756: make test_urandom_failure more robust by executing its code in a

antoine.pitrou python-checkins at python.org
Sat Aug 24 20:54:59 CEST 2013


http://hg.python.org/cpython/rev/b9e62929460e
changeset:   85363:b9e62929460e
branch:      3.3
parent:      85360:75728ef3d0c9
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Sat Aug 24 20:52:27 2013 +0200
summary:
  Issue #18756: make test_urandom_failure more robust by executing its code in a subprocess

files:
  Lib/test/test_os.py |  29 +++++++++++++++++++----------
  1 files changed, 19 insertions(+), 10 deletions(-)


diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1007,17 +1007,26 @@
 
     @unittest.skipUnless(resource, "test requires the resource module")
     def test_urandom_failure(self):
-        soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
-        resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit))
-        try:
-            with self.assertRaises(OSError) as cm:
+        # Check urandom() failing when it is not able to open /dev/random.
+        # We spawn a new process to make the test more robust (if getrlimit()
+        # failed to restore the file descriptor limit after this, the whole
+        # test suite would crash; this actually happened on the OS X Tiger
+        # buildbot).
+        code = """if 1:
+            import errno
+            import os
+            import resource
+
+            soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
+            resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit))
+            try:
                 os.urandom(16)
-            self.assertEqual(cm.exception.errno, errno.EMFILE)
-        finally:
-            # We restore the old limit as soon as possible.  If doing it
-            # using addCleanup(), code running in between would fail
-            # creating any file descriptor.
-            resource.setrlimit(resource.RLIMIT_NOFILE, (soft_limit, hard_limit))
+            except OSError as e:
+                assert e.errno == errno.EMFILE, e.errno
+            else:
+                raise AssertionError("OSError not raised")
+            """
+        assert_python_ok('-c', code)
 
 
 @contextlib.contextmanager

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list