import os import resource from 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. try: resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max)) f = open(TESTFN, "wb") f.write("X" * 1024) try: f.write("Y") f.flush() except IOError: pass 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: pass try: resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big)) except OverflowError: pass