
    U-f                        d Z ddlZddlZ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 ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  ej        d          Z ej        d          Zej                              ej        d                    Z! ej"        ddddej"        #                                d          Z$ G d de
j%                  Z& G d dej'                  Z( G d de
j%                  Z) G d de
j%                  Z*e+dk    r1 ej,         ej-        ej.        dd         e/gz                        dS dS )zTests for acme.client.    N)Dict)mock)
challenges)errors)jws)messages)messages_test)	test_util)ClientNetwork)ClientV2zcert-san.pemzcsr-mixed.pemzrsa512_key.pemz1https://www.letsencrypt-demo.org/acme/new-account/https://www.letsencrypt-demo.org/acme/new-noncez/https://www.letsencrypt-demo.org/acme/new-orderz1https://www.letsencrypt-demo.org/acme/revoke-cert)
newAccountnewNoncenewOrder
revokeCertmetac                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej        d          d             Z ej        d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z! ej        d          d             Z" ej        d          d              Z# ej        d          d!             Z$ ej        d          d"             Z%d# Z&d$S )%ClientV2TestzTests for acme.client.ClientV2.c           	      (   t          j        dt          j        i i           | _        t          j                    | _        | j        | j        j        _        | j        | j        j        _        t          j
        t          j        d          | _        d| _        t          j        | j        t                                                    }t#          |          }t          j        di || _        t          j        |d          | _        d	}t          j        |d
