| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import resource | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-23 19:04:11 +00:00
										 |  |  | from test.test_support import TESTFN | 
					
						
							| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-12 18:13:36 +00:00
										 |  |  | # At least one platform has an unlimited RLIMIT_FSIZE and attempts to | 
					
						
							|  |  |  | # change it raise ValueError instead. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  | try: | 
					
						
							| 
									
										
										
										
											2002-12-12 18:13:36 +00:00
										 |  |  |     try: | 
					
						
							|  |  |  |         resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max)) | 
					
						
							|  |  |  |         limit_set = 1 | 
					
						
							|  |  |  |     except ValueError: | 
					
						
							|  |  |  |         limit_set = 0 | 
					
						
							| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  |     f = open(TESTFN, "wb") | 
					
						
							|  |  |  |     f.write("X" * 1024) | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         f.write("Y") | 
					
						
							|  |  |  |         f.flush() | 
					
						
							|  |  |  |     except IOError: | 
					
						
							| 
									
										
										
										
											2002-12-12 18:13:36 +00:00
										 |  |  |         if not limit_set: | 
					
						
							|  |  |  |             raise | 
					
						
							| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  |     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)) | 
					
						
							| 
									
										
										
										
											2002-12-12 18:13:36 +00:00
										 |  |  | except (OverflowError, ValueError): | 
					
						
							| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big)) | 
					
						
							| 
									
										
										
										
											2002-12-12 18:13:36 +00:00
										 |  |  | except (OverflowError, ValueError): | 
					
						
							| 
									
										
										
										
											2002-04-23 20:21:22 +00:00
										 |  |  |     pass |