a }|ägJ!ã@sdZddlZddlZddlZddlZddlmZddlZddlmZddlm Z ddl m Z ddl m Z ddlmZddlmZddlm ZGd d „d ejejƒZGd d „d ejƒZGd d„dejƒZGdd„dejƒZedkre e ejdd…eg¡¡dS)z%Tests for certbot.plugins.dns_common.éN)Úmock)Úerrors)Úutil)Úos)Ú dns_common)Údns_test_commoncs´eZdZGdd„dejƒZGdd„dƒZ‡fdd„Ze  ¡dd„ƒZ d d „Z e  ¡d d „ƒZ e  ¡d d„ƒZ e  ¡dd„ƒZe  ¡dd„ƒZdd„Ze  ¡dd„ƒZdd„Z‡ZS)ÚDNSAuthenticatorTestc@s,eZdZe ¡Ze ¡Ze ¡Zdd„ZdS)z*DNSAuthenticatorTest._FakeDNSAuthenticatorcCsdS)Nz!A fake authenticator for testing.©©Úselfr r úS/usr/lib/python3.9/site-packages/certbot/_internal/tests/plugins/dns_common_test.pyÚ more_infosz4DNSAuthenticatorTest._FakeDNSAuthenticator.more_infoN) Ú__name__Ú __module__Ú __qualname__rÚ MagicMockZ_setup_credentialsÚ_performÚ_cleanupr r r r r Ú_FakeDNSAuthenticatorsrc@seZdZdZdZdZdZdS)z DNSAuthenticatorTest._FakeConfigréN)rrrZfake_propagation_secondsZfake_config_keyÚfake_other_keyÚfake_file_pathr r r r Ú _FakeConfigsrcs(tƒ ¡t ¡|_t |jd¡|_dS)NZfake)ÚsuperÚsetUprrÚconfigrÚauthr ©Ú __class__r r r%s  zDNSAuthenticatorTest.setUpcCs,|j |jg¡|jj tjtjtj¡dS©N) rZperformÚachallrÚassert_called_once_withrÚDOMAINrÚANY)r Zunused_mock_get_utilityr r r Ú test_perform,sz!DNSAuthenticatorTest.test_performcCs4d|j_|j |jg¡|jj tjtj tj ¡dS)NT) rZ_attempt_cleanupZcleanupr rr!rr"rr#r r r r Ú test_cleanup2sz!DNSAuthenticatorTest.test_cleanupcCsB|ƒ}tjdftjdff|j_|j dd¡|jjjdks>J‚dS)NÚÚvalueÚ other_key)Ú display_utilÚOKÚinputÚ side_effectrÚ _configurerr©r Úmock_get_utilityÚ mock_displayr r r Ú test_prompt9s ÿz DNSAuthenticatorTest.test_promptcCsT|ƒ}tjdff|j_t tj¡|j  dd¡Wdƒn1sF0YdS)NÚcr(r&) r)ÚCANCELr+r,ÚpytestÚraisesrÚ PluginErrorrr-r.r r r Útest_prompt_canceledBsz)DNSAuthenticatorTest.test_prompt_canceledcCsrtj |jd¡}t|dƒ ¡|ƒ}tjdftjdftj|jftj|ff|j_ |j   dd¡|j j j |ksnJ‚dS)Núfile.iniÚwbr&únot-a-file.iniÚ file_path)rÚpathÚjoinÚtempdirÚopenÚcloser)r*Údirectory_selectr,rÚ_configure_filerr)r r/r<r0r r r Útest_prompt_fileJs ýz%DNSAuthenticatorTest.test_prompt_filecCsT|ƒ}tjdff|j_t tj¡|j  dd¡Wdƒn1sF0YdS)Nr2r;r&) r)r3rAr,r4r5rr6rrBr.r r r Útest_prompt_file_canceledXsz.DNSAuthenticatorTest.test_prompt_file_canceledcCsXtj |jd¡}t ddi|¡t|jd|ƒ|j  ddddi¡}|  d¡dksTJ‚dS)Nr8Ú fake_testr'Úfake_credentialsÚ credentialsr&Útest) rr<r=r>rÚwriteÚsetattrrrÚ_configure_credentialsÚconf)r r<rGr r r Útest_configure_credentials`s z/DNSAuthenticatorTest.test_configure_credentialscCs°tj |jd¡}t ddi|¡tj |jd¡}t ddi|¡t|jddƒ|ƒ}tj dftj d ftj |jftj |ftj |ff|j _ |j   d dd di¡}| d ¡dks¬J‚dS) Nz bad-file.iniZ fake_otherZ other_valuer8rEr'rFr&r:rGrH)rr<r=r>rrIrJrr)r*rAr,rrKrL)r r/Zbad_pathr<r0rGr r r Útest_prompt_credentialsis üz,DNSAuthenticatorTest.test_prompt_credentialscCsd|j t ¡g¡vsJ‚dS)Nz@try increasing --fake-propagation-seconds (currently 0 seconds).)rZ auth_hintrrr r r r Útest_auth_hint|sÿz#DNSAuthenticatorTest.test_auth_hint)rrrrZDNSAuthenticatorrrrÚ test_utilZpatch_display_utilr$r%r1r7rCrDrMrNrOÚ __classcell__r r rr rs$        rc@s6eZdZGdd„dejƒZdd„Zdd„Zdd„Zd S) ÚCredentialsConfigurationTestcs0eZdZdZ‡fdd„Zdd„Zdd„Z‡ZS)z0CredentialsConfigurationTest._MockLoggingHandlerNcs| ¡tƒj|i|¤ŽdSr)ÚresetrÚ__init__)r ÚargsÚkwargsrr r rT…sz9CredentialsConfigurationTest._MockLoggingHandler.__init__cCs|j|j ¡ | ¡¡dSr)ÚmessagesZ levelnameÚlowerÚappendZ getMessage)r Úrecordr r r Úemit‰sz5CredentialsConfigurationTest._MockLoggingHandler.emitcCst t¡|_dS)z-Allows the handler to be reset between tests.N)Ú collectionsÚ defaultdictÚlistrWr r r r rSŒsz6CredentialsConfigurationTest._MockLoggingHandler.reset)rrrrWrTr[rSrQr r rr Ú_MockLoggingHandler‚s r_cCsTtj |jd¡}t dddœ|¡t |¡}d| d¡ks>J‚d| d¡ksPJ‚dS)Nútoo-permissive-file.inir'r©rHÚotherrHÚ1rb) rr<r=r>rrIrÚCredentialsConfigurationrL)r r<Úcredentials_configurationr r r Útest_valid_files  z,CredentialsConfigurationTest.test_valid_filecCsJtj |jd¡}t tj¡t  |¡Wdƒn1s<0YdS)Nr:) rr<r=r>r4r5rr6rrd)r r<r r r Útest_nonexistent_file™sz2CredentialsConfigurationTest.test_nonexistent_filecCsd| ¡}tj |¡tj |jd¡}t  |dd¡  ¡t  |¡dt dd„|j dDƒƒks`J‚dS)Nr`r9iärcSsg|]}| d¡r|‘qS)ZUnsafe)Ú startswith)Ú.0Ú_r r r Ú ¨ózXCredentialsConfigurationTest.test_valid_file_with_unsafe_permissions..Zwarning)r_rÚloggerZ addHandlerrr<r=r>rZ safe_openr@rdÚlenrW)r Úlogr<r r r Ú'test_valid_file_with_unsafe_permissionsŸs   zDCredentialsConfigurationTest.test_valid_file_with_unsafe_permissionsN) rrrÚloggingZHandlerr_rfrgrpr r r r rRs rRcsTeZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z ‡Z S)Ú#CredentialsConfigurationRequireTestcs tƒ ¡tj |jd¡|_dS)Nr8)rrrr<r=r>r rr r r­s z)CredentialsConfigurationRequireTest.setUpcCst ||j¡dSr)rrIr<)r Úvaluesr r r Ú_write²sz*CredentialsConfigurationRequireTest._writecCs0| dddœ¡t |j¡}| dddœ¡dS)Nr'rrar&©rtrrdr<Úrequire©r rer r r Ú test_validµs z.CredentialsConfigurationRequireTest.test_validcCs.| dddœ¡t |j¡}| ddi¡dS)Nr'rrarHr&rurwr r r Útest_valid_but_extra»s z8CredentialsConfigurationRequireTest.test_valid_but_extracCs$| i¡t |j¡}| i¡dSrrurwr r r Útest_valid_emptyÁs  z4CredentialsConfigurationRequireTest.test_valid_emptycCsT| i¡t |j¡}t tj¡| ddi¡Wdƒn1sF0YdS©NrHr&© rtrrdr<r4r5rr6rvrwr r r Ú test_missingÇs  z0CredentialsConfigurationRequireTest.test_missingcCsX| ddi¡t |j¡}t tj¡| ddi¡Wdƒn1sJ0YdSr{r|rwr r r Ú test_blankÎs z.CredentialsConfigurationRequireTest.test_blankcCsX| ddi¡t |j¡}t tj¡| ddi¡Wdƒn1sJ0YdS)NZtetsztypo!rHr&r|rwr r r Ú test_typoÕs z-CredentialsConfigurationRequireTest.test_typo) rrrrrtrxryrzr}r~rrQr r rr rr«s rrc@s$eZdZdd„Zdd„Zdd„ZdS)ÚDomainNameGuessTestcCsdt d¡vsJ‚dS)Nú example.com©rZbase_domain_name_guessesr r r r Útest_simple_caseßsÿz$DomainNameGuessTest.test_simple_casecCsdt d¡vsJ‚dS)Nrzfoo.bar.baz.example.comr‚r r r r Útest_sub_domainãsÿz#DomainNameGuessTest.test_sub_domaincCsdt d¡vsJ‚dS)Nz example.co.ukzfoo.bar.baz.example.co.ukr‚r r r r Útest_second_level_domainçsÿz,DomainNameGuessTest.test_second_level_domainN)rrrrƒr„r…r r r r r€Ýsr€Ú__main__r)Ú__doc__r\rqÚsysZunittestrr4ZcertbotrrZcertbot.compatrZcertbot.displayr)Zcertbot.pluginsrrZ certbot.testsrPZTempDirTestCaseZBaseAuthenticatorTestrrRrrZTestCaser€rÚexitÚmainÚargvÚ__file__r r r r Ús&        m*2