summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_os.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-08-16 18:49:32 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-08-16 18:49:32 (GMT)
commit95b21460ee7ae6b9b52753cf2509d439bd6a0476 (patch)
tree634b33b58ad03b1498b63d0b40c22ea61203a57e /Lib/test/test_os.py
parent00731e2455e45dadc45ad1ccc4eff95831eb9d65 (diff)
parentec34ab501025f7fd677e0f6b8a8d0c9f960f069f (diff)
downloadcpython-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.py20
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):
"""