Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

gh-126483: disable warnings filters mutation in concurrent test_check… #132694

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

Open
wants to merge 8 commits into
base: main
Choose a base branch
Loading
from
39 changes: 27 additions & 12 deletions 39 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 @@ -2843,6 +2844,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 @@ -2851,7 +2853,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 @@ -3097,7 +3102,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 @@ -3152,16 +3157,26 @@ 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',
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest the following:

def get_warnings_filter_context(self, warnings_filter):
    if warnings_filters:
        return warnings_helper.check_no_resource_warning(self)
    return nullcontext()

so that it can be used as follows:

        with (
            ThreadedEchoServer(context=server_context, chatty=True) as server,
            self.get_warnings_filter_context(warnings_filters),
            self.assertRaises(UnicodeError),
        ):
            context.wrap_socket(socket.socket(), server_hostname='.pythontest.net')

        with (
            ThreadedEchoServer(context=server_context, chatty=True) as server,
            self.get_warnings_filter_context(warnings_filters),
            self.assertRaises(UnicodeDecodeError),
        ):
            context.wrap_socket(
                socket.socket(),
                server_hostname=b'k\xf6nig.idn.pythontest.net',
            )

It took me a while to see the ternary if-else

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll add some extra parenthesis, like ruff would


def test_wrong_cert_tls12(self):
"""Connecting when the server rejects the client's certificate
Expand Down
Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.