mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Port test_resource.py to unittest.
This commit is contained in:
		
							parent
							
								
									cc0eba9d98
								
							
						
					
					
						commit
						9fab9a7da8
					
				
					 2 changed files with 71 additions and 51 deletions
				
			
		|  | @ -1,2 +0,0 @@ | ||||||
| test_resource |  | ||||||
| True |  | ||||||
|  | @ -1,56 +1,78 @@ | ||||||
| import os | import unittest | ||||||
| import resource | from test import test_support | ||||||
| 
 | 
 | ||||||
| from test.test_support import TESTFN |  | ||||||
| 
 | 
 | ||||||
| # This test is checking a few specific problem spots.  RLIMIT_FSIZE | import os, resource | ||||||
| # 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: | # This test is checking a few specific problem spots with the resource module. | ||||||
|     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 | class ResourceTest(unittest.TestCase): | ||||||
| # versions of Python were terminated by an uncaught SIGXFSZ, but |     def test_fsize_ismax(self): | ||||||
| # pythonrun.c has been fixed to ignore that exception.  If so, the |         | ||||||
| # write() should return EFBIG when the limit is exceeded. |         try: | ||||||
|  |             (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE) | ||||||
|  |         except AttributeError: | ||||||
|  |             pass | ||||||
|  |         else: | ||||||
|  |             # 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. | ||||||
|  |             self.assertEqual(resource.RLIM_INFINITY, max) | ||||||
|  |             resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max)) | ||||||
| 
 | 
 | ||||||
| # At least one platform has an unlimited RLIMIT_FSIZE and attempts to |     def test_fsize_enforced(self): | ||||||
| # change it raise ValueError instead. |         try: | ||||||
|  |             (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE) | ||||||
|  |         except AttributeError: | ||||||
|  |             pass | ||||||
|  |         else: | ||||||
|  |             # 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 = True | ||||||
|  |                 except ValueError: | ||||||
|  |                     limit_set = False | ||||||
|  |                 f = open(test_support.TESTFN, "wb") | ||||||
|  |                 f.write("X" * 1024) | ||||||
|  |                 try: | ||||||
|  |                     f.write("Y") | ||||||
|  |                     f.flush() | ||||||
|  |                 except IOError: | ||||||
|  |                     if not limit_set: | ||||||
|  |                         raise | ||||||
|  |                 f.close() | ||||||
|  |                 os.unlink(test_support.TESTFN) | ||||||
|  |             finally: | ||||||
|  |                 resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max)) | ||||||
| 
 | 
 | ||||||
| try: |     def test_fsize_toobig(self): | ||||||
|     try: |         # Be sure that setrlimit is checking for really large values | ||||||
|         resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max)) |         too_big = 10L**50 | ||||||
|         limit_set = 1 |         try: | ||||||
|     except ValueError: |             (cur, max) = resource.getrlimit(resource.RLIMIT_FSIZE) | ||||||
|         limit_set = 0 |         except AttributeError: | ||||||
|     f = open(TESTFN, "wb") |             pass | ||||||
|     f.write("X" * 1024) |         else: | ||||||
|     try: |             try: | ||||||
|         f.write("Y") |                 resource.setrlimit(resource.RLIMIT_FSIZE, (too_big, max)) | ||||||
|         f.flush() |             except (OverflowError, ValueError): | ||||||
|     except IOError: |                 pass | ||||||
|         if not limit_set: |             try: | ||||||
|             raise |                 resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big)) | ||||||
|     f.close() |             except (OverflowError, ValueError): | ||||||
|     os.unlink(TESTFN) |                 pass | ||||||
| finally: |  | ||||||
|     resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max)) |  | ||||||
| 
 | 
 | ||||||
| # And be sure that setrlimit is checking for really large values | def test_main(verbose=None): | ||||||
| too_big = 10L**50 |     test_support.run_unittest(ResourceTest) | ||||||
| try: | 
 | ||||||
|     resource.setrlimit(resource.RLIMIT_FSIZE, (too_big, max)) | if __name__ == "__main__": | ||||||
| except (OverflowError, ValueError): |     test_main() | ||||||
|     pass |  | ||||||
| try: |  | ||||||
|     resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big)) |  | ||||||
| except (OverflowError, ValueError): |  | ||||||
|     pass |  | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Walter Dörwald
						Walter Dörwald