
                            d dl mZ d dlZd dlmZ d dlZ	 d dlmZ d dlm	Z	m
Z
 d dlmZmZ ddZddZd	d
lmZ d	dlmZ d	dlmZmZmZmZmZmZ d	dlmZmZmZ d	d
lmZ   G d d      Z!y# e$ r Y Fw xY w)    )annotationsN)mock)x509)FILETYPE_PEMload_certificate)_dnsname_to_stdlibget_subj_alt_namec                 |    	 ddl m}   |         y # t        $ r"}t        j                  d|       Y d }~y d }~ww xY w)Nr   )inject_into_urllib3zCould not import PyOpenSSL: )urllib3.contrib.pyopensslr   ImportErrorpytestskip)r   es     Bplatform/gsutil/third_party/urllib3/test/contrib/test_pyopenssl.pysetup_moduler      s7    :A :21%899:s    	;6;c                 >    	 ddl m}   |         y # t        $ r Y y w xY w)Nr   extract_from_urllib3)r   r   r   r   s    r   teardown_moduler      s"    B s    	   )TestSSL)TestUtilSSL)TestHTTPS_IPV4SANTestHTTPS_IPV6SANTestHTTPS_TLSv1TestHTTPS_TLSv1_1TestHTTPS_TLSv1_2TestHTTPS_TLSv1_3)TestClientCertsTestSNITestSocketClosingc                  Z    e Zd ZdZddZddZddZ ej                  d      d	d       Z	y)
TestPyOpenSSLHelpersz/
    Tests for PyOpenSSL helper functions.
    c                ,    d}d}t        |      |k(  sJ y)zX
        We can convert a dnsname to a native string when the domain is simple.
        u   उदाहरण.परीकzxn--p1b6ci4b4b3a.xn--11b5bs8dNr   selfnameexpected_results      r   test_dnsname_to_stdlib_simplez2TestPyOpenSSLHelpers.test_dnsname_to_stdlib_simple?   s!     19!$'?:::    c                ,    d}d}t        |      |k(  sJ y)zU
        If there is a . in front of the domain name we correctly encode it.
        u    .उदाहरण.परीकz.xn--p1b6ci4b4b3a.xn--11b5bs8dNr&   r'   s      r   %test_dnsname_to_stdlib_leading_periodz:TestPyOpenSSLHelpers.test_dnsname_to_stdlib_leading_periodH   s!     2:!$'?:::r,   c                ,    d}d}t        |      |k(  sJ y)zp
        If there's a wildcard character in the front of the string we handle it
        appropriately.
        u!   *.उदाहरण.परीकz*.xn--p1b6ci4b4b3a.xn--11b5bs8dNr&   r'   s      r   $test_dnsname_to_stdlib_leading_splatz9TestPyOpenSSLHelpers.test_dnsname_to_stdlib_leading_splatQ   s!    
 3;!$'?:::r,   z%urllib3.contrib.pyopenssl.log.warningc                   t         j                  j                  t         j                  j                  t              d      }t        |      5 }t        t        |j                               }ddd       t              g k(  sJ |j                  dk(  sJ t        |j                  d   d   t        j                        sJ y# 1 sw Y   WxY w)z
        If a certificate has two subject alternative names, cryptography raises
        an x509.DuplicateExtension exception.
        zduplicate_san.pemN   r   )ospathjoindirname__file__openr   r   readr	   
call_count
isinstance	call_argsr   DuplicateExtension)r(   mock_warningr4   fpcerts        r   test_get_subj_alt_namez+TestPyOpenSSLHelpers.test_get_subj_alt_name[   s     ww||BGGOOH57JK$Z2#L"'')<D  !&",,,&&!+++,003A68O8OPPP Zs   CCNreturnNone)r>   zmock.MagicMockrC   rD   )
__name__
__module____qualname____doc__r+   r.   r0   r   patchrA    r,   r   r$   r$   :   s8    ;;; TZZ78Q 9Qr,   r$   rB   )"
__future__r   r3   unittestr   r   cryptographyr   OpenSSL.cryptor   r   r   r   r	   r   r   r   test_sslr   	test_utilr   with_dummyserver.test_httpsr   r   r   r   r   r   !with_dummyserver.test_socketlevelr    r!   r"   TestSocketSSLr$   rJ   r,   r   <module>rT      sp    " 	  		!
 P
:  #  

.Q .QU  		s   A+ +A32A3