z   t          j        t1          j        t5          j        d                              }t          j        ||          | _        t          j        t          j
        t          j        d          |f          | _        t          j         | j        |          | _!        d| _"        tF          | _$        tK          | j$        | j                  | _&        | j        '                    d          | _        d| _(        | j        '                    t          j
        t          j        d          t          j)                  | _*        t          j         | j*        | j(                  | _+        t          j,        | j        j        | j*        j        ft          j)        | j!        j-        | j(        fd          | _.        t          j/        | j.        d| j!        | j+        gt`                    | _1        d S )NT)okstatus_codeheaderslinkszexample.com)typvalue)zmailto:cert-admin@example.comztel:+12025551212)contactkey+https://www.letsencrypt-demo.org/acme/reg/1bodyuriz-https://www.letsencrypt-demo.org/acme/authz/1z/1z+evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA)token)r!   statuschall)r    
authzr_uri)
identifierr      )terms_of_service_agreedz-https://www.letsencrypt-demo.org/acme/authz/2zwww.example.com)r&   r#   z=https://www.letsencrypt-demo.org/acme/acct/1/order/1/finalize)identifiersr#   authorizationsfinalizez4https://www.letsencrypt-demo.org/acme/acct/1/order/1)r    r!   r*   csr_pem )2r   	MagicMockhttp_clientOKresponsenetpostreturn_valuegetr   
IdentifierIDENTIFIER_FQDNr&   r   RegistrationKEY
public_keydictNewRegistrationnew_regRegistrationResourceregrChallengeBodySTATUS_VALIDr   DNSjose	b64decodeChallengeResourcechallrAuthorizationauthzAuthorizationResourceauthzrrsnDIRECTORY_V2	directoryr   clientupdateauthzr_uri2STATUS_PENDINGauthz2authzr2Orderr!   orderOrderResourceCSR_MIXED_PEMorderr)selfregthe_argr%   challbs        o/home/cdr/domains/dharristours.com/map/certbot/lib/python3.11/site-packages/acme/_internal/tests/client_test.pysetUpzClientV2Test.setUp)   s   2G G G>##%)]"$(M!"-(? ? ? M#Lcnn&6&68 8 8S		/::'::1GI I I	 E
'd"H,A.t~=(? (? @ @ @A A A 0J0 0 0+*,MC C Cy" " "
 4- - - %t~tx88|**4*HHJj''83F(0A4C 4C 4C* ( , ,  5$"24 4 4 ^.0FG* KOT-=>T	V V V

 ,F K6O O O    c                    t           j        | j        _        | j        j                                        | j        j        _        | j        j	        | j        j
        d<   | j        | j                            | j                  k    sJ d S NLocation)r/   CREATEDr1   r   r?   r    to_jsonjsonr4   r!   r   rN   new_accountr=   rY   s    r]   test_new_accountzClientV2Test.test_new_accounte   sj    $/$7!*.).*@*@*B*B',0IMj)yDK33DLAAAAAAAAr_   c                 X   t           j        | j        _        | j        j                                        | j        j        _        | j        j	        | j        j
        d<   | j        j                            dddii           | j                            | j                  j        dk    sJ d S )Nrb   zterms-of-serviceurlz$https://www.letsencrypt-demo.org/tos)r/   rc   r1   r   r?   r    rd   re   r4   r!   r   r   rO   rN   rf   r=   terms_of_servicerg   s    r]   test_new_account_tos_linkz&ClientV2Test.test_new_account_tos_linkl   s    $/$7!*.).*@*@*B*B',0IMj)""(N O$
 	 	 	 {&&t|44E?@ @ @ @ @ @r_   c                    t           j        | j        _        | j        j        | j        j        d<   t          j        t          j
                  5  | j                            | j                   d d d            d S # 1 swxY w Y   d S ra   )r/   r0   r1   r   r?   r!   r   pytestraisesr   ConflictErrorrN   rf   r=   rg   s    r]   test_new_account_conflictz&ClientV2Test.test_new_account_conflictx   s    $/N!,0IMj)]6/00 	2 	2K##DL111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s    A;;A?A?c                 p   | j                             | j         j                            d                    }|j                                        | j        j        _        t          j        | j        _	        | j         j
        | j        j        d<   | j                            | j                   |k    sJ d S )Ndeactivatedr#   r    rb   )r?   rO   r    rd   r1   re   r4   r/   r0   r   r!   r   rN   deactivate_registration)rY   deactivated_regrs     r]   test_deactivate_accountz$ClientV2Test.test_deactivate_account~   s    9++&&m&<< , > >*:*?*G*G*I*I'$/N!,0IMj){2249==AQQQQQQQr_   c                    | j                             | j         j                            t          j                            }|j                                        | j        j        _        | j	        
                    | j                   }|j        |j        k    sJ | j	        j        j        j        dk    sJ | j         j        | j        j        j        d         d         v sJ d S )Nrt   ru   r'   r   )rJ   rO   r    r   STATUS_DEACTIVATEDrd   r1   re   r4   rN   deactivate_authorizationr2   r3   
call_countr!   call_args_list)rY   deactivated_authzrJ   s      r]   test_deactivate_authorizationz*ClientV2Test.test_deactivate_authorization   s     K..!((0K(LL / N N*;*@*H*H*J*J'55dkBB %4444{#.!3333{$(-">q"A!"DDDDDDDr_   c                    t          j        | j                  }t          j        |_        | j                                        |j        _	        | j
        j        |j        d<   || j        j        _	        t          j        | j                  }| j                                        |j        _	        | j        j        |j        d<   | j        }| j                                        |j        _	        | j        j        |j        d<   t'          j        d          5 }||f|_        | j                            t0                    | j
        k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nrb   z!acme.client.ClientV2._post_as_get)copydeepcopyr1   r/   rc   r   rU   rd   re   r4   rX   r!   r   r2   r3   rH   rJ   rR   rS   r   patchside_effectrN   	new_orderrW   )rY   order_responseauthz_responseauthz_response2mock_post_as_gets        r]   test_new_orderzClientV2Test.test_new_order   s{   t}55%0%8"+/:+=+=+?+?(-1[_z*%3"t}55+/:+=+=+?+?(-1[_z*-,0K,?,?,A,A).2l.>
+Z;<< 	G@P,:O+L(;((774;FFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   4EEEc                    d| j         j        i| j        j        d<   | j         j                                        | j        j        _        t          j	        d           }| j
                            | j         j        |           t          j        t          j                  5  | j
                            | j         j                            d          |           d d d            d S # 1 swxY w Y   d S )Nrj   up
validationfoo)r!   )rF   r%   r1   r   r    rd   re   r4   r   DNSResponserN   answer_challengern   ro   r   UnexpectedUpdaterO   )rY   chall_responses     r]   test_answer_challegez!ClientV2Test.test_answer_challege   s"   %*DK,B$CD!*.+*:*B*B*D*D'#/4@@@$$T[%5~FFF]6233 	] 	]K(()9)@)@U)@)K)K^\\\	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	]s   !:C((C,/C,c                     t          j        t          j                  5  | j                            | j        j        t          j	        d                      d d d            d S # 1 swxY w Y   d S )Nr   )
rn   ro   r   ClientErrorrN   r   rF   r    r   r   rg   s    r]   "test_answer_challenge_missing_nextz/ClientV2Test.test_answer_challenge_missing_next   s    ]6-.. 	d 	dK(()9:;Q]a;b;b;bccc	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	d 	ds   9A%%A),A)zacme.client.datetimec                 H   t          j         ddd          |j         j        _        t           j        |_        |j                                         t          j        d          z   }t	          j        | j                  | j        _        t	          j        | j                  | j        _	        | j        
                    | j                  | j        k    sJ | j        j                            | j        |           | j        j	                            | j        |           d S )N        Z   secondsr4   )datetimenowr4   	timedeltar   MockrX   rN   poll_authorizationsfinalize_orderpoll_and_finalizeassert_called_once_with)rY   mock_datetimeexpected_deadlines      r]   test_poll_and_finalizez#ClientV2Test.test_poll_and_finalize   s    2:2CD!R2P2P"/"*"4)266888;MVX;Y;Y;YY*.)*M*M*M'%)YDK%H%H%H"{,,T[99T[HHHH'??M^___"::4;HYZZZZZr_   c                    t          j         ddd          t          j         ddd          t          j         ddd          g}||j         j        _        | j                                        | j                                        | j                                        g| j        j        _        t          j	        t          j                  5  | j                            | j        |d                    d d d            d S # 1 swxY w Y   d S )Nr   r   r         r'   )r   r   r   rH   rd   rR   r1   re   rn   ro   r   TimeoutErrorrN   r   rX   )rY   r   now_side_effects      r]    test_poll_authorizations_timeoutz-ClientV2Test.test_poll_authorizations_timeout   s=   #,T1b99#,T1b99#,T1b99; 2A".J  $+"5"5"7"79L9L9N9N*P& ]6.// 	M 	MK++DK9KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   
'C>>DDc                    t          j         ddd          }| j        j                            t          j        t          j                            d                    }| j                            t          j        |f          }|	                                | j
        j        _        t          j        t          j                  5  | j                            | j        |           d d d            d S # 1 swxY w Y   d S )N'  	   unauthorized)r#   error)r#   r   )r   rF   r    rO   r   STATUS_INVALIDError	with_coderH   rd   r1   re   r4   rn   ro   r   ValidationErrorrN   r   rX   )rY   deadliner\   rH   s       r]    test_poll_authorizations_failurez-ClientV2Test.test_poll_authorizations_failure   s(   $T1a00!((0G/7~/G/G/W/W ) Y Y
!!)@fY!WW*/--//']6122 	C 	CK++DKBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   !C55C9<C9c                    t          j         ddd          }| j                            t          j                  }t          j        || j                  }| j                            | j        |g          }| j	        
                                | j        
                                |
                                f| j        j        _        | j                            | j        |          |k    sJ d S )Nr   r   rt   r   )r*   )r   rR   rO   r   rA   rI   rP   rX   rJ   rH   rd   r1   re   r   rN   r   )rY   r   updated_authz2updated_authzr2updated_orderrs        r]    test_poll_authorizations_successz-ClientV2Test.test_poll_authorizations_success   s    $T1a00++83H+II"8T%57 7 7++DK;Y+ZZ J  $+"5"5"7"79O9O9Q9Q*S&{..t{HEEWWWWWWr_   c                 `   | j                             | j                            d                    }|                                | j        j        _        t          j        t          j
                  5  | j                            | j                   d d d            d S # 1 swxY w Y   d S )Nr   r   )r&   )rH   rO   r&   rd   r1   re   r4   rn   ro   r   r   rN   pollrJ   )rY   updated_authzs     r]   test_poll_unexpected_updatez(ClientV2Test.test_poll_unexpected_update   s    
))T_5K5KRW5K5X5X)YY*7*?*?*A*A']6233 	* 	*KT[)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   6 B##B'*B'c                 t   | j                             dt          j                  }| j                            |t
                    }|                                | j        j        _	        t
          | j        _
        t          j        ddd          }| j                            | j        |          |k    sJ d S )N+https://www.letsencrypt-demo.org/acme/cert/certificater#   )r    fullchain_pemr   r   )rU   rO   r   rA   rX   CERT_SAN_PEMrd   r1   re   r4   textr   rN   r   )rY   updated_orderr   r   s       r]   test_finalize_order_successz(ClientV2Test.test_finalize_order_success   s    
))E( * * * ++l+[[*7*?*?*A*A')$T1a00{))$+x@@NRRRRRRr_   c                    | j                             t          j                            d          t          j                  }|                                | j        j        _	        t          j
        ddd          }t          j        t          j                  5  | j                            | j        |           d d d            d S # 1 swxY w Y   d S )Nr   r   r#   r   r   )rU   rO   r   r   r   r   rd   r1   re   r4   r   rn   ro   r   IssuanceErrorrN   r   rX   )rY   r   r   s      r]   test_finalize_order_errorz&ClientV2Test.test_finalize_order_error   s    
)).**>::* * , , +8*?*?*A*A'$T1a00]6/00 	> 	>K&&t{H===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   !C		CCc           	      r   | j                             d t          j                  }|                                | j        j        _        t          j	        t          j        d          5  | j                            | j        t          j        ddd                     d d d            d S # 1 swxY w Y   d S )Nr   zThe certificate order failed)matchr   r   )rU   rO   r   r   rd   r1   re   r4   rn   ro   r   r   rN   r   rX   r   )rY   rU   s     r]   "test_finalize_order_invalid_statusz/ClientV2Test.test_finalize_order_invalid_status   s    
!!X5L!MM*/--//']6</MNNN 	S 	SK&&t{H4EdAq4Q4QRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Ss   *5B,,B03B0c                    t           j                                         t          j        d          z
  }t          j        t
          j                  5  | j                            | j	        |           d d d            d S # 1 swxY w Y   d S )N<   r   )
