a }|gE@sjdZddlZddlZddlmZddlmZddlZddlmZddlm Z ddl m Z ddl m Z ddl m Zdd lmZeed d d ZGd ddejZGdddejZGdddejZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d ejZd!d"Z e!d#krfe"e#ej$d$de%gdS)%z"Tests for certbot._internal.hooks.N)python_version_tuple)mock)errors)util) filesystem)os)List)majorminorcCs@ttd}ttd}||kr(dS||kr4dS||kSdS)NrTF)intr)r r ZpymajorZpyminorr E/usr/lib/python3.9/site-packages/certbot/_internal/tests/hook_test.pypyver_ltsrc@s.eZdZdZeddZedddZdS)ValidateHooksTestz1Tests for certbot._internal.hooks.validate_hooks.cOsddlm}||i|S)Nr)validate_hooks)certbot._internal.hooksr)clsargskwargsrr r r_calls zValidateHooksTest._callz%certbot._internal.hooks.validate_hookcCsRt}||dd|jD}hdt|ddks>Jd|dksNJdS)NcSsg|]}|ddqS)rr r ).0callr r r )z-ValidateHooksTest.test_it..>ZdeployZpostZprerenew)rZ MagicMockrcall_args_listset)selfZmock_validate_hookconfigtypesr r rtest_it$s  zValidateHooksTest.test_itN) __name__ __module__ __qualname____doc__ classmethodrrpatchr"r r r rrs  rc@sHeZdZdZeddZddZedddZ ed d d Z d S) ValidateHookTestz0Tests for certbot._internal.hooks.validate_hook.cOsddlm}||i|S)Nr) validate_hook)rr*)rrrr*r r rr2s zValidateHookTest._callc CstdvtjdddHttj|ddWdn1sJ0YWdn1sh0YWdn1s0YdS)N.certbot._internal.hooks.plug_util.path_surgeryz0certbot._internal.hooks.filesystem.is_executableF) return_valueZdummyfoo)rr(pytestraisesrHookCommandNotFoundrrr r rtest_hook_not_executable7s z)ValidateHookTest.test_hook_not_executablez'certbot._internal.hooks.util.exe_existsc Csvd|_tdH}ttj|ddWdn1s@0YWdn1s^0Y|jsrJdS)NFr+r-bar) r,rr(r.r/rr0rcalled)rZmock_exe_existsZmock_psr r rtest_not_foundAs  HzValidateHookTest.test_not_foundzcertbot._internal.hooks._progcCs|dd|jdusJdS)Nr-F)rr4)rZ mock_progr r r test_unsetIs zValidateHookTest.test_unsetN) r#r$r%r&r'rr2rr(r5r6r r r rr)/s   r)c@s(eZdZdZeddZeddZdS)HookTestz!Common base class for hook tests.cOstdS)z7Calls the method being tested with the given arguments.N)NotImplementedError)rrrr r rrRszHookTest._callcOsDtd&}d|_|j|i|Wdn1s60Y|S)zCalls self._call after mocking out certbot.compat.misc.execute_command_status. The mock execute object is returned rather than the return value of self._call. *certbot.compat.misc.execute_command_statusrr;N)rr(r,r)rrr mock_executer r r_call_with_mock_executeWs .z HookTest._call_with_mock_executeN)r#r$r%r&r'rr=r r r rr7Os  r7cseZdZdZeddZfddZfddZdd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZZS) PreHookTestz+Tests for certbot._internal.hooks.pre_hook.cOsddlm}||i|S)Nr)pre_hook)rr?)rrrr?r r rrhs zPreHookTest._callcsJtd|j_t|jjtj |jjd|_ t |j | dSNr-r3) supersetUpr r?rmakedirsZrenewal_pre_hooks_dirrpathjoindir_hook create_hook_reset_pre_hook_alreadyr1 __class__r rrBms   zPreHookTest.setUpcs|tdSN)rHrAtearDownr1rIr rrLxszPreHookTest.tearDowncCsddlm}|dS)Nr)executed_pre_hooks)rrMclear)rrMr r rrH}s z#PreHookTest._reset_pre_hook_alreadycCsd|j_|dS)Ncertonlyr verb_test_nonrenew_commonr1r r r test_certonlyszPreHookTest.test_certonlycCsd|j_|dS)NrunrPr1r r rtest_runszPreHookTest.test_runcCs.||j}|jd|jjtjd|dS)Npre-hookenv)r=r assert_called_once_withr?rANY_test_no_executions_commonrr<r r rrRs z!PreHookTest._test_nonrenew_commoncCstd|j_d|j_t|jtd}||j}Wdn1sH0Y|j dus`J|j j duspJdS)Nrcertbot._internal.hooks.loggerF) r r?rQrremoverFrr(r=r4inforZ mock_loggerr<r r r test_no_hookss  *zPreHookTest.test_no_hookscCs6d|j_||j}|jd|jjtjd|dS)NFrVrW)r directory_hooksr=rYr?rrZr[r\r r rtest_renew_disabled_dir_hookss z)PreHookTest.test_renew_disabled_dir_hookscCsJd|j_||j}|jd|jtjd|jd|jjtjd| dSNrrVrW) r rQr=assert_any_callrFrrZassert_called_withr?r[r\r r rtest_renew_no_overlaps  z!PreHookTest.test_renew_no_overlapcCs>|j|j_d|j_||j}|jd|jtjd|dSrd) rFr r?rQr=rYrrZr[r\r r rtest_renew_with_overlaps   z#PreHookTest.test_renew_with_overlapcCsTtd}||j}Wdn1s,0Y|jdusDJ|jjsPJdS)Nr]F)rr(r=r r4r_r`r r rr[s *z&PreHookTest._test_no_executions_common)r#r$r%r&r'rrBrLrHrSrUrRrarcrgrhr[ __classcell__r r rIrr>es   r>cseZdZdZeddZfddZfddZdd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZddZddZddZZS) PostHookTestz,Tests for certbot._internal.hooks.post_hook.cOsddlm}||i|S)Nr) post_hook)rrk)rrrrkr r rrs zPostHookTest._callcsJtd|j_t|jjtj |jjd|_ t |j | dS)Nr3r-) rArBr rkrrCZrenewal_post_hooks_dirrrDrErFrG_reset_post_hook_eventuallyr1rIr rrBs   zPostHookTest.setUpcs|tdSrK)rlrArLr1rIr rrLszPostHookTest.tearDowncCsddlm}|dd=dSNr) post_hooksrrnrrnr r rrls z(PostHookTest._reset_post_hook_eventuallycCsFdD]<}||j_||jg}|jd|jjtjd|rJqdS)NrOrT post-hookrW)r rQr=rYrkrrZ_get_eventually)rrQr<r r rtest_certonly_and_run_with_hooks z,PostHookTest.test_certonly_and_run_with_hookcCs>d|j_dD],}||j_||jgjr,J|r Jq dS)Nrq)r rkrQr=r4rs)rrQr r r#test_cert_only_and_run_without_hooks z0PostHookTest.test_cert_only_and_run_without_hookcCs4d|j_||jdgj}|jdddks0JdS)NrO success.orgrXRENEWED_DOMAINS)r rQr= call_argsr)rrr r rtest_renew_envszPostHookTest.test_renew_envcCsd|j_||jjgdS)NF)r rb_test_renew_commonrkr1r r rrcsz*PostHookTest.test_renew_disabled_dir_hookscCsd|j_||jgdSrK)r rkrzrFr1r r rtest_renew_no_config_hooksz&PostHookTest.test_renew_no_config_hookcCs t|j||jjgdSrK)rr^rFrzr rkr1r r rtest_renew_no_dir_hooks z#PostHookTest.test_renew_no_dir_hookcCs"d|j_t|j|gdSrK)r rkrr^rFrzr1r r rtest_renew_no_hookss z PostHookTest.test_renew_no_hookscCs<|j|jjg}||d|j_||jj||dS)Nbaz)rFr rkrzappend)rexpectedr r rrgs  z"PostHookTest.test_renew_no_overlapcCs|j|j_||jgdSrK)rFr rkrzr1r r rrhs z$PostHookTest.test_renew_with_overlapcCs8d|j_tdD]"}||jg||ksJqdS)Nr)r rQrangerrs)rr_r r rrzs zPostHookTest._test_renew_commoncCsddlm}|Srmrorpr r rrss zPostHookTest._get_eventually)r#r$r%r&r'rrBrLrlrtruryrcr{r|r}rgrhrzrsrir r rIrrjs"  rjcsTeZdZdZeddZddZfddZdd Zd d Z d d Z ddZ Z S)RunSavedPostHooksTestz7Tests for certbot._internal.hooks.run_saved_post_hooks.cOsFddlm}d|vr|dn|d}d|vr4|dn|d}|||S)Nr)run_saved_post_hooksrenewed_domainsfailed_domainsr )rr)rrrrrrr r rrs zRunSavedPostHooksTest._callcOsHd}tj||jd |j|i|WdS1s:0YdS)zCall run_saved_post_hooks but mock out execute and eventually certbot._internal.hooks.post_hooks is replaced with self.eventually. The mock execute object is returned rather than the return value of run_saved_post_hooks. z"certbot._internal.hooks.post_hooks)newN)rr( eventuallyr=)rrrZeventually_pathr r r&_call_with_mock_execute_and_eventuallysz.execute_side_effectr9N)rr(Z side_effectr)rrrrr<r rrr=Bs .z'RenewalHookTest._call_with_mock_executecstdddD|_dS)NcSsh|]}|tjvr|qSr )rr)rvarr r r _s z(RenewalHookTest.setUp..)rwr)rArB vars_to_clearr1rIr rrB]s zRenewalHookTest.setUpcs(|jD]}tj|dqtdSrK)rrrpoprArL)rrrIr rrLds zRenewalHookTest.tearDown)r#r$r%r&r=rBrLrir r rIrr=s rc@sHeZdZdZeddZedddZedddZ d d Z d S) DeployHookTestz.Tests for certbot._internal.hooks.deploy_hook.cOsddlm}||i|S)Nr) deploy_hook)rr)rrrrr r rrms zDeployHookTest._callr]cCs@d|j_d|j_||jdgd}|jdus0J|jjsddg}d}d|j_||j||}|jd|jjtjddS)Nr example.netrr- deploy-hookrW)r rr=rYrrZ)rrrr<r r r test_successszDeployHookTest.test_successN) r#r$r%r&r'rrr(rrrr r r rrjs   rcs^eZdZdZeddZfddZddZe dd d Z d d Z d dZ ddZ ZS) RenewHookTestz,Tests for certbot._internal.hooks.renew_hookcOsddlm}||i|S)Nr) renew_hook)rr)rrrrr r rrs zRenewHookTest._callcsBtd|j_t|jjtj |jjd|_ t |j dSr@) rArBr rrrCZrenewal_deploy_hooks_dirrrDrErFrGr1rIr rrBs  zRenewHookTest.setUpcCs4d|j_||jdgd}|jd|jjtjddS)NFrrrrW)r rbr=rYrrrZr\r r rtest_disabled_dir_hookss  z%RenewHookTest.test_disabled_dir_hooksr]cCs<d|j_||jdgd}|jdus(J|jjdks8JdS)NTrrFr)r rr=r4r_Z call_countr`r r rrs  zRenewHookTest.test_dry_runcCsrd|j_t|jtd"}||jdgd}Wdn1sF0Y|jdus^J|j jdusnJdS)Nr]rrF) r rrr^rFrr(r=r4r_r`r r rras   "zRenewHookTest.test_no_hookscCs6|j|j_||jddgd}|jd|jtjddS)NrrrrrW)rFr rr=rYrrZr\r r r test_overlaps   zRenewHookTest.test_overlapcCs@||jdgd}|jd|jtjd|jd|jjtjddS)NrrrrW)r=r rerFrrZrfrr\r r rtest_no_overlaps  zRenewHookTest.test_no_overlap)r#r$r%r&r'rrBrrr(rrarrrir r rIrrs    rc@s<eZdZdZeddZddZddZdd Zd d Z d S) ListHooksTestz-Tests for certbot._internal.hooks.list_hooks.cOsddlm}||i|S)Nr) list_hooks)rr)rrrrr r rrs zListHooksTest._callcCs||jrJdSrK)rtempdirr1r r rrszListHooksTest.test_emptycs@tfdddD}|D] }t|qj|kssz.ListHooksTest.test_multiple..r)sortedrGrr)rnamesnamer r1rrs   zListHooksTest.test_multiplecCs2tj|jd}t|||j|gks.JdS)Nr-rrDrErrGrrrr r rrszListHooksTest.test_singlecCs0tj|jd}t|||jgks,JdS)Nzfoo~rrr r rtest_ignore_tildeszListHooksTest.test_ignore_tildeN) r#r$r%r&r'rrrrrr r r rrs  rcCstj|ddddS)zmCreates an executable file at the specified path. :param str file_path: path to create the file at wi)modechmodN)rZ safe_openclose)Z file_pathr r rrGsrG__main__r )&r&sysZunittestplatformrrr.ZcertbotrrZcertbot.compatrrZ certbot.testsZ test_utiltypingrr rZTestCaserZTempDirTestCaser)ZConfigTestCaser7r>rjrrrrrrGr#exitmainargv__file__r r r rs2          NX2-"6"