Charles-François Natali | 6e6c59b | 2015-02-07 13:27:50 +0000 | [diff] [blame] | 1 | import os |
| 2 | import signal |
Victor Stinner | aa8ae90 | 2018-12-06 00:18:30 +0100 | [diff] [blame] | 3 | import subprocess |
| 4 | import sys |
Charles-François Natali | 6e6c59b | 2015-02-07 13:27:50 +0000 | [diff] [blame] | 5 | import unittest |
| 6 | |
Berker Peksag | ce64391 | 2015-05-06 06:33:17 +0300 | [diff] [blame] | 7 | from test import support |
| 8 | from test.support import script_helper |
Charles-François Natali | 6e6c59b | 2015-02-07 13:27:50 +0000 | [diff] [blame] | 9 | |
| 10 | |
| 11 | @unittest.skipUnless(os.name == "posix", "only supported on Unix") |
| 12 | class EINTRTests(unittest.TestCase): |
| 13 | |
| 14 | @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") |
| 15 | def test_all(self): |
| 16 | # Run the tester in a sub-process, to make sure there is only one |
| 17 | # thread (for reliable signal delivery). |
| 18 | tester = support.findfile("eintr_tester.py", subdir="eintrdata") |
Victor Stinner | 98f223d | 2015-10-01 13:16:43 +0200 | [diff] [blame] | 19 | # use -u to try to get the full output if the test hangs or crash |
Victor Stinner | aa8ae90 | 2018-12-06 00:18:30 +0100 | [diff] [blame] | 20 | args = ["-u", tester, "-v"] |
| 21 | if support.verbose: |
| 22 | print() |
Victor Stinner | 0644b33 | 2018-12-06 14:16:21 +0100 | [diff] [blame] | 23 | print("--- run eintr_tester.py ---", flush=True) |
Victor Stinner | aa8ae90 | 2018-12-06 00:18:30 +0100 | [diff] [blame] | 24 | # In verbose mode, the child process inherit stdout and stdout, |
| 25 | # to see output in realtime and reduce the risk of loosing output. |
| 26 | args = [sys.executable, "-E", "-X", "faulthandler", *args] |
| 27 | proc = subprocess.run(args) |
Victor Stinner | 0644b33 | 2018-12-06 14:16:21 +0100 | [diff] [blame] | 28 | print(f"--- eintr_tester.py completed: " |
| 29 | f"exit code {proc.returncode} ---", flush=True) |
Victor Stinner | aa8ae90 | 2018-12-06 00:18:30 +0100 | [diff] [blame] | 30 | if proc.returncode: |
| 31 | self.fail("eintr_tester.py failed") |
| 32 | else: |
| 33 | script_helper.assert_python_ok("-u", tester, "-v") |
Charles-François Natali | 6e6c59b | 2015-02-07 13:27:50 +0000 | [diff] [blame] | 34 | |
| 35 | |
| 36 | if __name__ == "__main__": |
| 37 | unittest.main() |