
    M/e                        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j8                  d      Z ej8                  d      Zej>                  jA                   ej8                  d            Z! ejD                  ddddejD                  jG                         d      Z$ G d de
jJ                        Z& G d dejN                        Z( G d de
jJ                        Z) G d de
jJ                        Z*e+dk(  r4 ejX                   ejZ                  ej\                  dd e/gz                yy)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&y$)%ClientV2TestzTests for acme.client.ClientV2.c           	      H   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        j!                               }t#        |      }t        j$                  di || _        t        j(                  |d      | _        d	}t        j,                  |d
z   t        j.                  t1        j2                  t5        j6                  d                  }t        j8                  ||      | _        t        j<                  t        j                  t        j                  d      |f      | _        t        j@                  | j>                  |      | _!        d| _"        tF        | _$        tK        | jH                  | j
                        | _&        | j&                  jO                  d      | _        d| _(        | j>                  jO                  t        j                  t        j                  d      t        jR                        | _*        t        j@                  | jT                  | jP                        | _+        t        jX                  | j>                  j                  | jT                  j                  ft        jR                  | jB                  jZ                  | jP                  fd      | _.        t        j^                  | j\                  d| jB                  | jV                  gt`              | _1        y )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        B/usr/lib/python3/dist-packages/acme/_internal/tests/client_test.pysetUpzClientV2Test.setUp)   s   2G>>#%)]]"$(MM!"--((? M##LLcnn&68S	//:':11GI	 E
''d"H,A,A..t~~=(? @A 00J0++**,,MCy"
 44- %t~~txx8||**4*HJjj''83F3F((0A4C** ( ,  55$"2"24 ^^..0F0FG** KKOOT-=-=>T	V

 ,,F KK6O    c                 ~   t         j                  | j                  _        | j                  j
                  j                         | j                  j                  _        | j                  j                  | j                  j                  d<   | j                  | j                  j                  | j                        k(  sJ y 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   sx    $/$7$7!*.))..*@*@*B',0IIMMj)yyDKK33DLLAAAAr_   c                    t         j                  | j                  _        | j                  j
                  j                         | j                  j                  _        | j                  j                  | j                  j                  d<   | j                  j                  j                  dddii       | j                  j                  | j                        j                   dk(  sJ y )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$7!*.))..*@*@*B',0IIMMj)""(N O$
 	 {{&&t||4EE?@ 	@ @r_   c                 V   t         j                  | j                  _        | j                  j
                  | j                  j                  d<   t        j                  t        j                        5  | j                  j                  | j                         d d d        y # 1 sw Y   y xY w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   sk    $/NN!,0IIMMj)]]6//0 	2KK##DLL1	2 	2 	2s   0&BB(c                    | j                   j                  | j                   j                  j                  d            }|j                  j                         | j                  j
                  _        t        j                  | j                  _	        | j                   j                  | j                  j                  d<   | j                  j                  | j                         |k(  sJ y )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    99++&&m&< , >*:*?*?*G*G*I'$/NN!,0IIMMj){{22499=AQQQQr_   c                 `   | j                   j                  | j                   j                  j                  t        j                              }|j                  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 y )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     KK..!!((0K0K(L / N*;*@*@*H*H*J'55dkkB %%444{{##..!333{{$((--">">q"A!"DDDDr_   c                    t        j                  | j                        }t        j                  |_        | j                  j                         |j                  _	        | j                  j                  |j                  d<   || j                  j                  _	        t        j                  | j                        }| j                  j                         |j                  _	        | j                   j                  |j                  d<   | j                  }| j"                  j                         |j                  _	        | j$                  j                  |j                  d<   t'        j(                  d      5 }||f|_        | j,                  j/                  t0              | j                  k(  sJ 	 d d d        y # 1 sw Y   y xY w)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%0%8%8"+/::+=+=+?(-1[[__z*%3"t}}5+/::+=+=+?(-1[[__z*--,0KK,?,?,A).2ll.>.>
+ZZ;< 	G@P,:O+L(;;((74;;FFF	G 	G 	Gs   48F66F?c                 X   d| j                   j                  i| j                  j                  d<   | j                   j                  j                         | j                  j                  _        t        j                  d       }| j                  j                  | j                   j                  |       t        j                  t        j                        5  | j                  j                  | j                   j                  j!                  d      |       d d d        y # 1 sw Y   y xY w)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    %*DKK,B,B$CD!*.++*:*:*B*B*D'#//4@$$T[[%5%5~F]]6223 	]KK(()9)9)@)@U)@)K^\	] 	] 	]s   AD  D)c                     t        j                  t        j                        5  | j                  j                  | j                  j                  t        j                  d              d d d        y # 1 sw Y   y xY w)Nr   )
rn   ro   r   ClientErrorrN   r   rF   r    r   r   rg   s    r]   "test_answer_challenge_missing_nextz/ClientV2Test.test_answer_challenge_missing_next   sW    ]]6--. 	dKK(()9)9:;Q;Q]a;bc	d 	d 	ds   AA22A;zacme.client.datetimec                    t        j                   ddd      |j                   j                  _        t         j                  |_        |j                   j                         t        j                  d      z   }t	        j
                  | j                        | j                  _        t	        j
                  | j                        | j                  _	        | j                  j                  | j                        | j                  k(  sJ | j                  j                  j                  | j                  |       | j                  j                  j                  | j                  |       y )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:2C2CD!R2P""/"*"4"4)226688;M;MVX;YY*.))*M'%)YYDKK%H"{{,,T[[9T[[HHH''??M^_""::4;;HYZr_   c                 P   t        j                   ddd      t        j                   ddd      t        j                   ddd      g}||j                   j                  _        | j                  j	                         | j
                  j	                         | j
                  j	                         g| j                  j                  _        t        j                  t        j                        5  | j                  j                  | j                  |d          d d d        y # 1 sw Y   y xY w)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#,,T1b9#,,T1b9; 2A"".JJ $++"5"5"79L9L9N*P& ]]6../ 	MKK++DKK9KL	M 	M 	Ms   )*DD%c                 <   t        j                   ddd      }| j                  j                  j                  t        j
                  t        j                  j                  d            }| j                  j                  t        j
                  |f      }|j                         | j                  j                  _        t        j                  t        j                         5  | j"                  j%                  | j&                  |       d d d        y # 1 sw Y   y xY w)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!!((0G0G/7~~/G/G/W ) Y

!!)@)@fY!W*/--/']]6112 	CKK++DKKB	C 	C 	Cs   "'DDc                 &   t        j                   ddd      }| j                  j                  t        j                        }t        j
                  || j                        }| j                  j                  | j                  |g      }| j                  j                         | j                  j                         |j                         f| j                  j                  _        | j                  j                  | j                  |      |k(  sJ y )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++83H3H+I"88T%5%57++DKK;Y+Z JJ $++"5"5"79O9O9Q*S&{{..t{{HEWWWr_   c                 |   | j                   j                  | j                  j                  d            }|j                         | j                  j
                  _        t        j                  t        j                        5  | j                  j                  | j                         d d d        y # 1 sw Y   y xY w)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__5K5KRW5K5X)Y*7*?*?*A']]6223 	*KKT[[)	* 	* 	*s   &B22B;c                    | j                   j                  dt        j                        }| j                  j                  |t
              }|j                         | j                  j                  _	        t
        | j                  _
        t        j                  ddd      }| j                  j                  | j                  |      |k(  sJ y )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')$$T1a0{{))$++x@NRRRr_   c                    | j                   j                  t        j                  j	                  d      t        j
                        }|j                         | j                  j                  _	        t        j                  ddd      }t        j                  t        j                        5  | j                  j!                  | j"                  |       d d d        y # 1 sw Y   y xY w)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'$$T1a0]]6//0 	>KK&&t{{H=	> 	> 	>s   ,'CC%c           	         | j                   j                  d t        j                        }|j	                         | j
                  j                  _        t        j                  t        j                  d      5  | j                  j                  | j                  t        j                  ddd             d d d        y # 1 sw Y   y xY w)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    

!!X5L5L!M*/--/']]6<</MN 	SKK&&t{{H4E4EdAq4QR	S 	S 	Ss   :<B??Cc                 *   t         j                   j                         t        j                  d      z
  }t        j                  t
        j                        5  | j                  j                  | j                  |       d d d        y # 1 sw Y   y xY w)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   se    $$((*X-?-?-KK]]6../ 	>KK&&t{{H=	> 	> 	>s   'B		Bc                    | j                   j                  dt        j                        }| j                  j                  |t
        t
        t
        g      }|j                         | j                  j                  _	        t
        | j                  _
        d| j                  j                  d<   t        j                  ddd      }| j                  j                  | j                  |d	      }| j                  j                   j#                  d
