a }|äg@µã@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úG/usr/lib/python3.9/site-packages/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/r2riÚnetÚ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©rQrurgrIF)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]rdrfrorprsrwÚ __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%rrr_Ú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) rirŽrrarŒrrrVrSr‘rrbÚ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›rrrr‹ÚcertÚchainZobtain_certificate_from_csrZfind_chain_with_issuerÚassert_not_calledr—r•raÚ fullchain_pemZalternative_fullchains_pemÚdatetimeZnowZ timedeltarZ CLI_DEFAULTSr‘reÚabsrÚassert_called_withrŒr@rArr?Úerrorrb) rrcÚmock_crypto_utilZtest_csrrŽrœ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)rržrŸÚ generate_csrr0rr‹rrÚ 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)rržrr‹Úcsr_filerŸÚkey_filer°r0r±r r¡Ú_authzr_from_domainsrrr²rV)rrªr³rrÚ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Úbarru©rQruÚ identifierrtÚfoo©rQruZ subproblemsTrµcSsg|]}|dkr|‘qS©r…r©Ú.0ÚdrrrÚ ®ózUClientTest.test_obtain_certificate_finalize_order_partial_success..rR))rSrMrržrr‹r·rŸr¸r°r0r±r r¡r”r¹rŠrŒr‡rirŽrÚ IdentifierÚIDENTIFIER_FQDNr?rUÚDEFAULTr‘r>rrr{r|Úobtain_certificater¢r£rVÚassert_has_callsÚcallÚ must_stapler‰© rrªrMr³rrrº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ÀrurÁrtrÃrÄTrR)"rSrMrržrr‹r·rŸr¸r°r0r±r r¡r”r¹rŠrŒr‡rirŽrrËrÌr?rUr‘r>rrr@rArÎrV© rrªrMr³rrrº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ÃrurvTrR) rSrMrržrr‹r·rŸr¸r°r0r±r r¡r”r¹rŠrŒr‡rirŽrr?rUr‘r>rrr@rArÎrV©rrªrMr³rrrº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ÀrurÁrtrÃrÄTrRrµcSsg|]}|dkr|‘qSrÅrrÆrrrrÉ rÊzPClientTest.test_obtain_certificate_get_order_partial_success..))rSrMrržrr‹r·rŸr¸r°r0r±r r¡r”r¹rŠrŒr‡rirŽrrËrÌr?rUrÍr’r>rrr{r|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Ö)"rSrMrržrr‹r·rŸr¸r°r0r±r r¡r”r¹rŠrŒr‡rirŽrrËrÌr?rUr’r>rrr@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Ù) rSrMrržrr‹r·rŸr¸r°r0r±r r¡r”r¹rŠrŒr‡rirŽrr?rUr’r>rrr@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)rržrŸÚmake_csrr0rr‹Úkey_pemÚmake_keyÚKeyr r¡rirr_r²rar&r®rŠrÑr±r¤r°rV)rÚmock_acme_cryptoÚ mock_cryptor³rrrrrÚ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.)&rSrMrržrŸrár0rr‹rârãrär r¡r”rirr_r¹Z STATUS_VALIDÚbodyÚstatusrŽrrŒr‡rr{r|rÎrŠr¢r£r—rVr’Úwarningr¨) rråræÚmock_logrMr³rrZauthzrsrºrŽrÔ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‡rirŽrr0r{r|rÎrr‹r¢r£r—)rrrr³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_notifyr€rrrÚtest_deploy_certificate_failureús 4 z*ClientTest.test_deploy_certificate_failurecCsjt ¡}||j_tj|j_t  tj¡&|j  dgdddd¡Wdƒn1sR0Y|j   ¡dS)Nrrrr¢r£r) rrrir€rrr 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)Nrrrr¢r£rzuWe were unable to install your certificate, however, we successfully restored your server to its prior configuration.rµ)rrrrr r>rir€r@rArr¨Úrollback_checkpointsrarV)rÚmock_get_utilityrr€rrrÚ'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) Nrrrr¢r£rrRz6An error occurred and we failed to restore your configr)rrrrr r>Ú ReverterErrorrrir€r@rArr©rVrera)rrrcr€rrrÚ(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%rr”r—rr r¬r´r»rÕrØrÛrÜrÝrÞrçrìr r¹r²rõrr{r|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-rir€r$r¨rñrrrrÚtest_no_ask_hsts}s  ÿz"EnhanceConfigTest.test_no_ask_hstscCs*d|j_| ¡|jjj |jdd¡dS)NTr)rrr-rir€r$r¨rñrrrrÚtest_no_ask_redirectƒs  ÿz&EnhanceConfigTest.test_no_ask_redirectcCs*d|j_| ¡|jjj |jdd¡dS)NTú staple-ocsp)rrr-rir€r$r¨rñrrrrÚtest_no_ask_staple‰s  ÿz$EnhanceConfigTest.test_no_ask_staplecCs*d|j_| ¡|jjj |jdd¡dS)NTr/zUpgrade-Insecure-Requests)rr r-rir€r$r¨rñrrrrÚtest_no_ask_uirs  ÿz!EnhanceConfigTest.test_no_ask_uircCs8t ¡|j_tj|jjj_|jdd|jjj   ¡dS)NT)Ú enhance_error) rrrir€rrr$r>Ú _test_errorrrarrrrÚtest_enhance_failure•s  z&EnhanceConfigTest.test_enhance_failurecCsFt ¡|j_tj|jjj_| ¡|jjj   ¡|jjj  tj ¡dSr\) rrrir€rrr r>r6rrarbrrrrÚtest_save_failure›s  z#EnhanceConfigTest.test_save_failurecCs*t ¡|j_tjdg|jjj_| ¡dSr\) rrrir€rrr r>Ú_test_error_with_rollbackrrrrÚtest_restart_failure¢s z&EnhanceConfigTest.test_restart_failurecCs0t ¡}tj|j_tj|j_||j_ |  ¡dSr\) rrrrr r>rrrir€r9)rr€rrrÚtest_restart_failure2§s   z'EnhanceConfigTest.test_restart_failure2cCs | ¡|jjjjdusJ‚dSr4)r6rir€r rBrrrrr9®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 r{r|r@rArrr-r©rVróZcriticalr¨)rr5Z restart_errorrcZmock_gurrrr6²s ÿbÿzEnhanceConfigTest._test_errorcCsf|jjdurt ¡|j_gd¢|jjj_|j |jgd¡|jjjj dksNJ‚|jjj j dksbJ‚dS)N©r/rr2rR) rir€rrr#r0r!rñr rVr rrrrr-Às   z*EnhanceConfigTest._test_with_all_supportedcCsBt ¡|j_gd¢|jjj_t ¡|jjj_ |j  |j gd¡dS)Nr<) rrrir€r#r0rZPluginEnhancementAlreadyPresentr$r>r!rñrrrrr'És z-EnhanceConfigTest._test_with_already_existing)FF)rrrrr%r"r%rr r*r+r,r.r0r1r3r4r7r8r:r;r9r6r-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¡dSrA)rrrrrr"ãszRollbackTest.test_no_installerN) rrrrr%Ú classmethodrrBr"rrrrr=Ñs  r=Ú__main__rR),rryr¦rrÚsysrøZunittestrZ unittest.mockrZjosepyrr@ZcertbotrrZcertbot._internalrrZcertbot._internal.displayr r+Zcertbot.compatr Zcertbot.tests.utilZtestsr{rùr‚rŸZConfigTestCaser r#r~r„rZTestCaser=rÚexitÚmainÚargvÚ__file__rrrrÚsD           =>