a ‚oeiBã@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__©úFC:\Program Files\Certbot\pkgs\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'rBrCrrDrOrErrrÚ$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 treerz)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)rrIrr,r-rrOrl)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) rrIrr&r'rBrCrrDrO)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)NrGFzThis is a new perm file!rz perm save1zupdated perm config1r3z perm save2zupdated perm config2z temp save1zsecond update now temp config1rRTzNew temporary file!rNúdirective-dir2)rr,r-rrrIrJr(rrrr6rrSr:rPrTrrrÚ#test_recovery_routine_temp_and_permñs"      z?ReverterCheckpointLocalTest.test_recovery_routine_temp_and_perm)Ú__name__Ú __module__Ú __qualname__Ú__doc__r r"rr@r2r=rFrMrQrUrYr_rarirjrmrrrvryr{r|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)rBrCrrDrrxr!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 CheckpointrrN)Ú_setup_three_checkpointsrWrr*rr+rrxrPrrr,r:r9r-)rrLZall_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)Nrrnz cannot moverw© rr(rr&r'rBrCrrDr))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)Nrrnrwr)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é)rrxZwarningrlr)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ˆrNr) rrrxrPrrrr,r:rKrrrÚ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‰rGFzdirective-config3r3z second savezSecond CheckpointrŠzupdate config3rHz third savezThird Checkpoint - Save bothzFinal form config1zFinal form config2r‹) rr(rr)rJrrr,r-rrIrrKrrrrvs           z4TestFullCheckpointsReverter._setup_three_checkpoints)rr‚rƒr„r r"r‡rŽrrr@r‘r’r”r•rr…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ÚwrNNr)ÚtempfileZmkdtemprr,r-r.Úwrite)rrrrÚfile_fdrrrrr“s   ( (þrcCsttj |d¡ƒS)zRead save notesr$©rPrr,r-©Údirerrrr9¥sr9cCsttj |d¡ƒS)z Get FilepathsZ FILEPATHSršr›rrrr;ªsr;cCsttj |d¡ƒ ¡S)úGet new files.r5)rPrr,r-Ú splitlinesr›rrrrV¯srVcCsDttj |d¡ƒ}tt |¡ƒWdƒS1s60YdS)rZCOMMANDSN)r.rr,r-ÚlistÚcsvÚreader)rœZcsvfilerrrre´srecCs6t|dƒ}| ¡WdƒS1s(0YdS)zRead in a file, return the strr%N)r.r/)r,r™rrrrPºs rPcCs8t|dƒ}| |¡Wdƒn1s*0YdS)zUpdate a file with a new value.r–N)r.r˜)ÚfilenameÚstringr™rrrrJÀs rJÚ__main__r3)r„r r rÚsysr—ZunittestrrBZcertbotrZcertbot.compatrZ certbot.testsrZ test_utilZConfigTestCaserr†rr9r;rVrerPrJrÚexitÚmainÚargvÚ__file__rrrrÚs2