t$        j&                  t$        j&                         | j                  j                   j#                  dt$        j&                  t$        j&                         ||k(  sJ | j                  j                  d= | j                  j                  | j                  |d	      }||j                  g       k(  sJ y )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 +8*?*?*A')(Lf% $$T1a0{{))$++xZ^)_%%&G&*hhdhh 	& 	H%%&G&*hhdhh 	& 	H~%%%MM!!&){{))$++xZ^)_~,,,KKKKr_   c                     | j                   j                  t        j                  | j                         | j
                  j                  j                  | j                  d   t        j                  t        d          y )Nr   r   r   )rN   revoker	   CERTrK   r2   r3   r   rM   r   r   rL   rg   s    r]   test_revokezClientV2Test.test_revoke  sU    =--txx8--NN<($((,zBZ 	. 	\r_   c                    t         j                  | j                  _        t	        j
                  t        j                        5  | j                  j                  t        j                  | j                         d d d        y # 1 sw Y   y xY w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$B!]]6--. 	KK}11HH	 	 	s   5BB
c                    | j                   j                  | j                  j                  d<   | j                   j                  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                  j#                  d      j                         | j                  j                  _        y )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   ,0IIMMj)*.))..*@*@*B'yyDKK;;DIIFFFF{{&&222{{##..!333&&$((--*F*Fq*I!*LLLL*.))..*?*? +@ +	 	'r_   c                     t        j                  dt         j                  j                  d      i      | j                  _        | j                  j                         sJ y )Nr   Texternal_account_requiredr   	DirectoryMetarN   rM   r   rg   s    r]   #test_external_account_required_truez0ClientV2Test.test_external_account_required_true6  sO     ( 2 2H&&++d+K4
 ! {{44666r_   c                     t        j                  dt         j                  j                  d      i      | j                  _        | j                  j                         rJ y )Nr   Fr   r   rg   s    r]   $test_external_account_required_falsez1ClientV2Test.test_external_account_required_false=  sR     ( 2 2H&&++e+L4
 ! ;;88::::r_   c                 <    | j                   j                         rJ y 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                  j                  _        d| j                  j                  d<   | j                   | j                  j                  | j                         k(  sJ y )Nr   rb   )	r?   r    rd   r1   re   r4   r   rN   query_registrationrg   s    r]   test_query_registration_clientz+ClientV2Test.test_query_registration_clientG  s^    *.))..*@*@*B',Yj)yyDKK::499EEEEr_   c                    t        j                  d      5 }| j                  |_        | j                  j                  | j                         | j                  j                  j                  j                  | j                  j                  d d       | j                  j                  j                  j                          d d d        y # 1 sw Y   y xY w)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    ZZDE 	4'+||K$KKT\\*KKOO  88  $O 9 Q KKOO113	4 	4 	4s   B+C

