a ‚oe‹yã@s¢dZddlZddlZddlZddlZddlZddlmZddlZddlZddl m Z ddl m Z ddl m Z ddlmZddlmZdd lmZdd lmZdd lmZGd d „d ejƒZGd d„deƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„dejƒZ"Gdd„dejƒZ#Gdd „d ejƒZ$Gd!d"„d"ej%ƒZ&e'd#k�rže (e )ej*d$d…e+g¡¡dS)%ú)Tests for certbot._internal.cert_manager.éN)Úmock)Ú configuration)Úerrors)ÚALL_FOUR)Ú storage_test)Ú filesystem)Úos)Úutilcs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚBaseCertManagerTestz2Base class for setting up Cert Manager tests. cs–tƒ ¡dˆj_t ˆjj¡dtj  ˆjj d¡dœˆ_ ‡fdd„ˆj Dƒˆ_ t tj  ˆjjd¡dƒ�}| d¡Wdƒn1sˆ0YdS) NFZspecialarchive)ú example.orgú other.comcs i|]}|ˆ |ˆj|¡“qS©)Ú_set_up_configÚdomains)Ú.0Údomain©ÚselfrúJC:\Program Files\Certbot\pkgs\certbot\_internal\tests\cert_manager_test.pyÚ %sÿz-BaseCertManagerTest.setUp..z IGNORE.THISÚwzThis file should be ignored!)ÚsuperÚsetUpÚconfigÚquietrÚmakedirsÚrenewal_configs_dirr ÚpathÚjoinÚ config_dirrÚ config_filesÚopenÚwrite)rZjunk©Ú __class__rrrs þ ÿzBaseCertManagerTest.setUpcCsžt tj |jj|¡¡t ¡}|dur.Úar5)Úcertbot._internalr4rr rrrr(rr!r"ÚcloseÚsymlinkr Zupdate_live_symlinksÚgetcwdÚchdirÚdirnamerÚrealpathÚreadlink) rr4Z archive_pathsrr*r,Z live_pathZ archive_pathZprev_dirrr6rÚtest_update_live_symlinksGs2    ÿ  "  ÿz0UpdateLiveSymlinksTest.test_update_live_symlinksN)r-r.r/r0r@rrrrr2Dsr2c@súeZdZdZdd„Ze ¡e d¡e d¡e d¡dd„ƒƒƒƒZ e ¡e d¡e d¡d d „ƒƒƒZ e ¡e d¡e d¡d d „ƒƒƒZ e ¡e d¡e d¡d d„ƒƒƒZ e ¡e d¡e d¡dd„ƒƒƒZ e ¡e d¡e d¡dd„ƒƒƒZdS)Ú DeleteTestz4Tests for certbot._internal.cert_manager.delete cCsddlm}| |j¡dS©Nrr3)r8r4Údeleter)rr4rrrÚ_callns zDeleteTest._callzcertbot.display.util.notifyú3certbot._internal.cert_manager.lineage_for_certnamez&certbot._internal.storage.delete_filescCs>|j|_d|ƒj_d|j_| ¡| |jd¡| d¡dS)ú Test deleteTr z6Deleted all files relating to certificate example.org.N)Útest_rcÚ return_valueÚyesnorÚcertnamerDÚassert_called_once_with)rÚmock_delete_filesÚmock_lineage_for_certnameZ mock_notifyÚ mock_utilrrrÚtest_delete_from_config_yesrs ÿz&DeleteTest.test_delete_from_config_yescCs4|j|_d|ƒj_d|j_| ¡|jdks0J‚dS)rFFr rN)rGrHrIrrJrDÚ call_count©rrLrMrNrrrÚtest_delete_from_config_no‚s  z%DeleteTest.test_delete_from_config_nocCs>|j|_tjdgf|ƒj_d|ƒj_| ¡| |jd¡dS)rFr TN) rGrHÚ display_utilÚOKÚ checklistrIrDrKrrQrrrÚ"test_delete_interactive_single_yesŽs  z-DeleteTest.test_delete_interactive_single_yescCs>|j|_tjdgf|ƒj_d|ƒj_| ¡|jdks:J‚dS)rFr FrN©rGrHrSrTrUrIrDrPrQrrrÚ!test_delete_interactive_single_nošs  z,DeleteTest.test_delete_interactive_single_nocCs\|j|_tjddgf|ƒj_d|ƒj_| ¡| |jd¡| |jd¡|j dksXJ‚dS)rFr ú other.orgTéN) rGrHrSrTrUrIrDZassert_any_callrrPrQrrrÚ$test_delete_interactive_multiple_yes¦s z/DeleteTest.test_delete_interactive_multiple_yescCs@|j|_tjddgf|ƒj_d|ƒj_| ¡|jdks óz=CertificatesTest.test_report_human_readable..zINVALID: EXPIREDrZ)Zhoursz1 hourz 2 hour(s)TZVALIDÚINVALIDé)Zdaysz1 dayZunderz3 dayszINVALID: TEST_CERT, REVOKEDZ indescribablez thrice.namedzINVALID:Zhorror)rHÚdatetimeÚpytzr8r4ZnowZUTCrrsZ target_expiryÚnamesZ is_test_certZ timedeltaÚappendÚlenÚreÚfindallrrJ) rZ mock_revokedZ mock_serialr~rZexpiryÚcertZ get_reportÚoutrryrÚtest_report_human_readable÷sl         z+CertificatesTest.test_report_human_readableN)r-r.r/r0rerr_r]r^rlrmrqrvr‡rrrrr`Ás(    r`c@s6eZdZdZe d¡e d¡e d¡dd„ƒƒƒZdS)ÚSearchLineagesTestz:Tests for certbot._internal.cert_manager._search_lineages.úcertbot.util.make_or_verify_dirú,certbot._internal.storage.renewal_conf_filesrncCsFdg|_tj|_ddlm}| |jdd„d¡dks8J‚|jsBJ‚dS)NZbadfilerr3cSs|Srfr©ÚxrrrrzPr{z.Úcheck) rHrÚCertStorageErrorÚ side_effectr8r4Z_search_lineagesrrh)rrpÚmock_renewal_conf_filesÚmock_make_or_verify_dirr4rrrÚtest_cert_storage_errorFs  z*SearchLineagesTest.test_cert_storage_errorN)r-r.r/r0rr_r’rrrrrˆCs rˆc@sneZdZdZe d¡e d¡e d¡dd„ƒƒƒZe d¡e d¡dd„ƒƒZe d¡e d¡d d „ƒƒZd S) ÚLineageForCertnameTestz=Tests for certbot._internal.cert_manager.lineage_for_certnamer‰ú3certbot._internal.storage.renewal_file_for_certnamerncCsHd|_tjdd�}||_ddlm}| |jd¡|ks:J‚|jsDJ‚dS)Nú somefile.confú example.comrwrr3)rHrÚMockr8r4Úlineage_for_certnamerrh)rrpÚmock_renewal_conf_filer‘Ú mock_matchr4rrrÚtest_found_matchWs   z'LineageForCertnameTest.test_found_matchcCs6d|_ddlm}| |jd¡dus(J‚|js2J‚dS)Nzother.com.confrr3r–)rHr8r4r˜rrh©rr™r‘r4rrrÚ test_no_matchcs z$LineageForCertnameTest.test_no_matchcCs:t ¡|_ddlm}| |jd¡dus,J‚|js6J‚dS)Nrr3r–)rrŽr�r8r4r˜rrhrœrrrÚtest_no_renewal_fileks  z+LineageForCertnameTest.test_no_renewal_fileN) r-r.r/r0rr_r›r�ržrrrrr“Ts  r“c@sReZdZdZe d¡e d¡e d¡dd„ƒƒƒZe d¡e d¡dd„ƒƒZd S) ÚDomainsForCertnameTestz=Tests for certbot._internal.cert_manager.domains_for_certnamer‰r”rncCsXd|_tjdd�}ddg}||j_||_ddlm}| |jd¡|ksJJ‚|jsTJ‚dS)Nr•r–rwr rr3) rHrr—r€r8r4Údomains_for_certnamerrh)rrpr™r‘ršrr4rrrr›ws   ÿz'DomainsForCertnameTest.test_found_matchcCs6d|_ddlm}| |jd¡dus(J‚|js2J‚dS)Nr•rr3r )rHr8r4r rrhrœrrrr�†s z$DomainsForCertnameTest.test_no_matchN)r-r.r/r0rr_r›r�rrrrrŸts rŸcsºeZdZdZ‡fdd„Zdd„Ze d¡e  ¡dd„ƒƒZ e  ¡d d „ƒZ e  ¡e d ¡d d „ƒƒZ e  ¡e d¡dd„ƒƒZ e  ¡e d¡dd„ƒƒZe  ¡e d¡dd„ƒƒZ‡ZS)ÚRenameLineageTestz7Tests for certbot._internal.cert_manager.rename_lineagecstƒ ¡d|j_d|j_dS)Nr Zafter)rrrrJÚ new_certnamerr$rrr’s zRenameLineageTest.setUpcOsddlm}|j|i|¤ŽSrB)r8r4Zrename_lineage)rrcrdr4rrrrD—s zRenameLineageTest._callrŠcCsìd|j_d|j_g|_t tj¡�| |j¡Wdƒn1sD0Ydg|_|ƒ}t j df|j _t tj¡�| |j¡Wdƒn1s˜0Yt j df|j _t tj¡�| |j¡Wdƒn1sÞ0YdS)NÚtwozone.confréÿÿÿÿ) rrJr¢rHÚpytestÚraisesrÚErrorrDrSÚCANCELÚmenurT)rÚmock_get_utilityr�Ú util_mockrrrÚtest_no_certname›s**z"RenameLineageTest.test_no_certnamecCs¦d|j_d|j_|ƒ}tjdf|j_t t j ¡�|  |j¡Wdƒn1sR0Ytj df|j_t t j ¡�|  |j¡Wdƒn1s˜0YdS)NÚoneÚname) rrJr¢rSr¨ÚinputrHr¥r¦rr§rDrT)rrªr«rrrÚtest_no_new_certname°s*z&RenameLineageTest.test_no_new_certnamerEcCsRd|j_d|j_d|_t tj¡�| |j¡Wdƒn1sD0YdS)Nr­r£) rrJr¢rHr¥r¦rÚConfigurationErrorrD)rrMÚunused_get_utilityrrrÚtest_no_existing_certname¾s z+RenameLineageTest.test_no_existing_certnamez7certbot._internal.storage.RenewableCert._check_symlinkscCsRd|_| |j¡ddlm}| |j|jj¡}|dusCertPathToLineageTest.test_options_fullchain..r )rHrËrrÔrD©rÚmock_acceptable_matchesrrrÚtest_options_fullchain0s  z,CertPathToLineageTest.test_options_fullchaincCsBdd„g|_tj |jjddd¡}||j_d| |j¡ks>J‚dS)NcSs|jSrf)rÌr‹rrrrz8r{z>CertPathToLineageTest.test_options_cert_path..rÈr zcert.pem)rHr rrrr rÌrD)rrÖZtest_cert_pathrrrÚtest_options_cert_path6s  ÿz,CertPathToLineageTest.test_options_cert_pathcsBtj ˆjjddd¡ˆj_‡fdd„g|_dˆ ˆj¡ks>J‚dS)NÚarchiver z cert11.pemcs ˆ |d¡S)Nr…rÏr‹rrrrzCr{zACertPathToLineageTest.test_options_archive_cert..©r rrrr rÌrHrDrÕrrrÚtest_options_archive_cert>s ÿz/CertPathToLineageTest.test_options_archive_certcsBtj ˆjjddd¡ˆj_‡fdd„g|_dˆ ˆj¡ks>J‚dS)NrÙr zfullchain11.pemcs ˆ |d¡S)NrËrÏr‹rrrrzJszFCertPathToLineageTest.test_options_archive_fullchain..rÚrÕrrrÚtest_options_archive_fullchainFs ÿz4CertPathToLineageTest.test_options_archive_fullchaincCs"|j|j_d| |j¡ksJ‚dSrÑ)rËrrÌrDrrrrÚtest_only_pathNs z$CertPathToLineageTest.test_only_path)r-r.r/r0rrDrÐrÒrÓrr_r×rØrÛrÜrÝr1rrr$rrÆs     rÆcsTeZdZdZ‡fdd„Zdd„Zdd„Ze d¡d d „ƒZ e d¡d d „ƒZ ‡Z S) ÚMatchAndCheckOverlapszfTests for certbot._internal.cert_manager.match_and_check_overlaps w/o overlapping archive dirs.csBtƒ ¡|j ¡| ¡tj |jj ddd¡|_ |j |j_ dSrÇrÊrr$rrrWs  ÿzMatchAndCheckOverlaps.setUpcCsddlm}|||||ƒS)Nr)Úmatch_and_check_overlaps)rbrß)rrÎZacceptable_matchesZ match_funcZrv_funcrßrrrrD_s zMatchAndCheckOverlaps._callcs:ddlm}dgˆ ˆj|ƒ‡fdd„dd„¡ks6J‚dS)Nr)Ú_acceptable_matchesr csˆjjSrf)rrÌr‹rrrrzfr{z8MatchAndCheckOverlaps.test_basic_match..cSs|jSrfrwr‹rrrrzfr{)rbràrDr)rràrrrrÒcs ÿz&MatchAndCheckOverlaps.test_basic_matchz/certbot._internal.cert_manager._search_lineagescCsHg|_t tj¡�"| |jddd¡Wdƒn1s:0YdSrf)rHr¥r¦rr§rDr©rZmock_search_lineagesrrrÚtest_no_matcheshsz%MatchAndCheckOverlaps.test_no_matchescCsLddg|_t tj¡�"| |jddd¡Wdƒn1s>0YdS)NZspiderZdance)rHr¥r¦rZOverlappingMatchFoundrDrrárrrÚtest_too_many_matchesns z+MatchAndCheckOverlaps.test_too_many_matches) r-r.r/r0rrDrÒrr_rârãr1rrr$rrÞSs  rÞc@sÀeZdZdZdd„Ze d¡e d¡dd„ƒƒZe d¡e d¡dd „ƒƒZe d¡e d¡d d „ƒƒZ e d¡e d¡d d „ƒƒZ e d¡e d¡dd„ƒƒZ e d¡e d¡dd„ƒƒZ dS)ÚGetCertnameTestrcCs4t ¡}| ¡|_| |j¡t ¡|_d|j_ dSrf) r]r^ÚstartrªZ addCleanupÚstoprrsrrJ)rZget_utility_patchrrrrxs    zGetCertnameTest.setUprŠz2certbot._internal.storage.lineagename_for_filenamecCsldg|_d|_ddlm}d}tjdf| ¡j_|j|jddd�dgksLJ‚|| ¡jj ddvshJ‚dS) Núexample.com.confr–rr3zWhich certificate would youÚverbF©Úallow_multiple© rHr8r4rSrTrªr©Ú get_certnamesrÚ call_args©rÚ mock_nameÚ mock_filesr4ÚpromptrrrÚtest_get_certnamess ÿÿz"GetCertnameTest.test_get_certnamescCsndg|_d|_ddlm}d}tjdf| ¡j_|j|jdd|d�dgksNJ‚| ¡jj dd|ksjJ‚dS) Nrçr–rr3ú custom promptrèF©rêZ custom_promptrërîrrrÚ test_get_certnames_custom_prompt‹s  ÿþÿz0GetCertnameTest.test_get_certnames_custom_promptcCsndg|_d|_ddlm}tjdf| ¡j_t t j ¡�"|j |j ddd�Wdƒn1s`0YdS)Nrçr–rr3Úerroring_anywayFré) rHr8r4rSr¨rªr©r¥r¦rr§rìr©rrïrðr4rrrÚtest_get_certnames_user_abort™s  z-GetCertnameTest.test_get_certnames_user_abortcCsndg|_d|_ddlm}d}tjdgf| ¡j_|j|jddd�dgksNJ‚|| ¡jj ddvsjJ‚dS) Nrçr–rr3zWhich certificate(s) would yourèTré© rHr8r4rSrTrªrUrìrrírîrrrÚ!test_get_certnames_allow_multiple£s ÿ ÿÿz1GetCertnameTest.test_get_certnames_allow_multiplecCspdg|_d|_ddlm}d}tjdgf| ¡j_|j|jdd|d�dgksPJ‚| ¡jj dd|kslJ‚dS) Nrçr–rr3rórèTrôrùrîrrrÚ/test_get_certnames_allow_multiple_custom_prompt°s ÿ  ÿþÿz?GetCertnameTest.test_get_certnames_allow_multiple_custom_promptcCsndg|_d|_ddlm}tjgf| ¡j_t t j ¡�"|j |j ddd�Wdƒn1s`0YdS)Nrçr–rr3röTré) rHr8r4rSr¨rªrUr¥r¦rr§rìrr÷rrrÚ,test_get_certnames_allow_multiple_user_abort¿s  zs>         ,&W ^&@"U