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¡b}tj |ƒj_t   tj ¡|  ¡Wdƒn1sb0Yd|ƒj_|  ¡Wdƒn1s’0YWdƒn1s°0YdS)Nz http://tosú*certbot._internal.eff.prepare_subscription) r:Ú new_accountZterms_of_servicer7Úexternal_account_requiredÚ side_effectrr rÚErrorÚpytestÚraisesr)rÚ mock_clientÚ mock_preparerrrÚ test_no_tosds     & zRegisterTest.test_no_tosr;cCsZ| ¡>}ddlm}| i¡|ƒ_|j|ƒj_| ¡Wdƒn1sL0YdS)Nr)Ú Directory) r:Z acme.messagesrEZ from_jsonÚ directoryr7r=r>r)rZunused_mock_preparerBrErrrÚtest_empty_metars    zRegisterTest.test_empty_metac Csj| ¡N}|j|ƒj_t d¡| ¡Wdƒn1s>0YWdƒn1s\0YdS)Nú)certbot._internal.eff.handle_subscription)r:r7r=r>rr r)rÚunused_mock_get_utilityrBrrrÚtest_its    &zRegisterTest.test_itz.certbot._internal.client.display_ops.get_emailc Cs¤ddlm}d|j_d}|jjd|d}| ¡`}|j|ƒj_ t   d¡*}|t   ¡g|ƒj _ | ¡Wdƒn1sx0YWdƒn1s–0YdS)Nr©ÚmessagesFú3DNS problem: NXDOMAIN looking up MX for example.comÚinvalidContact©Údetailr;)ÚacmerLrÚnoninteractive_moder?Ú with_coder:r7r=r>rr rr<r)rÚmock_get_emailrLÚmsgÚmx_errrBrCrrrÚ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)NrrKTrMrNrOrH)rQrLrrRr?rSr:r7r=r>rr rr<r@rArr)rrLrUrVrBrrrÚ!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 Cst d¡r}| ¡J}|j|ƒj_d|j_d|j_d|j_ |  ¡|j   tj ¡Wdƒn1sd0YWdƒn1s‚0YdS)Nr;TF)rr r:r7r=r>rr(r'Údry_runrÚdebugÚassert_called_once_withÚANY)rÚ mock_loggerrCrBrrrÚtest_without_email¦s   zRegisterTest.test_without_emailc Csr| ¡V}|j|ƒj_t d¡ d|j_| ¡Wdƒn1sF0YWdƒn1sd0YdS)zJTests dry-run for no staging account, expect account created with no emailrHTN) r:r7r=r>rr rr\r)rrTrBrrrÚtest_dry_run_no_staging_account²s    z,RegisterTest.test_dry_run_no_staging_accountc Cs¾| ¡¢}tj|jd|ƒjj_|j|ƒj_ t  d¡Vd}t  |¡(}d|j _ d|j _ | ¡Wdƒn1st0YWdƒn1s’0YWdƒn1s°0YdS)N©r>rHúBcertbot._internal.client.messages.ExternalAccountBinding.from_dataztest-kidz+J2OAqW4MHXsrHVa_PVg0Y-L_R4SYw0_aL1le6mfblbE)r:rr/r3ÚclientrFÚ __getitem__r7r=r>r rÚeab_kidÚ eab_hmac_keyr©rrIrBÚtargetZmock_eab_from_datarrrÚtest_with_eab_arguments¿s ÿ   z$RegisterTest.test_with_eab_argumentsc Cs¨| ¡Œ}|j|ƒj_t d¡Vd}t |¡(}d|j_d|j_|  ¡Wdƒn1s^0YWdƒn1s|0YWdƒn1sš0YdS)NrHrd) r:r7r=r>rr rrgrhrrirrrÚ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)NrcrHrd)r:rr/r2reÚnetÚkeyZ public_keyr5r=r>r rrgrhr@rArr?r)rrBrrrÚ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Ò0YdS) NrrKZTestÚ malformedÚtitle©rPrqrcrH)rQrLr?rSr:rr/r3rerFrfr7r=r>r rr<r@rAr)rrLrUrVrBZ mock_handlerrrÚtest_unsupported_errorès  ÿ  bz#RegisterTest.test_unsupported_error)rrrrr%rÚ staticmethodr2r3r5r7Ú contextlibÚcontextmanagerr:rDrr rGÚ test_utilÚpatch_display_utilrJrWrXrZrarbrkrlrorsÚ __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.setUpcCsdSrYrrrrrÚtest_init_acme_verify_sslsz$ClientTest.test_init_acme_verify_sslcCsRt ¡|j_dg|jjj_ggf|jjj_|j|jj _|j|jj _|j|jj _dSrY) rrreÚ auth_handlerÚhandle_authorizationsr0Údeactivate_valid_authorizationsr‡rQÚfinalize_orderÚ new_orderÚupdaterrrrÚ_mock_obtain_certificates    z#ClientTest._mock_obtain_certificateécCsJ|dkr&|jjj |j|j|jj¡n|jjj|jt j |jj duddS)Nr)Zfetch_alternative_chains) rer‰rŠr^r‡rr}rQrŒrr_Úpreferred_chain)rÚ auth_countrrrÚ_check_obtain_certificate%s ý þz$ClientTest._check_obtain_certificatez$certbot._internal.client.crypto_utilr[c Csp| ¡tjddtd}|jj}| |j¡|j  |j ¡}|  ||j d¡|j  ¡| ¡d|j _|j  |jg|jdd¡d|j _tj ¡tjtjdd}|jj||d|jjjj\\}}}tj ¡tjd d}d |j _|jj||d|jjjj\\}}}|j  |j|j d¡d|j_t  t!j"¡|j |¡Wdƒn1sT0Y|j# t$j%¡dS) NÚpem©ZformÚfileÚdataFz some issuerTÚissuance_timeout)Zseconds)Úorderri,)&rrÚCSRÚCSR_SANrer‰Ú_set_mock_from_fullchainÚcert_and_chain_from_fullchainrQrr—rŠrZfind_chain_with_issuerÚassert_not_calledr“r‘r^Ú fullchain_pemZalternative_fullchains_pemÚdatetimeZnowZ timedeltarZ CLI_DEFAULTSZobtain_certificate_from_csrrŒZ call_argsr˜Úassert_called_withr‡r@rArr?Úerrorrr_) rr`Úmock_crypto_utilZtest_csrr‰r™Zexpected_deadlineÚ_ZdeadlinerrrÚ test_obtain_certificate_from_csr2s<   þ ÿÿÿ,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†rnÚ generate_keyrœrÚ_test_obtain_certificate_commonr^rr&r§r…r‡rŸ)rr£ÚcsrrrrÚtest_obtain_certificatels$  ûÿÿz"ClientTest.test_obtain_certificatecCsntjdtjjtd}tjdtjjtd}||j_||j _|  |j ¡|  dg¡}d|j _|j|||dddS)Nr”r•r€Té)Ú authzr_retr’)rršrr†Úcsr_filer›Úkey_filer©r0rªrœrÚ_authzr_from_domainsrr}r«)rr£r¬rnÚauthzrrrrÚ'test_obtain_certificate_partial_successs  z2ClientTest.test_obtain_certificate_partial_successc CsTddlm}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ø0Ydd„|jDƒ} |j  "t #||jd|jj$|jj%¡t #|| d|jj$|jj%¡g¡dS)NrrKr”r•r€©ÚtypÚvalueÚcaaÚbarrq©rPrqÚ identifierrpÚfoo©rPrqZ subproblemsTcSsg|]}|dkr|‘qS©r€r©Ú.0ÚdrrrÚ ®ózUClientTest.test_obtain_certificate_finalize_order_partial_success..)&rQrLrršrr†r°r›r±r©r0rªrœrrr²r…r‡r‚rer‰rŠÚ IdentifierÚIDENTIFIER_FQDNr?rSÚDEFAULTrŒr>rr}rwrxÚobtain_certificateÚassert_has_callsÚcallÚ must_stapler„© rr£rLr¬rnr³r»Z subproblemÚerror_with_subproblemsÚresultZsuccessful_domainsrrrÚ6test_obtain_certificate_finalize_order_partial_success‘s.     ,þzAClientTest.test_obtain_certificate_finalize_order_partial_successc Cs,ddlm}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ƒn1s0YdS©NrrKr”r•r€rµrr¸r¹rqrºrpr¼r½T)!rQrLrršrr†r°r›r±r©r0rªrœrrr²r…r‡r‚rer‰rŠrÄrÅr?rSrŒr>rr}r@rArÇ© rr£rLr¬rnr³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Î0YdS© NrrKr”r•r¸r¼rqrrT)rQrLrršrr†r°r›r±r©r0rªrœrrr²r…r‡r‚rer‰rŠr?rSrŒr>rr}r@rArÇ©rr£rLr¬rnr³r¢rrrÚItest_obtain_certificate_finalize_order_rejected_identifier_no_subproblemsÓs      ,zTClientTest.test_obtain_certificate_finalize_order_rejected_identifier_no_subproblemsc CsTddlm}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ø0Ydd„|jDƒ} |j  "t #||jd|jj$|jj%¡t #|| d|jj$|jj%¡g¡dS)NrrKr”r•r€rµr¸r¹rqrºrpr¼r½TcSsg|]}|dkr|‘qSr¾rr¿rrrr rÃzPClientTest.test_obtain_certificate_get_order_partial_success..)&rQrLrršrr†r°r›r±r©r0rªrœrrr²r…r‡r‚rer‰rŠrÄrÅr?rSrÆrr>rr}rwrxrÇrÈrÉrÊr„rËrrrÚ1test_obtain_certificate_get_order_partial_successís.     ,þzrr}r@rArÇrÐ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Î0YdSrÒ)rQrLrršrr†r°r›r±r©r0rªrœrrr²r…r‡r‚rer‰rŠr?rSrr>rr}r@rArÇrÓ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 ¡dS)Nr”r•©r–r”Tr¦)Úbitsr¨r§)rršr›Úmake_csrr0rr†Úkey_pemÚmake_keyÚKeyrœrrerr\r«r^r&r§r…rÊrªržr©)rÚmock_acme_cryptoÚ mock_cryptor¬rnrrrÚtest_obtain_certificate_dry_runIs$    ýÿ  z*ClientTest.test_obtain_certificate_dry_runc Csddlm}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| d ¡|j  !d ¡dS) NrrKr”r•rØTr€rrzCertbot was unable to obtain fresh authorizations for every domain. The dry run will continue, but results may not be accurate.)"rQrLrršr›rÚr0rr†rÛrÜrÝrœrrrerr\r²Z STATUS_VALIDÚbodyÚstatusr‰r‹r‡r‚rŠrwrxrÇr…r“Zwarningr¡) rrÞrßÚmock_logrLr¬rnZauthzrsr³r‰rÍrrrÚ:test_obtain_certificate_dry_run_authz_deactivations_failed`s&       , zEClientTest.test_obtain_certificate_dry_run_authz_deactivations_failedcCs6t ¡}tjj|j_t ¡}tjj|j_||f|_dSrY)rr/r†ÚcertÚencoder0Úchain)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_domainsNcCsp| ¡|p| |j¡}||j_||jjj_t   ¡|j  |j¡}Wdƒn1sX0Y|  |¡dSrY) rr²r…r‡r‚rer‰rŠr0rwrxrÇr“)rrnr¬r¯r’r³rÍrrrr«œs  ,z*ClientTest._test_obtain_certificate_commonz2certbot._internal.client.Client.obtain_certificatez3certbot._internal.storage.RenewableCert.new_lineagecCsJddg}t ¡t ¡t ¡df|_d|jj_d|jj_dd„|jDƒ}dS)Nz *.example.comr€FTcSsg|]}|dd‘qS)rr)rÀrÉrrrrÂÀrÃzAClientTest.test_obtain_and_enroll_certificate..)rrr0rerr\Zcall_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_parsercCsddg}t ¡}t |d¡}t |d¡t |d¡}tj |dd¡}tj |dd¡}tj |dd¡}d |_d |d |d |g|_|j   |||||¡\} } } t | d ƒ} |   ¡} Wdƒn1sÄ0Yt | d ƒ}|  ¡}Wdƒn1sö0Yt  |¡dS)Nz cert_512.pemzcert-san_512.pemrrÚcertsZchainsz chain.pemz fullchain.pemZcertonlyz --cert-pathz --chain-pathz--fullchain-pathÚrb)ÚtempfileZmkdtemprwÚ load_vectorr ÚpathÚjoinZverbÚargsreZsave_certificateÚopenÚreadÚshutilÚrmtree)rZ mock_parserrîZtmp_pathZcert_pemZ chain_pemZcandidate_cert_pathZcandidate_chain_pathZcandidate_fullchain_pathÚ cert_pathÚ chain_pathÚfullchain_pathZ cert_fileZ cert_contentsZ chain_fileZchain_contentsrrrÚtest_save_certificateÃs*þþ & &z ClientTest.test_save_certificatecCs¤t tj¡&|j dgdddd¡Wdƒn1s80Yt ¡}||j_|j dgdddd¡|j j t j   d¡t j   d¡ddt j   d¡d|j  ¡dS)Núfoo.barrnrårçÚ fullchain)rùrúrërûZkey_path)r@rArr?reÚdeploy_certificaterrr|Ú deploy_certr^r ròÚabspathÚrestart©rÚ mock_utilr|rrrÚtest_deploy_certificate_successès4   ûz*ClientTest.test_deploy_certificate_successz,certbot._internal.client.display_util.notifycCs|t ¡}||j_d|j_tj|j_t   tj¡&|j  dgdddd¡Wdƒn1sZ0Y|j   ¡| d¡dS)NZfoobarrýrnrårçrþzDeploying certificate)rrrer|rrÚ PluginErrorrr>r@rArÿÚrecovery_routiner^Zassert_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©Nrýrnrårçrþ) rrrer|rrÚsaver>r@rArÿrr^rrrrÚ$test_deploy_certificate_save_failure s  4z/ClientTest.test_deploy_certificate_save_failurecCsxt ¡}tjdg|j_||j_t  tj¡&|j  dgdddd¡Wdƒn1sV0Y|  d¡|j   ¡dS)NrýrnrårçrþzuWe were unable to install your certificate, however, we successfully restored your server to its prior configuration.)rrrrrr>rer|r@rArÿr¡Úrollback_checkpointsr^)rÚmock_get_utilityrr|rrrÚ'test_deploy_certificate_restart_failures4ÿ z2ClientTest.test_deploy_certificate_restart_failurecCstt ¡}tj|j_tj|j_||j_ t   tj¡&|j  dgdddd¡Wdƒn1s\0Y|j  ¡dSr )rrrrrr>Ú ReverterErrorr rer|r@rArÿr^)rrr`r|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.barrýz*.exam) r ròÚsepr@rArr?reZ_choose_lineagename)rrZinvalid_domainsZ valid_domainsZinvalid_certnameZvalid_certnameZinvalid_wildcard_domainrrrÚtest_choose_lineage_name2s ,,,.z#ClientTest.test_choose_lineage_name)r)Nr)#rrrrr%rˆrr“rr r¥r­r´rÎrÑrÔrÕrÖr×ràrärœr²r«rírürwrxrr r rrrryrrr,rr sj   8   #   #   &   $     rcsÚ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ƒn1s40YdSrY)r@rArr?reÚenhance_configrërrrrÚtest_no_installerRsz#EnhanceConfigTest.test_no_installercCsvt ¡|j_g|jjj_d|j_d|j_t  d¡"}|j  |j gd¡Wdƒn1sZ0Y|jjj   ¡dS)NTr[)rrrer|Úsupported_enhancementsr0rrrr rrëÚenhancerž)rr`rrrÚtest_unsupportedVs   0z"EnhanceConfigTest.test_unsupportedr[cCsd|j_| ¡dSr4)rrÚ_test_with_already_existing©rrãrrrÚtest_already_exists_headerasz,EnhanceConfigTest.test_already_exists_headercCsd|j_| ¡dSr4©rrrrrrrÚtest_already_exists_redirectisz.EnhanceConfigTest.test_already_exists_redirectcCsd|j_| ¡dSr6r!rrrrÚ#test_config_set_no_warning_redirectqsz5EnhanceConfigTest.test_config_set_no_warning_redirectcCsd|j_| ¡dSrY)rrÚ_test_with_all_supportedrrrrÚtest_no_warn_redirectwsz'EnhanceConfigTest.test_no_warn_redirectcCs*d|j_| ¡|jjj |jdd¡dS)NTúensure-http-headerzStrict-Transport-Security)rrr$rer|rr¡rërrrrÚtest_no_ask_hsts}s  ÿz"EnhanceConfigTest.test_no_ask_hstscCs*d|j_| ¡|jjj |jdd¡dS)NTr)rrr$rer|rr¡rërrrrÚtest_no_ask_redirectƒs  ÿz&EnhanceConfigTest.test_no_ask_redirectcCs*d|j_| ¡|jjj |jdd¡dS)NTú staple-ocsp)rrr$rer|rr¡rërrrrÚtest_no_ask_staple‰s  ÿz$EnhanceConfigTest.test_no_ask_staplecCs*d|j_| ¡|jjj |jdd¡dS)NTr&zUpgrade-Insecure-Requests)rrr$rer|rr¡rërrrrÚtest_no_ask_uirs  ÿz!EnhanceConfigTest.test_no_ask_uircCs8t ¡|j_tj|jjj_|jdd|jjj   ¡dS)NT)Ú enhance_error) rrrer|rrrr>Ú _test_errorrr^rrrrÚtest_enhance_failure•s  z&EnhanceConfigTest.test_enhance_failurecCsFt ¡|j_tj|jjj_| ¡|jjj   ¡|jjj  tj ¡dSrY) rrrer|rrr r>r-rr^r_rrrrÚtest_save_failure›s  z#EnhanceConfigTest.test_save_failurecCs*t ¡|j_tjdg|jjj_| ¡dSrY) rrrer|rrrr>Ú_test_error_with_rollbackrrrrÚtest_restart_failure¢s z&EnhanceConfigTest.test_restart_failurecCs0t ¡}tj|j_tj|j_||j_ |  ¡dSrY) rrrrrr>rr rer|r0)rr|rrrÚtest_restart_failure2§s   z'EnhanceConfigTest.test_restart_failure2cCs | ¡dSrY)r-rrrrr0®sz+EnhanceConfigTest._test_error_with_rollbackFc Cs¦d|j_t d¡l}t ¡D}t tj ¡|  ¡Wdƒn1sH0YWdƒn1sf0YWdƒn1s„0Y|r’|r¢|j   d¡dS)NTr[z0Rolling back to previous server configuration...) rrrr rwrxr@rArrr$Zcriticalr¡)rr,Z restart_errorr`Zmock_gurrrr-²s ÿbÿzEnhanceConfigTest._test_errorcCs>|jjdurt ¡|j_gd¢|jjj_|j |jgd¡dS©N)r&rr))rer|rrrr0rrërrrrr$Às   z*EnhanceConfigTest._test_with_all_supportedcCsBt ¡|j_gd¢|jjj_t ¡|jjj_ |j  |j gd¡dSr3) rrrer|rr0rZPluginEnhancementAlreadyPresentrr>rrërrrrrÉs z-EnhanceConfigTest._test_with_already_existing)FF)rrrrr%rrrr r r"r#r%r'r(r*r+r.r/r1r2r0r-r$rryrrr,rrFs0        rc@s4eZdZdZdd„Zedd„ƒZdd„Zdd „Zd S) Ú RollbackTestz,Tests for certbot._internal.client.rollback.cCst ¡|_dSrY)rrÚ m_installrrrrr%ÔszRollbackTest.setUpcCsRddlm}t d¡(}||_|d|it ¡ƒWdƒn1sD0YdS)Nr)Úrollbackz8certbot._internal.client.plugin_selection.pick_installer)r r6rr r>r)ÚclsZ checkpointsr>r6Zmpirrrr×s  zRollbackTest._callcCs| d|j¡dS©Nr)rr5rrrrÚtest_no_problemsÞszRollbackTest.test_no_problemscCs| dd¡dSr8)rrrrrrãszRollbackTest.test_no_installerN) rrrrr%Ú classmethodrr9rrrrrr4Ñs  r4Ú__main__r),rrur rr÷ÚsysrðZunittestrZ unittest.mockrZjosepyrr@ZcertbotrrZcertbot._internalrrZcertbot._internal.displayr r+Zcertbot.compatr Zcertbot.tests.utilZtestsrwrñr~r›ZConfigTestCaser r#rzrrZTestCaser4rÚexitÚmainÚargvÚ__file__rrrrÚsD           =>