r   r   r   rn   ro   r   r   rN   r   rX   )rY   r   s     r]   test_finalize_order_timeoutz(ClientV2Test.test_finalize_order_timeout   s    $((**X-?-K-K-KK]6.// 	> 	>K&&t{H===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   !BBBc                 "   | j                             dt          j                  }| j                            |t
          t
          t
          g          }|                                | j        j        _	        t
          | j        _
        d| j        j        d<   t          j        ddd          }| j                            | j        |d	          }| j        j                            d
t$          j        t$          j                   | j        j                            dt$          j        t$          j                   ||k    sJ | j        j        d= | j                            | j        |d	          }||                    g           k    sJ d S )Nr   r   )r    r   alternative_fullchains_pemz<https://example.com/acme/cert/1>;rel="alternate", <https://example.com/dir>;rel="index", <https://example.com/acme/cert/2>;title="foo";rel="alternate"Linkr   r   T)fetch_alternative_chainszhttps://example.com/acme/cert/1new_nonce_urlzhttps://example.com/acme/cert/2)r   )rU   rO   r   rA   rX   r   rd   r1   re   r4   r   r   r   rN   r   r2   r3   assert_any_callr   ANY)rY   r   r   r   resps        r]   test_finalize_order_alt_chainsz+ClientV2Test.test_finalize_order_alt_chains  s   
))E( * 
 
 ++:FHTHTHV , W W +8*?*?*A*A')(Lf% $T1a00{))$+xZ^)__%%&G&*hdh 	& 	H 	H 	H%%&G&*hdh 	& 	H 	H 	H~%%%%M!&){))$+xZ^)__~,,,KKKKKKKKr_   c                     | j                             t          j        | j                   | j        j                            | j        d         t          j
        t          d                    d S )Nr   r   r   )rN   revoker	   CERTrK   r2   r3   r   rM   r   r   rL   rg   s    r]   test_revokezClientV2Test.test_revoke  sd    =-tx888--N<($(,zBZ 	. 	\ 	\ 	\ 	\ 	\r_   c                     t           j        | j        _        t	          j        t          j                  5  | j        	                    t          j        | j                   d d d            d S # 1 swxY w Y   d S N)r/   METHOD_NOT_ALLOWEDr1   r   rn   ro   r   r   rN   r   r	   r   rK   rg   s    r]   #test_revoke_bad_status_raises_errorz0ClientV2Test.test_revoke_bad_status_raises_error$  s    $/$B!]6-.. 	 	K}1H  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   +A--A14A1c                    | j         j        | j        j        d<   | j         j                                        | j        j        _        | j         | j        	                    | j                   k    sJ | j        j
        j        J | j        j
        j        j        dk    sJ t          j        | j
        j        j        d         d         v sJ | j         j                            d                                          | j        j        _        d S )Nrb   r   r   r-   )r   )r?   r!   r1   r   r    rd   re   r4   rN   update_registrationr2   accountr3   r|   rL   r   r}   rO   rg   s    r]   test_update_registrationz%ClientV2Test.test_update_registration*  s    ,0IMj)*.).*@*@*B*B'yDK;;DIFFFFFF{&222{#.!3333&$(-*Fq*I!*LLLLL*.).*?*? +@ + +		 	'''r_   c                     t          j        dt           j                            d          i          | j        _        | j                                        sJ d S )Nr   Texternal_account_requiredr   	DirectoryMetarN   rM   r   rg   s    r]   #test_external_account_required_truez0ClientV2Test.test_external_account_required_true6  sY     ( 2H&++d+KK4
 ! ! {446666666r_   c                     t          j        dt           j                            d          i          | j        _        | j                                        rJ d S )Nr   Fr   r   rg   s    r]   $test_external_account_required_falsez1ClientV2Test.test_external_account_required_false=  sY     ( 2H&++e+LL4
 ! ! ;88:::::::r_   c                 <    | j                                         rJ d S r   )rN   r   rg   s    r]   &test_external_account_required_defaultz3ClientV2Test.test_external_account_required_defaultD  s"    ;88:::::::r_   c                     | j         j                                        | j        j        _        d| j        j        d<   | j         | j                            | j                   k    sJ d S )Nr   rb   )	r?   r    rd   r1   re   r4   r   rN   query_registrationrg   s    r]   test_query_registration_clientz+ClientV2Test.test_query_registration_clientG  sY    *.).*@*@*B*B',Yj)yDK::49EEEEEEEEr_   c                 ^   t          j        d          5 }| j        |_        | j                            | j                   | j        j        j                            | j        j	        d d           | j        j        j
                                         d d d            d S # 1 swxY w Y   d S )Nz*acme.client.ClientV2._authzr_from_responser   r   )r   r   rS   r4   rN   r   r2   r3   r   r!   r5   assert_not_called)rY   mock_clients     r]   test_post_as_getzClientV2Test.test_post_as_getL  s    ZDEE 	4'+|K$KT\***KO 88 $O 9 Q Q Q KO11333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   B B""B&)B&c                     d| j         j        d<   t          j        dddddd          | j                            | j         d	          k    sJ d S )
