8000 [3.13] gh-126483: disable warnings filters mutation in concurrent test (GH-132694) by miss-islington · Pull Request #135132 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

[3.13] gh-126483: disable warnings filters mutation in concurrent test (GH-132694) #135132

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 4, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
gh-126483: disable warnings filters mutation in concurrent test (GH-1…
…32694)

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.
(cherry picked from commit 40c8be0)

Co-authored-by: Thomas Grainger <tagrain@gmail.com>
  • Loading branch information
graingert authored and miss-islington committed Jun 4, 2025
commit 1421ad36372a3ea22c5c9cf32a03f9a2f9bae439
43 changes: 31 additions & 12 deletions Lib/test/test_ssl.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import platform
import sysconfig
import functools
from contextlib import nullcontext
try:
import ctypes
except ImportError:
Expand Down Expand Up @@ -2871,6 +2872,7 @@ def test_ssl_in_multiple_threads(self):
# See GH-124984: OpenSSL is not thread safe.
threads = []

warnings_filters = sys.flags.context_aware_warnings
global USE_SAME_TEST_CONTEXT
USE_SAME_TEST_CONTEXT = True
try:
Expand All @@ -2879,7 +2881,10 @@ def test_ssl_in_multiple_threads(self):
self.test_alpn_protocols,
self.test_getpeercert,
self.test_crl_check,
self.test_check_hostname_idn,
functools.partial(
self.test_check_hostname_idn,
warnings_filters=warnings_filters,
),
self.test_wrong_cert_tls12,
self.test_wrong_cert_tls13,
):
Expand Down Expand Up @@ -3125,7 +3130,7 @@ def test_dual_rsa_ecc(self):
cipher = s.cipher()[0].split('-')
self.assertTrue(cipher[:2], ('ECDHE', 'ECDSA'))

def test_check_hostname_idn(self):
def test_check_hostname_idn(self, warnings_filters=True):
if support.verbose:
sys.stdout.write("\n")

Expand Down Expand Up @@ -3180,16 +3185,30 @@ def test_check_hostname_idn(self):
server_hostname="python.example.org") as s:
with self.assertRaises(ssl.CertificateError):
s.connect((HOST, server.port))
with ThreadedEchoServer(context=server_context, chatty=True) as server:
with warnings_helper.check_no_resource_warning(self):
with self.assertRaises(UnicodeError):
context.wrap_socket(socket.socket(),
server_hostname='.pythontest.net')
with ThreadedEchoServer(context=server_context, chatty=True) as server:
with warnings_helper.check_no_resource_warning(self):
with self.assertRaises(UnicodeDecodeError):
context.wrap_socket(socket.socket(),
server_hostname=b'k\xf6nig.idn.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(UnicodeError),
):
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):
"""Connecting when the server rejects the client's certificate
Expand Down
Loading
0