38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
|
import os
|
||
|
import signal
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import unittest
|
||
|
|
||
|
from test import support
|
||
|
from test.support import script_helper
|
||
|
|
||
|
|
||
|
@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")
|
||
|
# use -u to try to get the full output if the test hangs or crash
|
||
|
args = ["-u", tester, "-v"]
|
||
|
if support.verbose:
|
||
|
print()
|
||
|
print("--- run eintr_tester.py ---", flush=True)
|
||
|
# In verbose mode, the child process inherit stdout and stdout,
|
||
|
# to see output in realtime and reduce the risk of losing output.
|
||
|
args = [sys.executable, "-E", "-X", "faulthandler", *args]
|
||
|
proc = subprocess.run(args)
|
||
|
print(f"--- eintr_tester.py completed: "
|
||
|
f"exit code {proc.returncode} ---", flush=True)
|
||
|
if proc.returncode:
|
||
|
self.fail("eintr_tester.py failed")
|
||
|
else:
|
||
|
script_helper.assert_python_ok("-u", tester, "-v")
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|