NzFri, 31 Dec 1999 23:59:59 GMTRetry-Afteri           ;   
   r1   default)r1   r   r   rN   retry_afterrg   s    r]   test_retry_after_datez"ClientV2Test.test_retry_after_dateW  sg    /Nm, r2r2r::K##T]B#GGH H H H H Hr_   c                    t          j         ddd          |j         j        _        t           j        |_        d| j        j        d<   t          j         dddddd          | j                            | j        d          k    sJ d S )	N        foooor  r   r  r  r   r   r4   r   r1   r   rN   r
  rY   dt_mocks     r]   test_retry_after_invalidz%ClientV2Test.test_retry_after_invalid\  s    ,4,=dAr,J,J)$./6m, q"aB77K##T]B#GGH H H H H Hr_   c                 8   t          j         ddd          |j         j        _        t           j        |_        t           j         |j         _        d| j        j        d<   t          j         dddddd          | j                            | j        d          k    sJ d S )	Nr  r  r  zTue, 116 Feb 2016 11:50:00 MSTr  r   r  r  )	r   r   r4   r   r   r1   r   rN   r
  r  s     r]   test_retry_after_overflowz&ClientV2Test.test_retry_after_overflowe  s    ,4,=dAr,J,J)$.'/'8$/Om, q"aB77K##T]B#GGH H H H H Hr_   c                    t          j         ddd          |j         j        _        t           j        |_        d| j        j        d<   t          j         dddddd          | j                            | j        d	          k    sJ d S )
Nr  r  r  50r  r   2   r  r  r  r  s     r]   test_retry_after_secondsz%ClientV2Test.test_retry_after_secondso  s    ,4,=dAr,J,J)$./3m, q"aB77K##T]B#GGH H H H H Hr_   c                     t          j         ddd          |j         j        _        t           j        |_        t          j         dddddd          | j                            | j        d          k    sJ d S )Nr  r  r  r   r  r  )r   r   r4   r   rN   r
  r1   r  s     r]   test_retry_after_missingz%ClientV2Test.test_retry_after_missingx  s    ,4,=dAr,J,J)$. q"aB77K##T]B#GGH H H H H Hr_   c                     t                                           | j        j        _        t                                           t          j        d| j                                                  k    sJ d S )Nzhttps://example.com/dir)	rL   rd   r1   re   r4   to_partial_jsonr   get_directoryr2   rg   s    r]   test_get_directoryzClientV2Test.test_get_directory  sm    *6*>*>*@*@'++--"#<dhGGWWYYZ Z Z Z Z Zr_   N)'__name__
