Skip to content

Commit 11b760e

Browse files
committed
gh-137197: Rework test cases
This commit reworks the set_ciphersuites() test cases, moving them into their own class to avoid any changes to existing tests. It also makes the cipher selection dynamic to avoid potentially trying to use a cipher not available in some environments.
1 parent 48e5164 commit 11b760e

File tree

1 file changed

+47
-31
lines changed

1 file changed

+47
-31
lines changed

Lib/test/test_ssl.py

Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,10 +1868,6 @@ class SimpleBackgroundTests(unittest.TestCase):
18681868

18691869
def setUp(self):
18701870
self.server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
1871-
1872-
if has_tls_version('TLSv1_3'):
1873-
self.server_context.set_ciphersuites('TLS_AES_256_GCM_SHA384')
1874-
18751871
self.server_context.load_cert_chain(SIGNED_CERTFILE)
18761872
server = ThreadedEchoServer(context=self.server_context)
18771873
self.enterContext(server)
@@ -2118,33 +2114,6 @@ def test_ciphers(self):
21182114
cert_reqs=ssl.CERT_NONE, ciphers="^$:,;?*'dorothyx")
21192115
s.connect(self.server_addr)
21202116

2121-
@requires_tls_version('TLSv1_3')
2122-
def test_ciphersuites(self):
2123-
# Test successful TLS 1.3 handshake
2124-
with test_wrap_socket(socket.socket(socket.AF_INET),
2125-
cert_reqs=ssl.CERT_NONE,
2126-
ciphersuites="TLS_AES_256_GCM_SHA384",
2127-
min_version=ssl.TLSVersion.TLSv1_3) as s:
2128-
s.connect(self.server_addr)
2129-
self.assertEqual(s.cipher(),
2130-
("TLS_AES_256_GCM_SHA384", "TLSv1.3", 256))
2131-
2132-
# Test mismatched TLS 1.3 cipher suites
2133-
with test_wrap_socket(socket.socket(socket.AF_INET),
2134-
cert_reqs=ssl.CERT_NONE,
2135-
ciphersuites="TLS_AES_128_GCM_SHA256",
2136-
min_version=ssl.TLSVersion.TLSv1_3) as s:
2137-
with self.assertRaises(ssl.SSLError):
2138-
s.connect(self.server_addr)
2139-
2140-
# Test unrecognized TLS 1.3 cipher suite name
2141-
with self.assertRaisesRegex(ssl.SSLError,
2142-
"No cipher suite can be selected"):
2143-
with socket.socket(socket.AF_INET) as sock:
2144-
s = test_wrap_socket(sock, cert_reqs=ssl.CERT_NONE,
2145-
ciphersuites="XXX",
2146-
min_version=ssl.TLSVersion.TLSv1_3)
2147-
21482117
def test_get_ca_certs_capath(self):
21492118
# capath certs are loaded on request
21502119
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
@@ -2274,6 +2243,53 @@ def test_transport_eof(self):
22742243
self.assertRaises(ssl.SSLEOFError, sslobj.read)
22752244

22762245

2246+
@requires_tls_version('TLSv1_3')
2247+
class SimpleBackgroundTestsTLS_1_3(unittest.TestCase):
2248+
"""Tests that connect to a simple server running in the background"""
2249+
2250+
def setUp(self):
2251+
ciphers = [cipher['name'] for cipher in ctx.get_ciphers()
2252+
if cipher['protocol'] == 'TLSv1.3']
2253+
2254+
self.matching_cipher = ciphers[0]
2255+
self.mismatched_cipher = ciphers[-1]
2256+
2257+
self.server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
2258+
self.server_context.set_ciphersuites(self.matching_cipher)
2259+
self.server_context.load_cert_chain(SIGNED_CERTFILE)
2260+
server = ThreadedEchoServer(context=self.server_context)
2261+
self.enterContext(server)
2262+
self.server_addr = (HOST, server.port)
2263+
2264+
def test_ciphersuites(self):
2265+
# Test unrecognized TLS 1.3 cipher suite name
2266+
with self.assertRaisesRegex(ssl.SSLError,
2267+
"No cipher suite can be selected"):
2268+
with socket.socket(socket.AF_INET) as sock:
2269+
s = test_wrap_socket(sock, cert_reqs=ssl.CERT_NONE,
2270+
ciphersuites="XXX",
2271+
min_version=ssl.TLSVersion.TLSv1_3)
2272+
2273+
# Test successful TLS 1.3 handshake
2274+
with test_wrap_socket(socket.socket(socket.AF_INET),
2275+
cert_reqs=ssl.CERT_NONE,
2276+
ciphersuites=self.matching_cipher,
2277+
min_version=ssl.TLSVersion.TLSv1_3) as s:
2278+
s.connect(self.server_addr)
2279+
self.assertEqual(s.cipher()[0], self.matching_cipher)
2280+
2281+
# Test mismatched TLS 1.3 cipher suites
2282+
if self.matching_client != self.mismatched_cipher:
2283+
with test_wrap_socket(socket.socket(socket.AF_INET),
2284+
cert_reqs=ssl.CERT_NONE,
2285+
ciphersuites=self.mismatched_cipher,
2286+
min_version=ssl.TLSVersion.TLSv1_3) as s:
2287+
with self.assertRaises(ssl.SSLError):
2288+
s.connect(self.server_addr)
2289+
else:
2290+
self.skipTest("Multiple TLS 1.3 ciphers are not available")
2291+
2292+
22772293
@support.requires_resource('network')
22782294
class NetworkedTests(unittest.TestCase):
22792295

0 commit comments

Comments
 (0)