a ‚oe@µã@sldZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZddlmmZe d ¡Ze d ¡ZGdd„dejƒZ Gdd„dejƒZ!Gdd„dejƒZ"Gdd„de"ƒZ#Gdd„de"ƒZ$Gdd„dej%ƒZ&e'dkrhe (e  )ej*dd…e+g¡¡dS)z#Tests for certbot._internal.client.éN)Úmock)Ú MagicMock)Ú interfaces)Úerrors)Úutil)Úaccount)Ú constants)Úobj)Úoszrsa512_key.pemzcsr-san_512.pemc@sTeZdZdZdd„Zej ej ddi¡dd„ƒZ ej ej i¡dd „ƒZ d d „Z d S) ÚDetermineUserAgentTestz8Tests for certbot._internal.client.determine_user_agent.cCsddlm}||jƒS)Nr)Údetermine_user_agent)Úcertbot._internal.clientr Úconfig)Úselfr ©rúDC:\Program Files\Certbot\pkgs\certbot\_internal\tests\client_test.pyÚ_call s zDetermineUserAgentTest._callZ CERTBOT_DOCSÚ1cCs|jdddS)NT©Úexpect_doc_values©Ú_test©rrrrÚtest_docs_value$sz&DetermineUserAgentTest.test_docs_valuecCs|jdddS)NFrrrrrrÚtest_real_values(sz'DetermineUserAgentTest.test_real_valuescCsZ| ¡}|r|j}|j}n |j}|j}|d|ƒ|d|ƒ|t ¡|ƒ|t ¡|ƒdS)NzOS_NAME OS_VERSIONzmajor.minor.patchlevel)rZassertInZ assertNotInrZget_os_info_uaÚplatformZpython_version)rrZuaZdoc_value_checkZreal_value_checkrrrr,s  zDetermineUserAgentTest._testN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrÚpatchÚdictr Úenvironrrrrrrrr s  r cs eZdZdZ‡fdd„Zdd„Zedd„ƒZedd „ƒZed d „ƒZ ed d „ƒZ ee j dd„ƒƒZ dd„Ze d¡dd„ƒZe ¡dd„ƒZe d¡dd„ƒZdd„Zdd„Ze d¡dd „ƒZe d¡d!d"„ƒZe ¡d#d$„ƒZe ¡d%d&„ƒZd'd(„Zd)d*„Z‡ZS)+Ú RegisterTestz,Tests for certbot._internal.client.register.csFtƒ ¡d|j_d|j_d|j_t ¡|_t   ¡|_ t   t ƒ¡dS)NiFzalias@example.com)ÚsuperÚsetUprÚ rsa_key_sizeÚregister_unsafely_without_emailÚemailrZAccountMemoryStorageÚaccount_storagerrÚtos_cbÚ display_objZ set_displayr©Ú __class__rrr%?s   zRegisterTest.setUpcCsddlm}||j|j|jƒS)Nr)Úregister)r r.rr)r*)rr.rrrrHs zRegisterTest._callcCstjtjd}d|j_|S)Nr,z{"a": 1})rÚMockrZJSONDeSerializableZto_partial_jsonÚ return_value)ÚmrrrÚ_public_key_mockLszRegisterTest._public_key_mockcCsdS)Nz/acme/new-accountrrrrrÚ_new_acct_dir_mockRszRegisterTest._new_acct_dir_mockcCsdS©NTrrrrrÚ _true_mockVszRegisterTest._true_mockcCsdS©NFrrrrrÚ _false_mockZszRegisterTest._false_mockccs6t d¡}|jVWdƒn1s(0YdS)Nú$certbot._internal.client.acme_client)rr ÚClientV2)Zmock_acme_clientrrrÚ_patched_acme_client^s z!RegisterTest._patched_acme_clientc CsÚ| ¡¾}d| ¡_|j|ƒj_t d¡~}tj |ƒj_t   tj ¡|  ¡Wdƒn1sb0Y|j duszJ‚d|ƒj_|  ¡|j dusšJ‚Wdƒn1s®0YWdƒn1sÌ0YdS)Nz http://tosú*certbot._internal.eff.prepare_subscriptionFT)r:Ú new_accountZterms_of_servicer7Úexternal_account_requiredÚ side_effectrr rÚErrorÚpytestÚraisesrÚcalled)rÚ mock_clientÚ mock_preparerrrÚ test_no_tosds     & zRegisterTest.test_no_tosr;cCsj| ¡N}ddlm}| i¡|ƒ_|j|ƒj_| ¡|j j dusHJ‚Wdƒn1s\0YdS)Nr)Ú DirectoryF) r:Z acme.messagesrFZ from_jsonÚ directoryr7r=r>rr*rB)rZunused_mock_preparerCrFrrrÚtest_empty_metars    zRegisterTest.test_empty_metac Csz| ¡^}|j|ƒj_t d¡| ¡Wdƒn1s>0Y|jjdusXJ‚Wdƒn1sl0YdS)Nú)certbot._internal.eff.handle_subscriptionT) r:r7r=r>rr rr*rB)rÚunused_mock_get_utilityrCrrrÚtest_its    &zRegisterTest.test_itz.certbot._internal.client.display_ops.get_emailc CsÀddlm}d|j_d}|jjd|d}| ¡|}|j|ƒj_ t   d¡F}|t   ¡g|ƒj _ | ¡|jdksrJ‚|jd us€J‚Wdƒn1s”0YWdƒn1s²0YdS) Nr©ÚmessagesFú3DNS problem: NXDOMAIN looking up MX for example.comÚinvalidContact©Údetailr;éT)ÚacmerMrÚnoninteractive_moder?Ú with_coder:r7r=r>rr rr<rÚ call_countrB)rÚmock_get_emailrMÚmsgÚmx_errrCrDrrrÚtest_email_retry‡s    zRegisterTest.test_email_retryc CsÐddlm}d|j_d}|jjd|d}| ¡Œ}|j|ƒj_ t   d¡V|t   ¡g|ƒj _ t tj¡| ¡Wdƒn1s†0YWdƒn1s¤0YWdƒn1sÂ0YdS)NrrLTrNrOrPrI)rSrMrrTr?rUr:r7r=r>rr rr<r@rArr)rrMrXrYrCrrrÚ!test_email_invalid_noninteractive•s    z.RegisterTest.test_email_invalid_noninteractivecCs@d|j_t tj¡| ¡Wdƒn1s20YdS©N)rr(r@rArr?rrrrrÚtest_needs_email¡szRegisterTest.test_needs_emailúcertbot._internal.client.loggerc Csžt d¡€}| ¡X}|j|ƒj_d|j_d|j_d|j_ |  ¡|j   tj ¡|jdus^J‚Wdƒn1sr0YWdƒn1s0YdS)Nr;TF)rr r:r7r=r>rr(r'Údry_runrÚdebugÚassert_called_once_withÚANYrB)rÚ mock_loggerrDrCrrrÚtest_without_email¦s   zRegisterTest.test_without_emailc Cs˜| ¡|}|j|ƒj_t d¡Fd|j_| ¡|j dus@J‚|ƒj j ddj rXJ‚Wdƒn1sl0YWdƒn1sŠ0YdS)zJTests dry-run for no staging account, expect account created with no emailrITFrN) r:r7r=r>rr rr_rrBr<Ú call_argsZcontact)rrWrCrrrÚtest_dry_run_no_staging_account²s   z,RegisterTest.test_dry_run_no_staging_accountc CsÌ| ¡°}tj|jd|ƒjj_|j|ƒj_ t  d¡dd}t  |¡6}d|j _ d|j _ | ¡|jdusnJ‚Wdƒn1s‚0YWdƒn1s 0YWdƒn1s¾0YdS)N©r>rIúBcertbot._internal.client.messages.ExternalAccountBinding.from_dataztest-kidz+J2OAqW4MHXsrHVa_PVg0Y-L_R4SYw0_aL1le6mfblbET)r:rr/r3ÚclientrGÚ __getitem__r7r=r>r rÚeab_kidÚ eab_hmac_keyrrB©rrJrCÚtargetZmock_eab_from_datarrrÚtest_with_eab_arguments¿s ÿ   z$RegisterTest.test_with_eab_argumentsc Cs¶| ¡š}|j|ƒj_t d¡dd}t |¡6}d|j_d|j_|  ¡|j dusXJ‚Wdƒn1sl0YWdƒn1sŠ0YWdƒn1s¨0YdS)NrIrhF) r:r7r=r>rr rrkrlrrBrmrrrÚtest_without_eab_argumentsÏs    z'RegisterTest.test_without_eab_argumentsc Csè| ¡Ì}tj|jd|ƒjjj_|j|ƒj _ t  d¡~t  d¡Td|j _ d|j _t tj¡| ¡Wdƒn1s€0YWdƒn1sž0YWdƒn1s¼0YWdƒn1sÚ0YdS)NrgrIrh)r:rr/r2riZnetÚkeyZ public_keyr5r=r>r rrkrlr@rArr?r)rrCrrrÚ4test_external_account_required_without_eab_argumentsÜs    zARegisterTest.test_external_account_required_without_eab_argumentsc Csîddlm}d}|jjd|dd}| ¡¢}tj|jd|ƒjj _ |j |ƒj _ t d¡V}|t ¡g|ƒj_ t |j¡| ¡Wdƒn1s–0YWdƒn1s´0YWdƒn1sÒ0Y|jd usêJ‚dS) NrrLZTestÚ malformedÚtitle©rQrtrgrIF)rSrMr?rUr:rr/r3rirGrjr7r=r>r rr<r@rArrB)rrMrXrYrCZ mock_handlerrrÚtest_unsupported_errorès  ÿ  bz#RegisterTest.test_unsupported_error)rrrrr%rÚ staticmethodr2r3r5r7Ú contextlibÚcontextmanagerr:rErr rHÚ test_utilÚpatch_display_utilrKrZr[r]rdrfrorprrrvÚ __classcell__rrr,rr#<sB               r#cs eZdZdZ‡fdd„Z‡ZS)ÚClientTestCommonz„Z!‡Z"S)AÚ ClientTestz*Tests for certbot._internal.client.Client.csFtƒ ¡d|j_d|j_d|j_ddg|_tjdgtj j d|_ dS)NFTú example.comúwww.example.com)ÚauthorizationsÚcsr_pem) r$r%rr€r_Ústrict_permissionsÚ eg_domainsrrÚsentinelr‡Úeg_orderrr,rrr%s  þzClientTest.setUpcCs|jjdddusJ‚dS)NrRZ verify_sslT)r‚rerrrrÚtest_init_acme_verify_sslsz$ClientTest.test_init_acme_verify_sslcCsRt ¡|j_dg|jjj_ggf|jjj_|j|jj _|j|jj _|j|jj _dSr\) rrriÚ auth_handlerÚhandle_authorizationsr0Údeactivate_valid_authorizationsr‹rSÚfinalize_orderÚ new_orderÚupdaterrrrÚ_mock_obtain_certificates    z#ClientTest._mock_obtain_certificaterRcCs^|dkr&|jjj |j|j|jj¡n|jjjj|ks:J‚|jj j|jt j |jj duddS)NrR)Zfetch_alternative_chains) rirrŽrar‹rr€rVrSrrrbÚpreferred_chain)rÚ auth_countrrrÚ_check_obtain_certificate%s ý þz$ClientTest._check_obtain_certificatez$certbot._internal.client.crypto_utilr^c Cs| ¡tjddtd}|jj}| |j¡|j  |j ¡}|  ||j d¡t jjt jjf|jj||dksnJ‚|j ¡| ¡d|j _t jjt jjf|jj||dks¬J‚|j |jg|jdd¡d|j _tj ¡tjtjdd}|jj||d|jjjj\\}}}t ||ƒtjd dks,J‚tj ¡tjd d}d |j _!|jj||d|jjjj\\}}}t ||ƒtjd dksŒJ‚t jjt jjf|jj|ddks²J‚|j  "|j#|j d¡d|j_t$ %t&j'¡|j |¡Wdƒn1sþ0Y|j( t j)¡dS) NÚpem©ZformÚfileÚdataF)Úorderrz some issuerTÚissuance_timeout)ZsecondsrRi,)*r“rÚCSRÚCSR_SANrirÚ_set_mock_from_fullchainÚcert_and_chain_from_fullchainrSr‘ršrŽrrrŠÚcertÚchainZobtain_certificate_from_csrZfind_chain_with_issuerÚassert_not_calledr–r”raÚ fullchain_pemZalternative_fullchains_pemÚdatetimeZnowZ timedeltarZ CLI_DEFAULTSrreÚabsrœÚassert_called_withr‹r@rArr?Úerrorrb) rrcÚmock_crypto_utilZtest_csrrr›Zexpected_deadlineÚ_ZdeadlinerrrÚ test_obtain_certificate_from_csr2sd þÿ þÿ þ ÿÿÿþÿ ,z+ClientTest.test_obtain_certificate_from_csrcCsŒtjddtd}||j_tjj|j_|  |j ¡|  tjj|¡|jj |j jd|j jddd|j  tjj|jddd¡|j   |jj¡dS)Nr—r˜Ú secp256r1T)Zkey_sizeZkey_dirÚkey_typeÚelliptic_curverˆF)rrržÚ generate_csrr0rrŠrqÚ generate_keyrŸr Ú_test_obtain_certificate_commonrarr&r­r‰r‹r¤)rr©ÚcsrrrrÚtest_obtain_certificatels$  ûÿÿz"ClientTest.test_obtain_certificatecCsžtjdtjjtd}tjdtjjtd}||j_||j _|  |j ¡|  dg¡}d|j _|j|||dd|j jdkszJ‚|jjdksŠJ‚|j jdksšJ‚dS)Nr—r˜r„Té)Ú authzr_retr•rR)rrrrŠÚcsr_fileržÚkey_filer¯r0r°rŸr Ú_authzr_from_domainsrr€r±rV)rr©r²rqÚauthzrrrrÚ'test_obtain_certificate_partial_successs  z2ClientTest.test_obtain_certificate_partial_successc CsÀddlm}tjdtjjtd}tjdtjjtd}||j _ ||j _ |  |j ¡| ¡| |j¡}||j_||jjj_ |j|jdd}|jjddd |d }|jjd d d |gd }|tjg|jjj_d|j_t  ¡|j !|j¡} Wdƒn1sø0Y| tjj"tjj#||fks J‚|jjjj$dks6J‚|jjj$dksJJ‚dd„|jDƒ} |j j$dkslJ‚|j  %t &||jd|jj'|jj(¡t &|| d|jj'|jj(¡g¡|j j$dks¼J‚dS)NrrLr—r˜r„©ÚtypÚvalueÚcaaÚbarrt©rQrtÚ identifierrsÚfoo©rQrtZ subproblemsTr´cSsg|]}|dkr|‘qS©r„r©Ú.0ÚdrrrÚ ®ózUClientTest.test_obtain_certificate_finalize_order_partial_success..rR))rSrMrrrrŠr¶ržr·r¯r0r°rŸr r“r¸r‰r‹r†rirrŽÚ IdentifierÚIDENTIFIER_FQDNr?rUÚDEFAULTrr>rr€rzr{Úobtain_certificater¡r¢rVÚassert_has_callsÚcallÚ must_staplerˆ© rr©rMr²rqr¹rÁZ subproblemÚerror_with_subproblemsÚresultZsuccessful_domainsrrrÚ6test_obtain_certificate_finalize_order_partial_success‘s:     ,ÿ þzAClientTest.test_obtain_certificate_finalize_order_partial_successc Cszddlm}tjdtjjtd}tjdtjjtd}||j _ ||j _ |  |j ¡| ¡| |j¡}||j_||jjj_ |j|jdd}|j|jdd}|jjdd d |d }|jjdd d |d } |jjd d d || gd} | |jjj_d|j_t |j¡|j  |j¡Wdƒn1s0Y|jjjj!dks>J‚|jjj!dksRJ‚|j j!dksdJ‚|j j!dksvJ‚dS©NrrLr—r˜r„r»r…r¾r¿rtrÀrsrÂrÃTrR)"rSrMrrrrŠr¶ržr·r¯r0r°rŸr r“r¸r‰r‹r†rirrŽrÊrËr?rUrr>rr€r@rArÍrV© rr©rMr²rqr¹Z identifier1Z identifier2Z subproblem1Z subproblem2rÒrrrÚ;test_obtain_certificate_finalize_order_no_retryable_domainsµs.     .zFClientTest.test_obtain_certificate_finalize_order_no_retryable_domainscCs&ddlm}tjdtjjtd}tjdtjjtd}||j _ ||j _ |  |j ¡| ¡| |j¡}||j_||jjj_ |jjdddd}||jjj_d |j_t |j¡|j |j¡Wdƒn1sÎ0Y|jjjjd ksìJ‚|jjjd ksþJ‚|j jd ksJ‚|j jdks"J‚dS© NrrLr—r˜r¾rÂrtruTrR) rSrMrrrrŠr¶ržr·r¯r0r°rŸr r“r¸r‰r‹r†rirrŽr?rUrr>rr€r@rArÍrV©rr©rMr²rqr¹r¨rrrÚItest_obtain_certificate_finalize_order_rejected_identifier_no_subproblemsÓs&     ,zTClientTest.test_obtain_certificate_finalize_order_rejected_identifier_no_subproblemsc CsÀddlm}tjdtjjtd}tjdtjjtd}||j _ ||j _ |  |j ¡| ¡| |j¡}||j_||jjj_ |j|jdd}|jjddd |d }|jjd d d |gd }|tjg|jjj_d|j_t  ¡|j !|j¡} Wdƒn1sø0Y| tjj"tjj#||fks J‚|jjjj$dks6J‚|jjj$dksJJ‚dd„|jDƒ} |j j$dkslJ‚|j  %t &||jd|jj'|jj(¡t &|| d|jj'|jj(¡g¡|j j$dks¼J‚dS)NrrLr—r˜r„r»r¾r¿rtrÀrsrÂrÃTrRr´cSsg|]}|dkr|‘qSrÄrrÅrrrrÈ rÉzPClientTest.test_obtain_certificate_get_order_partial_success..))rSrMrrrrŠr¶ržr·r¯r0r°rŸr r“r¸r‰r‹r†rirrŽrÊrËr?rUrÌr‘r>rr€rzr{rÍr¡r¢rVrÎrÏrÐrˆrÑrrrÚ1test_obtain_certificate_get_order_partial_successís:     ,ÿ þzJ‚|jjj!dksRJ‚|j j!dksdJ‚|j j!dksvJ‚dSrÕ)"rSrMrrrrŠr¶ržr·r¯r0r°rŸr r“r¸r‰r‹r†rirrŽrÊrËr?rUr‘r>rr€r@rArÍrVrÖrrrÚ6test_obtain_certificate_get_order_no_retryable_domainss.     .zAClientTest.test_obtain_certificate_get_order_no_retryable_domainscCs&ddlm}tjdtjjtd}tjdtjjtd}||j _ ||j _ |  |j ¡| ¡| |j¡}||j_||jjj_ |jjdddd}||jjj_d |j_t |j¡|j |j¡Wdƒn1sÎ0Y|jjjjdksìJ‚|jjjd ksþJ‚|j jd ksJ‚|j jdks"J‚dSrØ) rSrMrrrrŠr¶ržr·r¯r0r°rŸr r“r¸r‰r‹r†rirrŽr?rUr‘r>rr€r@rArÍrVrÙrrrÚDtest_obtain_certificate_get_order_rejected_identifier_no_subproblems/s&     ,zOClientTest.test_obtain_certificate_get_order_rejected_identifier_no_subproblemsz)certbot._internal.client.acme_crypto_utilcCs´tjddtd}t|j_tjj|j_tj dtjjd}|  |j ¡d|j j _| ||¡|jj|j jd|j jd|j tjj|j|j j¡|j ¡|j ¡|j jdks°J‚dS)Nr—r˜©r™r—Tr¬)Úbitsr®r­rR)rrržÚmake_csrr0rrŠÚkey_pemÚmake_keyÚKeyrŸr rirr_r±rar&r­r‰rÐr°r£r¯rV)rÚmock_acme_cryptoÚ mock_cryptor²rqrrrÚtest_obtain_certificate_dry_runIs$    ýÿ  z*ClientTest.test_obtain_certificate_dry_runc CsRddlm}tjddtd}t|j_tjj |j _tj dtjj d}|  |j ¡| ¡d|jj_| ddg¡}|D]}|j|j_qr|jj} |dg|d gf| j_||j_||jjj_t ¡|j |j¡} Wdƒn1sâ0Y| tjjtjj ||fks J‚| !d ¡| jj"d ks*Jd ƒ‚|jj#j"d ksBJd ƒ‚|j$ %d ¡dS)NrrLr—r˜rÞTr„r…rRz*Deactivate authorizations should be calledr´zHOrder should be recreated due to successfully deactivated authorizationszCertbot was unable to obtain fresh authorizations for every domain. The dry run will continue, but results may not be accurate.)&rSrMrrržràr0rrŠrárârãrŸr r“rirr_r¸Z STATUS_VALIDÚbodyÚstatusrrr‹r†rŽrzr{rÍr‰r¡r¢r–rVr‘Úwarningr§) rräråÚmock_logrMr²rqZauthzrsr¹rrÓrrrÚ:test_obtain_certificate_dry_run_authz_deactivations_failed`s4       , ÿÿzEClientTest.test_obtain_certificate_dry_run_authz_deactivations_failedcCs6t ¡}tjj|j_t ¡}tjj|j_||f|_dSr\)rr/rŠr¡Úencoder0r¢)rZmock_from_fullchainZ mock_certZ mock_chainrrrrŸ‰s   z#ClientTest._set_mock_from_fullchaincCs8g}t|ƒD]&}| tjtjtj|ddd¡q |S)N)r½)rÁ)rç)ÚreversedÚappendrr)rÚdomainsr¹Údomainrrrr¸s ÿÿÿÿzClientTest._authzr_from_domainsNcCsŒ| ¡|p| |j¡}||j_||jjj_t   ¡|j  |j¡}Wdƒn1sX0Y|t j jt j j||fks~J‚| |¡dSr\)r“r¸r‰r‹r†rirrŽr0rzr{rÍrrŠr¡r¢r–)rrqr²rµr•r¹rÓrrrr±œs  ,ÿz*ClientTest._test_obtain_certificate_commonz2certbot._internal.client.Client.obtain_certificatez3certbot._internal.storage.RenewableCert.new_lineagecCsªddg}t ¡t ¡t ¡df|_d|jj_|j |d¡s>J‚|j |d¡sPJ‚|j |dd…d¡sjJ‚d|jj_|j |d¡r†J‚dd„|jDƒ}|gd ¢ks¦J‚dS) Nz *.example.comr„FÚ example_certrRTcSsg|]}|dd‘qS)rr)rÆrÏrrrrÈÀrÉzAClientTest.test_obtain_and_enroll_certificate..)rñr„r„)rrr0rirr_Zobtain_and_enroll_certificateÚcall_args_list)rZ mock_storageZmock_obtain_certificaterïÚnamesrrrÚ"test_obtain_and_enroll_certificate®sÿ  z-ClientTest.test_obtain_and_enroll_certificatez$certbot._internal.cli.helpful_parsercCs¤ddg}t ¡}t |d¡}t |d¡t |d¡}tj |dd¡}tj |dd¡}tj |dd¡}d |_d |d |d |g|_|j   |||||¡\} } } tj  | ¡tj  |¡ks¸J‚tj  | ¡tj  |¡ksÔJ‚tj  | ¡tj  |¡ksðJ‚t | d ƒ} |   ¡} Wdƒn1s0Y| t |d¡ksr@rArÚrecovery_routineraZassert_any_call)rr Ú mock_notifyrrrrÚtest_deploy_certificate_failureús 4 z*ClientTest.test_deploy_certificate_failurecCsjt ¡}||j_tj|j_t  tj¡&|j  dgdddd¡Wdƒn1sR0Y|j   ¡dS)Nrrqr¡r¢r) rrrirrrr r>r@rArrrar rrrÚ$test_deploy_certificate_save_failure s  4z/ClientTest.test_deploy_certificate_save_failurecCsˆt ¡}tjdg|j_||j_t  tj¡&|j  dgdddd¡Wdƒn1sV0Y|  d¡|j   ¡|jjdks„J‚dS)Nrrqr¡r¢rzuWe were unable to install your certificate, however, we successfully restored your server to its prior configuration.r´)rrrrr r>rirr@rArr§Úrollback_checkpointsrarV)rÚmock_get_utilityrrrrrÚ'test_deploy_certificate_restart_failures4ÿ z2ClientTest.test_deploy_certificate_restart_failurecCs¬t ¡}tj|j_tj|j_||j_ t   tj¡&|j  dgdddd¡Wdƒn1s\0Y|j jdksvJ‚d|j jddvsŽJ‚|j ¡|jjdks¨J‚dS) Nrrqr¡r¢rrRz6An error occurred and we failed to restore your configr)rrrrr r>Ú ReverterErrorrrirr@rArr¨rVrera)rrrcrrrrÚ(test_deploy_certificate_restart_failure2"s  4ÿ z3ClientTest.test_deploy_certificate_restart_failure2cCs6tjj}d|›dg}dg}d|›d}d}d|›dg}t tj¡|j |d¡Wdƒn1sj0Yt tj¡|j ||¡Wdƒn1s¤0Yt tj¡|j ||¡Wdƒn1sÞ0Yt tj¡|j |d¡Wdƒn1s0Y|j ||¡dS)NZexamzple.comr„rÂz.barrz*.exam) r rùÚsepr@rArr?riZ_choose_lineagename)rrZinvalid_domainsZ valid_domainsZinvalid_certnameZvalid_certnameZinvalid_wildcard_domainrrrÚtest_choose_lineage_name2s ,,,.z#ClientTest.test_choose_lineage_name)rR)NrR)#rrrrr%rŒr“r–rr r«r³rºrÔr×rÚrÛrÜrÝrærërŸr¸r±rôrrzr{rrrrrrr|rrr,rrƒ sj   8   #   #   &   $     rƒcsÚeZdZdZ‡fdd„Zdd„Zdd„Ze d¡d d „ƒZ e d¡d d „ƒZ e d¡d d„ƒZ e d¡dd„ƒZ dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd*d$d%„Zd&d'„Zd(d)„Z‡ZS)+ÚEnhanceConfigTestz9Tests for certbot._internal.client.Client.enhance_config.cs4tƒ ¡d|j_d|j_d|j_d|j_d|_dS)NFz example.org)r$r%rÚhstsÚredirectÚstapleÚuirrðrr,rrr%Is  zEnhanceConfigTest.setUpcCsBt tj¡"|j |jgd¡Wdƒn1s40YdSr\)r@rArr?riÚenhance_configrðrrrrÚtest_no_installerRsz#EnhanceConfigTest.test_no_installercCs†t ¡|j_g|jjj_d|j_d|j_t  d¡"}|j  |j gd¡Wdƒn1sZ0Y|j j dkstJ‚|jjj ¡dS)NTr^rR)rrrirÚsupported_enhancementsr0rrrr r rðr¨rVÚenhancer£)rrcrrrÚtest_unsupportedVs   0z"EnhanceConfigTest.test_unsupportedr^cCs<d|j_| ¡|jjdus J‚|jjdddks8J‚dS)NTrrRúStrict-Transport-Security)rrÚ_test_with_already_existingÚinforBre©rrêrrrÚtest_already_exists_headeras ÿz,EnhanceConfigTest.test_already_exists_headercCs<d|j_| ¡|jjdus J‚|jjdddks8J‚dS)NTrrRr)rrr&r'rBrer(rrrÚtest_already_exists_redirectis ÿz.EnhanceConfigTest.test_already_exists_redirectcCs$d|j_| ¡|jjdus J‚dSr6)rrr&rérBr(rrrÚ#test_config_set_no_warning_redirectqsz5EnhanceConfigTest.test_config_set_no_warning_redirectcCs$d|j_| ¡|jjdus J‚dSr6)rrÚ_test_with_all_supportedrérBr(rrrÚtest_no_warn_redirectwsz'EnhanceConfigTest.test_no_warn_redirectcCs*d|j_| ¡|jjj |jdd¡dS)NTúensure-http-headerr%)rrr,rirr#r§rðrrrrÚtest_no_ask_hsts}s  ÿz"EnhanceConfigTest.test_no_ask_hstscCs*d|j_| ¡|jjj |jdd¡dS)NTr)rrr,rirr#r§rðrrrrÚtest_no_ask_redirectƒs  ÿz&EnhanceConfigTest.test_no_ask_redirectcCs*d|j_| ¡|jjj |jdd¡dS)NTú staple-ocsp)rrr,rirr#r§rðrrrrÚtest_no_ask_staple‰s  ÿz$EnhanceConfigTest.test_no_ask_staplecCs*d|j_| ¡|jjj |jdd¡dS)NTr.zUpgrade-Insecure-Requests)rrr,rirr#r§rðrrrrÚtest_no_ask_uirs  ÿz!EnhanceConfigTest.test_no_ask_uircCs8t ¡|j_tj|jjj_|jdd|jjj   ¡dS)NT)Ú enhance_error) rrrirrrr#r>Ú _test_errorrrarrrrÚtest_enhance_failure•s  z&EnhanceConfigTest.test_enhance_failurecCsFt ¡|j_tj|jjj_| ¡|jjj   ¡|jjj  tj ¡dSr\) rrrirrrr r>r5rrarbrrrrÚtest_save_failure›s  z#EnhanceConfigTest.test_save_failurecCs*t ¡|j_tjdg|jjj_| ¡dSr\) rrrirrrr r>Ú_test_error_with_rollbackrrrrÚtest_restart_failure¢s z&EnhanceConfigTest.test_restart_failurecCs0t ¡}tj|j_tj|j_||j_ |  ¡dSr\) rrrrr r>rrrirr8)rrrrrÚtest_restart_failure2§s   z'EnhanceConfigTest.test_restart_failure2cCs | ¡|jjjjdusJ‚dSr4)r5rirr rBrrrrr8®sz+EnhanceConfigTest._test_error_with_rollbackFc CsÒd|j_t d¡l}t ¡D}t tj ¡|  ¡Wdƒn1sH0YWdƒn1sf0YWdƒn1s„0Y|r¾|j j dks¢J‚d|j j dddks¾J‚|rÎ|j d¡dS)NTr^rRz(Unable to set the %s enhancement for %s.rz0Rolling back to previous server configuration...)rrrr rzr{r@rArrr,r¨rVròZcriticalr§)rr4Z restart_errorrcZmock_gurrrr5²s ÿbÿzEnhanceConfigTest._test_errorcCsf|jjdurt ¡|j_gd¢|jjj_|j |jgd¡|jjjj dksNJ‚|jjj j dksbJ‚dS)N©r.rr1rR) rirrrr"r0r rðr rVr rrrrr,Às   z*EnhanceConfigTest._test_with_all_supportedcCsBt ¡|j_gd¢|jjj_t ¡|jjj_ |j  |j gd¡dS)Nr;) rrrirr"r0rZPluginEnhancementAlreadyPresentr#r>r rðrrrrr&És z-EnhanceConfigTest._test_with_already_existing)FF)rrrrr%r!r$rr r)r*r+r-r/r0r2r3r6r7r9r:r8r5r,r&r|rrr,rrFs0        rc@s4eZdZdZdd„Zedd„ƒZdd„Zdd „Zd S) Ú RollbackTestz,Tests for certbot._internal.client.rollback.cCst ¡|_dSr\)rrÚ m_installrrrrr%ÔszRollbackTest.setUpcCsRddlm}t d¡(}||_|d|it ¡ƒWdƒn1sD0YdS)Nr)Úrollbackz8certbot._internal.client.plugin_selection.pick_installer)r r>rr r>r)ÚclsZ checkpointsr>r>Zmpirrrr×s  zRollbackTest._callcCs:| d|j¡| ¡jjdks"J‚| ¡jjdks6J‚dS©NrR)rr=rrVr rrrrÚtest_no_problemsÞszRollbackTest.test_no_problemscCs| dd¡dSr@)rrrrrr!ãszRollbackTest.test_no_installerN) rrrrr%Ú classmethodrrAr!rrrrr<Ñs  r<Ú__main__rR),rrxr¥rrÿÚsysr÷ZunittestrZ unittest.mockrZjosepyrr@ZcertbotrrZcertbot._internalrrZcertbot._internal.displayr r+Zcertbot.compatr Zcertbot.tests.utilZtestsrzrørržZConfigTestCaser r#r}rƒrZTestCaser<rÚexitÚmainÚargvÚ__file__rrrrÚsD           =>