From 7e30821b17b56bb5ed9799f62eb45e448cb52c8e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 8 Oct 2023 13:26:18 +0200 Subject: [PATCH] gh-108277: Fix test_os TimerfdTests (#110515) * test_timerfd_TFD_TIMER_ABSTIME() and test_timerfd_ns_TFD_TIMER_ABSTIME() tolerate a difference of 50 us. * test_timerfd_negative() checks if os.TFD_TIMER_CANCEL_ON_SET is defined. --- Lib/test/test_os.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 5149b0d3884..1a348bc70bc 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -3929,6 +3929,10 @@ class EventfdTests(unittest.TestCase): @unittest.skipUnless(hasattr(os, 'timerfd_create'), 'requires os.timerfd_create') @support.requires_linux_version(2, 6, 30) class TimerfdTests(unittest.TestCase): + # Tolerate a difference of 50 us + CLOCK_RES_NS = 50_000 + CLOCK_RES = CLOCK_RES_NS * 1e-9 + def timerfd_create(self, *args, **kwargs): fd = os.timerfd_create(*args, **kwargs) self.assertGreaterEqual(fd, 0) @@ -3982,9 +3986,13 @@ class TimerfdTests(unittest.TestCase): one_sec_in_nsec = 10**9 fd = self.timerfd_create(time.CLOCK_REALTIME) + test_flags = [0, os.TFD_TIMER_ABSTIME] + if hasattr(os, 'TFD_TIMER_CANCEL_ON_SET'): + test_flags.append(os.TFD_TIMER_ABSTIME | os.TFD_TIMER_CANCEL_ON_SET) + # Any of 'initial' and 'interval' is negative value. for initial, interval in ( (-1, 0), (1, -1), (-1, -1), (-0.1, 0), (1, -0.1), (-0.1, -0.1)): - for flags in (0, os.TFD_TIMER_ABSTIME, os.TFD_TIMER_ABSTIME|os.TFD_TIMER_CANCEL_ON_SET): + for flags in test_flags: with self.subTest(flags=flags, initial=initial, interval=interval): with self.assertRaises(OSError) as context: _, _ = os.timerfd_settime(fd, flags=flags, initial=initial, interval=interval) @@ -4055,7 +4063,7 @@ class TimerfdTests(unittest.TestCase): t = time.perf_counter() - t self.assertEqual(count_signaled, 1) - self.assertGreater(t, offset) + self.assertGreater(t, offset - self.CLOCK_RES) def test_timerfd_select(self): size = 8 # read 8 bytes @@ -4208,7 +4216,7 @@ class TimerfdTests(unittest.TestCase): t = time.perf_counter_ns() - t self.assertEqual(count_signaled, 1) - self.assertGreater(t, offset_ns) + self.assertGreater(t, offset_ns - self.CLOCK_RES_NS) def test_timerfd_ns_select(self): size = 8 # read 8 bytes