mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
bpo-35925: Skip SSL tests that fail due to weak external certs. (GH-13124)
Modern Linux distros such as Debian Buster have default OpenSSL system configurations that reject connections to servers with weak certificates by default. This causes our test suite run with external networking resources enabled to skip these tests when they encounter such a failure. Fixing the network servers is a separate issue.
This commit is contained in:
parent
7b3a028c35
commit
2cc0223f43
3 changed files with 50 additions and 11 deletions
|
@ -6,6 +6,7 @@ import unittest
|
|||
import functools
|
||||
import contextlib
|
||||
import os.path
|
||||
import re
|
||||
import threading
|
||||
|
||||
from test import support
|
||||
|
@ -21,6 +22,13 @@ except ImportError:
|
|||
TIMEOUT = 30
|
||||
certfile = os.path.join(os.path.dirname(__file__), 'keycert3.pem')
|
||||
|
||||
if ssl is not None:
|
||||
SSLError = ssl.SSLError
|
||||
else:
|
||||
class SSLError(Exception):
|
||||
"""Non-existent exception class when we lack SSL support."""
|
||||
reason = "This will never be raised."
|
||||
|
||||
# TODO:
|
||||
# - test the `file` arg to more commands
|
||||
# - test error conditions
|
||||
|
@ -261,14 +269,21 @@ class NetworkedNNTPTestsMixin:
|
|||
return False
|
||||
return True
|
||||
|
||||
with self.NNTP_CLASS(self.NNTP_HOST, timeout=TIMEOUT, usenetrc=False) as server:
|
||||
self.assertTrue(is_connected())
|
||||
self.assertTrue(server.help())
|
||||
self.assertFalse(is_connected())
|
||||
try:
|
||||
with self.NNTP_CLASS(self.NNTP_HOST, timeout=TIMEOUT, usenetrc=False) as server:
|
||||
self.assertTrue(is_connected())
|
||||
self.assertTrue(server.help())
|
||||
self.assertFalse(is_connected())
|
||||
|
||||
with self.NNTP_CLASS(self.NNTP_HOST, timeout=TIMEOUT, usenetrc=False) as server:
|
||||
server.quit()
|
||||
self.assertFalse(is_connected())
|
||||
with self.NNTP_CLASS(self.NNTP_HOST, timeout=TIMEOUT, usenetrc=False) as server:
|
||||
server.quit()
|
||||
self.assertFalse(is_connected())
|
||||
except SSLError as ssl_err:
|
||||
# matches "[SSL: DH_KEY_TOO_SMALL] dh key too small"
|
||||
if re.search(r'(?i)KEY.TOO.SMALL', ssl_err.reason):
|
||||
raise unittest.SkipTest(f"Got {ssl_err} connecting "
|
||||
f"to {self.NNTP_HOST!r}")
|
||||
raise
|
||||
|
||||
|
||||
NetworkedNNTPTestsMixin.wrap_methods()
|
||||
|
@ -294,6 +309,12 @@ class NetworkedNNTPTests(NetworkedNNTPTestsMixin, unittest.TestCase):
|
|||
try:
|
||||
cls.server = cls.NNTP_CLASS(cls.NNTP_HOST, timeout=TIMEOUT,
|
||||
usenetrc=False)
|
||||
except SSLError as ssl_err:
|
||||
# matches "[SSL: DH_KEY_TOO_SMALL] dh key too small"
|
||||
if re.search(r'(?i)KEY.TOO.SMALL', ssl_err.reason):
|
||||
raise unittest.SkipTest(f"{cls} got {ssl_err} connecting "
|
||||
f"to {cls.NNTP_HOST!r}")
|
||||
raise
|
||||
except EOF_ERRORS:
|
||||
raise unittest.SkipTest(f"{cls} got EOF error on connecting "
|
||||
f"to {cls.NNTP_HOST!r}")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue