mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
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:
parent
bc00ce941e
commit
40c8be0008
1 changed files with 31 additions and 12 deletions
|
@ -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,
|
||||||
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_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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue