@@ -2629,6 +2629,51 @@ def test_get_verified_chain_unconnected(self):
2629
2629
server = Connection (ctx , None )
2630
2630
assert None is server .get_verified_chain ()
2631
2631
2632
+ def test_set_verify_overrides_context (self ):
2633
+ context = Context (SSLv23_METHOD )
2634
+ context .set_verify (VERIFY_PEER )
2635
+ conn = Connection (context , None )
2636
+ conn .set_verify (VERIFY_NONE )
2637
+
2638
+ assert context .get_verify_mode () == VERIFY_PEER
2639
+ assert conn .get_verify_mode () == VERIFY_NONE
2640
+
2641
+ with pytest .raises (TypeError ):
2642
+ conn .set_verify (None )
2643
+
2644
+ with pytest .raises (TypeError ):
2645
+ conn .set_verify (VERIFY_PEER , "not a callable" )
2646
+
2647
+ def test_set_verify_callback_reference (self ):
2648
+ """
2649
+ The callback for certificate verification should only be forgotten if the context and all connections
2650
+ created by it do not use it anymore.
2651
+ """
2652
+ def callback (conn , cert , errnum , depth , ok ): # pragma: no cover
2653
+ return ok
2654
+
2655
+ tracker = ref (callback )
2656
+
2657
+ context = Context (SSLv23_METHOD )
2658
+ context .set_verify (VERIFY_PEER , callback )
2659
+ del callback
2660
+
2661
+ conn = Connection (context , None )
2662
+ context .set_verify (VERIFY_NONE )
2663
+
2664
+ collect ()
2665
+ collect ()
2666
+ assert tracker ()
2667
+
2668
+ conn .set_verify (VERIFY_PEER , lambda conn , cert , errnum , depth , ok : ok )
2669
+ collect ()
2670
+ collect ()
2671
+ callback = tracker ()
2672
+ if callback is not None : # pragma: nocover
2673
+ referrers = get_referrers (callback )
2674
+ if len (referrers ) > 1 :
2675
+ pytest .fail ("Some references remain: %r" % (referrers ,))
2676
+
2632
2677
def test_get_session_unconnected (self ):
2633
2678
"""
2634
2679
`Connection.get_session` returns `None` when used with an object
0 commit comments