Cc                     d| j                   j                  d<   t        j                  dddddd      | j                  j	                  | j                   d	      k(  sJ y )
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  s[    /Nm,  r2r2r:KK##T]]B#GH 	H Hr_   c                 H   t        j                   ddd      |j                   j                  _        t         j                  |_        d| j                  j
                  d<   t        j                   dddddd      | j                  j                  | j                  d      k(  sJ y )	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)$../6m,  q"aB7KK##T]]B#GH 	H Hr_   c                    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                  | j
                  d      k(  sJ y )	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)$..'/'8'8$/Om,  q"aB7KK##T]]B#GH 	H Hr_   c                 H   t        j                   ddd      |j                   j                  _        t         j                  |_        d| j                  j
                  d<   t        j                   dddddd      | j                  j                  | j                  d	      k(  sJ y )
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)$../3m,  q"aB7KK##T]]B#GH 	H Hr_   c                    t        j                   ddd      |j                   j                  _        t         j                  |_        t        j                   dddddd      | j                  j                  | j                  d      k(  sJ y )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  sx    ,4,=,=dAr,J)$..  q"aB7KK##T]]B#GH 	H Hr_   c                     t         j                         | j                  j                  _        t         j                         t        j                  d| j                        j                         k(  sJ y )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  sY    *6*>*>*@'++-""#<dhhGWWY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   &   sj   ):OxB	@2REG$]d TZZ&'
[ (
[ TZZ&'	M (	MC	X*
S>S>
L6\

"7;;F
	4H
 TZZ&'H (H TZZ&'H (H TZZ&'H (H TZZ&'H (HZr_   r   c                   (    e Zd Zd Zd Zed        Zy)MockJSONDeSerializablec                     || _         y 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    tzz""r_   c                      y r   r-   )clsjobjs     r]   	from_jsonz MockJSONDeSerializable.from_json  s    r_   N)r!  r"  r#  r(  r  classmethodr-  r-   r_   r]   r&  r&    s     #  r_   r&  c                   D   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y)ClientNetworkTestz$Tests for acme.client.ClientNetwork.c                    t        j                         | _        t        j                  t         j                  j                        | _        t        t        t        j                  | j                  d      | _
        t        j                  dt        j                        | _        i | j                  _        i | j                  _        y )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  sy    ..*>>t}}7L7LM )+ $KNNK " r_   c                 L    | j                   j                  | j                  u sJ y r   )r2   r4  rg   s    r]   	test_initzClientNetworkTest.test_init  s    xx""doo555r_   c                 B   | j                   j                  t        d      dd      }t        j                  j                  |      }t        j                  |j                  j                               ddik(  sJ |j                  j                  j                  dk(  sJ y )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    88(("5)E ) Cll%%h/zz#++,,./E5>AAA}}%%++u444r_   c                    ddi| j                   _        | j                   j                  t        d      dd      }t        j
                  j                  |      }t        j                  |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 y )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    !:.88(("5)E ) Cll%%h/zz#++,,./E5>AAA}}%%++u444}}%%))[888}}%%))V333r_   c                    d| j                   _        i | j                   j                  _        t	        j
                  d      5 }t        j                  |_        t        j                  t        j                        5  | j                  j                  | j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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     *,'ZZ>? 	89$($=$=I!v112 8((78	8 	88 8	8 	8s$   9B>;&B2!B>2B;	7B>>Cc                 r   d| j                   _        t        j                  j	                  ddd      j                         | j                   j                  _        t        j                  t        j                        5  | j                  j                  | j                          d d d        y # 1 sw Y   y xY w)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HH$$T]]3	4 	4 	4s   >&B--B6c                    d| j                   _        t        | j                   j                  _        t        j                  t        j                        5  | j                  j                  | j                          d d d        y # 1 sw Y   y xY w)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HH$$T]]3	4 	4 	4s   &BBc                    t         | j                  j                  _        | j                  j
                  dfD ]  }|| j                  j                  d<   t        j                  t        j                        5  | j                  j                  | j                  | j                  j
                         d d d         y # 1 sw Y   xY w)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& HH66> 	9K4?DMM!!.1v112 9((!XX77 ) 99 9	99 9s   7<B>>C	c                    t         | j                  j                  _        | j                  j
                  dfD ]O  }|| j                  j                  d<   | j                  | j                  j                  | j                        k(  rOJ  y 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& HH66> 	LK4?DMM!!.1==DHH$<$<T]]$KKKK	Lr_   zacme.client.loggerc                 D   i | j                   j                  _        d| j                   j                  d<   | j                   | j                  j                  | j                   d      k(  sJ 	 |j                  j                  dd       t        d      # t        $ r Y y w xY w)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MM(: !9 !< < 	< <	00N1  & ' 	'  		s   ,B 	BBc                    i | j                   j                  _        d| j                   j                  d<   | j                   | j                  j                  | j                   d      k(  sJ |j                  j                  dd       y )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  sx    *,'0<n-}} 8 8MM(: !9 !< < 	< <,,J	
r_   c                    d| j                   _        d| j                   _        t        j                  t
        j                        5  | j                  j                  | j                          d d d        y # 1 sw Y   y xY w)NFi  )	r1   r   r   rn   ro   r   rp   r2   rR  rg   s    r]   test_check_response_conflictz.ClientNetworkTest.test_check_response_conflict  sW     $'!]]6//0 	4HH$$T]]3	4 	4 	4s   &A55A>c                    i | j                   j                  _        | j                  j                  dfD ]O  }|| j                   j
                  d<   | j                   | j                  j                  | j                         k(  rOJ  y re  )r1   re   r4   r2   r`  r   rR  ra  s     r]   test_check_response_jobjz*ClientNetworkTest.test_check_response_jobj  sm    *,' HH66> 	LK4?DMM!!.1==DHH$<$<T]]$KKKK	Lr_   c           	         t        j                         | j                  _        | j                  | j                  j                  j
                  _        | j                  | j                  j                  dddd      k(  sJ | j                  j                  j
                  j                  dddt         j                  t         j                  t         j                  d       y )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HHTXXtxxU 	9 	Lr_   c           	      z   t        j                         | j                  _        t        j                  dt        j
                  d      | j                  j                  j                  _        | j                  j                  dddt         j                  ddd	i
       |j                  j                  dddd       y )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  - 	v'<e((:Q/R 	 	T,,3S	r_   c           
         t        j                         | j                  _        | j                  | j                  j                  j
                  _        | j                  | j                  j                  ddddd      k(  sJ | j                  j                  j
                  j                  dddt         j                  t         j                  t         j                  dd       y )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  88)5HHTXXtxxeQV 	9 	Xr_   c                    dD ]  }t        j                         | j                  _        | j                  | j                  j                  j
                  _        || j                  _        | j                  | j                  j                  dd      k(  sJ | j                  j                  j
                  j                  dd|t         j                  t         j                          y )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    ! 		4F#~~/DHH48MMDHH$$1"(DHH==&&u.CDE E EHH$$<<,V$(( = 4		4r_   c           	         t        j                         | j                  _        | j                  j	                  ddddi       | j                  j                  j
                  j                  ddt         j                  t         j                  ddd       | j                  j	                  ddd	d
i       | j                  j                  j
                  j                  ddt         j                  t         j                  d	d
i       y )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  88(HH#5eD 	9 	F
 	u&;(4f'= 	 	?  33(88TXXf7M 	4 	Or_   c                 b   t        j                         | j                  _        | j                  j	                  ddddi       | j                  j                  j
                  j                  t         j                  t         j                  t         j                  t         j                  d       y )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  sw    >>+u&;(-u~ 	 	7  88HHdhhtxx 	9 	r_   Nc                     t        j                         }|||j                  _        || j                  _        | `|j                  j                          y r   )r   r.   closer   r2   r  r   )rY   close_exceptionsesss      r]   test_delzClientNetworkTest.test_delR  sA    ~~&%4DJJ"H

