summaryrefslogtreecommitdiff
path: root/Lib/test/test_resource.py
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2002-04-23 20:21:22 +0000
committerJeremy Hylton <jeremy@alum.mit.edu>2002-04-23 20:21:22 +0000
commit74ce77f0e67f0d67a3ae0d35ae11c7c48a7a67a5 (patch)
tree3448c424aaaf8f37defca17d1b651d2f09458785 /Lib/test/test_resource.py
parentd95efe4257b7d7aa95e273c2cb206b1d72c57cad (diff)
downloadcpython-git-74ce77f0e67f0d67a3ae0d35ae11c7c48a7a67a5.tar.gz
Add tests for the recent resource module change.
Also add a test that Python doesn't die with SIGXFSZ if it exceeds the file rlimit. (Assuming this will also test the behavior when the 2GB limit is exceed on a platform that doesn't have large file support.)
Diffstat (limited to 'Lib/test/test_resource.py')
-rw-r--r--Lib/test/test_resource.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
new file mode 100644
index 0000000000..1293833e30
--- /dev/null
+++ b/Lib/test/test_resource.py
@@ -0,0 +1,48 @@
+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