Skip to content

Commit 456f1ee

Browse files
committed
test! add regression tests
1 parent cfca05f commit 456f1ee

1 file changed

Lines changed: 77 additions & 11 deletions

File tree

Lib/test/test_ssl.py

Lines changed: 77 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -265,33 +265,68 @@ def utc_offset(): #NOTE: ignore issues like #1647654
265265
)
266266

267267

268-
def test_wrap_socket(sock, *,
269-
cert_reqs=ssl.CERT_NONE, ca_certs=None,
270-
ciphers=None, ciphersuites=None,
271-
min_version=None, max_version=None,
272-
certfile=None, keyfile=None,
273-
**kwargs):
274-
if not kwargs.get("server_side"):
275-
kwargs["server_hostname"] = SIGNED_CERTFILE_HOSTNAME
276-
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
277-
else:
268+
def make_test_context(
269+
*,
270+
server_side=False,
271+
check_hostname=None,
272+
cert_reqs=ssl.CERT_NONE,
273+
ca_certs=None, certfile=None, keyfile=None,
274+
ciphers=None, ciphersuites=None,
275+
min_version=None, max_version=None,
276+
):
277+
if server_side:
278278
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
279-
if cert_reqs is not None:
279+
else:
280+
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
281+
282+
if check_hostname is None:
280283
if cert_reqs == ssl.CERT_NONE:
281284
context.check_hostname = False
285+
else:
286+
context.check_hostname = check_hostname
287+
288+
if cert_reqs is not None:
282289
context.verify_mode = cert_reqs
290+
283291
if ca_certs is not None:
284292
context.load_verify_locations(ca_certs)
285293
if certfile is not None or keyfile is not None:
286294
context.load_cert_chain(certfile, keyfile)
295+
287296
if ciphers is not None:
288297
context.set_ciphers(ciphers)
289298
if ciphersuites is not None:
290299
context.set_ciphersuites(ciphersuites)
300+
291301
if min_version is not None:
292302
context.minimum_version = min_version
293303
if max_version is not None:
294304
context.maximum_version = max_version
305+
306+
return context
307+
308+
309+
def test_wrap_socket(
310+
sock,
311+
*,
312+
server_side=False,
313+
check_hostname=None,
314+
cert_reqs=ssl.CERT_NONE,
315+
ca_certs=None, certfile=None, keyfile=None,
316+
ciphers=None, ciphersuites=None,
317+
min_version=None, max_version=None,
318+
**kwargs
319+
):
320+
context = make_test_context(
321+
server_side=server_side,
322+
check_hostname=check_hostname,
323+
cert_reqs=cert_reqs,
324+
ca_certs=ca_certs, certfile=certfile, keyfile=keyfile,
325+
ciphers=ciphers, ciphersuites=ciphersuites,
326+
min_version=min_version, max_version=max_version,
327+
)
328+
if not server_side:
329+
kwargs.setdefault("server_hostname", SIGNED_CERTFILE_HOSTNAME)
295330
return context.wrap_socket(sock, **kwargs)
296331

297332

@@ -1730,6 +1765,37 @@ def test_num_tickest(self):
17301765
with self.assertRaises(ValueError):
17311766
ctx.num_tickets = 1
17321767

1768+
@support.cpython_only
1769+
def test_refcycle_msg_callback(self):
1770+
# See https://github.com/python/cpython/issues/142516.
1771+
ctx = make_test_context()
1772+
def msg_callback(*args, _=ctx, **kwargs): ...
1773+
ctx._msg_callback = msg_callback
1774+
1775+
@support.cpython_only
1776+
def test_refcycle_keylog_filename(self):
1777+
# See https://github.com/python/cpython/issues/142516.
1778+
ctx = make_test_context()
1779+
class KeylogFilename(str): ...
1780+
ctx.keylog_filename = KeylogFilename(os_helper.TESTFN)
1781+
ctx.keylog_filename._ = ctx
1782+
1783+
@support.cpython_only
1784+
@unittest.skipUnless(ssl.HAS_PSK, 'requires TLS-PSK')
1785+
def test_refcycle_psk_client_callback(self):
1786+
# See https://github.com/python/cpython/issues/142516.
1787+
ctx = make_test_context()
1788+
def psk_client_callback(*args, _=ctx, **kwargs): ...
1789+
ctx.set_psk_client_callback(psk_client_callback)
1790+
1791+
@support.cpython_only
1792+
@unittest.skipUnless(ssl.HAS_PSK, 'requires TLS-PSK')
1793+
def test_refcycle_psk_server_callback(self):
1794+
# See https://github.com/python/cpython/issues/142516.
1795+
ctx = make_test_context(server_side=True)
1796+
def psk_server_callback(*args, _=ctx, **kwargs): ...
1797+
ctx.set_psk_server_callback(psk_server_callback)
1798+
17331799

17341800
class SSLErrorTests(unittest.TestCase):
17351801

0 commit comments

Comments
 (0)