
                        d    d dl mZ d dlZd dlZd dlmZ d dlZd dlmZm	Z	 d dl
mZ  G d d      Zy)    )annotationsN)mock)ProxySchemeUnsupportedSSLError)ssl_c                  N   e Zd Zej                  j                  dg d      dd       Zej                  j                  dg d      dd       Z	 	 	 	 ddZddZ	ddZ
	 	 	 	 dd	Z	 	 	 	 dd
ZddZej                  j                  g ddddej                  fddej                   fddej"                  fdddej                  fddej                   fddej"                  fdddej                  fddej                   fddej"                  fg      	 	 	 	 	 	 	 	 	 	 d d       Z	 	 	 	 ddZej                  j                  dej(                  ej*                  j,                  dej(                  ej*                  j.                  dej(                  ej*                  j,                  ej*                  j0                  dg      	 	 	 	 d!d       Zej                  j                  dej4                  ej*                  j,                  dej6                  ej*                  j,                  ddej*                  j,                  dg      	 	 	 	 d!d       Zej                  j                  dej(                  ddej(                  ddej(                  dddg      	 	 	 	 d!d       ZddZy)"TestSSLaddr)
z::1z::FE80::8939:7684:D84b:a5A4%251z	127.0.0.1z8.8.8.8s	   127.0.0.1r   s   FE80::8939:7684:D84b:a5A4%251zFE80::8939:7684:D84b:a5A4%19s   FE80::8939:7684:D84b:a5A4%19c                2    t        j                  |      sJ y Nr   is_ipaddressselfr
   s     4platform/gsutil/third_party/urllib3/test/test_ssl.pytest_is_ipaddress_truezTestSSL.test_is_ipaddress_true   s    &   &&&    )zwww.python.orgs   www.python.orgzv2.sg.media-imdb.coms   v2.sg.media-imdb.comc                2    t        j                  |      rJ y r   r   r   s     r   test_is_ipaddress_falsezTestSSL.test_is_ipaddress_false#   s     $$T****r   c                   d}t        j                  t        j                        t        j                         _        d_        |j                  t        dfd       t        j                  |      u sJ j
                  j                  dk(  sJ j
                  j                  t        j                  |      k(  sJ y )NzECDH+AESGCM:ECDH+CHACHA20r   
SSLContextc                     S r    ___contexts     r   <lambda>zATestSSL.test_create_urllib3_context_set_ciphers.<locals>.<lambda>6       r   )ciphers   )r   create_autospecr   r   Mockset_ciphersoptionssetattrcreate_urllib3_context
call_count	call_argscall)r   monkeypatchr!   r   s      @r   'test_create_urllib3_context_set_ciphersz/TestSSL.test_create_urllib3_context_set_ciphers/   s     .&&t7"iikD,0HI**7;wFFF""--222"",,		'0BBBBr   c                    t        j                  dd       5  t        j                  t              5  t        j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzurllib3.util.ssl_.SSLContext)r   patchpytestraises	TypeErrorr   r(   r   s    r   test_create_urllib3_no_contextz&TestSSL.test_create_urllib3_no_context=   sF    ZZ6=y)++- * >=)) >=s"   A#AA#A 	A##A,c                   t        j                  t        j                        }t        j                         |_        t        j                         }t        j                  ||       |j
                  j                          y )N)ssl_context)r   r#   r   r   r$   load_default_certsssl_wrap_socketassert_not_called)r   r   socks      r   4test_wrap_socket_given_context_no_load_default_certsz<TestSSL.test_wrap_socket_given_context_no_load_default_certsB   sQ    &&t7%)YY["yy{Tw7""446r   c                   t        j                  t        j                        t        j                         _        d_        |j                  t        dfd       t        j                         }t        j                  |d       j
                  j                          j                  j                  dd d        y )Nr   r   c                     S r   r   r   s     r   r   zOTestSSL.test_wrap_socket_given_ca_certs_no_load_default_certs.<locals>.<lambda>R   r    r   z/tmp/fake-file)ca_certs)r   r#   r   r   r$   r7   r&   r'   r8   r9   load_verify_locationsassert_called_withr   r,   r:   r   s      @r   5test_wrap_socket_given_ca_certs_no_load_default_certsz=TestSSL.test_wrap_socket_given_ca_certs_no_load_default_certsK   s     &&t7%)YY["D,0HIyy{T,<=""446%%889I4QUVr   c                F   t        j                  t        j                        t        j                         _        d_        |j                  t        dfd       t        j                         }t        j                  |       j
                  j                          y )Nr   r   c                     S r   r   r   s     r   r   zFTestSSL.test_wrap_socket_default_loads_default_certs.<locals>.<lambda>a   r    r   )
r   r#   r   r   r$   r7   r&   r'   r8   r@   rA   s      @r   ,test_wrap_socket_default_loads_default_certsz4TestSSL.test_wrap_socket_default_loads_default_certsZ   sl     &&t7%)YY["D,0HIyy{T"""557r   c                   t        j                  dd       5  t        j                  t              5  t        j
                         }t        j                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzurllib3.util.ssl_.SSLTransportT)
