a ‚oeê‡ã@s€dZddlZddlZddlmZddlZddlZddlm Z ddl Z ddl m Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZe d ¡Ze d¡Ze j  e d¡¡Z!e "ddddej" #¡dœ¡Z$Gdd„de j%ƒZ&Gdd„de j'ƒZ(Gdd„de j%ƒZ)Gdd„de j%ƒZ*e+dk�r|e ,e -ej.dd…e/g¡¡dS)zTests for acme.client.éN)ÚDict)Úmock)Ú challenges)Úerrors)Újws)Úmessages)Ú messages_test)Ú test_util)Ú ClientNetwork)ÚClientV2z cert-san.pemz csr-mixed.pemzrsa512_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ÚnewNonceZnewOrderÚ revokeCertÚmetac@sTeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z e  d¡dd„ƒZe  d¡dd„ƒZdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Z d9d:„Z!e  d¡d;d<„ƒZ"e  d¡d=d>„ƒZ#e  d¡d?d@„ƒZ$e  d¡dAdB„ƒZ%dCdD„Z&dES)FÚ ClientV2TestzTests for acme.client.ClientV2.cCsªtjdtjiid�|_t ¡|_|j|jj_|j|jj_t j t j dd�|_ d|_ t j|j t ¡d�}t|ƒ}t jfi|¤Ž|_t j|dd�|_d }t j|d t jtjt d ¡d �d �}t j||d�|_t jt j t j dd�|fd�|_t j |j|d�|_!d|_"t#|_$t%|j$|jƒ|_&|jj'dd�|_d|_(|jj't j t j dd�t j)d�|_*t j |j*|j(d�|_+t j,|jj |j*j ft j)|j!j-|j(fdd�|_.t j/|j.d|j!|j+gt0d�|_1dS)NT)ÚokÚ status_codeÚheadersÚlinksz example.com)ÚtypÚvalue)zmailto:cert-admin@example.comztel:+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ÚstatusZchall)rÚ authzr_uri)Ú identifierré)Zterms_of_service_agreedz-https://www.letsencrypt-demo.org/acme/authz/2zwww.example.com)r!rz=https://www.letsencrypt-demo.org/acme/acct/1/order/1/finalize)Z identifiersrÚauthorizationsÚfinalizez4https://www.letsencrypt-demo.org/acme/acct/1/order/1)rrr#Zcsr_pem)2rÚ MagicMockÚ http_clientÚOKÚresponseÚnetÚpostÚ return_valueÚgetrZ IdentifierZIDENTIFIER_FQDNr!rZ RegistrationÚKEYZ public_keyÚdictZNewRegistrationÚnew_regZRegistrationResourceÚregrZ ChallengeBodyÚ STATUS_VALIDrZDNSÚjoseÚ b64decodeZChallengeResourceÚchallrZ AuthorizationÚauthzÚAuthorizationResourceÚauthzrÚrsnÚ DIRECTORY_V2Ú directoryr ÚclientÚupdateÚ authzr_uri2ZSTATUS_PENDINGÚauthz2Úauthzr2ZOrderrÚorderZ OrderResourceÚ CSR_MIXED_PEMÚorderr)ÚselfZregZthe_argr Úchallb©rEúAC:\Program Files\Certbot\pkgs\acme\_internal\tests\client_test.pyÚsetUp)sz ÿ   ÿ ÿÿ ÿþÿÿýÿ ÿþÿ ü ýzClientV2Test.setUpcCsHtj|j_|jj ¡|jj_|jj |jj d<|j|j   |j ¡ksDJ‚dS©NÚLocation)r&ÚCREATEDr(rr0rÚto_jsonÚjsonr+rrr;Ú new_accountr/©rCrErErFÚtest_new_accountes zClientV2Test.test_new_accountcCs^tj|j_|jj ¡|jj_|jj |jj d<|jj   dddii¡|j  |j¡jdksZJ‚dS)NrIzterms-of-serviceÚurlz$https://www.letsencrypt-demo.org/tos)r&rJr(rr0rrKrLr+rrrr<r;rMr/Zterms_of_servicerNrErErFÚtest_new_account_tos_linkls ÿÿz&ClientV2Test.test_new_account_tos_linkcCsXtj|j_|jj|jjd<t t j ¡�|j   |j ¡Wdƒn1sJ0YdSrH)r&r'r(rr0rrÚpytestÚraisesrÚ ConflictErrorr;rMr/rNrErErFÚtest_new_account_conflictxs z&ClientV2Test.test_new_account_conflictcCs^|jj|jjjdd�d�}|j ¡|jj_tj|j_ |jj |jj d<|j   |j¡|ksZJ‚dS)NZ deactivated©r©rrI)r0r<rrKr(rLr+r&r'rrrr;Zdeactivate_registration)rCZdeactivated_regrrErErFÚtest_deactivate_account~sÿ z$ClientV2Test.test_deactivate_accountcCs€|jj|jjjtjd�d�}|j ¡|jj_|j   |j¡}|j|jksJJ‚|j j j j dks^J‚|jj|j j jddvs|J‚dS)NrVrWr"r)r7r<rrZSTATUS_DEACTIVATEDrKr(rLr+r;Zdeactivate_authorizationr)r*Ú call_countrÚcall_args_list)rCZdeactivated_authzr7rErErFÚtest_deactivate_authorization†sÿz*ClientV2Test.test_deactivate_authorizationcCsÒt |j¡}tj|_|j ¡|j_ |j j |j d<||j j_ t |j¡}|j ¡|j_ |jj |j d<|j}|j ¡|j_ |jj |j d<t d¡�0}||f|_|j t¡|j ks°J‚Wdƒn1sÄ0YdS)NrIz!acme.client.ClientV2._post_as_get)ÚcopyÚdeepcopyr(r&rJrr@rKrLr+rBrrr)r*r5r7r>r?rÚpatchÚ side_effectr;Z new_orderrA)rCZorder_responseZauthz_responseZauthz_response2Zmock_post_as_getrErErFÚtest_new_order�s     zClientV2Test.test_new_ordercCsŽd|jji|jjd<|jj ¡|jj_tj dd�}|j   |jj|¡t   tj¡�*|j   |jjjdd�|¡Wdƒn1s€0YdS)NrPZup©Z validationÚfoo)r)r4r r(rrrKrLr+rÚ DNSResponser;Úanswer_challengerRrSrÚUnexpectedUpdater<)rCZchall_responserErErFÚtest_answer_challege¡s  z!ClientV2Test.test_answer_challegecCsJt tj¡�*|j |jjtj dd�¡Wdƒn1s<0YdS)Nra) rRrSrÚ ClientErrorr;rdr4rrrcrNrErErFÚ"test_answer_challenge_missing_nextªsz/ClientV2Test.test_answer_challenge_missing_nextzacme.client.datetimecCs–t ddd¡|jj_tj|_|j ¡tjdd�}tj|jd�|j_tj|jd�|j_ |j  |j¡|jksnJ‚|jj  |j|¡|jj   |j|¡dS)NéâéééZ©Zseconds©r+) ÚdatetimeÚnowr+Ú timedeltarZMockrBr;Úpoll_authorizationsÚfinalize_orderZpoll_and_finalizeÚassert_called_once_with)rCÚ mock_datetimeZexpected_deadlinerErErFÚtest_poll_and_finalize®sz#ClientV2Test.test_poll_and_finalizecCs˜t ddd¡t ddd¡t ddd¡g}||jj_|j ¡|j ¡|j ¡g|jj_t  t j ¡�$|j   |j|d¡Wdƒn1sŠ0YdS)Nrirjrkéér")rorpr_r5rKr>r(rLrRrSrÚ TimeoutErrorr;rrrB)rCruZnow_side_effectrErErFÚ test_poll_authorizations_timeout»s   þ ÿ z-ClientV2Test.test_poll_authorizations_timeoutcCsŒt ddd¡}|jjjtjtj d¡d�}|jjtj|fd�}|  ¡|j j _ t  tj¡� |j |j|¡Wdƒn1s~0YdS)Né'é Ú unauthorized)rÚerror)rr)ror4rr<rÚSTATUS_INVALIDÚErrorÚ with_coder5rKr(rLr+rRrSrZValidationErrorr;rrrB)rCÚdeadlinerDr5rErErFÚ test_poll_authorizations_failureÇs  ÿz-ClientV2Test.test_poll_authorizations_failurecCs~t ddd¡}|jjtjd�}tj||jd�}|jj|j|gd�}|j   ¡|j  ¡|  ¡f|j j _ |j |j|¡|kszJ‚dS)Nr{r|rVr)r#)ror>r<rr1r6r=rBr7r5rKr(rLr_r;rr)rCr‚Zupdated_authz2Zupdated_authzr2Úupdated_orderrrErErFÚ test_poll_authorizations_successÑsÿÿ z-ClientV2Test.test_poll_authorizations_successcCsd|jj|jjdd�d�}| ¡|jj_t t j ¡�|j   |j ¡Wdƒn1sV0YdS)Nrb©r)r!)r5r<r!rKr(rLr+rRrSrrer;Úpollr7)rCZ updated_authzrErErFÚtest_poll_unexpected_updateÜsz(ClientV2Test.test_poll_unexpected_updatecCsb|jjdtjd�}|jj|td�}| ¡|jj_ t|j_ t   ddd¡}|j   |j|¡|ks^J‚dS)Nú+https://www.letsencrypt-demo.org/acme/cert/©Z certificater)rÚ fullchain_pemr{r|)r@r<rr1rBÚ CERT_SAN_PEMrKr(rLr+Útextror;rs)rCÚ updated_orderr„r‚rErErFÚtest_finalize_order_successâsþz(ClientV2Test.test_finalize_order_successcCsv|jjtj d¡tjd�}| ¡|jj_ t   ddd¡}t   t j¡� |j |j|¡Wdƒn1sh0YdS)Nr}©r~rr{r|)r@r<rr€r�rrKr(rLr+rorRrSrZ IssuanceErrorr;rsrB)rCrŽr‚rErErFÚtest_finalize_order_errorîs þz&ClientV2Test.test_finalize_order_errorc Csn|jjdtjd�}| ¡|jj_tj t j dd��*|j   |jt ddd¡¡Wdƒn1s`0YdS)Nr�zThe certificate order failed)Úmatchr{r|)r@r<rrrKr(rLr+rRrSrr€r;rsrBro)rCr@rErErFÚ"test_finalize_order_invalid_statusøsz/ClientV2Test.test_finalize_order_invalid_statuscCsVtj ¡tjdd�}t tj¡� |j |j |¡Wdƒn1sH0YdS)Né<rm) rorprqrRrSrryr;rsrB)rCr‚rErErFÚtest_finalize_order_timeoutÿsz(ClientV2Test.test_finalize_order_timeoutcCsÞ|jjdtjd�}|jj|tttgd�}| ¡|jj_ t|j_ d|jj d<t   ddd¡}|j j|j|dd �}|jjjd tjtjd �|jjjd tjtjd �||ks¨J‚|jj d=|j j|j|dd �}||jgd �ksÚJ‚dS)Nr‰rŠ)rr‹Úalternative_fullchains_pemz—;rel="alternate", ;rel="index", ;title="foo";rel="alternate"ZLinkr{r|T)Zfetch_alternative_chainszhttps://example.com/acme/cert/1©Ú new_nonce_urlzhttps://example.com/acme/cert/2)r–)r@r<rr1rBrŒrKr(rLr+r�rror;rsr)r*Zassert_any_callrÚANY)rCrŽr„r‚ZresprErErFÚtest_finalize_order_alt_chainss2þÿþ  ÿ ÿ  z+ClientV2Test.test_finalize_order_alt_chainscCs6|j tj|j¡|jjj|jdt j t dd�dS)Nrrr—) r;ÚrevokerÚCERTr8r)r*rtr:rr™r9rNrErErFÚ test_revokesÿzClientV2Test.test_revokecCsLtj|j_t tj¡�"|j  t j |j ¡Wdƒn1s>0YdS©N) r&ÚMETHOD_NOT_ALLOWEDr(rrRrSrrgr;r›rrœr8rNrErErFÚ#test_revoke_bad_status_raises_error$s   ÿz0ClientV2Test.test_revoke_bad_status_raises_errorcCsš|jj|jjd<|jj ¡|jj_|j|j  |j¡ks:J‚|jj j dusLJ‚|jj j j dks`J‚tj|j j jddvs|J‚|jjjdd� ¡|jj_dS)NrIrjrrE)r)r0rr(rrrKrLr+r;Zupdate_registrationr)Úaccountr*rYr9r rZr<rNrErErFÚtest_update_registration*sÿz%ClientV2Test.test_update_registrationcCs.t dtjjdd�i¡|j_|j ¡s*J‚dS)NrT©Úexternal_account_required©rÚ DirectoryÚMetar;r:r¤rNrErErFÚ#test_external_account_required_true6sÿ z0ClientV2Test.test_external_account_required_truecCs.t dtjjdd�i¡|j_|j ¡r*J‚dS)NrFr£r¥rNrErErFÚ$test_external_account_required_false=sÿ z1ClientV2Test.test_external_account_required_falsecCs|j ¡rJ‚dSrž)r;r¤rNrErErFÚ&test_external_account_required_defaultDsz3ClientV2Test.test_external_account_required_defaultcCs:|jj ¡|jj_d|jjd<|j|j |j¡ks6J‚dS)NrrI) r0rrKr(rLr+rr;Zquery_registrationrNrErErFÚtest_query_registration_clientGs z+ClientV2Test.test_query_registration_clientcCslt d¡�N}|j|_|j |j¡|jjjj|jj ddd�|jjj   ¡Wdƒn1s^0YdS)Nz*acme.client.ClientV2._authzr_from_responser r—) rr^r?r+r;r‡r)r*rtrr,Zassert_not_called)rCZ mock_clientrErErFÚtest_post_as_getLs  þzClientV2Test.test_post_as_getcCs:d|jjd<t dddddd¡|jj|jdd �ks6J‚dS) NzFri, 31 Dec 1999 23:59:59 GMTú Retry-AfteriÏé ééé;é ©r(Údefault)r(rror;Ú retry_afterrNrErErFÚtest_retry_after_dateWs ÿz"ClientV2Test.test_retry_after_datecCsVt ddd¡|jj_tj|_d|jjd<t dddddd¡|jj|jdd�ksRJ‚dS) NéßééZfoooor­rr²r³©rorpr+rqr(rr;rµ©rCZdt_mockrErErFÚtest_retry_after_invalid\s  ÿz%ClientV2Test.test_retry_after_invalidcCs`t ddd¡|jj_tj|_tj|j_d|jjd<t dddddd¡|jj|jdd�ks\J‚dS) Nr·r¸r¹zTue, 116 Feb 2016 11:50:00 MSTr­rr²r³) rorpr+rqr_r(rr;rµr»rErErFÚtest_retry_after_overflowes  ÿz&ClientV2Test.test_retry_after_overflowcCsVt ddd¡|jj_tj|_d|jjd<t dddddd¡|jj|jdd �ksRJ‚dS) Nr·r¸r¹Z50r­ré2r²r³rºr»rErErFÚtest_retry_after_secondsos  ÿz%ClientV2Test.test_retry_after_secondscCsJt ddd¡|jj_tj|_t dddddd¡|jj|jdd�ksFJ‚dS)Nr·r¸r¹rr²r³)rorpr+rqr;rµr(r»rErErFÚtest_retry_after_missingxs ÿz%ClientV2Test.test_retry_after_missingcCs0t ¡|jj_t ¡t d|j¡ ¡ks,J‚dS)Nzhttps://example.com/dir) r9rKr(rLr+Úto_partial_jsonr Z get_directoryr)rNrErErFÚtest_get_directory€sÿzClientV2Test.test_get_directoryN)'Ú__name__Ú __module__Ú __qualname__Ú__doc__rGrOrQrUrXr[r`rfrhrr^rvrzrƒr…rˆr�r‘r“r•ršr�r r¢r¨r©rªr«r¬r¶r¼r½r¿rÀrÂrErErErFr&sP<               rc@s(eZdZdd„Zdd„Zedd„ƒZdS)ÚMockJSONDeSerializablecCs ||_dSržr†)rCrrErErFÚ__init__ˆszMockJSONDeSerializable.__init__cCs d|jiS)Nrbr†rNrErErFrÁ‹sz&MockJSONDeSerializable.to_partial_jsoncCsdSržrE)ÚclsZjobjrErErFÚ from_jsonŽsz MockJSONDeSerializable.from_jsonN)rÃrÄrÅrÈrÁÚ classmethodrÊrErErErFrdžsrÇc@sòeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z e  d¡dd„ƒZe  d¡dd„ƒZdd„Zdd„Zdd„Ze  d¡dd „ƒZd!d"„Zd#d$„Zd%d&„Zd'd(„Zd3d*d+„Zd,d-„Ze  d.¡d/d0„ƒZd1d2„Zd)S)4ÚClientNetworkTestz$Tests for acme.client.ClientNetwork.cCsXt ¡|_tjtjjd�|_tttj |jdd�|_ tjdt j d�|_ i|j _i|j _dS)Nrnúacme-python-test)rÚalgÚ verify_sslZ user_agentT©rr)rr%rÏÚsentinelÚwrappedZ wrap_in_jwsr r-r2ZRS256r)r&r'r(rrrNrErErFrG–s  þzClientNetworkTest.setUpcCs|jj|jusJ‚dSrž)r)rÏrNrErErFÚ test_init¢szClientNetworkTest.test_initcCsT|jjtdƒddd�}tj |¡}t |j  ¡¡ddiks>J‚|j j j dksPJ‚dS)NrbóTgrP©ÚnoncerP) r)Ú _wrap_in_jwsrÇÚacme_jwsÚJWSÚ json_loadsrLÚloadsÚpayloadÚdecodeÚ signatureÚcombinedrÖ©rCZjws_dumprrErErFÚtest_wrap_in_jws¥s  ÿ z"ClientNetworkTest.test_wrap_in_jwscCs„ddi|j_|jjtdƒddd�}tj |¡}t |j   ¡¡ddiksJJ‚|j j j dks\J‚|j j jdksnJ‚|j j jdks€J‚dS)Nrzacct-urirbrÔrPrÕ)r)r¡r×rÇrØrÙrÚrLrÛrÜrÝrÞrßrÖZkidrPràrErErFÚtest_wrap_in_jws_v2­s  ÿ z%ClientNetworkTest.test_wrap_in_jws_v2c Cs‚d|j_i|jj_t d¡�R}tj|_t   t j ¡�|j  |j¡Wdƒn1sV0YWdƒn1st0YdS)NFz$acme.client.messages.Error.from_json)r(rrLr+rr^r2ZDeserializationErrorr_rRrSrrgr)Ú_check_response)rCrÊrErErFÚ(test_check_response_not_ok_jobj_no_error¸s   z:ClientNetworkTest.test_check_response_not_ok_jobj_no_errorcCsbd|j_tjjdddd� ¡|jj_t  tj¡�|j   |j¡Wdƒn1sT0YdS)NFZserverInternalrbz some title)ZdetailÚtitle) r(rrr€r�rKrLr+rRrSr)rãrNrErErFÚ%test_check_response_not_ok_jobj_errorÁs ÿz7ClientNetworkTest.test_check_response_not_ok_jobj_errorcCsPd|j_t|jj_t tj¡�|j   |j¡Wdƒn1sB0YdS)NF) r(rÚ ValueErrorrLr_rRrSrrgr)rãrNrErErFÚ"test_check_response_not_ok_no_jobjÉs z4ClientNetworkTest.test_check_response_not_ok_no_jobjc Csnt|jj_|jjdfD]R}||jjd<t t j ¡�&|jj |j|jjd�Wdƒq1s^0YqdS)Nrbú Content-Type©Ú content_type) rçr(rLr_r)ÚJSON_CONTENT_TYPErrRrSrrgrã©rCZ response_ctrErErFÚ*test_check_response_ok_no_jobj_ct_requiredÐs   ÿz.send_request)r_rn)r r)rr%r&r'r(rrÚcheckedrŸr#ÚobjZ wrapped_objrÑrër2Ú b64encodeÚ all_noncesr$rr)Úcheck_responserãr×)rCr)rErNrFrGzs,ÿ   þ ÿ z)ClientNetworkWithMockedResponseTest.setUpcCs6|j|ksJ‚|j|ksJ‚|jjs(J‚d|j_|jS)NT)r(rërr*)rCr(rërErErFr.¥s  z2ClientNetworkWithMockedResponseTest.check_responsecCs4|j|jjdddd�ksJ‚|jjddddd�dS)Nrürbrýrþrû)r#r)Úheadr)rtrNrErErFÚ test_head­s  ÿ ÿz-ClientNetworkWithMockedResponseTest.test_headcCs4|j|jjdddd�ksJ‚|jjddddd�dS)Nr"rbrýrþrû)r(r)r/r)rtrNrErErFÚ test_head_v2³s  ÿ ÿz0ClientNetworkWithMockedResponseTest.test_head_v2cCs@|j|jjd|jdd�ksJ‚|jjs*J‚|jjdddd�dS)Nrürý)rërÿr rþ)r(r)r,rër*r)rtrNrErErFÚtest_get¹s ÿ  ÿz,ClientNetworkWithMockedResponseTest.test_getcCs4|jj|_|j|j d|j¡ks$J‚|jjs0J‚dS)Nr)r)ZJOSE_CONTENT_TYPErër(r*r+r*rNrErErFÚtest_post_no_content_typeÀs z=ClientNetworkWithMockedResponseTest.test_post_no_content_typecCs¸|j|jjd|j|jd�ks J‚|jjs,J‚|jj |jt  |j   ¡¡d¡g|_ t  tj¡�&|jjd|j|jd�Wdƒn1sŠ0Y|jj |jt  |j   ¡¡d¡dS)Nrrê)r(r)r*r+rër*r×rtr2r3r-r%r$rRrSrZ MissingNoncerôrNrErErFÚ test_postÅs  ÿ  ÿ4ÿz-ClientNetworkWithMockedResponseTest.test_postcCsVdt d¡g|_t tj¡�&|jjd|j |j d�Wdƒn1sH0YdS)Nófógoodrrê© r2r,r$rRrSrZBadNoncer)r*r+rërNrErErFÚtest_post_wrong_initial_nonceÓs ÿzAClientNetworkWithMockedResponseTest.test_post_wrong_initial_noncecCsVt d¡dg|_t tj¡�&|jjd|j |j d�Wdƒn1sH0YdS)Nr6r5rrêr7rNrErErFÚ#test_post_wrong_post_response_nonceÙs ÿzGClientNetworkWithMockedResponseTest.test_post_wrong_post_response_noncecCsdt ¡}tj d¡|_||j_t  tj¡�&|jj d|j |j d�Wdƒn1sV0YdS©NZbadNoncerrê) rr%rr€r�r_r)rãrRrSr*r+rë©rCr.rErErFÚtest_post_failed_retryßsÿz:ClientNetworkWithMockedResponseTest.test_post_failed_retrycCsjt ¡}tj d¡|jg|_||j_t   tj¡�&|jj d|j |j d�Wdƒn1s\0YdS)NZ malformedrrê)rr%rr€r�r(r_r)rãrRrSr*r+rër;rErErFÚtest_post_not_retriedés ÿÿz9ClientNetworkWithMockedResponseTest.test_post_not_retriedcCs@t ¡}tj d¡|jg|_|j|jjd|j |j d�ksClientNetworkWithMockedResponseTest.test_post_successful_retryc Csžtjj|j_|jj|jjfD]<}t  tjj¡�|ddƒWdƒq1sN0Yqt  tjj¡�"|jj d|j d�Wdƒn1s�0YdS)Nr r)r+) rrrr)r_r)r/r,rRrSr*r+)rCr(rErErFÚ$test_head_get_post_error_passthroughýs  *zHClientNetworkWithMockedResponseTest.test_head_get_post_error_passthroughcCs’tjdtjd�}t ¡|j_||jj_d|_t ¡}||j_t   t j ¡�(|jj d|j|jdd�Wdƒn1sv0Y|jdksŽJ‚dS)NFrÐrr"©rër˜r")rr%r&ZSERVICE_UNAVAILABLEr)rr+rërãrRrSrrgr*r+rY)rCZ bad_responser.rErErFÚtest_post_bad_nonce_heads  þ$zClientNetworkWithMockedResponseTest.test_new_nonce_uri_removedN)rÃrÄrÅrÆrGr.r0r1r2r3r4r8r9r<r=r>r?rArBrErErErFr!ws +   r!Ú__main__r")0rÆr\roZ http.clientr;r&rLÚsysÚtypingrZunittestrZjosepyr2rRrZacmerrrrØrZacme._internal.testsrr Z acme.clientr r Z load_vectorrŒrAZJWKRSAÚloadr-r¦r§r9ZTestCaserZJSONDeSerializablerÇrÌr!rÃÚexitÚmainÚargvÚ__file__rErErErFÚsN             û b e#