__module____qualname____doc__r^   rh   rl   rq   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r-   r_   r]   r   r   &   s       )):O :O :OxB B B	@ 	@ 	@2 2 2R R RE E EG G G$] ] ]d d d TZ&''
[ 
[ ('
[ TZ&''	M 	M ('	MC C C	X 	X 	X* * *
S 
S 
S> > >S S S> > >
L L L6\ \ \
  
" 
" 
"7 7 7; ; ;; ; ;F F F
	4 	4 	4H H H
 TZ&''H H ('H TZ&''H H ('H TZ&''H H ('H TZ&''H H ('HZ Z Z Z Zr_   r   c                   0    e Zd Zd Zd Zed             ZdS )MockJSONDeSerializablec                     || _         d S r   r   )rY   r   s     r]   __init__zMockJSONDeSerializable.__init__  s    


r_   c                     d| j         iS )Nr   r   rg   s    r]   r  z&MockJSONDeSerializable.to_partial_json  s    tz""r_   c                     d S r   r-   )clsjobjs     r]   	from_jsonz MockJSONDeSerializable.from_json  s    r_   N)r!  r"  r#  r(  r  classmethodr-  r-   r_   r]   r&  r&    sM          # # #   [  r_   r&  c                   N   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej        d          d             Z ej        d          d             Zd Zd Zd Z ej        d          d             Zd Zd Zd Zd ZddZd Z ej        d          d             Zd ZdS )ClientNetworkTestz$Tests for acme.client.ClientNetwork.c                 Z   t          j                    | _        t          j        t           j        j                  | _        t          t          t          j	        | j        d          | _
        t          j        dt          j                  | _        i | j        _        i | j        _        d S )Nr   acme-python-test)r   alg
verify_ssl
user_agentTr   r   )r   r.   r4  sentinelwrappedwrap_in_jwsr   r9   rC   RS256r2   r/   r0   r1   r   r   rg   s    r]   r^   zClientNetworkTest.setUp  s    .**>t}7LMMM )+ + + $KNKKK " r_   c                 0    | j         j        | j        u sJ d S r   )r2   r4  rg   s    r]   	test_initzClientNetworkTest.test_init  s     x"do555555r_   c                 ,   | j                             t          d          dd          }t          j                            |          }t          j        |j        	                                          ddik    sJ |j
        j        j        dk    sJ d S )Nr      Tgrj   noncerj   )r2   _wrap_in_jwsr&  acme_jwsJWS
json_loadsre   loadspayloaddecode	signaturecombinedr@  rY   jws_dumpr   s      r]   test_wrap_in_jwsz"ClientNetworkTest.test_wrap_in_jws  s    8(("5))E ) C Cl%%h//z#+,,..//E5>AAAA}%+u444444r_   c                    ddi| j         _        | j                             t          d          dd          }t          j                            |          }t          j        |j	        
                                          ddik    sJ |j        j        j        dk    sJ |j        j        j        dk    sJ |j        j        j        dk    sJ d S )Nr!   zacct-urir   r>  rj   r?  )r2   r   rA  r&  rB  rC  rD  re   rE  rF  rG  rH  rI  r@  kidrj   rJ  s      r]   test_wrap_in_jws_v2z%ClientNetworkTest.test_wrap_in_jws_v2  s    !:.8(("5))E ) C Cl%%h//z#+,,..//E5>AAAA}%+u4444}%)[8888}%)V333333r_   c                 f   d| j         _        i | j         j        _        t	          j        d          5 }t          j        |_        t          j
        t          j                  5  | j                            | j                    d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFz$acme.client.messages.Error.from_json)r1   r   re   r4   r   r   rC   DeserializationErrorr   rn   ro   r   r   r2   _check_response)rY   r-  s     r]   (test_check_response_not_ok_jobj_no_errorz:ClientNetworkTest.test_check_response_not_ok_jobj_no_error  s    *,'Z>?? 	89$($=I!v122 8 8((7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s5   0B&" BB&B	B&B	B&&B*-B*c                 P   d| j         _        t          j                            ddd                                          | j         j        _        t          j	        t          j                  5  | j
                            | j                    d d d            d S # 1 swxY w Y   d S )NFserverInternalr   z
some title)detailtitle)r1   r   r   r   r   rd   re   r4   rn   ro   r2   rR  rg   s    r]   %test_check_response_not_ok_jobj_errorz7ClientNetworkTest.test_check_response_not_ok_jobj_error  s     *2.*B*BU, +C +@ +@@G		 	' ]8>** 	4 	4H$$T]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   . BB"Bc                     d| j         _        t          | j         j        _        t          j        t          j                  5  | j	        
                    | j                    d d d            d S # 1 swxY w Y   d S )NF)r1   r   
ValueErrorre   r   rn   ro   r   r   r2   rR  rg   s    r]   "test_check_response_not_ok_no_jobjz4ClientNetworkTest.test_check_response_not_ok_no_jobj  s     )3&]6-.. 	4 	4H$$T]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s    A..A25A2c                 4   t           | j        j        _        | j        j        dfD ]r}|| j        j        d<   t          j        t          j
                  5  | j                            | j        | j        j                   d d d            n# 1 swxY w Y   sd S )Nr   Content-Typecontent_type)rZ  r1   re   r   r2   JSON_CONTENT_TYPEr   rn   ro   r   r   rR  rY   response_cts     r]   *test_check_response_ok_no_jobj_ct_requiredz<ClientNetworkTest.test_check_response_ok_no_jobj_ct_required  s    )3& H6> 	9 	9K4?DM!.1v122 9 9((!X7 ) 9 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9s   ,BB	B	c                     t           | j        j        _        | j        j        dfD ];}|| j        j        d<   | j        | j                            | j                  k    sJ <d S Nr   r]  )rZ  r1   re   r   r2   r`  r   rR  ra  s     r]   $test_check_response_ok_no_jobj_no_ctz6ClientNetworkTest.test_check_response_ok_no_jobj_no_ct  sm    )3& H6> 	L 	LK4?DM!.1=DH$<$<T]$K$KKKKKK	L 	Lr_   zacme.client.loggerc                    i | j         j        _        d| j         j        d<   | j         | j                            | j         d          k    sJ 	 |j                            dd           n# t          $ r Y d S w xY wt          d          )Nzapplication/json; charset=utf-8r]  application/jsonr^  <Ignoring wrong Content-Type (%r) for JSON decodable responsez5Expected Content-Type warning to not have been logged)	r1   re   r4   r   r2   rR  debugassert_called_withAssertionErrorrY   mock_loggers     r]   &test_check_response_ok_ct_with_charsetz8ClientNetworkTest.test_check_response_ok_ct_with_charset  s    *,'0Qn-} 8 8M(: !9 !< !< < < < <	00N1     	 	 	FF	 & ' ' 	's   A* *
A87A8c                     i | j         j        _        d| j         j        d<   | j         | j                            | j         d          k    sJ |j                            dd           d S )Nz
text/plainr]  rh  r^  ri  )r1   re   r4   r   r2   rR  rj  rk  rm  s     r]   test_check_response_ok_bad_ctz/ClientNetworkTest.test_check_response_ok_bad_ct  s    *,'0<n-} 8 8M(: !9 !< !< < < < <,,J	
 	
 	
 	
 	
r_   c                     d| j         _        d| j         _        t          j        t
          j                  5  | j                            | j                    d d d            d S # 1 swxY w Y   d S )NFi  )	r1   r   r   rn   ro   r   rp   r2   rR  rg   s    r]   test_check_response_conflictz.ClientNetworkTest.test_check_response_conflict  s     $'!]6/00 	4 	4H$$T]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s    A$$A(+A(c                     i | j         j        _        | j        j        dfD ];}|| j         j        d<   | j         | j                            | j                   k    sJ <d S re  )r1   re   r4   r2   r`  r   rR  ra  s     r]   test_check_response_jobjz*ClientNetworkTest.test_check_response_jobj  sm    *,' H6> 	L 	LK4?DM!.1=DH$<$<T]$K$KKKKKK	L 	Lr_   c           	      Z   t          j                    | j        _        | j        | j        j        j        _        | j        | j                            dddd          k    sJ | j        j        j                            dddt           j	        t           j	        t           j	        d           d S )NHEADhttp://example.com/r   bazbar)r   verifytimeoutr{  
r   r.   r2   sessionr1   requestr4   _send_requestr   r   rg   s    r]   test_send_requestz#ClientNetworkTest.test_send_request  s    >++04 -} 6 6)5e !7 != != = = = = 88)5HTXtxU 	9 	L 	L 	L 	L 	Lr_   c           	      <   t          j                    | j        _        t          j        dt          j        d          | j        j        j        _        | j                            dddt           j	        ddd	i
           |j
                            dddd           d S )NTs   hi)r   r   contentrw  rx  r   ry  Acceptzapplication/pkix-cert)r}  r{  r   z!Received response:
HTTP %d
%s

%s    s   aGk=)r   r.   r2   r  r/   r0   r  r4   r  r   rj  rk  rm  s     r]   test_send_request_get_derz+ClientNetworkTest.test_send_request_get_der  s    >++041 1 1 - 	v'<e(:Q/R 	 	T 	T 	T,,3S	 	 	 	 	r_   c           
      ^   t          j                    | j        _        | j        | j        j        j        _        | j        | j                            ddddd          k    sJ | j        j        j                            dddt           j	        t           j	        t           j	        dd           d S )NPOSTrx  r   quxry  )datar{  )r   r|  r}  r  r{  r~  rg   s    r]   test_send_request_postz(ClientNetworkTest.test_send_request_post"  s    >++04 -} 6 6)5u% !7 !I !I I I I I 88)5HTXtxeQV 	9 	X 	X 	X 	X 	Xr_   c                 ^   dD ]}t          j                    | j        _        | j        | j        j        j        _        || j        _        | j        | j                            dd          k    sJ | j        j        j        	                    dd|t           j
        t           j
                   d S )N)TFGETrx  r|  r}  r   )r   r.   r2   r  r1   r  r4   r4  r  r   r   )rY   r|  s     r]   test_send_request_verify_sslz.ClientNetworkTest.test_send_request_verify_ssl,  s    ! 		4 		4F#~//DH48MDH$1"(DH=&&u.CDDE E E EH$<<,V$( = 4 4 4 4		4 		4r_   c           	         t          j                    | j        _        | j                            ddddi           | j        j        j                            ddt           j        t           j        ddd           | j                            ddd	d
