| 
									
										
										
										
											2003-02-12 23:02:21 +00:00
										 |  |  | import imp | 
					
						
							| 
									
										
										
										
											2004-12-18 21:06:55 +00:00
										 |  |  | from test.test_support import TestFailed, TestSkipped | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     import thread | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     raise TestSkipped("test only valid when thread support is available") | 
					
						
							| 
									
										
										
										
											2003-02-12 23:02:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-26 14:31:24 +00:00
										 |  |  | def verify_lock_state(expected): | 
					
						
							|  |  |  |     if imp.lock_held() != expected: | 
					
						
							|  |  |  |         raise TestFailed("expected imp.lock_held() to be %r" % expected) | 
					
						
							| 
									
										
										
										
											2003-02-12 23:02:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-26 14:31:24 +00:00
										 |  |  | def testLock(): | 
					
						
							|  |  |  |     LOOPS = 50 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The import lock may already be held, e.g. if the test suite is run | 
					
						
							|  |  |  |     # via "import test.autotest". | 
					
						
							|  |  |  |     lock_held_at_start = imp.lock_held() | 
					
						
							|  |  |  |     verify_lock_state(lock_held_at_start) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for i in range(LOOPS): | 
					
						
							|  |  |  |         imp.acquire_lock() | 
					
						
							|  |  |  |         verify_lock_state(True) | 
					
						
							| 
									
										
										
										
											2003-02-12 23:02:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-26 14:31:24 +00:00
										 |  |  |     for i in range(LOOPS): | 
					
						
							|  |  |  |         imp.release_lock() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The original state should be restored now. | 
					
						
							|  |  |  |     verify_lock_state(lock_held_at_start) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not lock_held_at_start: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             imp.release_lock() | 
					
						
							|  |  |  |         except RuntimeError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise TestFailed("release_lock() without lock should raise " | 
					
						
							|  |  |  |                              "RuntimeError") | 
					
						
							| 
									
										
										
										
											2003-02-12 23:02:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-17 14:51:41 +00:00
										 |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2003-04-26 14:31:24 +00:00
										 |  |  |     testLock() | 
					
						
							| 
									
										
										
										
											2003-02-17 14:51:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-12 23:02:21 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2003-02-17 14:51:41 +00:00
										 |  |  |     test_main() |