@@ -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
17341800class SSLErrorTests (unittest .TestCase ):
17351801
0 commit comments