i           | j        j        j                            ddt           j        t           j        d	d
i           d S )Nr  rx  r{  ry  r   r2  )
User-Agentr{  r  r  foo2)	r   r.   r2   r  r  r  r   r   rk  rg   s    r]   test_send_request_user_agentz.ClientNetworkTest.test_send_request_user_agent9  s    >++u&;(-u~ 	 	7 	7 	7 88(H#5eDD 	9 	F 	F 	F
 	u&;(4f'= 	 	? 	? 	? 33(8TXf7M 	4 	O 	O 	O 	O 	Or_   c                     t          j                    | j        _        | j                            ddddi           | j        j        j                            t           j        t           j        t           j        t           j        d           d S )Nr  rx  r{  ry  r  -   )r|  r   r}  )r   r.   r2   r  r  r  r   r   rg   s    r]   test_send_request_timeoutz+ClientNetworkTest.test_send_request_timeoutI  s    >++u&;(-u~ 	 	7 	7 	7 88Hdhtx 	9 	 	 	 	 	r_   Nc                     t          j                    }|||j        _        || j        _        | `|j                                         d S r   )r   r.   closer   r2   r  r   )rY   close_exceptionsesss      r]   test_delzClientNetworkTest.test_delR  sH    ~&%4DJ"H
**,,,,,r_   c                 :    |                      t                     d S r   )r  ReferenceErrorrg   s    r]   test_del_errorz ClientNetworkTest.test_del_error\  s    n%%%%%r_   zacme.client.requestsc                    t           j        |_        t           j        j        |j        _        t          j        t           j        j                  5  | j                            dd           d d d            d S # 1 swxY w Y   d S )Nr  r!   )	requests
exceptionsRequestExceptionr  r   rn   ro   r2   r  )rY   mock_requestss     r]   test_requests_error_passthroughz1ClientNetworkTest.test_requests_error_passthrough_  s    #+#6 ,4,?,P)]8.?@@ 	1 	1H""5%000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   A99A= A=c                 &   	 | j                             dd           d S # t          $ r }dt          |          k    sJ Y d }~d S d }~wt          j        j        $ r5}dt          |          v sdt          |          v sJ Y d }~d S Y d }~d S d }~ww xY w)Nr  z&http://localhost:19123/nonexistent.txtz4Requesting localhost/nonexistent: Connection refusedz'Connection aborted.'z[WinError 10061])r2   r  rZ  strr  r  ConnectionError)rY   yzs      r]   test_urllib_errorz#ClientNetworkTest.test_urllib_errorg  s    	UH""5*RSSSSS  	< 	< 	<258VV< < < < < < < < < < "2 	U 	U 	U*c!ff448JcRSff8T8T8T8T4444448T8T8T8T8T8T	Us     
BAB$BBr   )r!  r"  r#  r$  r^   r<  rL  rO  rS  rX  r[  rc  rf  r   r   ro  rq  rs  ru  r  r  r  r  r  r  r  r  r  r  r-   r_   r]   r0  r0    s       ..
! 
! 
!6 6 65 5 5	4 	4 	48 8 84 4 44 4 49 9 9L L L TZ$%%' ' &%'  TZ$%%	
 	
 &%	
4 4 4L L LL L L TZ$%%
 
 &%
X X X4 4 4O O O   - - - -& & & TZ&''1 1 ('1U U U U Ur_   r0  c                   l    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )#ClientNetworkWithMockedResponseTestz<Tests for acme.client.ClientNetwork which mock out response.c                     t          d d            _        t          j        dt          j                   _        i  j        _        i  j        _        d j        _	        t          j        dt          j
                   _        i  j        _        t          j                     _        t          j                     _        t          j        j         _        t!          j        d          t!          j        d          t!          j        d          g _         j        d d           _         fd}t          j        |	          x j        _         _         j         j        _        t          j         j        
           j        _        d S )N)r   r3  Tr6  Fs   Nonces   Nonce2s   Nonce3c                      d|vsJ | d         }| d         }|dk    r|dk    rj         }nj        }j        r=j        j        j                                                                        i|_        ni |_        |S )Nr   r   r'   rw  new_nonce_uri)acmev1_nonce_responser1   available_noncesr2   REPLAY_NONCE_HEADERpoprG  r   )argskwargsmethodr!   r1   rY   s        r]   send_requestz?ClientNetworkWithMockedResponseTest.setUp.<locals>.send_request  s    "&0000!WFq'CC?$:$:5=$ &H0)--//6688$:   $& Or_   )r   r   )r   r2   r   r.   r/   r0   r1   r   r   checkedr   r  objwrapped_objr7  r_  rC   	b64encode
