From: Victor Stinner Date: Mon, 25 May 2026 20:32:37 +0000 (+0200) Subject: gh-149879: Fix test_ssl on Cygwin (#150419) X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=0065d223ace3fe33ae621779bbb05fc8e0a88a01;p=thirdparty%2FPython%2Fcpython.git gh-149879: Fix test_ssl on Cygwin (#150419) On Cygwin, ignore EAGAIN in SSLSocket._create() if getpeername() fails. --- diff --git a/Lib/ssl.py b/Lib/ssl.py index 896db17baeb3..f23bcbe75e72 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -1055,7 +1055,12 @@ class SSLSocket(socket): notconn_pre_handshake_data = self.recv(1) except OSError as e: # EINVAL occurs for recv(1) on non-connected on unix sockets. - if e.errno not in (errno.ENOTCONN, errno.EINVAL): + if e.errno in (errno.ENOTCONN, errno.EINVAL): + pass + elif sys.platform == 'cygwin' and e.errno == errno.EAGAIN: + # EAGAIN occurs on Cygwin. + pass + else: raise notconn_pre_handshake_data = b'' self.setblocking(blocking) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 7f2372766171..a60e96053b86 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -638,6 +638,7 @@ class BasicSocketTests(unittest.TestCase): del ss self.assertEqual(wr(), None) + @unittest.skipIf(sys.platform == 'cygwin', 'test hangs on Cygwin') def test_wrapped_unconnected(self): # Methods on an unconnected SSLSocket propagate the original # OSError raise by the underlying socket object. @@ -3631,7 +3632,7 @@ class ThreadedTests(unittest.TestCase): OSError, 'alert unknown ca|EOF occurred|TLSV1_ALERT_UNKNOWN_CA|' 'closed by the remote host|Connection reset by peer|' - 'Broken pipe' + 'Broken pipe|Software caused connection abort' ): # TLS 1.3 perform client cert exchange after handshake s.write(b'data') @@ -4585,6 +4586,8 @@ class ThreadedTests(unittest.TestCase): ssl.SSLError, # On handshake failures, some systems raise a ConnectionResetError. ConnectionResetError, + # On handshake failures, Cygwin raises ConnectionAbortedError. + ConnectionAbortedError, # On handshake failures, macOS may raise a BrokenPipeError. # See https://github.com/python/cpython/issues/139504. BrokenPipeError, @@ -5693,7 +5696,7 @@ class TestPreHandshakeClose(unittest.TestCase): def non_linux_skip_if_other_okay_error(self, err): if sys.platform in ("linux", "android"): return # Expect the full test setup to always work on Linux. - if (isinstance(err, ConnectionResetError) or + if (isinstance(err, (ConnectionResetError, ConnectionAbortedError)) or (isinstance(err, OSError) and err.errno == errno.EINVAL) or re.search('wrong.version.number', str(getattr(err, "reason", "")), re.I) or re.search('record.layer.failure', str(getattr(err, "reason", "")), re.I)