ó
Y[c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 m
 Z
 d d l m Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d k re j ƒ  n  d S(   s   Test certbot.reverter.iÿÿÿÿN(   t   errors(   t   utilt   ReverterCheckpointLocalTestc           B   s  e  Z d  Z d „  Z d „  Z e j d ƒ d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z e j d ƒ d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z e j d ƒ d „  ƒ Z e j d ƒ d „  ƒ Z d „  Z RS(   s   Test the Reverter Class.c         C   sv   t  t |  ƒ j ƒ  d d l m } t j t j ƒ | |  j ƒ |  _	 t
 ƒ  } | \ |  _ |  _ |  _ |  _ |  _ d  S(   Niÿÿÿÿ(   t   Reverter(   t   superR   t   setUpt   certbot.reverterR   t   loggingt   disablet   CRITICALt   configt   revertert   setup_test_filest   config1t   config2t   dir1t   dir2t   sets(   t   selfR   t   tup(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR      s    	c         C   sG   t  j |  j j ƒ t  j |  j ƒ t  j |  j ƒ t j t j ƒ d  S(   N(	   t   shutilt   rmtreeR
   t   work_dirR   R   R   R   t   NOTSET(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   tearDown    s    s*   certbot.reverter.Reverter._read_and_appendc         C   sÉ   t  d ƒ | _ y |  j j |  j d d ƒ Wn t  k
 r@ n X|  j j d ƒ t j |  j j j	 ƒ d } t j
 j |  j j j	 | d ƒ } t | d ƒ  } | j ƒ  } Wd  QX|  j d | k ƒ d  S(   Ns   cannot eveni    t   save1t   blaht   CHANGES_SINCEt   rs
   No changes(   t   OSErrort   side_effectR   t   add_to_checkpointR   t   finalize_checkpointt   ost   listdirR
   t
   backup_dirt   patht   joint   opent   readt
   assertTrue(   R   t	   mock_readR$   t	   no_changet   ft   x(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_no_change'   s    !c         C   sÏ   |  j  j |  j d d ƒ |  j  j |  j d d ƒ |  j t j j |  j j ƒ ƒ |  j	 t
 |  j j ƒ d ƒ |  j t j j t j j |  j j d ƒ ƒ ƒ |  j	 t |  j j ƒ d j |  j |  j ƒ ƒ d  S(   Ni    R   i   t   save2t
   save1save2t	   NEW_FILESs   {0}
{1}
(   R   t   add_to_temp_checkpointR   R(   R!   R$   t   isdirR
   t   temp_checkpoint_dirt   assertEqualt   get_save_notest   assertFalset   isfileR%   t   get_filepathst   formatR   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt!   test_basic_add_to_temp_checkpoint5   s    	c      	   C   sQ   t  j d ƒ < } t d ƒ | _ |  j t j |  j j |  j	 d d ƒ Wd  QXd  S(   Ns   certbot.reverter.shutil.copy2s   bad copyi    R   (
   t   mockt   patcht   IOErrorR   t   assertRaisesR    t   ReverterErrorR   R   R   (   R   t
   mock_copy2(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt#   test_add_to_checkpoint_copy_failureD   s
    c         C   sØ   t  j j |  j d ƒ } |  j j t | ƒ t | d ƒ |  j j |  j	 d d ƒ |  j j
 |  j	 d d ƒ |  j t j |  j j |  j	 d d ƒ |  j j |  j	 d d	 ƒ |  j t j |  j j t | g ƒ d
 ƒ d S(   s:   Make sure that checkpoint errors are thrown appropriately.s   config3.txts   This is a new file!i   R   i    R.   t   save3i   t   save4s   invalid saveN(   R!   R$   R%   R   R   t   register_file_creationt   Truet   update_fileR   R   R1   R>   R    R?   t   set(   R   t   config3(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_checkpoint_conflictK   s    c         C   s~   |  j  j |  j d d ƒ t |  j d ƒ |  j  j |  j d d ƒ t |  j d ƒ |  j  j ƒ  |  j t |  j ƒ d ƒ d  S(   Ni    R   s   updated-directives   save2-updated dirs'   new directive change that we won't keeps   directive-dir1(   R   R1   R   RF   R   t   revert_temporary_configR4   t   read_in(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt#   test_multiple_saves_and_temp_revert^   s    c         C   s  t  j j |  j d ƒ } t | d ƒ t  j j |  j d ƒ } t | d ƒ |  j j t |  j	 ƒ |  j j t |  j
 ƒ |  j j t | | ƒ |  j j ƒ  |  j t  j j |  j	 ƒ ƒ |  j t  j j |  j
 ƒ ƒ |  j t  j j | ƒ ƒ |  j t  j j | ƒ ƒ d  S(   Ns   config3.txtt   Config3s   config4.txtt   Config4(   R!   R$   R%   R   RF   R   R   RD   RE   R   R   t   recovery_routineR6   R7   (   R   RH   t   config4(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt*   test_multiple_registration_fail_and_revertg   s    c         C   s„   |  j  j t |  j ƒ |  j  j t |  j ƒ |  j  j t |  j ƒ |  j  j t |  j ƒ t |  j j ƒ } |  j t | ƒ d ƒ d  S(   Ni   (	   R   RD   RE   R   t   get_new_filesR
   R3   R4   t   len(   R   t   files(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt$   test_multiple_registration_same_file{   s    c      	   C   s`   t  j ƒ  } t  j d | d t ƒ6 t d ƒ | _ |  j t j |  j	 j
 t |  j ƒ Wd  QXd  S(   Ns   certbot.reverter.opent   creates   bad open(   R;   t	   mock_openR<   RE   R   R   R>   R    R?   R   RD   R   (   R   t   m_open(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt'   test_register_file_creation_write_error…   s    c         C   s    |  j  t j |  j j d ƒ d  S(   Nt   filepath(   R>   R    R?   R   RD   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_bad_registration   s    c         C   sŽ   d d g d d g d g g } x! | D] } |  j  j t | ƒ q% Wt |  j j ƒ } x3 t j j | | ƒ D] \ } } |  j	 | | ƒ qj Wd  S(   Nt   a2dismodt   sslt   rewritet
   cleanslate(
   R   t   register_undo_commandRE   t   get_undo_commandsR
   R3   t   sixt   movest   zipR4   (   R   t   comst   comt   act_comst   a_com(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_register_undo_command“   s    		"c      	   C   s`   t  j ƒ  } t  j d | d t ƒ6 t d ƒ | _ |  j t j |  j	 j
 t d g ƒ Wd  QXd  S(   Ns   certbot.reverter.openRV   s   bad opent   command(   R;   RW   R<   RE   R   R   R>   R    R?   R   R`   (   R   RX   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_bad_register_undo_command¡   s    s   certbot.util.run_scriptc         C   so   d t  j g | _ d g d d g g } x! | D] } |  j j t | ƒ q. W|  j j ƒ  |  j | j d ƒ d  S(   Nt    t   invalid_commandR\   R]   i   (	   R    t   SubprocessErrorR   R   R`   RE   RJ   R4   t
   call_count(   R   t   mock_runRe   Rf   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_run_undo_commands©   s    c         C   sR   |  j  j |  j d d ƒ t j d t j ƒ |  j  _ |  j t j |  j  j	 ƒ d  S(   Ni    s	   perm saveR   (
   R   R   R   R;   t	   MagicMockR    R?   t   _recover_checkpointR>   RO   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt)   test_recovery_routine_in_progress_failure·   s    	c         C   s^   t  j d t j d ƒ ƒ } | |  j _ |  j j |  j d d ƒ |  j t j |  j j	 ƒ d  S(   NR   t   ei    s   config1 save(
   R;   Rr   R    R?   R   Rs   R1   R   R>   RJ   (   R   t   mock_recover(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt,   test_recover_checkpoint_revert_temp_failures¿   s    	c         C   sq   t  j d t j d ƒ ƒ } | |  j _ |  j j |  j d d ƒ |  j j d ƒ |  j	 t j |  j j
 d ƒ d  S(   NR   Ru   i    s   config1 savet   Titlei   (   R;   Rr   R    R?   R   Rs   R   R   R    R>   t   rollback_checkpoints(   R   Rv   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt(   test_recover_checkpoint_rollback_failureÌ   s    	c         C   s^   |  j  j |  j d d ƒ t j d ƒ / } t d ƒ | _ |  j t j	 |  j  j
 ƒ Wd  QXd  S(   Ni    R   s   certbot.reverter.shutil.copy2s   bad copy(   R   R1   R   R;   R<   R   R   R>   R    R?   RJ   (   R   R@   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt$   test_recover_checkpoint_copy_failureØ   s
    c         C   s^   |  j  j |  j d d ƒ t j d ƒ / } t d ƒ | _ |  j t j	 |  j  j
 ƒ Wd  QXd  S(   Ni    s	   temp saves   certbot.reverter.shutil.rmtrees   Cannot remove tree(   R   R1   R   R;   R<   R   R   R>   R    R?   RJ   (   R   t   mock_rmtree(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt"   test_recover_checkpoint_rm_failureà   s
    s   certbot.reverter.logger.warningc         C   sI   |  j  j t t j j |  j d ƒ ƒ |  j  j ƒ  |  j | j	 d ƒ d  S(   Ns   missing_file.txti   (
   R   RD   RE   R!   R$   R%   R   RJ   R4   Ro   (   R   t	   mock_warn(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt)   test_recover_checkpoint_missing_new_filesè   s    	s   certbot.reverter.os.removec         C   sB   |  j  j t |  j ƒ t d ƒ | _ |  j t j |  j  j	 ƒ d  S(   Ns   Can't remove(
   R   RD   RE   R   R   R   R>   R    R?   RJ   (   R   t   mock_remove(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt&   test_recover_checkpoint_remove_failureï   s    c         C   sc  t  j j |  j d ƒ } |  j j t | ƒ t | d ƒ |  j j |  j	 d d ƒ t |  j
 d ƒ |  j j |  j	 d d ƒ t |  j d ƒ |  j j |  j	 d d	 ƒ t |  j
 d
 ƒ t  j j |  j d ƒ } |  j j t | ƒ t | d ƒ |  j j ƒ  |  j t  j j | ƒ ƒ |  j t  j j | ƒ ƒ |  j t |  j
 ƒ d ƒ |  j t |  j ƒ d ƒ d  S(   Ns   config3.txts   This is a new perm file!i    s
   perm save1s   updated perm config1i   s
   perm save2s   updated perm config2s
   temp save1s   second update now temp config1s   config4.txts   New temporary file!s   directive-dir1s   directive-dir2(   R!   R$   R%   R   R   RD   t   FalseRF   R   R   R   R   R1   R   RE   RO   R6   R7   R4   RK   (   R   RH   RP   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt#   test_recovery_routine_temp_and_permö   s"    (   t   __name__t
   __module__t   __doc__R   R   R;   R<   R-   R:   RA   RI   RL   RQ   RU   RY   R[   Ri   Rk   Rq   Rt   Rw   Rz   R{   R}   R   R   Rƒ   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR      s.   									
									t   TestFullCheckpointsReverterc           B   sÔ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j	 d ƒ d „  ƒ Z
 e j	 d ƒ d	 „  ƒ Z e j	 d
 ƒ d „  ƒ Z d „  Z e j ƒ  d „  ƒ Z e j	 d
 ƒ d „  ƒ Z d „  Z d „  Z d „  Z RS(   s5   Tests functions having to deal with full checkpoints.c         C   sv   t  t |  ƒ j ƒ  d d l m } t j t j ƒ | |  j ƒ |  _	 t
 ƒ  } | \ |  _ |  _ |  _ |  _ |  _ d  S(   Niÿÿÿÿ(   R   (   R   R‡   R   R   R   R   R   R	   R
   R   R   R   R   R   R   R   (   R   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR     s    	c         C   sG   t  j |  j j ƒ t  j |  j ƒ t  j |  j ƒ t j t j ƒ d  S(   N(	   R   R   R
   R   R   R   R   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR   &  s    c         C   sX   |  j  t j |  j j d ƒ |  j  t j |  j j d ƒ |  j  t j |  j j d ƒ d  S(   Ns   -1iüÿÿt   one(   R>   R    R?   R   Ry   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_rollback_improper_inputs-  s    c         C   sn  |  j  ƒ  } |  j t t j |  j j ƒ ƒ d ƒ |  j j d ƒ |  j t	 |  j
 ƒ d ƒ |  j t	 |  j ƒ d ƒ |  j t	 | ƒ d ƒ |  j j d ƒ |  j t	 |  j
 ƒ d ƒ |  j t	 |  j ƒ d ƒ |  j t j j | ƒ ƒ t j |  j j ƒ } |  j t | ƒ d ƒ |  j d t t j j |  j j | d ƒ ƒ k ƒ |  j j d ƒ |  j t	 |  j
 ƒ d	 ƒ d  S(
   Ni   i   s   update config1s   update config2s   Final form config3s   directive-dir2s   First Checkpointi    s   directive-dir1(   t   _setup_three_checkpointsR4   RS   R!   R"   R
   R#   R   Ry   RK   R   R   R6   R$   R7   R(   R5   R%   (   R   RH   t   all_dirs(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt.   test_rollback_finalize_checkpoint_valid_inputs5  s"    %&c         C   s   |  j  j d ƒ d  S(   Ns   No checkpoint...(   R   R    (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt'   test_finalize_checkpoint_no_in_progressS  s    s   certbot.reverter.shutil.movec         C   sI   |  j  j |  j d d ƒ t d ƒ | _ |  j t j |  j  j d ƒ d  S(   Ni    s	   perm saves   cannot moveRx   (	   R   R   R   R   R   R>   R    R?   R    (   R   t	   mock_move(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt%   test_finalize_checkpoint_cannot_titleW  s    s   certbot.reverter.os.renamec         C   sC   |  j  j |  j d d ƒ t | _ |  j t j |  j  j d ƒ d  S(   Ni    s	   perm saveRx   (	   R   R   R   R   R   R>   R    R?   R    (   R   t   mock_rename(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt,   test_finalize_checkpoint_no_rename_directory_  s    	s   certbot.reverter.loggerc         C   sf   |  j  j d ƒ |  j | j j d ƒ |  j ƒ  d | j _ |  j  j d ƒ |  j | j j d ƒ d  S(   Ni   i    i   (   R   Ry   R4   t   warningRo   RŠ   (   R   t   mock_logger(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_rollback_too_manyh  s    
c         C   sk   |  j  ƒ  } |  j j d ƒ |  j t |  j ƒ d ƒ |  j t |  j ƒ d ƒ |  j t j	 j
 | ƒ ƒ d  S(   Ni   s   directive-dir1s   directive-dir2(   RŠ   R   Ry   R4   RK   R   R   R6   R!   R$   R7   (   R   RH   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_multi_rollbackt  s
    c         C   s4   |  j  ƒ  |  j j ƒ  |  j | ƒ  j j d ƒ d S(   s0   This is not strict as this is subject to change.i   N(   RŠ   R   t   view_config_changesR4   t   notificationRo   (   R   t   mock_output(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   test_view_config_changes|  s    
c         C   s*   |  j  j ƒ  |  j | j j d k ƒ d  S(   Ni    (   R   R–   R(   t   infoRo   (   R   R“   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt#   test_view_config_changes_no_backups‡  s    c         C   s?   t  j t  j j |  j j d ƒ ƒ |  j t j |  j	 j
 ƒ d  S(   Nt   in_progress(   R!   t   makedirsR$   R%   R
   R#   R>   R    R?   R   R–   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt(   test_view_config_changes_bad_backups_dirŒ  s    "c         C   s\   |  j  ƒ  |  j j d t ƒ } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Nt   for_loggings   First Checkpoints   Second Checkpoints   Third Checkpoint(   RŠ   R   R–   RE   R(   (   R   t   config_changes(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt$   test_view_config_changes_for_logging”  s
    
c         C   s  |  j  j |  j d d ƒ |  j  j d ƒ t |  j d ƒ t j j |  j	 d ƒ } |  j  j
 t | ƒ t | d ƒ |  j  j |  j d d ƒ |  j  j d	 ƒ t |  j d
 ƒ t | d ƒ |  j  j |  j d d ƒ |  j  j d ƒ t |  j d ƒ t |  j d ƒ t | d ƒ | S(   s$   Generate some finalized checkpoints.i    s
   first saves   First Checkpoints   update config1s   config3.txts   directive-config3i   s   second saves   Second Checkpoints   update config2s   update config3i   s
   third saves   Third Checkpoint - Save boths   Final form config1s   Final form config2s   Final form config3(   R   R   R   R    RF   R   R!   R$   R%   R   RD   R‚   R   (   R   RH   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyRŠ     s     (   R„   R…   R†   R   R   R‰   RŒ   R   R;   R<   R   R‘   R”   R•   t	   test_utilt   patch_get_utilityR™   R›   Rž   R¡   RŠ   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR‡     s   										c          C   sÒ   t  j d ƒ }  t  j d ƒ } t j j |  d ƒ } t j j | d ƒ } t | d ƒ  } | j d ƒ Wd QXt | d ƒ  } | j d ƒ Wd QXt | g ƒ t | g ƒ t | | g ƒ g } | | |  | | f S(   s!   Setup sample configuration files.R   R   s
   config.txtt   ws   directive-dir1Ns   directive-dir2(   t   tempfilet   mkdtempR!   R$   R%   R&   t   writeRG   (   R   R   R   R   t   file_fdR   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR   º  s    c         C   s   t  t j j |  d ƒ ƒ S(   s   Read save notesR   (   RK   R!   R$   R%   (   t   dire(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR5   Ì  s    c         C   s   t  t j j |  d ƒ ƒ S(   s   Get Filepathst	   FILEPATHS(   RK   R!   R$   R%   (   R©   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyR8   Ñ  s    c         C   s   t  t j j |  d ƒ ƒ j ƒ  S(   s   Get new files.R0   (   RK   R!   R$   R%   t
   splitlines(   R©   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyRR   Ö  s    c         C   s;   t  t j j |  d ƒ ƒ  } t t j | ƒ ƒ SWd QXd S(   s   Get new files.t   COMMANDSN(   R&   R!   R$   R%   t   listt   csvt   reader(   R©   t   csvfile(    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyRa   Û  s    c         C   s&   t  |  d ƒ  } | j ƒ  SWd QXd S(   s   Read in a file, return the strR   N(   R&   R'   (   R$   R¨   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyRK   á  s    c         C   s)   t  |  d ƒ  } | j | ƒ Wd QXd S(   s   Update a file with a new value.R¤   N(   R&   R§   (   t   filenamet   stringR¨   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyRF   ç  s    t   __main__(   R†   R®   R   R!   R   R¥   t   unittestR;   Rb   t   certbotR    t   certbot.testsR   R¢   t   ConfigTestCaseR   R‡   R   R5   R8   RR   Ra   RK   RF   R„   t   main(    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/tests/reverter_test.pyt   <module>   s,   ÿ ¢							