tls_in_tls)r   r/   r0   r1   r   r$   r   r8   )r   r:   s     r    test_wrap_socket_no_ssltransportz(TestSSL.test_wrap_socket_no_ssltransporth   sX    ZZ8$?56yy{$$Td; 7 @?66 @?s"   A:,A.A:.A7	3A::B)phaexpected_pha	cert_reqs)NNNN)FTNFT)TTNc                $   t        j                  t        j                        t        j                         _        d_        |_        |j                  t        dfd       t        j                  |      u sJ j                  |k(  sJ y )Nr   r   c                     S r   r   r   s     r   r   z9TestSSL.test_create_urllib3_context_pha.<locals>.<lambda>   r    r   )rK   )
r   r#   r   r   r$   r%   r&   post_handshake_authr'   r(   )r   r,   rI   rJ   rK   r   s        @r   test_create_urllib3_context_phaz'TestSSL.test_create_urllib3_context_phan   sv    0 &&t7"iik&)#D,0HI**Y?7JJJ**l:::r   c                   t        j                  t        j                        t        j                         _        d_        |j                  t        dfd       t        j                          j
                  j                          y )Nr   r   c                     S r   r   r   s     r   r   zETestSSL.test_create_urllib3_context_default_ciphers.<locals>.<lambda>   r    r   )
r   r#   r   r   r$   r%   r&   r'   r(   r9   )r   r,   r   s     @r   +test_create_urllib3_context_default_ciphersz3TestSSL.test_create_urllib3_context_default_ciphers   s_     &&t7"iikD,0HI##%--/r   kwargs)ssl_versionssl_minimum_version)rT   ssl_maximum_version)rT   rU   rV   c                    t        j                  t              5 }t        j                  di | d d d        t        j                        dk(  sJ y # 1 sw Y   $xY w)NzZCan't specify both 'ssl_version' and either 'ssl_minimum_version' or 'ssl_maximum_version'r   )r0   r1   
ValueErrorr   r(   strvalue)r   rS   es      r   Ftest_create_urllib3_context_ssl_version_and_ssl_min_max_version_errorszNTestSSL.test_create_urllib3_context_ssl_version_and_ssl_min_max_version_errors   sP    * ]]:&!''1&1 ' 177|h
 	
 
 '&s   AAc                .    t        j                  di | y )Nr   )r   r(   r   rS   s     r   Jtest_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_warningzRTestSSL.test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_warning   s    ( 	##-f-r   c                    t        j                  t        d      5  t        j                  di | d d d        y # 1 sw Y   y xY w)Nzn'ssl_version' option is deprecated and will be removed in urllib3 v2\.1\.0\. Instead use 'ssl_minimum_version')matchr   )r0   warnsDeprecationWarningr   r(   r^   s     r   Htest_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_errorzPTestSSL.test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error   s<     \\D

 ''1&1
 
 
s	   ;Ac                    t        j                  t              5  t        j                  d d       d d d        y # 1 sw Y   y xY w)Nz/55:39:BF:70:05:12:43:FA:1F:D1:BF:4E:E8:1B:07:1D)certfingerprint)r0   r1   r   r   assert_fingerprintr3   s    r   5test_assert_fingerprint_raises_exception_on_none_certz=TestSSL.test_assert_fingerprint_raises_exception_on_none_cert   s.    ]]8$##'X %$$s	   ;A)r
   zbytes | strreturnNone)r,   pytest.MonkeyPatchrj   rk   )rj   rk   )
r,   rl   rI   bool | NonerJ   rm   rK   z
int | Nonerj   rk   )rS   zdict[str, typing.Any]rj   rk   )__name__
__module____qualname__r0   markparametrizer   r   r-   r4   r;   rB   rE   rH   ssl	CERT_NONECERT_OPTIONALCERT_REQUIREDrO   rR   PROTOCOL_TLSv1
TLSVersionMINIMUM_SUPPORTEDTLSv1MAXIMUM_SUPPORTEDr\   PROTOCOL_TLSPROTOCOL_TLS_CLIENTr_   rd   ri   r   r   r   r	   r	      sH   [[	
$'%$' [[	
++C-C	C.
7W-W	W8-8	8< [[,4'4**+4**+D#--(D#++,D#++,4'4**+4**+	
";'; ; "	;
 ; 
;#";"
0-
0	
0 [[  #11'*~~'G'G
  #11'*~~';';
  #11'*~~'G'G'*~~'G'G	
$
+
	
%$
 [[  #//'*~~'G'G
  #66'*~~'G'G
  $'*~~'G'G	
".+.	.#".
 [[..tL..tL"11'+'+	
2+2	22r   r	   )
__future__r   rs   typingunittestr   r0   urllib3.exceptionsr   r   urllib3.utilr   r	   r   r   r   <module>r      s&    " 
    ? [ [r   