]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-102795: Fix use of poll in test_epoll's test_control_and_wait (#102796)
authorKevin Krakauer <kevinGC@users.noreply.github.com>
Thu, 4 May 2023 14:38:20 +0000 (07:38 -0700)
committerGitHub <noreply@github.com>
Thu, 4 May 2023 14:38:20 +0000 (14:38 +0000)
This test can fail unnecessarily. In the test we wait for events on two
file descriptors. This is done in a single call to select.epoll's poll()
function. However, it is valid for the OS to return only one event via
poll() and the next via a subsequent call to poll(). This rarely
happens, but it can cause the test to fail despite properly functioning
polling.

Instead, we poll a second time when necessary.

Lib/test/test_epoll.py
Misc/NEWS.d/next/Tests/2023-03-17-22-00-47.gh-issue-102795.z21EoC.rst [new file with mode: 0644]

index b623852f9eb4ee6adb3d8bbc0ccd0e609443f56d..c94946a6ae6b7c3cff93f9d16c9fa19e4750b274 100644 (file)
@@ -27,6 +27,7 @@ import select
 import socket
 import time
 import unittest
+from test import support
 
 if not hasattr(select, "epoll"):
     raise unittest.SkipTest("test works only on Linux 2.6")
@@ -186,10 +187,16 @@ class TestEPoll(unittest.TestCase):
         client.sendall(b"Hello!")
         server.sendall(b"world!!!")
 
-        now = time.monotonic()
-        events = ep.poll(1.0, 4)
-        then = time.monotonic()
-        self.assertFalse(then - now > 0.01)
+        # we might receive events one at a time, necessitating multiple calls to
+        # poll
+        events = []
+        for _ in support.busy_retry(support.SHORT_TIMEOUT):
+            now = time.monotonic()
+            events += ep.poll(1.0, 4)
+            then = time.monotonic()
+            self.assertFalse(then - now > 0.01)
+            if len(events) >= 2:
+                break
 
         expected = [(client.fileno(), select.EPOLLIN | select.EPOLLOUT),
                     (server.fileno(), select.EPOLLIN | select.EPOLLOUT)]
diff --git a/Misc/NEWS.d/next/Tests/2023-03-17-22-00-47.gh-issue-102795.z21EoC.rst b/Misc/NEWS.d/next/Tests/2023-03-17-22-00-47.gh-issue-102795.z21EoC.rst
new file mode 100644 (file)
index 0000000..fe2afff
--- /dev/null
@@ -0,0 +1 @@
+fix use of poll in test_epoll's test_control_and_wait