| 
									
										
										
										
											2015-02-07 13:27:50 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import signal | 
					
						
							| 
									
										
										
										
											2018-12-06 00:18:30 +01:00
										 |  |  | import subprocess | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2015-02-07 13:27:50 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-06 06:33:17 +03:00
										 |  |  | from test import support | 
					
						
							|  |  |  | from test.support import script_helper | 
					
						
							| 
									
										
										
										
											2015-02-07 13:27:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @unittest.skipUnless(os.name == "posix", "only supported on Unix") | 
					
						
							|  |  |  | class EINTRTests(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") | 
					
						
							|  |  |  |     def test_all(self): | 
					
						
							|  |  |  |         # Run the tester in a sub-process, to make sure there is only one | 
					
						
							|  |  |  |         # thread (for reliable signal delivery). | 
					
						
							|  |  |  |         tester = support.findfile("eintr_tester.py", subdir="eintrdata") | 
					
						
							| 
									
										
										
										
											2015-10-01 13:16:43 +02:00
										 |  |  |         # use -u to try to get the full output if the test hangs or crash | 
					
						
							| 
									
										
										
										
											2018-12-06 00:18:30 +01:00
										 |  |  |         args = ["-u", tester, "-v"] | 
					
						
							|  |  |  |         if support.verbose: | 
					
						
							|  |  |  |             print() | 
					
						
							| 
									
										
										
										
											2018-12-06 14:16:21 +01:00
										 |  |  |             print("--- run eintr_tester.py ---", flush=True) | 
					
						
							| 
									
										
										
										
											2018-12-06 00:18:30 +01:00
										 |  |  |             # In verbose mode, the child process inherit stdout and stdout, | 
					
						
							|  |  |  |             # to see output in realtime and reduce the risk of loosing output. | 
					
						
							|  |  |  |             args = [sys.executable, "-E", "-X", "faulthandler", *args] | 
					
						
							|  |  |  |             proc = subprocess.run(args) | 
					
						
							| 
									
										
										
										
											2018-12-06 14:16:21 +01:00
										 |  |  |             print(f"--- eintr_tester.py completed: " | 
					
						
							|  |  |  |                   f"exit code {proc.returncode} ---", flush=True) | 
					
						
							| 
									
										
										
										
											2018-12-06 00:18:30 +01:00
										 |  |  |             if proc.returncode: | 
					
						
							|  |  |  |                 self.fail("eintr_tester.py failed") | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             script_helper.assert_python_ok("-u", tester, "-v") | 
					
						
							| 
									
										
										
										
											2015-02-07 13:27:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     unittest.main() |