Skip to content

Commit b07661d

Browse files
[3.11] gh-109592: test_eintr tolerates 20 ms when comparing timings (GH-110102) (#110107)
gh-109592: test_eintr tolerates 20 ms when comparing timings (GH-110102) (cherry picked from commit 9c73a9a) Co-authored-by: Victor Stinner <[email protected]>
1 parent 4b97c72 commit b07661d

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

Lib/test/_test_eintr.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
from test.support import os_helper
2626
from test.support import socket_helper
2727

28+
29+
# gh-109592: Tolerate a difference of 20 ms when comparing timings
30+
# (clock resolution)
31+
CLOCK_RES = 0.020
32+
33+
2834
@contextlib.contextmanager
2935
def kill_on_error(proc):
3036
"""Context manager killing the subprocess if a Python exception is raised."""
@@ -75,6 +81,9 @@ def subprocess(self, *args, **kw):
7581
cmd_args = (sys.executable, '-c') + args
7682
return subprocess.Popen(cmd_args, **kw)
7783

84+
def check_elapsed_time(self, elapsed):
85+
self.assertGreaterEqual(elapsed, self.sleep_time - CLOCK_RES)
86+
7887

7988
@unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()")
8089
class OSEINTRTest(EINTRBaseTest):
@@ -373,7 +382,7 @@ def test_sleep(self):
373382
time.sleep(self.sleep_time)
374383
self.stop_alarm()
375384
dt = time.monotonic() - t0
376-
self.assertGreaterEqual(dt, self.sleep_time)
385+
self.check_elapsed_time(dt)
377386

378387

379388
@unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()")
@@ -437,7 +446,7 @@ def test_select(self):
437446
select.select([], [], [], self.sleep_time)
438447
dt = time.monotonic() - t0
439448
self.stop_alarm()
440-
self.assertGreaterEqual(dt, self.sleep_time)
449+
self.check_elapsed_time(dt)
441450

442451
@unittest.skipIf(sys.platform == "darwin",
443452
"poll may fail on macOS; see issue #28087")
@@ -449,7 +458,7 @@ def test_poll(self):
449458
poller.poll(self.sleep_time * 1e3)
450459
dt = time.monotonic() - t0
451460
self.stop_alarm()
452-
self.assertGreaterEqual(dt, self.sleep_time)
461+
self.check_elapsed_time(dt)
453462

454463
@unittest.skipUnless(hasattr(select, 'epoll'), 'need select.epoll')
455464
def test_epoll(self):
@@ -460,7 +469,7 @@ def test_epoll(self):
460469
poller.poll(self.sleep_time)
461470
dt = time.monotonic() - t0
462471
self.stop_alarm()
463-
self.assertGreaterEqual(dt, self.sleep_time)
472+
self.check_elapsed_time(dt)
464473

465474
@unittest.skipUnless(hasattr(select, 'kqueue'), 'need select.kqueue')
466475
def test_kqueue(self):
@@ -471,7 +480,7 @@ def test_kqueue(self):
471480
kqueue.control(None, 1, self.sleep_time)
472481
dt = time.monotonic() - t0
473482
self.stop_alarm()
474-
self.assertGreaterEqual(dt, self.sleep_time)
483+
self.check_elapsed_time(dt)
475484

476485
@unittest.skipUnless(hasattr(select, 'devpoll'), 'need select.devpoll')
477486
def test_devpoll(self):
@@ -482,7 +491,7 @@ def test_devpoll(self):
482491
poller.poll(self.sleep_time * 1e3)
483492
dt = time.monotonic() - t0
484493
self.stop_alarm()
485-
self.assertGreaterEqual(dt, self.sleep_time)
494+
self.check_elapsed_time(dt)
486495

487496

488497
class FNTLEINTRTest(EINTRBaseTest):
@@ -512,8 +521,8 @@ def _lock(self, lock_func, lock_name):
512521
# potential context switch delay
513522
lock_func(f, fcntl.LOCK_EX)
514523
dt = time.monotonic() - start_time
515-
self.assertGreaterEqual(dt, self.sleep_time)
516524
self.stop_alarm()
525+
self.check_elapsed_time(dt)
517526
proc.wait()
518527

519528
# Issue 35633: See https://bugs.python.org/issue35633#msg333662

0 commit comments

Comments
 (0)