**,r_   c                 .    | j                  t               y 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                  j                  dd       d d d        y # 1 sw Y   y xY w)Nr  r!   )	requests
exceptionsRequestExceptionr  r   rn   ro   r2   r  )rY   mock_requestss     r]   test_requests_error_passthroughz1ClientNetworkTest.test_requests_error_passthrough_  sk    #+#6#6 ,4,?,?,P,P)]]8..??@ 	1HH""5%0	1 	1 	1s   ,BBc                    	 | j                   j                  dd       y # t        $ r}dt        |      k(  sJ Y d }~y d }~wt        j
                  j                  $ r+}dt        |      v sdt        |      v sJ Y d }~y Y d }~y 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HH""5*RS  	<258V< < < ""22 	U*c!f48JcRSf8TTT8T4	Us    	B= 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5	48449L TZZ$%' &'  TZZ$%	
 &	
4LL TZZ$%
 &
X4O -& TZZ&'1 (1Ur_   r0  c                   j    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y)#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                  _        y )N)r   r3  Tr6  Fs   Nonces   Nonce2s   Nonce3c                     d|vsJ | d   }| d   }|dk(  r|dk7  rj                   }nj                  }j                  rEj                  j                  j                  j                         j                         i|_        |S 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!WFq'CC?$:55==$$HH00))--/668$: 
 O $& 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$KNNK "  %%)^^+"@"@&B"-/""*>>#>>+ MM66 NN8$NN9%t~~i'@B !% 2	& 6:^^$6& 	&!2#'#6#6  $D<L<L Mr_   c                     | 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  sQ    }}(((  L000}} $}}r_   c                     | j                   | j                  j                  ddd      k(  sJ | j                  j	                  dddd       y )Nrx  r   ry  rz  rw  )r  r2   headr  r   rg   s    r]   	test_headz-ClientNetworkWithMockedResponseTest.test_head  sX    ))TXX]]!5e .; .5 5 	5 511)5e 	2 	=r_   c                     | j                   | j                  j                  ddd      k(  sJ | j                  j	                  dddd       y )Nr  r   ry  rz  rw  )r1   r2   r  r  r   rg   s    r]   test_head_v2z0ClientNetworkWithMockedResponseTest.test_head_v2  sU    }}U !. !/ / 	/ /11OU 	2 	7r_   c                     | j                   | j                  j                  d| j                  d      k(  sJ | j                   j                  sJ | j
                  j                  ddd       y )Nrx  ry  )r_  r{  r  rz  )r1   r2   r5   r_  r  r  r   rg   s    r]   test_getz,ClientNetworkWithMockedResponseTest.test_get  sq    }}!0A0Au !- !N N 	N N}}$$$$11(e 	2 	5r_   c                     | j                   j                  | _        | j                  | j                   j	                  d| j
                        k(  sJ | j                  j                  sJ y )Nr!   )r2   JOSE_CONTENT_TYPEr_  r1   r3   r  r  rg   s    r]   test_post_no_content_typez=ClientNetworkWithMockedResponseTest.test_post_no_content_type  sL     HH66}}eTXX >>>>}}$$$$r_   c                    | j                   | j                  j                  d| j                  | j                        k(  sJ | j                   j
                  sJ | j                  j                  j                  | j                  t        j                  | j                  j                               d       g | _        t        j                  t        j                         5  | j                  j                  d| j                  | j                         d d d        | j                  j                  j#                  | j                  t        j                  | j                  j                               d       y # 1 sw Y   fxY w)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   }}488$*;*; !. != = 	= =}}$$$$55HHdnnT__%8%8%:;U	D !#]]6../ 	KHHMM%8I8IMJ	K00HHdnnT__%8%8%:;U	D	K 	Ks    3E88Fc                    dt        j                  d      g| _        t        j                  t
        j                        5  | j                  j                  d| j                  | j                         d d d        y # 1 sw Y   y xY w)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  sh    !%t~~g'> ?]]6??+ 	DHHMM%((1B1B  D	D 	D 	D    3A<<Bc                    t        j                  d      dg| _        t        j                  t
        j                        5  | j                  j                  d| j                  | j                         d d d        y # 1 sw Y   y xY w)Nr  r  r!   r^  r  rg   s    r]   #test_post_wrong_post_response_noncezGClientNetworkWithMockedResponseTest.test_post_wrong_post_response_nonce  sh    !%!8$ ?]]6??+ 	DHHMM%((1B1B  D	D 	D 	Dr  c                 j   t        j                         }t        j                  j	                  d      |_        || j                  _        t        j                  t        j                        5  | j                  j                  d| j                  | j                         d d d        y # 1 sw Y   y xY w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" $2 ]]8>>* 	DHHMM%((1B1B  D	D 	D 	Ds   -3B))B2c                    t        j                         }t        j                  j	                  d      | j
                  g|_        || j                  _        t        j                  t        j                        5  | j                  j                  d| j                  | j                         d d d        y # 1 sw Y   y xY w)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    )&.nn&>&>{&K&*mm&5" $2 ]]8>>* 	DHHMM%((1B1B  D	D 	D 	Ds   93B55B>c                    t        j                         }t        j                  j	                  d      | j
                  g|_        | j
                  | j                  j                  d| j                  | j                        k(  sJ y 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  sn    NN$	!)!9!9*!E&*mm!5	 }}488$*;*; !. != = 	= =r_   c                     t         j                  j                  | j                  _        | j
                  j                  | j
                  j                  fD ]A  }t        j                  t         j                  j                        5   |dd       d d d        C t        j                  t         j                  j                        5  | j
                  j                  d| j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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  s    (0(;(;(L(L%hhmmTXX\\1 	%Fx22CCD %ue$% %	% ]]8..??@ 	/HHMM%TXXM.	/ 	/% %	/ 	/s   
C8(D8D	Dc                    t        j                  dt        j                        }t        j                         | j                  _        || j                  j
                  _        d | _        t        j                         }|| j                  _        t        j                  t        j                        5  | j                  j                  d| j                  | j                  d       d d d        |j                  dk(  sJ y # 1 sw Y   xY w)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 ]]6--. 	9HHMM%((1B1B(7  9	9 ((A---		9 	9s   34DD
c                 d    d | _         | j                  j                  d| j                  d d       y )Nr!   r  r  )r_  r2   r3   r  rg   s    r]   test_new_nonce_uri_removedz>ClientNetworkWithMockedResponseTest.test_new_nonce_uri_removed  s&     eTXXD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  sX    F)NV=75%
DDDD	D=/.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     sM      !  
            . * %  $y$$^4%	%%o6
kk,y,,-=>?!x!!EAAE##%# ]Z8$$ ]Z@
T44 
aU)) aUH_Y(*;*; _YD zCHH[V[[!"
234 r_   