a }|ägÀ7ã@sdZddlZddlZddlZddlmZddlZddlZddlZddl m Z ddl m Z ddl mZddl mZddl mZddlmmZej e d ¡¡ZGd d „d ejƒZGd d „d ejƒZGdd„dejƒZGdd„dejƒZedkre  e !ej"dd…e#g¡¡dS)z$Tests for certbot._internal.account.éN)Úmock)Úmessages)Úerrors)Ú filesystem)Úmisc)Úoszrsa512_key.pemc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) Ú AccountTestz,Tests for certbot._internal.account.Account.c CsÚddlm}t ¡|_|jdtjddddddtjd d |_ ||jt |j ƒ|_ tjd d |j_ t  d ¡^}d|j_t  d¡,}|j j|jj_||jt ƒ|_Wdƒn1s®0YWdƒn1sÌ0YdS)Nr©ÚAccountztest.certbot.orgißéééé ©Ztzinfo©Z creation_hostÚ creation_dtZ i_am_a_regr)Ú return_valuez certbot._internal.account.socketz"certbot._internal.account.datetime)Úcertbot._internal.accountr rÚ MagicMockÚregrÚMetaÚdatetimeÚpytzÚUTCÚmetaÚKEYÚaccÚ__repr__ÚpatchZgetfqdnrrZnowZ acc_no_meta)Úselfr Z mock_socketZmock_dt©r úH/usr/lib/python3.9/site-packages/certbot/_internal/tests/account_test.pyÚsetUps  ÿþ  zAccountTest.setUpcCsdS©Nr ©rr r r!Ú test_init(szAccountTest.test_initcCsdSr#r r$r r r!Útest_id-szAccountTest.test_idcCsdSr#r r$r r r!Ú test_slug0szAccountTest.test_slugcCsdSr#r r$r r r!Ú test_repr3szAccountTest.test_reprN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r"r%r&r'r(r r r r!rs rc@s eZdZdZdd„Zdd„ZdS)ÚMetaTestz)Tests for certbot._internal.account.Meta.cCsddlm}|j d¡}dS)Nrr zU{ "creation_dt": "2020-06-13T07:46:45Z", "creation_host": "hyperion.localdomain"}©rr rZ json_loads©rr rr r r!Útest_deserialize_partial:s  ÿz!MetaTest.test_deserialize_partialcCsddlm}|j d¡}dS)Nrr zq{ "creation_dt": "2020-06-13T07:46:45Z", "creation_host": "hyperion.localdomain", "register_to_eff": "bar"}r.r/r r r!Útest_deserialize_fullEs  ÿzMetaTest.test_deserialize_fullN)r)r*r+r,r0r1r r r r!r-8s r-c@s eZdZdZdd„Zdd„ZdS)ÚAccountMemoryStorageTestz9Tests for certbot._internal.account.AccountMemoryStorage.cCsddlm}|ƒ|_dS)Nr)ÚAccountMemoryStorage)rr3Ústorage)rr3r r r!r"Us zAccountMemoryStorageTest.setUpcCsdtjdd}t tj¡|j d¡Wdƒn1s:0Y|j |d¡|j |d¡dS)NÚx)Úid) rZMockÚpytestÚraisesrÚAccountNotFoundr4ÚloadÚsave)rÚaccountr r r!Útest_itYs  *z AccountMemoryStorageTest.test_itN)r)r*r+r,r"r=r r r r!r2Rsr2cseZdZdZ‡fdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Ze d$¡d%d&„ƒZd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Z d9d:„Z!d;d<„Z"d=d>„Z#d?d@„Z$‡Z%S)AÚAccountFileStorageTestz7Tests for certbot._internal.account.AccountFileStorage.c s~tƒ ¡ddlm}||jƒ|_ddlm}|jdtjddddd d t j d d }|t j dt   ¡d t|d|_t ¡|_dS)Nr©ÚAccountFileStorager ztest.example.orgiåéér r rrr)ZuriÚbody)rÚkeyr)Úsuperr"rr@Úconfigr4r rrrrrZRegistrationResourceZ RegistrationrrrrÚ mock_client)rr@r r©Ú __class__r r!r"hs$    ÿþÿüzAccountFileStorageTest.setUpcCsdSr#r r$r r r!Útest_init_creates_dirzsz,AccountFileStorageTest.test_init_creates_dircCsF|j |j|j¡tj |jj|jj ¡}dD]}q,|j  |jj ¡}dS)N)z regr.jsonz meta.jsonzprivate_key.json) r4r;rrGrÚpathÚjoinrFÚ accounts_dirr6r:)rÚ account_pathÚ file_nameZloadedr r r!Útest_save_and_restore~s z,AccountFileStorageTest.test_save_and_restorecCs(|j |j¡tj |jj|jj¡}dSr#) r4Z update_regrrrrKrLrFrMr6©rrNr r r!Útest_update_regr‹sz'AccountFileStorageTest.test_update_regrcCs(|j |j¡tj |jj|jj¡}dSr#) r4Z update_metarrrKrLrFrMr6rQr r r!Útest_update_meta”sz'AccountFileStorageTest.test_update_metacCs|j |j|j¡dSr#)r4r;rrGr$r r r!Ú test_find_allsz$AccountFileStorageTest.test_find_allcCsdSr#r r$r r r!Útest_find_all_none_empty_list¡sz4AccountFileStorageTest.test_find_all_none_empty_listcCst |jj¡dSr#)rÚrmdirrFrMr$r r r!Ú!test_find_all_accounts_dir_absent¤sz8AccountFileStorageTest.test_find_all_accounts_dir_absentcCsPtjdtjdgd|j_t d¡}gd¢|_Wdƒn1sB0YdS)Nr5Úz©Ú side_effectz$certbot._internal.account.os.listdir)r5ÚyrX)rrrÚAccountStorageErrorr4Ú_load_for_server_pathrr)rZ mock_listdirr r r!Útest_find_all_load_skips¨s  ÿ   z/AccountFileStorageTest.test_find_all_load_skipscCs<t tj¡|j d¡Wdƒn1s.0YdS)NÚmissing)r7r8rr9r4r:r$r r r!Ú#test_load_non_existent_raises_error°sz:AccountFileStorageTest.test_load_non_existent_raises_errorcCs$||j_ddlm}||jƒ|_dS)Nrr?)rFÚserverrr@r4)rrar@r r r!Ú _set_server´s z"AccountFileStorageTest._set_servercCs| d¡dS©Nú6https://acme-staging-v02.api.letsencrypt.org/directory)rbr$r r r!Útest_find_all_neither_exists¹s z3AccountFileStorageTest.test_find_all_neither_existscCs$| d¡|j |j|j¡d}dS©Nrdú2https://acme-staging.api.letsencrypt.org/directory©rbr4r;rrG©rZprev_server_pathr r r!Útest_find_all_find_before_save¿s z5AccountFileStorageTest.test_find_all_find_before_savecCs$| d¡|j |j|j¡d}dSrfrhrir r r!Útest_find_all_save_before_findÊs z5AccountFileStorageTest.test_find_all_save_before_findcCs*| d¡|j |j|j¡| d¡dSrfrhr$r r r!Útest_find_all_server_downgradeÔs  z5AccountFileStorageTest.test_find_all_server_downgradecCs*| d¡|j |j|j¡| d¡dS©Nrgrdrhr$r r r!Útest_upgrade_version_stagingÝs  z3AccountFileStorageTest.test_upgrade_version_stagingcCs*| d¡|j |j|j¡| d¡dS)Nz.https://acme-v01.api.letsencrypt.org/directoryz.https://acme-v02.api.letsencrypt.org/directoryrhr$r r r!Útest_upgrade_version_productionãs  z6AccountFileStorageTest.test_upgrade_version_productionzcertbot.compat.os.rmdircCsB| d¡|j |j|j¡t|_tjt j d|j_ | d¡dS)NrgrYrd) rbr4r;rrGÚOSErrorrZrrrr\r])rZ mock_rmdirr r r!Útest_corrupted_accountés ÿ  z-AccountFileStorageTest.test_corrupted_accountcCsJ| d¡|j |j|j¡|j |jj¡}| d¡|j |jj¡}dSrm)rbr4r;rrGr:r6©rZ prev_accountr<r r r!Útest_upgrade_loadôs   z(AccountFileStorageTest.test_upgrade_loadcCsJ| d¡|j |j|j¡|j |jj¡}| d¡|j |jj¡}dSrm)rbr4r;rrGr:r6Ú_set_server_and_stop_symlinkrrr r r!Ú test_upgrade_load_single_accountüs   z7AccountFileStorageTest.test_upgrade_load_single_accountc CsŒ|j |j|j¡t ¡}t|_t d|¡Lt   t j ¡ |j  |jj¡Wdƒn1s`0YWdƒn1s~0YdS©Nz builtins.open)r4r;rrGrÚ mock_openÚIOErrorrZrr7r8rr\r:r6©rrwr r r!Útest_load_ioerrors z(AccountFileStorageTest.test_load_ioerrorc Cs|t ¡}t|_t d|¡Nt tj¡"|j   |j |j ¡Wdƒn1sP0YWdƒn1sn0YdSrv) rrwrxrZrr7r8rr\r4r;rrGryr r r!Útest_save_ioerrors s z)AccountFileStorageTest.test_save_ioerrorscCsb|j |j|j¡|j |jj¡t tj ¡ |j  |jj¡Wdƒn1sT0YdSr#) r4r;rrGÚdeleter6r7r8rr9r:r$r r r!Ú test_deletesz"AccountFileStorageTest.test_deletecCs@t tj¡ |j |jj¡Wdƒn1s20YdSr#)r7r8rr9r4r|rr6r$r r r!Útest_delete_no_accountsz-AccountFileStorageTest.test_delete_no_accountc Cs’| d¡|j |j|j¡t di¡V| d¡t t j ¡ |j  |jj ¡Wdƒn1sf0YWdƒn1s„0YdS)Nrgz,certbot._internal.constants.LE_REUSE_SERVERSrd) rbr4r;rrGrrr7r8rr9r:r6r$r r r!Ú!_assert_symlinked_account_removeds   z8AccountFileStorageTest._assert_symlinked_account_removedcCsà| d¡|j |j|j¡| d¡|j |jj¡| |¡|j |jj¡| d¡t  t j ¡ |j |jj¡Wdƒn1sŒ0Y| d¡t  t j ¡ |j |jj¡Wdƒn1sÒ0YdSrm) rbr4r;rrGr:r6r|r7r8rr9)rZ server_urlr r r!Ú_test_delete_folders's    . z+AccountFileStorageTest._test_delete_folderscCs| d¡| ¡dS)Nrg©r€rr$r r r!Útest_delete_folders_up:s z-AccountFileStorageTest.test_delete_folders_upcCs| d¡| ¡dSrcrr$r r r!Útest_delete_folders_down>s z/AccountFileStorageTest.test_delete_folders_downcCsP| |¡ttj |jjd¡dƒ}| d¡Wdƒn1sB0YdS)NZfooÚwZbar)rbÚopenrrKrLrFrMÚwrite)rZ server_pathÚfr r r!rtBs z3AccountFileStorageTest._set_server_and_stop_symlinkcCs| d¡| d¡dSrf©rtr€r$r r r!Útest_delete_shared_account_upGs z4AccountFileStorageTest.test_delete_shared_account_upcCs| d¡| d¡dSrcrˆr$r r r!Útest_delete_shared_account_downKs z6AccountFileStorageTest.test_delete_shared_account_down)&r)r*r+r,r"rJrPrRrSrTrUrWr^r`rbrerjrkrlrnrorrrqrsrurzr{r}r~rr€r‚rƒrtr‰rŠÚ __classcell__r r rHr!r>esB         r>Ú__main__rA)$r,rÚsysZunittestrZjosepyZjoser7rZacmerZcertbotrZcertbot.compatrrrZcertbot.tests.utilZtestsÚutilZ test_utilZJWKRSAr:Z load_vectorrZTestCaserr-r2ZConfigTestCaser>r)ÚexitÚmainÚargvÚ__file__r r r r!Ús*      #l