https://github.com/python/cpython/commit/461125aaa331fe2b39452c852ee26d0161b2436e
commit: 461125aaa331fe2b39452c852ee26d0161b2436e
branch: main
author: Shrey Naithani <[email protected]>
committer: encukou <[email protected]>
date: 2026-04-08T16:06:05+02:00
summary:
gh-37883: Safely skip test_resource file size tests when limits are strict
(GH-145579)
files:
M Lib/test/test_resource.py
diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
index 5fd076bee38e79..ba736b0806eb1b 100644
--- a/Lib/test/test_resource.py
+++ b/Lib/test/test_resource.py
@@ -4,7 +4,6 @@
from test import support
from test.support import import_helper
from test.support import os_helper
-import time
resource = import_helper.import_module('resource')
@@ -41,7 +40,7 @@ def test_fsize_ismax(self):
# the number to a C long long and that the conversion doesn't raise
# an error.
self.assertGreater(resource.RLIM_INFINITY, 0)
- self.assertEqual(resource.RLIM_INFINITY, max)
+ self.assertGreaterEqual(max, 0)
self.assertLessEqual(cur, max)
resource.setrlimit(resource.RLIMIT_FSIZE, (max, max))
resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
@@ -50,47 +49,24 @@ def test_fsize_ismax(self):
"setting RLIMIT_FSIZE is not supported on VxWorks")
@unittest.skipUnless(hasattr(resource, 'RLIMIT_FSIZE'), 'requires
resource.RLIMIT_FSIZE')
def test_fsize_enforced(self):
- (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE)
- # Check to see what happens when the RLIMIT_FSIZE is small. Some
- # versions of Python were terminated by an uncaught SIGXFSZ, but
- # pythonrun.c has been fixed to ignore that exception. If so, the
- # write() should return EFBIG when the limit is exceeded.
-
- # At least one platform has an unlimited RLIMIT_FSIZE and attempts
- # to change it raise ValueError instead.
+ self.addCleanup(os_helper.unlink, os_helper.TESTFN)
try:
+ (cur, max_lim) = resource.getrlimit(resource.RLIMIT_FSIZE)
+ except OSError as e:
+ self.skipTest(f"getrlimit(RLIMIT_FSIZE) failed: {e}")
+ if max_lim != resource.RLIM_INFINITY and max_lim < 1025:
+ self.skipTest(f"system RLIMIT_FSIZE hard limit ({max_lim}) is too
small for this test")
+ with open(os_helper.TESTFN, "wb", buffering=0) as f:
try:
- resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max))
- limit_set = True
- except ValueError:
- limit_set = False
- f = open(os_helper.TESTFN, "wb")
- try:
+ resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max_lim))
f.write(b"X" * 1024)
- try:
+ with self.assertRaises(OSError, msg="f.write() did not raise
OSError when exceeding RLIMIT_FSIZE"):
f.write(b"Y")
f.flush()
- # On some systems (e.g., Ubuntu on hppa) the flush()
- # doesn't always cause the exception, but the close()
- # does eventually. Try flushing several times in
- # an attempt to ensure the file is really synced and
- # the exception raised.
- for i in range(5):
- time.sleep(.1)
- f.flush()
- except OSError:
- if not limit_set:
- raise
- if limit_set:
- # Close will attempt to flush the byte we wrote
- # Restore limit first to avoid getting a spurious error
- resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
finally:
- f.close()
- finally:
- if limit_set:
- resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
- os_helper.unlink(os_helper.TESTFN)
+ # Close will attempt to flush the byte we wrote
+ # Restore limit first to avoid getting a spurious error
+ resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max_lim))
@unittest.skipIf(sys.platform == "vxworks",
"setting RLIMIT_FSIZE is not supported on VxWorks")
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]