home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 June / maximum-cd-2011-06.iso / DiscContents / LibO_3.3.1_Win_x86_install_multi.exe / libreoffice1.cab / test_resource.py < prev    next >
Encoding:
Python Source  |  2011-02-15  |  4.3 KB  |  111 lines

  1. import unittest
  2. from test import test_support
  3.  
  4. import resource
  5. import time
  6.  
  7. # This test is checking a few specific problem spots with the resource module.
  8.  
  9. class ResourceTest(unittest.TestCase):
  10.  
  11.     def test_args(self):
  12.         self.assertRaises(TypeError, resource.getrlimit)
  13.         self.assertRaises(TypeError, resource.getrlimit, 42, 42)
  14.         self.assertRaises(TypeError, resource.setrlimit)
  15.         self.assertRaises(TypeError, resource.setrlimit, 42, 42, 42)
  16.  
  17.     def test_fsize_ismax(self):
  18.         try:
  19.             (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE)
  20.         except AttributeError:
  21.             pass
  22.         else:
  23.             # RLIMIT_FSIZE should be RLIM_INFINITY, which will be a really big
  24.             # number on a platform with large file support.  On these platforms,
  25.             # we need to test that the get/setrlimit functions properly convert
  26.             # the number to a C long long and that the conversion doesn't raise
  27.             # an error.
  28.             self.assertEqual(resource.RLIM_INFINITY, max)
  29.             resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
  30.  
  31.     def test_fsize_enforced(self):
  32.         try:
  33.             (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE)
  34.         except AttributeError:
  35.             pass
  36.         else:
  37.             # Check to see what happens when the RLIMIT_FSIZE is small.  Some
  38.             # versions of Python were terminated by an uncaught SIGXFSZ, but
  39.             # pythonrun.c has been fixed to ignore that exception.  If so, the
  40.             # write() should return EFBIG when the limit is exceeded.
  41.  
  42.             # At least one platform has an unlimited RLIMIT_FSIZE and attempts
  43.             # to change it raise ValueError instead.
  44.             try:
  45.                 try:
  46.                     resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max))
  47.                     limit_set = True
  48.                 except ValueError:
  49.                     limit_set = False
  50.                 f = open(test_support.TESTFN, "wb")
  51.                 try:
  52.                     f.write("X" * 1024)
  53.                     try:
  54.                         f.write("Y")
  55.                         f.flush()
  56.                         # On some systems (e.g., Ubuntu on hppa) the flush()
  57.                         # doesn't always cause the exception, but the close()
  58.                         # does eventually.  Try flushing several times in
  59.                         # an attempt to ensure the file is really synced and
  60.                         # the exception raised.
  61.                         for i in range(5):
  62.                             time.sleep(.1)
  63.                             f.flush()
  64.                     except IOError:
  65.                         if not limit_set:
  66.                             raise
  67.                     if limit_set:
  68.                         # Close will attempt to flush the byte we wrote
  69.                         # Restore limit first to avoid getting a spurious error
  70.                         resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
  71.                 finally:
  72.                     f.close()
  73.             finally:
  74.                 if limit_set:
  75.                     resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max))
  76.                 test_support.unlink(test_support.TESTFN)
  77.  
  78.     def test_fsize_toobig(self):
  79.         # Be sure that setrlimit is checking for really large values
  80.         too_big = 10L**50
  81.         try:
  82.             (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE)
  83.         except AttributeError:
  84.             pass
  85.         else:
  86.             try:
  87.                 resource.setrlimit(resource.RLIMIT_FSIZE, (too_big, max))
  88.             except (OverflowError, ValueError):
  89.                 pass
  90.             try:
  91.                 resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big))
  92.             except (OverflowError, ValueError):
  93.                 pass
  94.  
  95.     def test_getrusage(self):
  96.         self.assertRaises(TypeError, resource.getrusage)
  97.         self.assertRaises(TypeError, resource.getrusage, 42, 42)
  98.         usageself = resource.getrusage(resource.RUSAGE_SELF)
  99.         usagechildren = resource.getrusage(resource.RUSAGE_CHILDREN)
  100.         # May not be available on all systems.
  101.         try:
  102.             usageboth = resource.getrusage(resource.RUSAGE_BOTH)
  103.         except (ValueError, AttributeError):
  104.             pass
  105.  
  106. def test_main(verbose=None):
  107.     test_support.run_unittest(ResourceTest)
  108.  
  109. if __name__ == "__main__":
  110.     test_main()
  111.