home *** CD-ROM | disk | FTP | other *** search
- import os
- import resource
-
- from test.test_support import TESTFN
-
- # This test is checking a few specific problem spots. RLIMIT_FSIZE
- # should be RLIM_INFINITY, which will be a really big number on a
- # platform with large file support. On these platforms, we need to
- # test that the get/setrlimit functions properly convert the number to
- # a C long long and that the conversion doesn't raise an error.
-
- try:
- cur, max = resource.getrlimit(resource.RLIMIT_FSIZE)
- except AttributeError:
- pass
- else:
- print resource.RLIM_INFINITY == max
- resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
-
- # Now 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.
-
- try:
- try:
- resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max))
- limit_set = 1
- except ValueError:
- limit_set = 0
- f = open(TESTFN, "wb")
- f.write("X" * 1024)
- try:
- f.write("Y")
- f.flush()
- except IOError:
- if not limit_set:
- raise
- f.close()
- os.unlink(TESTFN)
- finally:
- resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
-
- # And be sure that setrlimit is checking for really large values
- too_big = 10L**50
- try:
- resource.setrlimit(resource.RLIMIT_FSIZE, (too_big, max))
- except (OverflowError, ValueError):
- pass
- try:
- resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big))
- except (OverflowError, ValueError):
- pass
-