a }|äg`fã@s€dZddlZddlZddlmZddlZddlZddlZddl m Z m Z ddl Z ddl m Z ddlZddlmZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddl m!m"Z#ddl m$Z$ej% &¡Z'Gdd„de$ƒZ(Gdd„de j)ƒZ*e+e dœdd„Z,e+e edœdd„Z-Gdd„de j)ƒZ.e/dkr|e 0e 1ej2dd…e3g¡¡dS)z Tests for certbot._internal.cli.éN)Úreload)ÚAnyÚList)Úmock)Ú challenges)Úerrors)ÚArgumentSourceÚNamespaceConfig)Úcli)Ú constants)Ú flag_default)Údisco)Ú filesystem)Úos)ÚTempDirTestCasec@seZdZdZdd„ZdS)Ú TestReadFilezTest cli.read_filec CsÒt ¡}z¸t |j¡t tj |jd¡¡}tj |¡}t   t j ¡t  |¡Wdƒn1sd0Yd}t|dƒ}| |¡Wdƒn1sœ0Yt  |¡\}}Wt |¡n t |¡0dS)NÚfoosbar Úwb)rÚgetcwdÚchdirZtempdirrÚrealpathÚpathÚjoinÚrelpathÚpytestÚraisesÚargparseÚArgumentTypeErrorr Z read_fileÚopenÚwrite)ÚselfZcurr_dirZ real_pathÚ relative_pathZ test_contentsÚfrÚcontents©r$úD/usr/lib/python3.9/site-packages/certbot/_internal/tests/cli_test.pyÚtest_read_files  ( (zTestReadFile.test_read_fileN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r&r$r$r$r%rsrc@seZdZdZdd„ZdS)ÚFlagDefaultTestzTests cli.flag_defaultcCstjdkr ndS)NÚnt)rÚname©r r$r$r%Útest_default_directories@s z(FlagDefaultTest.test_default_directoriesN)r'r(r)r*r/r$r$r$r%r+=sr+)ÚattrÚvaluecCsdS©Nr$)Ú namespacer0r1r$r$r%Úassert_set_by_user_with_valueKsr4)r0r1ÚsourcecCsdSr2r$)r3r0r1r5r$r$r%Úassert_value_and_sourcePsr6c@sÚeZdZdZeeeedœdd„ƒZeeeedœdd„ƒZ eedœdd „Z e   d ¡d d „ƒZ d d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Ze   d/¡d0d1„ƒZe   d2¡d3d4„ƒZ d5d6„Z!d7d8„Z"d9d:„Z#d;d<„Z$d=d>„Z%d?d@„Z&dAdB„Z'dCdD„Z(dEdF„Z)dGdH„Z*dIdJ„Z+dKdL„Z,dMdN„Z-dOdP„Z.dQdR„Z/dSdT„Z0dUdV„Z1dWdX„Z2dYdZ„Z3d[d\„Z4d]d^„Z5e   d/¡d_d`„ƒZ6dadb„Z7dcdd„Z8deS)fÚ ParseTestzTest the cli args entrypoint)ÚargsÚreturncCs t t|¡S)z)Get result of cli.prepare_and_parse_args.)r Úprepare_and_parse_argsÚPLUGINS©r8r$r$r%Ú_unmocked_parseXszParseTest._unmocked_parsecCs6t ¡t |¡WdƒS1s(0YdS)zJMocks certbot._internal.display.obj.get_display and calls _unmocked_parse.N)Ú test_utilÚpatch_display_utilr7r=r<r$r$r%Úparse]s zParseTest.parser<c sÚt ¡‰‡fdd„}tjdˆd t ¡x}||ƒj_t d¡Dt  t ¡|  |¡Wdƒn1sn0YWdƒn1sŒ0YWdƒn1sª0YWdƒn1sÈ0Yˆ  ¡S)z8Run a command, and return the output string for scrutinycsˆ |¡dSr2)r)Úmessager8Úkwargs©Úoutputr$r%Ú write_msghsz)ParseTest._help_output..write_msgz!certbot._internal.main.sys.stdout)Únewz!certbot._internal.main.sys.stderrN) ÚioÚStringIOrÚpatchr>r?Z notificationÚ side_effectrrÚ SystemExitr=Úgetvalue)r r8rEZmock_get_utilityr$rCr%Ú _help_outputcs     ‚zParseTest._help_outputz*certbot._internal.cli.helpful.flag_defaultc sÒt ¡¶‰ˆ ¡‡fdd„}||_| dg¡}t|dgtjƒtˆj dƒ}|  d¡Wdƒn1sl0Y| dg¡}t|ddgtj ƒ| dg¡}t|dgtj ƒWdƒn1sÄ0YdS) Ncs |dkrt tj|¡SˆjgS)NZ config_files)ÚcopyÚdeepcopyr Z CLI_DEFAULTSr-)Úv©Ú tmp_configr$r%Úzsÿz0ParseTest.test_cli_ini_domains..ÚcertonlyÚdomainsÚwzdomains = example.comú example.comÚrenew) ÚtempfileÚNamedTemporaryFileÚcloserJr@r6rÚDEFAULTrr-rÚ CONFIG_FILEÚRUNTIME)r Zmock_flag_defaultZshimr3Úfile_hr$rQr%Útest_cli_ini_domainsts  ÿ (  zParseTest.test_cli_ini_domainscCs| g¡}dD]}qdS)N)Ú config_dirZlogs_dirZwork_dir©r@)r r3Údr$r$r%Ú test_no_args‰s zParseTest.test_no_argsc CsZd}d}d}d}t d¡,| dd|ddd dd dg ¡}Wdƒn1sL0YdS) NÚcertÚkeyÚchainÚ fullchainzcertbot._internal.main.installÚinstallz --cert-pathz --key-pathz --chain-pathz--fullchain-path)rrIr@)r rerfrgrhr3r$r$r%Útest_install_abspaths  þ$zParseTest.test_install_abspathcCs¸| dg¡| ddg¡}| ddg¡}dtvr0| dg¡}dtvrFn| ddg¡}| ddg¡}| ddg¡}| ddg¡}| dd g¡}| ddg¡}| dd g¡}| dg¡}dS) Nú--helpÚallú-hZnginxÚpluginsrXZ automationÚrevokeriÚregister)rMr;©r Úoutr$r$r%Ú test_helpŸs     zParseTest.test_helpcCs:| dg¡| ddg¡}| ddg¡}| ddg¡}dS)NÚhelprlriro)rMrqr$r$r%Útest_help_no_dashesÙs  zParseTest.test_help_no_dashescCsÈddg}| |¡}t|ddgƒddg}| |¡}t|ddgƒddg}| |¡}t|dgd¢ƒddg}| |¡}t|ddgƒddg}| |¡}t|ddgƒdd g}| |¡}t|ddd gƒdS) Nz-drWrUztrailing.period.com.ztrailing.period.comz-example.com,another.net,third.org,example.com)rWú another.netz third.orgz --domainsz#example.com,another.net,example.comrv©r@r4)r Ú short_argsr3Z long_argsr$r$r%Útest_parse_domainsìs(   ÿ   zParseTest.test_parse_domainsc Cs˜ddg}| |¡}tjjtjjg}t|d|ƒddg}t d¡Dt  t ¡| |¡Wdƒn1sl0YWdƒn1sŠ0YdS)Nz--preferred-challengesz http, dnsÚ pref_challszjumping-over-the-moonz sys.stderr) r@rÚHTTP01ÚtypZDNS01r4rrIrrrK)r rxr3Zexpectedr$r$r%Útest_preferred_challengess    z#ParseTest.test_preferred_challengescCs| d ¡¡}t|ddƒdS)Nú--server example.comÚserverrW)r@Úsplitr4©r r3r$r$r%Útest_server_flagszParseTest.test_server_flagcCs,| dg¡}t|ddƒt|ddtjƒdS)Nú --must-stapleÚ must_stapleTÚstaple)r@r4r6rr^rr$r$r%Útest_must_staple_flags  zParseTest.test_must_staple_flagcCs*| ddg¡}t|ddƒt|ddƒdS)Nrƒz --staple-ocspr„Tr…rwrr$r$r%Ú&test_must_staple_and_staple_ocsp_flagss z0ParseTest.test_must_staple_and_staple_ocsp_flagsc CsZz$| |¡| d d |¡¡¡Wn0tjyT}z|D]}q:WYd}~n d}~00dS)Nz6The following flags didn't conflict with --server: {0}z, )r@ZfailÚformatrrÚError)r Z parser_argsZconflicting_argsÚerrorÚargr$r$r%Ú_check_server_conflict_message"s ÿÿz(ParseTest._check_server_conflict_messagecCsFdg}| |¡}t|ddƒt|dtjƒ|d ¡7}| |d¡dS)Nú --stagingÚstagingTrr~)r@r4r Ú STAGING_URIr€rŒ)r rxr3r$r$r%Útest_staging_flag-s    zParseTest.test_staging_flagcCsˆt|ddƒt|ddtjƒt|ddtjƒt|dtjtjƒ|rdt|ddtjƒt|ddtjƒn t|ddtjƒt|ddtjƒdS) NÚdry_runTZbreak_my_certsrŽrZtosZregister_unsafely_without_emailF)r4r6rr^r rr\)r r3Zexisting_accountr$r$r%Ú_assert_dry_run_flag_worked6s z%ParseTest._assert_dry_run_flag_workedcCsœt ¡}d |¡ ¡}t tj¡| |¡Wdƒn1sB0Y|  | |dg¡d¡|  | |dg¡d¡|  | |dg¡d¡t j   |t j¡}t |¡t t j   |d¡¡|  | |dg¡d¡|  | |dg¡d¡|  | |dg¡d¡|dg7}| |dd g¡}t|d d ƒ| |dt jg¡}t|d t jƒ| |dt d ¡g¡}t|d t jtjƒd g}| |gd ¢|¡dS) Nz--dry-run --config-dir {0}ZauthFrTrXZfake_account_dirTú--serverrWrr)r“rWr)rYZmkdtemprˆr€rrrr‰r@r’rrrr Z ACCOUNTS_DIRrÚmkdirr4rr r r6rr^rŒ)r rarxZ account_dirÚconfigÚ conflictsr$r$r%Útest_dry_run_flagCs<(ÿÿÿ   ÿzParseTest.test_dry_run_flagcCs*d}t |¡}| d |¡ ¡¡}d}dS)NZ rsa_key_sizez--rsa-key-size {0}ra©r r r@rˆr€)r Zkey_size_optionZkey_size_valuer•Zconfig_dir_optionr$r$r%Útest_user_set_rsa_key_sizeks  z$ParseTest.test_user_set_rsa_key_sizecCs| d¡}| d¡}dS)Nz--apachez--installer webrootrb)r r•r$r$r%Ú)test_user_set_installer_and_authenticatorws  z3ParseTest.test_user_set_installer_and_authenticatorcCs&d}t |¡}| d |¡ ¡¡}dS)NZelliptic_curvez--elliptic-curve {0}r˜)r Zelliptic_curve_optionZelliptic_curve_option_valuer•r$r$r%Útest_user_set_ecdsa_key_option€s z(ParseTest.test_user_set_ecdsa_key_optioncCsZd}t |¡}| d |¡ ¡¡}t t¡| d¡Wdƒn1sL0YdS)NZkey_typez--key-type {0}z--key-type foo)r r r@rˆr€rrrK)r Zkey_type_optionZkey_type_valuer•r$r$r%Útest_user_set_invalid_key_type†s   z(ParseTest.test_user_set_invalid_key_typez&certbot._internal.hooks.validate_hookscCs"d ¡}tj ¡}t ||¡}dS)Nzrenew --deploy-hook foo)r€r ÚPluginsRegistryÚfind_allr r:)r Zunused_mock_validate_hooksr8rnr•r$r$r%Útest_user_set_deploy_hooks  z#ParseTest.test_user_set_deploy_hookz3certbot._internal.plugins.webroot._validate_webrootcCs(d ¡}d|_tj ¡}t ||¡}dS)Nz%renew -w /var/www/html -d example.comz /var/www/html)r€Z return_valuer rržr r:)r Zmock_validate_webrootr8rnr•r$r$r%Útest_user_set_webroot_map–s   z#ParseTest.test_user_set_webroot_mapcCsLtj ¡D]\}}| d|g¡}q tj ¡D]\}}| d| ¡g¡}q,dS)Nz--reason)r ZREVOCATION_REASONSÚitemsr@Úupper)r ÚreasonÚcoder3r$r$r%Útest_encode_revocation_reasonžs z'ParseTest.test_encode_revocation_reasoncCsxt tj¡| d ¡¡Wdƒn1s00Yt tj¡| d ¡¡Wdƒn1sj0YdS)Nzrenew --force-interactivez-n --force-interactive©rrrr‰r@r€r.r$r$r%Útest_force_interactive¦s,z ParseTest.test_force_interactivec Csft d¡Ht t¡| d ¡¡Wdƒn1s:0YWdƒn1sX0YdS)Nú certbot._internal.cli.sys.stderrz"--renew-hook foo --deploy-hook bar©rrIrrrKr@r€r.r$r$r%Útest_deploy_hook_conflict¬s  z#ParseTest.test_deploy_hook_conflictcCs4d}| d|d|dg¡}t|d|ƒt|d|ƒdS)Nrú --renew-hookú --deploy-hookú--disable-hook-validationÚ deploy_hookÚ renew_hookrw©r r1r3r$r$r%Ú#test_deploy_hook_matches_renew_hook±sþ z-ParseTest.test_deploy_hook_matches_renew_hookcCs0d}| d|dg¡}t|d|ƒt|d|ƒdS)Nrr¬r­r®r¯rwr°r$r$r%Ú test_deploy_hook_sets_renew_hook¹s ÿ z*ParseTest.test_deploy_hook_sets_renew_hookc Csft d¡Ht t¡| d ¡¡Wdƒn1s:0YWdƒn1sX0YdS)Nr¨z"--deploy-hook foo --renew-hook barr©r.r$r$r%Útest_renew_hook_conflictÀs  z"ParseTest.test_renew_hook_conflictcCs4d}| d|d|dg¡}t|d|ƒt|d|ƒdS)Nrr¬r«r­r®r¯rwr°r$r$r%Ú#test_renew_hook_matches_deploy_hookÅsþ z-ParseTest.test_renew_hook_matches_deploy_hookcCs$d}| d|dg¡}t|d|ƒdS)Nrr«r­r¯rwr°r$r$r%Ú'test_renew_hook_does_not_set_renew_hookÍs ÿz1ParseTest.test_renew_hook_does_not_set_renew_hookc Csžt d¡€t t¡| d ¡¡Wdƒn1s:0Yt t¡| d ¡¡Wdƒn1sr0YWdƒn1s0YdS)Nr¨z--max-log-backups fooz--max-log-backups -42r©r.r$r$r%Útest_max_log_backups_errorÔs   , z$ParseTest.test_max_log_backups_errorcCs&d}| d|g¡}t|dt|ƒƒdS)NZ42z--max-log-backupsZmax_log_backups)r@r4Úintr°r$r$r%Útest_max_log_backups_successÛsz&ParseTest.test_max_log_backups_successcCsl| g¡}t|dgtjƒt|dgtjƒtjjg|_dg|_| g¡}t|dgtjƒt|dgtjƒdS)NrUrzrW) r@r6rr\rr{r|rzrUrr$r$r%Útest_unchanging_defaultsàs   z"ParseTest.test_unchanging_defaultscCs| dg¡}t|ddƒdS)Nz--no-directory-hooksÚdirectory_hooksFrwrr$r$r%Útest_no_directory_hooks_setìs z%ParseTest.test_no_directory_hooks_setcCs| g¡}t|ddtjƒdS)NrºT)r@r6rr\rr$r$r%Útest_no_directory_hooks_unsetðs z'ParseTest.test_no_directory_hooks_unsetcCs| dg¡}t|ddƒdS)Nz--delete-after-revokeÚdelete_after_revokeTrwrr$r$r%Útest_delete_after_revokeôs z"ParseTest.test_delete_after_revokecCs| g¡}dSr2rbrr$r$r%Ú test_delete_after_revoke_defaultøs z*ParseTest.test_delete_after_revoke_defaultcCs| dg¡}t|ddƒdS)Nz--no-delete-after-revoker½Frwrr$r$r%Útest_no_delete_after_revokeýs z%ParseTest.test_no_delete_after_revokecCs>t tj¡| d ¡¡Wdƒn1s00YdS)Nz(--allow-subset-of-names -d *.example.orgr¦r.r$r$r%Útest_allow_subset_with_wildcardsz)ParseTest.test_allow_subset_with_wildcardcCsdD]}dD]}q qdS)N)rmrk)rlrnz dns-route53r$)r Z help_flagZtopicr$r$r%Útest_route53_no_revertsz ParseTest.test_route53_no_revertcCs>t tj¡| ddg¡Wdƒn1s00YdS)Nz--hstsz --auto-hsts)rrrr‰r@r.r$r$r%Ú$test_parse_args_hosts_and_auto_hosts sz.ParseTest.test_parse_args_hosts_and_auto_hostsc Csätdƒ}d}d}| dg¡}t|d|tjƒt ¡œ}| ¡t|j dƒ }|  d|›¡Wdƒn1sp0Y| dd|j g¡}t|d|tj ƒ| dd|j d|g¡}t|d|tj ƒWdƒn1sÖ0YdS) Nrzconfigfile.bizzcommandline.edurTrVz server = z-cr“) r r@r6rr\rYrZr[rr-rr]Z COMMAND_LINE)r Z DEFAULT_VALUEZCONFIG_FILE_VALUEZCOMMAND_LINE_VALUEr3rRr_r$r$r%Ú)test_parse_with_multiple_argument_sourcess(  .þýz3ParseTest.test_parse_with_multiple_argument_sourcesc Cs®| d¡}t|ddgƒt|ddƒt ¡n}| ¡t|jdƒ}| d¡Wdƒn1sb0Y| dd |jg¡}t|ddgƒWdƒn1s 0YdS) Nz--preferred-chal dns --no-dirrzzdns-01rºFrVzpreferred-chal = dnsrTz--config)r@r4rYrZr[rr-r)r r3rRr_r$r$r%Útest_abbreviated_arguments+s   (þz$ParseTest.test_abbreviated_argumentscCsB| d¡}t|ddgƒtj ¡}t |ddg¡}t|ddƒdS)Nz-d=example.comrUrWÚrunz--pre-hook="foo=bar"Zpre_hookz "foo=bar")r@r4r rržr r:)r Zunsused_mock_validate_hooksr3rnr$r$r%Útest_argument_with_equals>s   z#ParseTest.test_argument_with_equalscCsv| d¡}t|ddƒt|ddƒ| d¡}t|ddƒt|ddƒ| d¡}t|ddƒt|ddƒt|d d ƒdS) Nz-tvZ text_modeTZ verbose_countéz-tvvvéz-tvm foo@example.comZemailzfoo@example.comrwrr$r$r%Útest_adjacent_short_argsHs         z"ParseTest.test_adjacent_short_argscCs | ddg¡}t|ddgƒdS)NrTz -d foo.comrUzfoo.comrwrr$r$r%Útest_arg_with_contained_spacesVsz(ParseTest.test_arg_with_contained_spacesN)9r'r(r)r*Ú staticmethodrÚstrr r=r@rMrrIr`rdrjrsruryr}r‚r†r‡rŒrr’r—r™ršr›rœrŸr r¥r§rªr±r²r³r´rµr¶r¸r¹r»r¼r¾r¿rÀrÁrÂrÃrÄrÅrÇrÊrËr$r$r$r%r7Usl :   (       r7Ú__main__rÈ)4r*rrNÚ importlibrZ reload_modulerGÚsysrYÚtypingrrZunittestrrZacmerZcertbotrZcertbot.configurationrr Zcertbot._internalr r Zcertbot._internal.cli.cli_utilsr Zcertbot._internal.pluginsr Zcertbot.compatrrZcertbot.tests.utilZtestsÚutilr>rrržr;rZTestCaser+rÍr4r6r7r'ÚexitÚmainÚargvÚ__file__r$r$r$r%ÚsB