mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
Issue #18756: Improve error reporting in os.urandom() when the failure is due to something else than /dev/urandom not existing.
This commit is contained in:
parent
802bf8aea1
commit
ec34ab5010
3 changed files with 30 additions and 2 deletions
|
@ -28,6 +28,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():
|
||||
|
@ -997,6 +1002,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):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue