ó
Y[c           @  sX  d  Z  d d l m 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 Z d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z e j j e j d	 ƒ ƒ Z d
 e	 j f d „  ƒ  YZ d e	 j f d „  ƒ  YZ e  d k rTe	 j! ƒ  n  d S(   s"   Tests for certbot.plugins.webroot.iÿÿÿÿ(   t   print_functionN(   t
   challenges(   t   achallenges(   t   errors(   t   util(   t	   acme_utils   rsa512_key.pemt   AuthenticatorTestc           B  s4  e  Z d  Z e j d e j d d d e ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z e j ƒ  d
 „  ƒ Z e j ƒ  d „  ƒ Z e j ƒ  d „  ƒ Z e j ƒ  d „  ƒ Z d „  Z d „  Z e j d ƒ d „  ƒ Z e j ƒ  d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z e j d ƒ d „  ƒ Z RS(   s0   Tests for certbot.plugins.webroot.Authenticator.t   challbt   domains	   thing.comt   account_keyc         C  s´   d d l  m } t j ƒ  |  _ t j j |  j d ƒ |  _ t j j |  j d d ƒ |  _ t j j |  j d ƒ |  _	 t
 j d |  j d i |  j d 6ƒ |  _ | |  j d	 ƒ |  _ d  S(
   Niÿÿÿÿ(   t   Authenticators   .well-knowns   acme-challenget:   ZXZhR3hmQURzNnBTUmIyTEF2OUlaZjE3RHQzanV4R0orUEN0OTJ3citvQQt   webroot_patht   webroot_maps	   thing.comt   webroot(   t   certbot.plugins.webrootR
   t   tempfilet   mkdtempt   patht   ost   joint   partial_root_challenge_patht   root_challenge_patht   validation_patht   mockt	   MagicMockt   configt   auth(   t   selfR
   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   setUp$   s    			c         C  s   t  j |  j ƒ d  S(   N(   t   shutilt   rmtreeR   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   tearDown2   s    c         C  sB   |  j  j ƒ  } |  j t | t j ƒ ƒ |  j |  j | k ƒ d  S(   N(   R   t	   more_infot
   assertTruet
   isinstancet   sixt   string_typesR   (   R   R!   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_more_info5   s    c         C  s3   t  j ƒ  } |  j j | ƒ |  j d | j ƒ d  S(   Ni   (   R   R   R   t   add_parser_argumentst   assertEqualt
   call_count(   R   t   add(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_add_parser_arguments:   s    c         C  s   |  j  j ƒ  d  S(   N(   R   t   prepare(   R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_prepare?   s    c           sú   g  |  j  _ i |  j d 6|  j  _ | ƒ  } t j d f | j _ |  j j	 |  j
 g ƒ |  j | j j ƒ xg | j j D]Y ‰  |  j |  j
 j ˆ  d d k ƒ |  j t ‡  f d †  t j |  j  j ƒ Dƒ ƒ ƒ qv W|  j |  j  j |  j
 j |  j ƒ d  S(   Ns   otherthing.comi   i    c         3  s#   |  ] } | ˆ  d  d k Vq d S(   i    i   N(    (   t   .0R   (   t   call(    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pys	   <genexpr>N   s   (   R   R   R   R   t   display_utilt   OKt   menut   return_valueR   t   performt   achallR"   t   calledt   call_args_listR   t   allR$   t
   itervaluesR(   (   R   t   mock_get_utilityt   mock_display(    (   R/   s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_webroot_from_listB   s    	!	!c           sæ   g  |  j  _ i |  j d 6|  j  _ | ƒ  } t j d f f | j _ |  j t	 j
 |  j j |  j g ƒ |  j | j j ƒ xg | j j D]Y ‰  |  j |  j j ˆ  d d k ƒ |  j t ‡  f d †  t j |  j  j ƒ Dƒ ƒ ƒ q… Wd  S(   Ns   otherthing.comiÿÿÿÿi    c         3  s#   |  ] } | ˆ  d  d k Vq d S(   i    i   N(    (   R.   R   (   R/   (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pys	   <genexpr>_   s   (   R   R   R   R   R0   t   CANCELR2   t   side_effectt   assertRaisesR   t   PluginErrorR   R4   R5   R"   R6   R7   R   R8   R$   R9   (   R   R:   R;   (    (   R/   s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt&   test_webroot_from_list_help_and_cancelS   s    	"!	c         C  s¹   g  |  j  _ i |  j d 6|  j  _ | ƒ  } t j d f | j _ t j	 d ƒ A } t j
 d f t j |  j f f | _ |  j j |  j g ƒ Wd  QX|  j |  j  j |  j j |  j ƒ d  S(   Ns   something.comi    s'   certbot.display.ops.validated_directoryiÿÿÿÿ(   R   R   R   R   R0   R1   R2   R3   R   t   patchR=   R>   R   R4   R5   R(   R   (   R   R:   R;   t   m(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_new_webrootb   s    	c         C  s†   g  |  j  _ i  |  j  _ | ƒ  } t j d f | j _ t j d ƒ ; } t j	 d f | _ |  j
 t j |  j j |  j g ƒ Wd  QXd  S(   Ni    s'   certbot.display.ops.validated_directoryiÿÿÿÿ(   R   R   R   R0   R1   R2   R3   R   RB   R=   R?   R   R@   R   R4   R5   (   R   R:   R;   RC   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt!   test_new_webroot_empty_map_cancelq   s    		c         C  s8   d  |  j _ i  |  j _ |  j t j |  j j g  ƒ d  S(   N(	   t   NoneR   R   R   R?   R   R@   R   R4   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_perform_missing_root~   s    c         C  sÐ   t  j j |  j d ƒ |  j _ t  j j |  j d ƒ } t | d ƒ  } | j d ƒ Wd  QXt  j |  j d ƒ y t | d ƒ t d ƒ Wn- t	 k
 r¸ |  j
 t j |  j j g  ƒ n Xt  j |  j d ƒ d  S(	   Nt   nullt   rndt   wt   thingimyi    t   rs9   Warning, running tests as root skips permissions tests...iÀ  (   R   R   R   R   t	   full_patht   opent   writet   chmodt   printt   IOErrorR?   R   R@   R4   (   R   t   permission_canaryt   f(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt"   test_perform_reraises_other_errorsƒ   s     s    certbot.plugins.webroot.os.chownc         C  s/   t  t j d ƒ | _ |  j j |  j g ƒ d  S(   Nt   msg(   t   OSErrort   errnot   EACCESR>   R   R4   R5   (   R   t
   mock_chown(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_failed_chown‘   s    c         C  sÚ   t  j ƒ  } g  |  j _ i |  j d 6|  j _ | ƒ  } t j d f t j | f f | j _	 t
 j d t j d d d t ƒ } t j d ƒ , } t j | f | _ |  j j | g ƒ Wd  QX|  j |  j j | j | ƒ d  S(   Ns   whatever.comi    R   R   s   something.comR	   s'   certbot.display.ops.validated_directory(   R   R   R   R   R   R   R0   R1   R2   R>   R   t"   KeyAuthorizationAnnotatedChallengeR   t   HTTP01_Pt   KEYR   RB   R3   R   R4   R(   R   (   R   R:   t   new_webrootR;   R5   RC   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt#   test_perform_new_webroot_not_in_map—   s    		c   
      C  s4  |  j  j ƒ  |  j  j |  j g ƒ t j t j |  j ƒ j ƒ } |  j	 | d ƒ xt t j
 |  j ƒ D]` \ } } } xN | D]F } t j j | | ƒ } t j t j | ƒ j ƒ } |  j	 | d ƒ qz Wqd Wt j |  j ƒ j } t j |  j ƒ j }	 |  j	 t j |  j ƒ j | ƒ |  j	 t j |  j ƒ j |	 ƒ d  S(   Ni¤  ií  (   R   R,   R4   R5   t   statt   S_IMODER   R   t   st_modeR(   t   walkR   R   t   st_gidt   st_uid(
   R   t   path_permissionst   dirpatht   dirnamest   _t	   directoryRM   t   dir_permissionst
   parent_gidt
   parent_uid(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_perform_permissions¦   s    "c         C  s  |  j  j ƒ  |  j  j |  j g ƒ } |  j d t | ƒ ƒ |  j t j j	 |  j
 ƒ ƒ t |  j
 ƒ  } | j ƒ  } Wd  QX|  j t j d | ƒ j |  j j t j ƒ  ƒ ƒ |  j  j |  j g ƒ |  j t j j	 |  j
 ƒ ƒ |  j t j j	 |  j ƒ ƒ |  j t j j	 |  j ƒ ƒ d  S(   Ni   t   key_authorization(   R   R,   R4   R5   R(   t   lenR"   R   R   t   existsR   RN   t   readR   t!   KeyAuthorizationChallengeResponset   verifyt   challR^   t
   public_keyt   cleanupt   assertFalseR   R   (   R   t	   responsest   validation_ft
   validation(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_perform_cleanup½   s    		c         C  s…   t  j |  j ƒ |  j j ƒ  |  j j |  j g ƒ |  j j |  j g ƒ |  j t  j	 j
 |  j ƒ ƒ |  j t  j	 j
 |  j ƒ ƒ d  S(   N(   R   t   mkdirR   R   R,   R4   R5   Rx   Ry   R   Rr   R   R   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt"   test_perform_cleanup_existing_dirsÎ   s    c         C  s  t  j d t j t j d d ƒ d ƒ d d d t ƒ } d } t j |  j	 ƒ |  j
 j ƒ  |  j
 j | |  j g ƒ |  j
 j |  j g ƒ |  j t j j | ƒ ƒ |  j t j j |  j ƒ ƒ |  j
 j | g ƒ |  j t j j |  j ƒ ƒ |  j t j j |  j ƒ ƒ d  S(	   NR   t   tokent   bingot   pendingR   s	   thing.comR	   t   YmluZ28(   R   R\   R   t   chall_to_challbR   t   HTTP01R^   R   R~   R   R   R,   R4   R5   Rx   Ry   R   Rr   R"   R   R   (   R   t   bingo_achallt   bingo_validation_path(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt(   test_perform_cleanup_multiple_challengesØ   s    	c         C  s§   |  j  j ƒ  |  j  j |  j g ƒ t j j |  j d ƒ } t j | ƒ |  j  j	 |  j g ƒ |  j
 t j j |  j ƒ ƒ |  j t j j |  j ƒ ƒ t j | ƒ d  S(   Nt   leftover(   R   R,   R4   R5   R   R   R   R   R~   Rx   Ry   Rr   R   R"   t   rmdir(   R   t   leftover_path(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_cleanup_leftoversê   s    s   os.rmdirc         C  s“   |  j  j ƒ  |  j  j |  j g ƒ t ƒ  } t j | _ | | _ |  j  j |  j g ƒ |  j	 t
 j j |  j ƒ ƒ |  j t
 j j |  j ƒ ƒ d  S(   N(   R   R,   R4   R5   RW   RX   RY   R>   Rx   Ry   R   R   Rr   R   R"   R   (   R   t
   mock_rmdirt   os_error(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_cleanup_failure÷   s    		(    t   __name__t
   __module__t   __doc__R   R\   R   R]   R^   R5   R   R    R&   R+   R-   t	   test_utilt   patch_get_utilityR<   RA   RD   RE   RG   RU   R   RB   R[   R`   Ro   R}   R   Rˆ   RŒ   R   (    (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyR      s,   											
		t   WebrootActionTestc           B  se   e  Z d  Z e j d e j d d d e ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z RS(   s#   Tests for webroot argparse actions.R   R   s	   thing.comR	   c         C  sd   d d l  m } t j ƒ  |  _ t j ƒ  |  _ |  j j d d d d d g  ƒ| j	 |  j d ƒ d  S(	   Niÿÿÿÿ(   R
   s   -ds	   --domainst   actiont   appendt   defaultR   (
   R   R
   R   R   R   t   argparset   ArgumentParsert   parsert   add_argumentt   inject_parser_options(   R   R
   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyR     s    c         C  sB   |  j  j d d j |  j ƒ g ƒ } |  j | j d |  j ƒ d  S(   Ns   --webroot-maps   {{"thing.com":"{0}"}}s	   thing.com(   R›   t
   parse_argst   formatR   R(   R   (   R   t   args(    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_webroot_map_action  s    	c         C  s`   |  j  j d j |  j j |  j ƒ j ƒ  ƒ } |  j | ƒ } |  j | j	 |  j j |  j ƒ d  S(   Ns   -d {0} -w {1}(
   R›   Rž   RŸ   R5   R   R   t   splitt   _get_config_after_performR(   R   (   R   R    R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_domain_before_webroot  s    	$c         C  sH   |  j  t j |  j j d j ƒ  ƒ |  j  t j |  j j d j ƒ  ƒ d  S(   Ns   -d foo -w bar -w bazs   -d foo -w bar -d baz -w qux(   R?   R   R@   R›   Rž   R¢   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt    test_domain_before_webroot_error  s    c         C  s‰   |  j  j d j |  j |  j j t j ƒ  ƒ j ƒ  ƒ } |  j	 | j
 |  j j |  j ƒ |  j | ƒ } |  j	 | j
 |  j j |  j ƒ d  S(   Ns   -w {0} -d {1} -w {2} -d bar(   R›   Rž   RŸ   R   R5   R   R   R   R¢   R(   R   R£   (   R   R    R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   test_multiwebroot$  s    ' c         C  s9   d d l  m } | | d ƒ } | j |  j g ƒ | j S(   Niÿÿÿÿ(   R
   R   (   R   R
   R4   R5   R   (   R   R   R
   R   (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyR£   ,  s    (   R   R‘   R’   R   R\   R   R]   R^   R5   R   R¡   R¤   R¥   R¦   R£   (    (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyR•     s   						t   __main__("   R’   t
   __future__R    R™   RX   R   R   Ra   R   t   unittestt   josepyt   joseR   R$   t   acmeR   t   certbotR   R   t   certbot.displayR   R0   t   certbot.testsR   R“   t   JWKRSAt   loadt   load_vectorR^   t   TestCaseR   R•   R   t   main(    (    (    s@   /usr/lib/python2.7/dist-packages/certbot/plugins/webroot_test.pyt   <module>   s,   ç.