• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import os
2import signal
3import subprocess
4import sys
5import unittest
6
7from test import support
8from test.support import script_helper
9
10
11@unittest.skipUnless(os.name == "posix", "only supported on Unix")
12class 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")
19        # use -u to try to get the full output if the test hangs or crash
20        args = ["-u", tester, "-v"]
21        if support.verbose:
22            print()
23            print("--- run eintr_tester.py ---", flush=True)
24            # In verbose mode, the child process inherit stdout and stdout,
25            # to see output in realtime and reduce the risk of losing output.
26            args = [sys.executable, "-E", "-X", "faulthandler", *args]
27            proc = subprocess.run(args)
28            print(f"--- eintr_tester.py completed: "
29                  f"exit code {proc.returncode} ---", flush=True)
30            if proc.returncode:
31                self.fail("eintr_tester.py failed")
32        else:
33            script_helper.assert_python_ok("-u", tester, "-v")
34
35
36if __name__ == "__main__":
37    unittest.main()
38