diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2013-08-16 18:49:32 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2013-08-16 18:49:32 (GMT) |
commit | 95b21460ee7ae6b9b52753cf2509d439bd6a0476 (patch) | |
tree | 634b33b58ad03b1498b63d0b40c22ea61203a57e /Lib/test/test_os.py | |
parent | 00731e2455e45dadc45ad1ccc4eff95831eb9d65 (diff) | |
parent | ec34ab501025f7fd677e0f6b8a8d0c9f960f069f (diff) | |
download | cpython-95b21460ee7ae6b9b52753cf2509d439bd6a0476.zip cpython-95b21460ee7ae6b9b52753cf2509d439bd6a0476.tar.gz cpython-95b21460ee7ae6b9b52753cf2509d439bd6a0476.tar.bz2 |
Issue #18756: Improve error reporting in os.urandom() when the failure is due to something else than /dev/urandom not existing.
Diffstat (limited to 'Lib/test/test_os.py')
-rw-r--r-- | Lib/test/test_os.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index eb13667..b7796b5 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -30,6 +30,11 @@ try: import threading except ImportError: threading = None +try: + import resource +except ImportError: + resource = None + from test.script_helper import assert_python_ok with warnings.catch_warnings(): @@ -1010,6 +1015,21 @@ class URandomTests(unittest.TestCase): data2 = self.get_urandom_subprocess(16) self.assertNotEqual(data1, data2) + @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: + 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)) + + @contextlib.contextmanager def _execvpe_mockup(defpath=None): """ |