From 62b1c74d8710b73387fde5b4369eb371ce12ee87 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Thu, 22 Oct 2026 14:16:24 +0530 Subject: [PATCH] gh-159123: fix ResourceWarning flake in asyncio SSL handshake failure tests (GH-160209) (cherry picked from commit 5d887642d126bff378662fc6b145cc86b70207b0) Co-authored-by: Kumar Aditya --- Lib/test/test_asyncio/test_events.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index a3093d4dc8a748..2bd87a5bdb0413 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -1202,12 +1202,13 @@ def test_create_server_ssl_verify_failed(self): '(?i)certificate.verify.failed'): self.loop.run_until_complete(f_c) - # execute the loop to log the connection error - test_utils.run_briefly(self.loop) + # close connection: wait until the server-side transport of the + # failed handshake is closed as well, otherwise its socket may + # still be open when the loop is closed (gh-159123). + server.close() + self.loop.run_until_complete(server.wait_closed()) - # close connection self.assertIsNone(proto.transport) - server.close() @socket_helper.skip_unless_bind_unix_socket @unittest.skipIf(ssl is None, 'No ssl module') @@ -1232,12 +1233,13 @@ def test_create_unix_server_ssl_verify_failed(self): '(?i)certificate.verify.failed'): self.loop.run_until_complete(f_c) - # execute the loop to log the connection error - test_utils.run_briefly(self.loop) + # close connection: wait until the server-side transport of the + # failed handshake is closed as well, otherwise its socket may + # still be open when the loop is closed (gh-159123). + server.close() + self.loop.run_until_complete(server.wait_closed()) - # close connection self.assertIsNone(proto.transport) - server.close() @unittest.skipIf(ssl is None, 'No ssl module') def test_create_server_ssl_match_failed(self): @@ -1268,10 +1270,14 @@ def test_create_server_ssl_match_failed(self): with self.assertRaisesRegex(ssl.CertificateError, regex): self.loop.run_until_complete(f_c) - # close connection + # close connection: wait until the server-side transport of the + # failed handshake is closed as well, otherwise its socket may + # still be open when the loop is closed (gh-159123). + server.close() + self.loop.run_until_complete(server.wait_closed()) + # transport is None because TLS ALERT aborted the handshake self.assertIsNone(proto.transport) - server.close() @socket_helper.skip_unless_bind_unix_socket @unittest.skipIf(ssl is None, 'No ssl module')