all_noncesr  r  r  check_responserR  rA  )rY   r  s   ` r]   r^   z)ClientNetworkWithMockedResponseTest.setUpz  s_    Tt444$KNKKK "  %%)^+"@&B &B &B"-/"*>##>++ M6 N8$$N9%%t~i'@'@B !% 2	 	 	 	 	& 6:^$6& 6& 6& 	&!2#'#6  $D<L M M Mr_   c                 x    | j         |k    sJ | j        |k    sJ | j         j        sJ d| j         _        | j         S )NT)r1   r_  r   r  )rY   r1   r_  s      r]   r  z2ClientNetworkWithMockedResponseTest.check_response  sL    }(((( L0000} $}r_   c                     | j         | j                            ddd          k    sJ | j                            dddd           d S )Nrx  r   ry  rz  rw  )r  r2   headr  r   rg   s    r]   	test_headz-ClientNetworkWithMockedResponseTest.test_head  sn    )TX]]!5e .; .5 .5 5 5 5 511)5e 	2 	= 	= 	= 	= 	=r_   c                     | j         | j                            ddd          k    sJ | j                            dddd           d S )Nr  r   ry  rz  rw  )r1   r2   r  r  r   rg   s    r]   test_head_v2z0ClientNetworkWithMockedResponseTest.test_head_v2  sl    }U !. !/ !/ / / / /11OU 	2 	7 	7 	7 	7 	7r_   c                     | j         | j                            d| j        d          k    sJ | j         j        sJ | j                            ddd           d S )Nrx  ry  )r_  r{  r  rz  )r1   r2   r5   r_  r  r  r   rg   s    r]   test_getz,ClientNetworkWithMockedResponseTest.test_get  s    }!0Au !- !N !N N N N N}$$$$11(e 	2 	5 	5 	5 	5 	5r_   c                     | j         j        | _        | j        | j                             d| j                  k    sJ | j        j        sJ d S )Nr!   )r2   JOSE_CONTENT_TYPEr_  r1   r3   r  r  rg   s    r]   test_post_no_content_typez=ClientNetworkWithMockedResponseTest.test_post_no_content_type  sK     H6}eTX > >>>>>}$$$$$$r_   c                    | j         | j                            d| j        | j                  k    sJ | j         j        sJ | j        j                            | j        t          j	        | j
                                                  d           g | _        t          j        t          j                  5  | j                            d| j        | j                   d d d            n# 1 swxY w Y   | j        j                            | j        t          j	        | j
                                                  d           d S )Nr!   r^  )r1   r2   r3   r  r_  r  rA  r   rC   rD   r  r  r  rn   ro   r   MissingNoncerk  rg   s    r]   	test_postz-ClientNetworkWithMockedResponseTest.test_post  s   }48$*; !. != != = = = =}$$$$55HdnT_%8%8%:%:;;U	D 	D 	D !#]6.// 	K 	KHMM%8IMJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K00HdnT_%8%8%:%:;;U	D 	D 	D 	D 	Ds   5(C))C-0C-c                     dt          j        d          g| _        t          j        t
          j                  5  | j                            d| j	        | j
                   d d d            d S # 1 swxY w Y   d S )N   f   goodr!   r^  rC   r  r  rn   ro   r   BadNoncer2   r3   r  r_  rg   s    r]   test_post_wrong_initial_noncezAClientNetworkWithMockedResponseTest.test_post_wrong_initial_nonce  s    !%t~g'>'> ?]6?++ 	D 	DHMM%(1B  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D   (A//A36A3c                     t          j        d          dg| _        t          j        t
          j                  5  | j                            d| j	        | j
                   d d d            d S # 1 swxY w Y   d S )Nr  r  r!   r^  r  rg   s    r]   #test_post_wrong_post_response_noncezGClientNetworkWithMockedResponseTest.test_post_wrong_post_response_nonce  s    !%!8!8$ ?]6?++ 	D 	DHMM%(1B  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dr  c                 H   t          j                    }t          j                            d          |_        || j        _        t          j	        t          j                  5  | j        
                    d| j        | j                   d d d            d S # 1 swxY w Y   d S NbadNoncer!   r^  )r   r.   r   r   r   r   r2   rR  rn   ro   r3   r  r_  rY   r  s     r]   test_post_failed_retryz:ClientNetworkWithMockedResponseTest.test_post_failed_retry  s    ))%-^%=%=j%I%I" $2 ]8>** 	D 	DHMM%(1B  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   "(BBBc                 V   t          j                    }t          j                            d          | j        g|_        || j        _        t          j
        t          j                  5  | j                            d| j        | j                   d d d            d S # 1 swxY w Y   d S )N	malformedr!   r^  )r   r.   r   r   r   r1   r   r2   rR  rn   ro   r3   r  r_  r  s     r]   test_post_not_retriedz9ClientNetworkWithMockedResponseTest.test_post_not_retried  s    ))&.n&>&>{&K&K&*m&5" $2 ]8>** 	D 	DHMM%(1B  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   )(BB"%B"c                     t          j                    }t          j                            d          | j        g|_        | j        | j                            d| j	        | j
                  k    sJ d S r  )r   r.   r   r   r   r1   r   r2   r3   r  r_  )rY   	post_onces     r]   test_post_successful_retryz>ClientNetworkWithMockedResponseTest.test_post_successful_retry  sy    N$$	!)!9!9*!E!E&*m!5	 }48$*; !. != != = = = = = =r_   c                    t           j        j        | j        _        | j        j        | j        j        fD ]I}t          j	        t           j        j                  5   |dd           d d d            n# 1 swxY w Y   Jt          j	        t           j        j                  5  | j        
                    d| j                   d d d            d S # 1 swxY w Y   d S )Nr  r!   )r  )r  r  r  r  r   r2   r  r5   rn   ro   r3   r  )rY   r  s     r]   $test_head_get_post_error_passthroughzHClientNetworkWithMockedResponseTest.test_head_get_post_error_passthrough  sA   (0(;(L%hmTX\1 	% 	%Fx2CDD % %ue$$$% % % % % % % % % % % % % % %]8.?@@ 	/ 	/HMM%TXM...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s$   A22A6	9A6	!"CCCc                    t          j        dt          j                  }t          j                    | j        _        || j        j        _        d | _        t          j                    }|| j        _        t          j
        t          j                  5  | j                            d| j        | j        d           d d d            n# 1 swxY w Y   |j        dk    sJ d S )NFr6  r!   r  r_  r   r'   )r   r.   r/   SERVICE_UNAVAILABLEr2   r  r4   r_  rR  rn   ro   r   r   r3   r  r|   )rY   bad_responser  s      r]   test_post_bad_nonce_headz<ClientNetworkWithMockedResponseTest.test_post_bad_nonce_head  s	    ~K<[\\\!%!1!1.:+ ))#1 ]6-.. 	9 	9HMM%(1B(7  9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 (A------s   )CCCc                 Z    d | _         | j                            d| j        d d           d S )Nr!   r  r  )r_  r2   r3   r  rg   s    r]   test_new_nonce_uri_removedz>ClientNetworkWithMockedResponseTest.test_new_nonce_uri_removed  s.     eTXDXXXXXr_   N)r!  r"  r#  r$  r^   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r-   r_   r]   r  r  w  s       FF)N )N )NV  = = =7 7 75 5 5% % %
D D DD D DD D DD D D	D 	D 	D= = =/ / /. . .Y Y Y Y Yr_   r  __main__r'   )0r$  r   r   http.clientrN   r/   re   systypingr   unittestr   josepyrC   rn   r  acmer   r   r   rB  r   acme._internal.testsr	   r
   acme.clientr   r   load_vectorr   rW   JWKRSAloadr9   r   r   rL   TestCaser   JSONDeSerializabler&  r0  r  r!  exitmainargv__file__r-   r_   r]   <module>r     s       ! ! ! ! ! !  



                                                  . . . . . . * * * * * * % % % % % %            $y$^44%	%o66
k,y,-=>>??!x!EAAE##%%# #  ]Z ]Z ]Z ]Z ]Z8$ ]Z ]Z ]Z@
 
 
 
 
T4 
 
 
aU aU aU aU aU) aU aU aUH_Y _Y _Y _Y _Y(*; _Y _Y _YD zCH[V[!""
23344444 r_   