Skip to content

Commit aac1f81

Browse files
authored
bpo-35189: Fix eintr_tester.py (GH-10637)
Call setitimer() before each test method, instead of once per test case, to ensure that signals are sent in each test method. Previously, only the first method of a testcase class got signals. Changes: * Replace setUpClass() with setUp() and replace tearDownClass() with tearDown(). * tearDown() now ensures that at least one signal has been sent. * Replace support.run_unittest() with unittest.main() which has a nicer CLI and automatically discover test cases.
1 parent 361e868 commit aac1f81

File tree

1 file changed

+18
-22
lines changed

1 file changed

+18
-22
lines changed

Lib/test/eintrdata/eintr_tester.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,32 @@ class EINTRBaseTest(unittest.TestCase):
4444
# sleep_time > signal_period
4545
sleep_time = 0.2
4646

47-
@classmethod
48-
def setUpClass(cls):
49-
cls.orig_handler = signal.signal(signal.SIGALRM, lambda *args: None)
50-
signal.setitimer(signal.ITIMER_REAL, cls.signal_delay,
51-
cls.signal_period)
47+
def sighandler(self, signum, frame):
48+
self.signals += 1
5249

53-
# Issue #25277: Use faulthandler to try to debug a hang on FreeBSD
50+
def setUp(self):
51+
self.signals = 0
52+
self.orig_handler = signal.signal(signal.SIGALRM, self.sighandler)
53+
signal.setitimer(signal.ITIMER_REAL, self.signal_delay,
54+
self.signal_period)
55+
56+
# Use faulthandler as watchdog to debug when a test hangs
57+
# (timeout of 10 minutes)
5458
if hasattr(faulthandler, 'dump_traceback_later'):
5559
faulthandler.dump_traceback_later(10 * 60, exit=True,
5660
file=sys.__stderr__)
5761

58-
@classmethod
59-
def stop_alarm(cls):
62+
@staticmethod
63+
def stop_alarm():
6064
signal.setitimer(signal.ITIMER_REAL, 0, 0)
6165

62-
@classmethod
63-
def tearDownClass(cls):
64-
cls.stop_alarm()
65-
signal.signal(signal.SIGALRM, cls.orig_handler)
66+
def tearDown(self):
67+
self.stop_alarm()
68+
signal.signal(signal.SIGALRM, self.orig_handler)
6669
if hasattr(faulthandler, 'cancel_dump_traceback_later'):
6770
faulthandler.cancel_dump_traceback_later()
71+
# make sure that at least one signal has been received
72+
self.assertGreater(self.signals, 0)
6873

6974
def subprocess(self, *args, **kw):
7075
cmd_args = (sys.executable, '-c') + args
@@ -481,14 +486,5 @@ def test_devpoll(self):
481486
self.assertGreaterEqual(dt, self.sleep_time)
482487

483488

484-
def test_main():
485-
support.run_unittest(
486-
OSEINTRTest,
487-
SocketEINTRTest,
488-
TimeEINTRTest,
489-
SignalEINTRTest,
490-
SelectEINTRTest)
491-
492-
493489
if __name__ == "__main__":
494-
test_main()
490+
unittest.main()

0 commit comments

Comments
 (0)