a }|ägm­ã@sBdZddlZddlZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl m Z ddl m Z ddl mZddlmZddlmZddlmmZe d ¡Zd d „Zd d „ZGdd„dejƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZ e!dkr>e "e #ej$dd…e%g¡¡dS)ú$Tests for certbot._internal.storage.éN)Úmock)Ú configuration)Úerrors©ÚALL_FOUR)Ú filesystem)Úosú cert_512.pemcCstD]}t t||ƒ¡qdS)z9Unlink all four items associated with this RenewableCert.N)rr ÚunlinkÚgetattr)Ú rc_objectÚkind©rúH/usr/lib/python3.9/site-packages/certbot/_internal/tests/storage_test.pyÚ unlink_allsrc CsHtD]>}tt||ƒdƒ}| |¡Wdƒq1s80YqdS)z9Put dummy data into all four files of this RenewableCert.ÚwN)rÚopenr Úwrite)r rÚfrrrÚfill_with_sample_datasrc@sReZdZdZdd„Zdd„Ze d¡dd„ƒZd d „Z d d „Z d d„Z dd„Z dS)ÚRelevantValuesTestz4Tests for certbot._internal.storage.relevant_values.cCs&dddœ|_t ¡|_t ¡|j_dS)Nú example.orgZrsa)ÚserverÚkey_type)ÚvaluesrZ MagicMockÚ mock_configÚ set_by_user©ÚselfrrrÚsetUp)s  zRelevantValuesTest.setUpcCs ddlm}||jj_||jƒS)Nr©Úrelevant_values)Úcertbot._internal.storager"rÚto_dictÚ return_value)rrr"rrrÚ_call.s  zRelevantValuesTest._callz8certbot._internal.plugins.disco.PluginsRegistry.find_allcCs dg|_d|jj_d|jd<dS)Nzcertbot-foo:barTé*zcertbot_foo:bar_baz)r%rrr)rZ mock_find_allrrrÚtest_namespace3s  z!RelevantValuesTest.test_namespacecCs@d|jj_d|jd<d|jd<d|jd<|j ¡}d|jd<dS) NTÚallow_subset_of_namesÚapacheÚ authenticatori9Ú rsa_key_sizeZthereZhello©rrr%rÚcopy©rÚexpected_relevant_valuesrrrÚtest_option_set;s      z"RelevantValuesTest.test_option_setcCs"d|jj_|j ¡}d|jd<dS)NFir,r-r/rrrÚtest_option_unsetFs   z$RelevantValuesTest.test_option_unsetcs@d‰‡fdd„|j_|j ¡}d|jˆ<d|jˆ<d|jˆ<dS)NZmanual_public_ip_logging_okcs|ˆkr dSdS©NFTr)Úv©Zdeprected_optionrrÚPóz9RelevantValuesTest.test_deprecated_item..TF)rrrr.r/rr5rÚtest_deprecated_itemNs    z'RelevantValuesTest.test_deprecated_itemcCsbddlm}ddlm}ddlm}ddlm}|j ¡}|  |gd¢¡}|j ddd d d œ}dS) Nrr!)Údisco)Úcli)Ú constants)z--allow-subset-of-namesz--authenticatorr*rZecdsaTr*)rrr)r+) r#r"Zcertbot._internal.pluginsr9Úcertbot._internalr:r;ZPluginsRegistryZfind_allZprepare_and_parse_argsZ CLI_DEFAULTS)rr"r9r:r;ZPLUGINSÚ namespacer0rrrÚtest_with_real_parserZs     üz(RelevantValuesTest.test_with_real_parserN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r r&rÚpatchr(r1r2r8r>rrrrr&s   rcs2eZdZdZ‡fdd„Zd dd„Zdd„Z‡ZS) ÚBaseRenewableCertTestz¿Base class for setting up Renewable Cert tests. .. note:: It may be required to write out self.config for your test. Check :class:`.cli_test.DuplicateCertTest` for an example. csšddlm}tƒ ¡t tj |j j dd¡¡tj |j j dd¡}t |¡t tj |j j d¡¡t   ¡}t D]&}tj |j j dd|d¡}|||<qrttj |j j ddd¡d ƒWdƒn1sÌ0Y||d<tj |j j dd ¡|_| ¡||_ttj |j j dd ¡d ƒ}| d ¡Wdƒn1s>0Yt   ¡|_t d¡(}d|_| |j|j ¡|_Wdƒn1sŒ0YdS)Nr©ÚstorageÚliverÚarchiveZrenewalú.pemÚREADMEÚazexample.org.confz IGNORE.THISrzThis file should be ignored!z7certbot._internal.storage.RenewableCert._check_symlinksT)r<rFÚsuperr rÚmakedirsr ÚpathÚjoinÚconfigÚ config_dirÚ configobjÚ ConfigObjrrÚfilenamerÚ config_fileÚdefaultsrrCr%Ú RenewableCertÚtest_rc)rrFZ archive_pathrUrÚ kind_pathZjunkÚcheck©Ú __class__rrr ws<   ÿ ÿÿÿ*  zBaseRenewableCertTest.setUpNc Cs¬t|j|ƒ}tj |¡r"t |¡t tj tjjtjjddd  ||¡¡|¡t |dƒ,}|  |durp|  d¡n|¡Wdƒn1sŠ0Y|dkr¨t  |d¡dS)NrHrz {0}{1}.pemÚwbÚasciiÚprivkeyi€)r rXr rNÚlexistsr ÚsymlinkrOÚpardirÚformatrrÚencoderÚchmod)rrÚverÚvalueÚlinkrrrrÚ_write_out_kinds    ÿþ :z%BaseRenewableCertTest._write_out_kindcCs&tD]}| |d¡| |d¡qdS)Né é )rri©rrrrrÚ_write_out_ex_kinds©s z)BaseRenewableCertTest._write_out_ex_kinds)N)r?r@rArBr rirmÚ __classcell__rrr[rrDos & rDc@sÀeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z e d¡dd„ƒZdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zej ejd'¡e d(¡d)d*„ƒƒZd+d,„Zej ejd'¡e d-¡d.d/„ƒƒZe d0¡d1d2„ƒZe  d3¡e d0¡d4d5„ƒƒZ!e d0¡e d6¡d7d8„ƒƒZ"e d0¡d9d:„ƒZ#e d0¡d;d<„ƒZ$e d=¡d>d?„ƒZ%d@dA„Z&e dB¡dCdD„ƒZ'dEdF„Z(dGdH„Z)dIdJ„Z*dKdL„Z+dMdN„Z,dOdP„Z-dQS)RÚRenewableCertTestsrcCstD]}qdS©NrrlrrrÚtest_initialization²sz&RenewableCertTests.test_initializationcCsÔddlm}tj |jjd¡}t|dƒ}| d¡Wdƒn1sH0Yt   t j ¡|  ||j¡Wdƒn1s‚0Yt |¡t   t j ¡|  d|j¡Wdƒn1sÆ0YdS)z€Test that the RenewableCert constructor will complain if the renewal configuration file doesn't end in ".conf" rrEz broken.confrz[No closing bracket for you!NZfun)r<rFr rNrOrPrQrrÚpytestÚraisesrÚCertStorageErrorrWr )rrFÚbrokenrrrrÚtest_renewal_bad_config¸s  (, z*RenewableCertTests.test_renewal_bad_configcCsˆddlm}t ¡}d|d<d|d<d|d<tj |jjd ¡|_ |  ¡t   t j¡ | |j |j¡Wd ƒn1sz0Yd S) zƒTest that the RenewableCert constructor will complain if the renewal configuration file is missing a required file element.rrEzimaginary_cert.pemÚcertzimaginary_chain.pemÚchainzimaginary_fullchain.pemÚ fullchainzimaginary_config.confN)r<rFrRrSr rNrOrPrQrTrrrrsrrtrW)rrFrPrrrÚtest_renewal_incomplete_configÇs z1RenewableCertTests.test_renewal_incomplete_configcCsTddlm}| ¡t d¡"}| |jj|j¡Wdƒn1sF0YdS)NrrEú certbot._internal.storage.logger) r<rFrmrrCrWrUrTrP©rrFÚ mock_loggerrrrÚtest_no_renewal_versionÕs   0z*RenewableCertTests.test_no_renewal_versioncCshddlm}| ¡d|jd<|j ¡t d¡"}| |jj|j ¡Wdƒn1sZ0YdS)NrrEz99.99.99Úversionr{) r<rFrmrUrrrCrWrTrPr|rrrÚtest_renewal_newer_versionßs    0z-RenewableCertTests.test_renewal_newer_versionc CsD|jj}d|j_||j_t|jƒt|jƒtD]&}t tj d|d¡t |j|ƒ¡q0t|jƒtD]*}t tj |j j |d¡t |j|ƒ¡qft|jƒtD],}t tj dddd|d¡t |j|ƒ¡q t|jƒt  |jj ¡t tj ddddd¡|jj ¡t|jj dƒ}| d¡Wdƒn1s60YdS) Nz relative/pathú..z17.pemrHrzfullchain_17.pemrzwrongly-named fullchain)rXrwrrrr rarNrOr rPrQr ryrr)rZoldcertrrrrrÚtest_consistentës>   ÿ  ÿ ÿ þ ÿÿ*z"RenewableCertTests.test_consistentcCsx| dd¡t |jj¡t tj |jj ddd¡|jj¡t |jjdƒ}|  d¡Wdƒn1sj0YdS)NrwérHrz cert17.pemr) rir r rXrwrarNrOrPrQrr)rrrrrÚtest_current_targets ÿÿ(z&RenewableCertTests.test_current_targetc CsHdD]}| d|¡qt |jj¡t tj ddddd¡|jj¡dS)N)ééé érwrrHrz cert10.pem)rir r rXrwrarNrO)rrfrrrÚtest_current_version'sÿÿz'RenewableCertTests.test_current_versioncCsdSrprrrrrÚtest_no_current_version/sz*RenewableCertTests.test_no_current_versioncCsdtddƒD]}tD]}| ||¡qq | dd¡| dd¡| dd¡tD]}| |d¡qNdS)Nr…ér_érwryrƒ)Úrangerri©rrfrrrrÚtest_latest_and_next_versions2s   z0RenewableCertTests.test_latest_and_next_versionsr{cCs<t ¡}|j_t ¡}|j_t ¡|j_d|_d|_dSr3)rZMockrXÚupdate_all_links_toZhas_pending_deploymentÚlatest_common_versionr%)rr}Z mock_updateZmock_has_pendingrrrÚtest_ensure_deployedIs  z'RenewableCertTests.test_ensure_deployedcCsTtddƒD]}tD]}| ||¡qq |j dd¡|j dd¡|j dd¡dS) Nr…r‹rwér_érxi¸ )rrrirXÚ_update_link_torŽrrrÚtest_update_link_toZs z&RenewableCertTests.test_update_link_tocCs| dd¡dS)Nrwrj)rirrrrÚ test_versionms zRenewableCertTests.test_versioncCsPtddƒD]}tD]}| ||¡qq tddƒD]}|j |¡tD]}qDq0dS)Nr…r‹©rrrirXrrŽrrrÚ test_update_all_links_to_successus  z3RenewableCertTests.test_update_all_links_to_successc CsŠtjfdd„}| ¡t d¡L}||_t t¡|j   d¡Wdƒn1sT0YWdƒn1sr0Yt D]}q€dS)NcSs.tj |¡}d|vr"| d¡r"t‚||ƒdS)NryÚprev)r rNÚbasenameÚ startswithÚ ValueError)rNÚ real_unlinkr›rrrÚunlink_or_raise‚s zTRenewableCertTests.test_update_all_links_to_partial_failure..unlink_or_raiseú#certbot._internal.storage.os.unlinkrj© r r rmrrCÚ side_effectrrrsrrXrr©rrŸÚ mock_unlinkrrrrÚ(test_update_all_links_to_partial_failures  Hz;RenewableCertTests.test_update_all_links_to_partial_failurec CsŠtjfdd„}| ¡t d¡L}||_t t¡|j   d¡Wdƒn1sT0YWdƒn1sr0Yt D]}q€dS)NcSs dtj |¡vrt‚||ƒdS)Nry)r rNr›r)rNržrrrrŸ“szQRenewableCertTests.test_update_all_links_to_full_failure..unlink_or_raiser rjr¡r£rrrÚ%test_update_all_links_to_full_failure’s  Hz8RenewableCertTests.test_update_all_links_to_full_failurecCsZtddƒD]}tD]}| ||¡qq tddƒD]$}|j |¡tD]}qD|dkr0q0q0dS)Nr…r‹r†r˜rŽrrrÚtest_has_pending_deployment¢s  z.RenewableCertTests.test_has_pending_deploymentcCs\| ddt d¡¡t |jj¡t t j ¡|j  ¡Wdƒn1sN0YdS)Nrwrjzcert-san_512.pem) riÚ test_utilÚ load_vectorr r rXrwrrrsrrtÚnamesrrrrÚ test_names°szRenewableCertTests.test_namesrz"certbot._internal.storage.datetimec Csît d¡}| ¡|j d¡t|jjdƒ}| |¡Wdƒn1sL0Y|j d¡t|jjdƒ}| |¡Wdƒn1s0Ytj |_ d|_ i|jj d<dD]0\}}}tj  |t j¡}||jj_ ||jj d <q¸dS) z.r…r‹r“rwrxry)r‹rŒérÂé z .conf.newrz)We previously crashed while writing me :()r¢rrrirXrrrr rNrOrPÚrenewal_configs_dirZ lineagenamer)rÚmock_rvrfrrÚiZtemp_config_filerrrÚtest_save_successors8      ÿÿ *z&RenewableCertTests.test_save_successorz:Group/everybody permissions are not maintained on Windows.cCsždd„|_tD]}| |d¡q|j d¡t |j dd¡d¡|j dddd|j ¡|j ddd d|j ¡t |j dd ¡d ¡|j d dd d|j ¡dS) NcSs| ¡Srpr¿rÀrrrr6Br7zMRenewableCertTests.test_save_successor_maintains_group_mode..r…r_i$ónewcertó new chainr”ó new_privkeyr“é) r¢rrirXrrrerÚsave_successorrP)rrÅrrrrÚ(test_save_successor_maintains_group_mode=s  z;RenewableCertTests.test_save_successor_maintains_group_modezBcertbot._internal.storage.filesystem.copy_ownership_and_apply_modecCs\dd„|_tD]}| |d¡q|j d¡|j dddd|j¡|j dddd|j¡dS)NcSs| ¡Srpr¿rÀrrrr6Xr7zFRenewableCertTests.test_save_successor_maintains_gid..r…rÈrÉr”rÊ)r¢rrirXrrÌrP)rZmock_ownershiprÅrrrrÚ!test_save_successor_maintains_gidSs  z4RenewableCertTests.test_save_successor_maintains_gidcCsŒdd„|_ddlm}|j dddd|j¡}t|jd ƒ}Wd ƒn1sN0Y|j dd d d |j¡}t  t j   |jj d¡¡|j dddd|j¡}t t j   |jjd¡t j   |jjd¡¡t tj¡&|j dddd|j¡Wd ƒn1sü0Yt t j   |jjd¡t j   |jjd¡¡t tj¡&|j dddd|j¡Wd ƒn1sh0Y|j dd d d |j¡}d S)z$Test for new_lineage() class method.cSs| ¡Srpr¿rÀrrrr6fr7z5RenewableCertTests.test_new_lineage..rrEúthe-lineage.comscertsprivkeyschainÚrbNócert2óprivkey2óchain2zthe-lineage.com-0002scert3sprivkey3schain3zthe-lineage.com-0003scert4sprivkey4schain4zother-example.comscert5sprivkey5schain5)r¢r<rFrWÚ new_lineagerPrryrÚmkdirr rNrOÚdefault_archive_dirÚshutilÚcopytreeÚlive_dirrrrsrrt)rrÅrFr·rrrrÚtest_new_lineageas>   ÿ  ÿ ÿÿ ÿ"ÿ ÿ$ ÿz#RenewableCertTests.test_new_lineagecCsZdd„|_ddlm}t |jj¡t |jj¡t |jj¡|j   dddd|j¡d S) z9Test that directories can be created if they don't exist.cSs| ¡Srpr¿rÀrrrr6œr7zFRenewableCertTests.test_new_lineage_nonexistent_dirs..rrErÏrÑrÒrÓN) r¢r<rFr×ÚrmtreerPrÄrÖrÙrWrÔ)rrÅrFrrrÚ!test_new_lineage_nonexistent_dirs—s   ÿz4RenewableCertTests.test_new_lineage_nonexistent_dirsz2certbot._internal.storage.util.unique_lineage_namecCsXddlm}d|_t tj¡&|j dddd|j ¡Wdƒn1sJ0YdS)NrrE)Zthis_does_not_end_with_dot_confZyikesz example.comrwr_rx) r<rFr%rrrsrrtrWrÔrP)rZmock_ulnrFrrrÚtest_invalid_config_filename­s   ÿz/RenewableCertTests.test_invalid_config_filenamecCs\t tj¡|j d¡Wdƒn1s.0Yt tj¡|j d¡Wdƒn1sf0Yt tj¡|j dd¡Wdƒn1s 0Yt tj¡|j d¡Wdƒn1sØ0Yt tj¡|j  d¡Wdƒn1s0Yt tj¡|j  dd¡Wdƒn1sN0YdS)NZelephantrƒ) rrrsrrtrXZcurrent_targetZcurrent_versionrZavailable_versionsZnewest_available_versionr•rrrrÚ test_bad_kindµs**,*,z RenewableCertTests.test_bad_kindz4certbot.ocsp.RevocationChecker.ocsp_revoked_by_pathscCsŠtD]}| |d¡q|j ¡}|j d|¡}|j d|¡}d|_d|_t|_t  d¡}Wdƒn1sn0Y|j dd}dS)Nr…rwrxTFz(certbot._internal.storage.logger.warningr) rrirXr‘rr%rr¢rrCZ call_args)rZ mock_checkerrrZexpected_cert_pathZexpected_chain_pathÚloggerZlog_msgrrrÚtest_ocsp_revokedÄs  z$RenewableCertTests.test_ocsp_revokedc )Cs¼ddlm}tjddddddtjd}tjd d d dd d tjd}t d¡ t dd dddd¡¡}|df||df||df||df|t d¡|df|t d¡|df|t d¡|df|t d¡|df|t d¡|df|t d¡|df|t d¡|df|t d ¡|df|t d¡|df|t d¡|df|t d ¡|df|t d¡|d!f|t d¡|d!f|t d"¡|d#f|t d$¡|d#f|t d$¡i}| ¡D]\}}|\}} q¤dS)%NrrEiÓrkrˆé;é)ZtzinfoiÜr‡éééz Asia/Shanghaiißéééé)Úz17 daysrƒZ30éz7 weeksé1z1 monthz1 yearinimz 1 year 1 dayioz 1 year-1 dayilz4 yearsiµ) r<rFr±r³r´ÚtimezoneZfromutcr²Úitems) rrFZtime_1Ztime_2Ztime_3ZintendedÚ parametersZexceptedZ base_timer¶rrrÚtest_add_time_intervalâs:  ÿëz)RenewableCertTests.test_add_time_intervalcCs$i|jjd<|jjd}d|d<dS)Nr¬zhttps://acme.example/dirrr¼©rZrprrrÚ test_server s  zRenewableCertTests.test_servercCs<i|jjd<|jjd}d|d<d|d<d|d<d|d<dS)Nr¬z6https://acme-staging-v02.api.letsencrypt.org/directoryrz)https://staging.someotherca.com/directoryz.https://acme-v01.api.letsencrypt.org/directoryz.https://acme-v02.api.letsencrypt.org/directoryr¼rñrrrÚtest_is_test_certs  z$RenewableCertTests.test_is_test_certcCs¢ddlm}t tj¡"| |jj|j ¡Wdƒn1s@0Yt   d|jt d¡t tj¡"| |jj|j ¡Wdƒn1s”0YdS)NrrEÚmissing) r<rFrrrsrrtrWrUrTrPr rar©rrFrrrÚtest_missing_cert s  0z$RenewableCertTests.test_missing_certc CsÚtj |jjd¡}tj |jjd¡}t|dƒ}| d¡Wdƒn1sN0Yt |d¡i}t D] }d||<qld}dd i}d d l m }|  |||||¡t|d ƒ}|  ¡} Wdƒn1sÌ0YdS) Nz sample-filezsample-file.newrzM[renewalparams] useful = value # A useful value useless = value # Not needed i Z somewhereZ the_archiveZusefulZ new_valuerrEÚr)r rNrOrPrQrrrrerr<rFZwrite_renewal_configÚread) rZtempZtemp2rÚtargetrÁÚ archive_dirZ relevant_datarFZcontentrrrÚtest_write_renewal_config(s (    & z,RenewableCertTests.test_write_renewal_configcCs°tD]}| |d¡qt d¡"}|j ¡| ¡Wdƒn1sH0YtD] }tddƒD]}| ||¡qdqVt d¡}|j ¡Wdƒn1s¢0YdS)Nr…zcertbot.compat.os.unlinkr”rÂ)rrirrCrXÚtruncateZassert_not_calledr)rrr¤rÆrrrÚ test_truncateIs  &  z RenewableCertTests.test_truncateN).r?r@rArBrqrvrzr~r€r‚r„r‰rŠrrrCr’r–r—r™r¥r¦r§r«ÚobjectrZNamespaceConfigr¸r½r¾rÇr¨Zskip_on_windowsrÍrÎrÚrÜrÝrÞràrðròrórörûrýrrrrro¯sd  *    +   9   5   * !rocs`eZdZdZ‡fdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z ‡Z S)ÚDeleteFilesTestz0Tests for certbot._internal.storage.delete_filesc sftƒ ¡tD]H}tj |jjdd|d¡}t|dƒWdƒq1sL0Yq|j   ¡dS)NrGrrIrK) rLr rr rNrOrPrQrrUr)rrrYr[rrr \s ÿ   zDeleteFilesTest.setUpcCsHddlm}t d¡| |jd¡Wdƒn1s:0YdS)NrrEr{r)r<rFrrCZ delete_filesrPrõrrrr&ls  zDeleteFilesTest._callcCs | ¡dSrp)r&rrrrÚtest_delete_all_filesqsz%DeleteFilesTest.test_delete_all_filescCspt|jjdƒ}| d¡Wdƒn1s.0Yt tj¡| ¡Wdƒn1sb0YdS)NrKZasdfasfasdfasdf) rrUrTrrrrsrrtr&)rrUrrrÚtest_bad_renewal_config{s (&z'DeleteFilesTest.test_bad_renewal_configcCsFt |jj¡t tj¡| ¡Wdƒn1s80YdSrp) r ÚremoverUrTrrrsrrtr&rrrrÚtest_no_renewal_config†s&z&DeleteFilesTest.test_no_renewal_configcCs&t tj |jjdd¡¡| ¡dS)Nrzcert.pem©r rrNrOrPrÙr&rrrrÚtest_no_cert_fileŽs   ÿz!DeleteFilesTest.test_no_cert_filecCs&t tj |jjdd¡¡| ¡dS)NrrJrrrrrÚtest_no_readme_file˜s   ÿz#DeleteFilesTest.test_no_readme_filecCsFttj |jjdd¡dƒWdƒn1s00Y| ¡dS)NrZ other_filerK)rr rNrOrPrÙr&rrrrÚtest_livedir_not_empty¢s ÿÿz&DeleteFilesTest.test_livedir_not_emptycCs*tj |jjdd¡}t |¡| ¡dS)NrHr)r rNrOrPrQÚrmdirr&)rrúrrrÚtest_no_archive­s zDeleteFilesTest.test_no_archive)r?r@rArBr r&rrrrrrr rnrrr[rrÿZs      rÿcs8eZdZdZ‡fdd„Zdd„Zdd„Zdd „Z‡ZS) ÚCertPathForCertNameTestz:Test for certbot._internal.storage.cert_path_for_cert_namecsBtƒ ¡|j ¡| ¡tj |jj ddd¡|_ |j |j_ dS)NrGrz fullchain.pem) rLr rUrrmr rNrOrPrQryZ cert_pathrr[rrr ¸s  ÿzCertPathForCertNameTest.setUpcCsddlm}|||ƒS)Nr)Úcert_path_for_cert_name)r#r )rZ cli_configZcertnamer rrrr&Às zCertPathForCertNameTest._callcCsdSrprrrrrÚtest_simple_cert_nameÄsz-CertPathForCertNameTest.test_simple_cert_namecCs>t tj¡| |jd¡Wdƒn1s00YdS)Nzfake-example.org)rrrsrrtr&rPrrrrÚtest_no_such_cert_nameÇsz.CertPathForCertNameTest.test_no_such_cert_name) r?r@rArBr r&r r rnrrr[rr ¶s  r Ú__main__r…)&rBr±r×ÚstatÚsysZunittestrrRrrr³Zcertbotrrr#rZcertbot.compatrr Zcertbot.tests.utilZtestsÚutilr¨Z load_certZCERTrrZTestCaserZConfigTestCaserDrorÿr r?ÚexitÚmainÚargvÚ__file__rrrrÚs>       I@0\