gh-126483: disable warnings filters mutation in concurrent test (GH-132694)

The `test_ssl_in_multiple_threads` test failed because `test_check_hostname_idn()`
modified the global warnings filters via `warnings_helper.check_no_resource_warning()`.
Only check for warnings when the context aware warnings feature is enabled, which makes
the warnings filter context-local and thread-safe.
This commit is contained in:
Thomas Grainger 2025-06-04 14:00:25 +01:00 committed by GitHub
parent bc00ce941e
commit 40c8be0008
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -31,6 +31,7 @@ import weakref
import platform import platform
import sysconfig import sysconfig
import functools import functools
from contextlib import nullcontext
try: try:
import ctypes import ctypes
except ImportError: except ImportError:
@ -2843,6 +2844,7 @@ class ThreadedTests(unittest.TestCase):
# See GH-124984: OpenSSL is not thread safe. # See GH-124984: OpenSSL is not thread safe.
threads = [] threads = []
warnings_filters = sys.flags.context_aware_warnings
global USE_SAME_TEST_CONTEXT global USE_SAME_TEST_CONTEXT
USE_SAME_TEST_CONTEXT = True USE_SAME_TEST_CONTEXT = True
try: try:
@ -2851,7 +2853,10 @@ class ThreadedTests(unittest.TestCase):
self.test_alpn_protocols, self.test_alpn_protocols,
self.test_getpeercert, self.test_getpeercert,
self.test_crl_check, self.test_crl_check,
functools.partial(
self.test_check_hostname_idn, self.test_check_hostname_idn,
warnings_filters=warnings_filters,
),
self.test_wrong_cert_tls12, self.test_wrong_cert_tls12,
self.test_wrong_cert_tls13, self.test_wrong_cert_tls13,
): ):
@ -3097,7 +3102,7 @@ class ThreadedTests(unittest.TestCase):
cipher = s.cipher()[0].split('-') cipher = s.cipher()[0].split('-')
self.assertTrue(cipher[:2], ('ECDHE', 'ECDSA')) self.assertTrue(cipher[:2], ('ECDHE', 'ECDSA'))
def test_check_hostname_idn(self): def test_check_hostname_idn(self, warnings_filters=True):
if support.verbose: if support.verbose:
sys.stdout.write("\n") sys.stdout.write("\n")
@ -3152,16 +3157,30 @@ class ThreadedTests(unittest.TestCase):
server_hostname="python.example.org") as s: server_hostname="python.example.org") as s:
with self.assertRaises(ssl.CertificateError): with self.assertRaises(ssl.CertificateError):
s.connect((HOST, server.port)) s.connect((HOST, server.port))
with ThreadedEchoServer(context=server_context, chatty=True) as server: with (
with warnings_helper.check_no_resource_warning(self): ThreadedEchoServer(context=server_context, chatty=True) as server,
with self.assertRaises(UnicodeError): (
context.wrap_socket(socket.socket(), warnings_helper.check_no_resource_warning(self)
server_hostname='.pythontest.net') if warnings_filters
with ThreadedEchoServer(context=server_context, chatty=True) as server: else nullcontext()
with warnings_helper.check_no_resource_warning(self): ),
with self.assertRaises(UnicodeDecodeError): self.assertRaises(UnicodeError),
context.wrap_socket(socket.socket(), ):
server_hostname=b'k\xf6nig.idn.pythontest.net') context.wrap_socket(socket.socket(), server_hostname='.pythontest.net')
with (
ThreadedEchoServer(context=server_context, chatty=True) as server,
(
warnings_helper.check_no_resource_warning(self)
if warnings_filters
else nullcontext()
),
self.assertRaises(UnicodeDecodeError),
):
context.wrap_socket(
socket.socket(),
server_hostname=b'k\xf6nig.idn.pythontest.net',
)
def test_wrong_cert_tls12(self): def test_wrong_cert_tls12(self):
"""Connecting when the server rejects the client's certificate """Connecting when the server rejects the client's certificate