a }|ägiBã@sôdZddlZddlZddlZddlZddlZddlZddlmZddlZddl m Z ddl m Z ddl mZGdd„dejƒZGd d „d ejƒZd d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zedkrðe e ejdd…eg¡¡dS)zTest certbot.reverter.éN)Úmock)Úerrors)Úos)ÚutilcsðeZdZdZ‡fdd„Zdd„Ze d¡dd„ƒZd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Ze d¡dd„ƒZd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Ze d*¡d+d,„ƒZe d-¡d.d/„ƒZd0d1„Z‡ZS)2ÚReverterCheckpointLocalTestzTest the Reverter Class.csPtƒ ¡ddlm}t tj¡||jƒ|_t ƒ}|\|_ |_ |_ |_ |_dS©Nr)ÚReverter©ÚsuperÚsetUpZcertbot.reverterrÚloggingÚdisableZCRITICALÚconfigÚreverterÚsetup_test_filesÚconfig1Úconfig2Údir1Údir2Úsets©ÚselfrÚtup©Ú __class__©úI/usr/lib/python3.9/site-packages/certbot/_internal/tests/reverter_test.pyr s     z!ReverterCheckpointLocalTest.setUpcCs6t |jj¡t |j¡t |j¡t tj¡dS©N© ÚshutilÚrmtreerZwork_dirrrr r ZNOTSET©rrrrÚtearDowns  z$ReverterCheckpointLocalTest.tearDownz*certbot.reverter.Reverter._read_and_appendcCs®tdƒ|_z|j |jdd¡Wnty4Yn0|j d¡t |jjj ¡d}tj   |jjj |d¡}t |dƒ}|  ¡}Wdƒn1s”0Yd|vsªJ‚dS)Nz cannot evenrÚsave1ZblahÚ CHANGES_SINCEÚrz No changes)ÚOSErrorÚ side_effectrÚadd_to_checkpointrÚfinalize_checkpointrÚlistdirrÚ backup_dirÚpathÚjoinÚopenÚread)rZ mock_readr,Z no_changeÚfÚxrrrÚtest_no_change&s    &z*ReverterCheckpointLocalTest.test_no_changecCs’|j |jdd¡|j |jdd¡tj |jj¡sr?© rr6rrr@r&r'rArBrrCrNrDrrrÚ$test_recover_checkpoint_copy_failureÓs   z@ReverterCheckpointLocalTest.test_recover_checkpoint_copy_failurec Cs‚|j |jdd¡t d¡P}tdƒ|_t t j ¡|j  ¡Wdƒn1sV0YWdƒn1st0YdS)Nrz temp savezcertbot.reverter.shutil.rmtreezCannot remove treery)rZ mock_rmtreerrrÚ"test_recover_checkpoint_rm_failureÛs   z>ReverterCheckpointLocalTest.test_recover_checkpoint_rm_failurezcertbot.reverter.logger.warningcCs6|j dtj |jd¡¡|j ¡|jdks2J‚dS)NTzmissing_file.txtr3)rrHrr,r-rrNrk)rZ mock_warnrrrÚ)test_recover_checkpoint_missing_new_filesãs ÿ zEReverterCheckpointLocalTest.test_recover_checkpoint_missing_new_fileszcertbot.reverter.os.removecCsT|j d|j¡tdƒ|_t tj¡|j  ¡Wdƒn1sF0YdS)NTz Can't remove) rrHrr&r'rArBrrCrN)rZ mock_removerrrÚ&test_recover_checkpoint_remove_failureês zBReverterCheckpointLocalTest.test_recover_checkpoint_remove_failurecCstj |jd¡}|j d|¡t|dƒ|j |jdd¡t|j dƒ|j |jdd¡t|j d ƒ|j  |jdd ¡t|j d ƒtj |j d ¡}|j d |¡t|dƒ|j  ¡tj |¡rÊJ‚tj |¡rÚJ‚t|j ƒdksìJ‚t|j ƒdksþJ‚dS)NrFFzThis is a new perm file!rz perm save1zupdated perm config1r3z perm save2zupdated perm config2z temp save1zsecond update now temp config1rQTzNew temporary file!rMúdirective-dir2)rr,r-rrrHrIr(rrrr6rrRr:rOrSrrrÚ#test_recovery_routine_temp_and_permñs"      z?ReverterCheckpointLocalTest.test_recovery_routine_temp_and_perm)Ú__name__Ú __module__Ú __qualname__Ú__doc__r r"rr@r2r=rErLrPrTrXr^r`rhrirlrqrurxrzr{r|r}rÚ __classcell__rrrrrs6          rcs†eZdZdZ‡fdd„Zdd„Zdd„Zdd „Zd d „Ze   d ¡d d„ƒZ e   d¡dd„ƒZ e   d¡dd„ƒZ dd„Zdd„Z‡ZS)ÚTestFullCheckpointsReverterz5Tests functions having to deal with full checkpoints.csPtƒ ¡ddlm}t tj¡||jƒ|_t ƒ}|\|_ |_ |_ |_ |_dSrr rrrrr s     z!TestFullCheckpointsReverter.setUpcCs6t |jj¡t |j¡t |j¡t tj¡dSrrr!rrrr"!s  z$TestFullCheckpointsReverter.tearDowncCs¬t tj¡|j d¡Wdƒn1s.0Yt tj¡|j d¡Wdƒn1sf0Yt tj¡|j d¡Wdƒn1sž0YdS)Nz-1iüÿÿZone)rArBrrCrrwr!rrrÚtest_rollback_improper_inputs(s **z9TestFullCheckpointsReverter.test_rollback_improper_inputscCs| ¡}tt |jj¡ƒdks"J‚|j d¡t|j ƒdks@J‚t|j ƒdksRJ‚t|ƒdksbJ‚|j d¡t|j ƒdks€J‚t|j ƒdks’J‚tj   |¡r¢J‚t |jj¡}t|ƒdksÀJ‚dt tj  |jj|d¡ƒvsâJ‚|j d¡t|j ƒd ksJ‚dS) Nér3úupdate config1úupdate config2úFinal form config3r~úFirst CheckpointrrM)Ú_setup_three_checkpointsrVrr*rr+rrwrOrrr,r:r9r-)rrKZall_dirsrrrÚ.test_rollback_finalize_checkpoint_valid_inputs0s"  ÿ  zJTestFullCheckpointsReverter.test_rollback_finalize_checkpoint_valid_inputscCs|j d¡dS)NzNo checkpoint...)rr)r!rrrÚ'test_finalize_checkpoint_no_in_progressMszCTestFullCheckpointsReverter.test_finalize_checkpoint_no_in_progresszcertbot.reverter.shutil.movecCsZ|j |jdd¡tdƒ|_t tj¡|j  d¡Wdƒn1sL0YdS)Nrrmz cannot moverv© rr(rr&r'rArBrrCr))rZ mock_moverrrÚ%test_finalize_checkpoint_cannot_titleQs zATestFullCheckpointsReverter.test_finalize_checkpoint_cannot_titlez#certbot.reverter.filesystem.replacecCsV|j |jdd¡t|_t tj¡|j  d¡Wdƒn1sH0YdS)Nrrmrvr)rZ mock_replacerrrÚ,test_finalize_checkpoint_no_rename_directoryYszHTestFullCheckpointsReverter.test_finalize_checkpoint_no_rename_directoryzcertbot.reverter.loggercCsL|j d¡|jjdksJ‚| ¡d|j_|j d¡|jjdksHJ‚dS)Nr3ré)rrwZwarningrkrŒ)rZ mock_loggerrrrÚtest_rollback_too_manybs   z2TestFullCheckpointsReverter.test_rollback_too_manycCsL| ¡}|j d¡t|jƒdks&J‚t|jƒdks8J‚tj |¡rHJ‚dS)Nr‡rMr~) rŒrrwrOrrrr,r:rJrrrÚtest_multi_rollbackns  z/TestFullCheckpointsReverter.test_multi_rollbackcCsÐ|j |jdd¡|j d¡t|jdƒtj |j d¡}|j  d|¡t|dƒ|j |jdd ¡|j d ¡t|j d ƒt|d ƒ|j |jd d¡|j d¡t|jdƒt|j dƒt|dƒ|S)z$Generate some finalized checkpoints.rz first saver‹rˆrFFzdirective-config3r3z second savezSecond Checkpointr‰zupdate config3rGz third savezThird Checkpoint - Save bothzFinal form config1zFinal form config2rŠ) rr(rr)rIrrr,r-rrHrrJrrrrŒvs           z4TestFullCheckpointsReverter._setup_three_checkpoints)r€rr‚rƒr r"r†rrŽrr@rr‘r“r”rŒr„rrrrr…s    r…cCs¸t d¡}t d¡}tj |d¡}tj |d¡}t|dƒ}| d¡Wdƒn1sZ0Yt|dƒ}| d¡Wdƒn1sŽ0Y|h|h||hg}|||||fS)z!Setup sample configuration files.rrz config.txtÚwrMNr~)ÚtempfileZmkdtemprr,r-r.Úwrite)rrrrÚfile_fdrrrrr“s   ( (þrcCsttj |d¡ƒS)zRead save notesr$©rOrr,r-©Údirerrrr9¥sr9cCsttj |d¡ƒS)z Get FilepathsZ FILEPATHSr™ršrrrr;ªsr;cCsttj |d¡ƒ ¡S)úGet new files.r5)rOrr,r-Ú splitlinesršrrrrU¯srUcCsDttj |d¡ƒ}tt |¡ƒWdƒS1s60YdS)rœZCOMMANDSN)r.rr,r-ÚlistÚcsvÚreader)r›Zcsvfilerrrrd´srdcCs6t|dƒ}| ¡WdƒS1s(0YdS)zRead in a file, return the strr%N)r.r/)r,r˜rrrrOºs rOcCs8t|dƒ}| |¡Wdƒn1s*0YdS)zUpdate a file with a new value.r•N)r.r—)ÚfilenameÚstringr˜rrrrIÀs rIÚ__main__r3)rƒrŸr rÚsysr–ZunittestrrAZcertbotrZcertbot.compatrZ certbot.testsrZ test_utilZConfigTestCaserr…rr9r;rUrdrOrIr€ÚexitÚmainÚargvÚ__file__rrrrÚs2