
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 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 e j d
 e j e j d d  d  d d d e  e j d
 e j e j d d  d  d d d e  g Z d e j f d     YZ d e j f d     YZ d e j f d     YZ  d e j f d     YZ! d e j f d     YZ" d e j f d     YZ# d e j$ f d      YZ% e& d! k re j'   n  d S("   s!   Tests for certbot.plugins.common.iN(   t
   challenges(   t   achallenges(   t   crypto_util(   t   errors(   t	   acme_util(   t   utils   rsa512_key.pemt   challbt   tokent   token1t   pendingt   domains   encryption-example.demot   account_keyt   token2s   certbot.demot   NamespaceFunctionsTestc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s7   Tests for certbot.plugins.common.*_namespace functions.c         C   s*   d d l  m } |  j d | d   d  S(   Ni(   t   option_namespaces   foo-t   foo(   t   certbot.plugins.commonR   t   assertEqual(   t   selfR   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_option_namespace$   s    c         C   s*   d d l  m } |  j d | d   d  S(   Ni(   t   dest_namespacet   foo_R   (   R   R   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_dest_namespace(   s    c         C   s*   d d l  m } |  j d | d   d  S(   Ni(   R   t   foo_bar_s   foo-bar(   R   R   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_dest_namespace_with_dashes,   s    (   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   !   s   		t
   PluginTestc           B   sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   s'   Test for certbot.plugins.common.Plugin.c         C   s]   d d l  m } d | f d     Y} | |  _ t j   |  _ | d |  j d d  |  _ d  S(   Ni(   t   Plugint
   MockPluginc           B   s   e  Z e d     Z RS(   c         S   s    | d d d d d d d  d  S(   Ns   foo-bart   destt   different_to_foo_bart   xi   t   y(   t   None(   t   clst   add(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   add_parser_arguments8   s    (   R   R   t   classmethodR&   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   7   s   t   configt   namet   mock(   R   R   t
   plugin_clsR*   t	   MagicMockR(   t   plugin(   R   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   setUp4   s
    	c         C   s3   |  j  d |  j j  |  j  |  j |  j j  d  S(   NR*   (   R   R-   R)   R(   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt	   test_init@   s    c         C   s   |  j  d |  j j  d  S(   Ns   mock-(   R   R-   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   D   s    c         C   s    |  j  d |  j j d   d  S(   Ns   mock-foo_bart   foo_bar(   R   R-   t   option_name(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_option_nameG   s    c         C   s   |  j  d |  j j  d  S(   Nt   mock_(   R   R-   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   J   s    c         C   s<   |  j  d |  j j d   |  j  d |  j j d   d  S(   Nt   mock_foo_bars   foo-barR0   (   R   R-   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt	   test_destM   s    c         C   s&   |  j  |  j j |  j j d   d  S(   Ns   foo-bar(   R   R(   R4   R-   t   conf(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt	   test_confQ   s    c         C   sE   t  j   } |  j j | d  | j j d d d d d d d  d  S(   NR*   s   --mock-foo-barR   R    R!   i   R"   (   R*   R,   R+   t   inject_parser_optionst   add_argumentt   assert_called_once_withR#   (   R   t   parser(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_inject_parser_optionsT   s    	(   R   R   R   R.   R/   R   R2   R   R5   R7   R<   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   1   s   							t   InstallerTestc           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z RS(   s+   Tests for certbot.plugins.common.Installer.c      	   C   sz   t  t |   j   t j |  j j  d d l m } t	 j
 d    | d |  j d d  |  _ Wd  QX|  j j |  _ d  S(   Ni(   t	   Installers(   certbot.plugins.common.reverter.ReverterR(   R)   R>   (   t   superR=   R.   t   ost   mkdirR(   t
   config_dirR   R>   R*   t   patcht	   installert   reverter(   R   R>   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR.   `   s    c         C   s)   t  d  } d } |  j d | |  d  S(   Ns   foo.bars   baz.quxs   foo bar baz quxt   add_to_checkpoint(   s   foo.bars   baz.qux(   t   sett   _test_wrapped_method(   R   t   filest
   save_notes(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_add_to_real_checkpointj   s    c         C   s   |  j  t  d  S(   N(   t   _test_add_to_checkpoint_commont   False(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_add_to_real_checkpoint2o   s    c         C   s   |  j  t  d  S(   N(   RL   t   True(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt    test_add_to_temporary_checkpointr   s    c         C   sh   t  d  } d } t j |  j j d | } | rB |  j j } n |  j j } |  j | | | |  d  S(   Ns   foo.bars   baz.quxs   foo bar baz quxt	   temporary(   s   foo.bars   baz.qux(   RG   t	   functoolst   partialRD   RF   RE   t   add_to_temp_checkpointt   _test_adapted_method(   R   RQ   RI   RJ   t   installer_funct   reverter_func(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyRL   u   s    	c         C   s   |  j  d d  d  S(   Nt   finalize_checkpointR   (   RH   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_finalize_checkpoint   s    c         C   s   |  j  d  d  S(   Nt   recovery_routine(   RH   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_recovery_routine   s    c         C   s   |  j  d  d  S(   Nt   revert_temporary_config(   RH   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_revert_temporary_config   s    c         C   s   |  j  d d  d  S(   Nt   rollback_checkpointsi*   (   RH   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_rollback_checkpoints   s    c         C   s   |  j  d  d  S(   Nt   view_config_changes(   RH   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_view_config_changes   s    c         O   s>   t  |  j |  } t  |  j |  } |  j | | | |  d S(   s   Test a wrapped reverter method.

        :param str name: name of the method to test
        :param tuple args: position arguments to method
        :param dict kwargs: keyword arguments to method

        N(   t   getattrRD   RE   RU   (   R   R)   t   argst   kwargsRV   RW   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyRH      s    c         O   sF   | | |   | j  | |   t j | _ |  j t j | | |  d S(   s  Test an adapted reverter method

        :param callable installer_func: installer method to test
        :param mock.MagicMock reverter_func: mocked adapated
            reverter method
        :param tuple passed_args: positional arguments passed from
            installer method to the reverter method
        :param dict passed_kargs: keyword arguments passed from
            installer method to the reverter method

        N(   R:   R   t   ReverterErrort   side_effectt   assertRaisest   PluginError(   R   RV   RW   t   passed_argst   passed_kwargs(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyRU      s
    c         C   s0   |  j  j   |  j t j j |  j  j   d  S(   N(   RD   t   install_ssl_dhparamst
   assertTrueR@   t   patht   isfilet   ssl_dhparams(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_install_ssl_dhparams   s    c         C   s   d d l  m } t j |  S(   Ni(   t   SSL_DHPARAMS_SRC(   t   certbot.constantsRq   R   t	   sha256sum(   R   Rq   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   _current_ssl_dhparams_hash   s    c         C   s0   d d l  m } |  j |  j   | k d  d  S(   Ni(   t   ALL_SSL_DHPARAMS_HASHESsw   Constants.ALL_SSL_DHPARAMS_HASHES must be appended with the sha256 hash of self.config.ssl_dhparams when it is updated.(   Rr   Ru   Rl   Rt   (   R   Ru   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt$   test_current_file_hash_in_all_hashes   s    (   R   R   R   R.   RK   RN   RP   RL   RY   R[   R]   R_   Ra   RH   RU   Rp   Rt   Rv   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR=   ]   s    	
													t   AddrTestc           B   sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s-   Tests for certbot.client.plugins.common.Addr.c         C   s   d d l  m } | j d  |  _ | j d  |  _ | j d  |  _ | j d  |  _ | j d  |  _ | j d  |  _ | j d	  |  _	 | j d
  |  _
 d  S(   Ni(   t   Addrs   192.168.1.1s   192.168.1.1:*s   192.168.1.1:80s	   [fe00::1]s   [fe00::1]:*s   [fe00::1]:80s   [fe00::1]:5s   [fe00:1:2:3:4:5:6:7:8:9]:8080(   R   Rx   t
   fromstringt   addr1t   addr2t   addr3t   addr4t   addr5t   addr6t   addr7t   addr8(   R   Rx   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR.      s    c         C   s  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j   d  |  j  |  j j	   d  |  j  |  j j	   d  |  j  |  j
 j   d  |  j  |  j j	   d  d  S(	   Ns   192.168.1.1t    t   *t   80s	   [fe00::1]s   fe00:0:0:0:0:0:0:1t   5s   fe00:1:2:3:4:5:6:7(   R   Rz   t   get_addrt   get_portR{   R|   R}   R~   R   t   get_ipv6_explodedR   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_fromstring   s&    c         C   s   |  j  t |  j  d  |  j  t |  j  d  |  j  t |  j  d  |  j  t |  j  d  |  j  t |  j  d  |  j  t |  j  d  d  S(   Ns   192.168.1.1s   192.168.1.1:*s   192.168.1.1:80s	   [fe00::1]s   [fe00::1]:*s   [fe00::1]:80(   R   t   strRz   R{   R|   R}   R~   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_str   s    c         C   s   |  j  t |  j j d   d  |  j  t |  j j d   d  |  j  t |  j j d   d  |  j  t |  j j d   d  |  j  t |  j j d   d  |  j  t |  j j d   d	  d  S(
   Nt   443s   192.168.1.1:443R   s   192.168.1.1R   s   192.168.1.1:*s   [fe00::1]:443s	   [fe00::1]s   [fe00::1]:*(   R   R   Rz   t   get_addr_objR{   R}   R~   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_get_addr_obj   s    """""c         C   s   |  j  |  j |  j j d   |  j |  j |  j  |  j |  j d k  |  j  |  j |  j j d   |  j |  j |  j  |  j |  j d k  d d l m	 } |  j  |  j | j
 d   |  j  |  j | j
 d   d  S(   NR   i  i(   Rx   s   [fe00:0:0::1]s   [fe00:0::0:0:1](   R   Rz   R{   R   t   assertNotEqualt   assertFalseR}   R~   R   Rx   Ry   (   R   Rx   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_eq   s    c   
      C   s   d d l  m } t |  j |  j g  } | j d  } | j d  } t | | g  } |  j | |  t |  j |  j g  } | j d  } | j d  } t | | g  }	 |  j | |	  d  S(   Ni(   Rx   s   192.168.1.1s   192.168.1.1:*s	   [fe00::1]s   [fe00::1]:*(	   R   Rx   RG   Rz   R{   Ry   R   R}   R~   (
   R   Rx   t   set_at   addr1bt   addr2bt   set_bt   set_ct   addr4bt   addr5bt   set_d(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_set_inclusion  s    (	   R   R   R   R.   R   R   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyRw      s   					t   ChallengePerformerTestc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s4   Tests for certbot.plugins.common.ChallengePerformer.c         C   s/   t  j   } d d l m } | |  |  _ d  S(   Ni(   t   ChallengePerformer(   R*   R,   R   R   t	   performer(   R   t   configuratorR   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR.     s    c         C   sP   |  j  j t d d  |  j d t |  j  j   |  j d g |  j  j  d  S(   Ni    i   (   R   t	   add_challt   ACHALLSR   t   lent   achallst   indices(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_add_chall  s    c         C   s   |  j  t |  j j  d  S(   N(   Rg   t   NotImplementedErrorR   t   perform(   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_perform!  s    (   R   R   R   R.   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR     s   		t   TLSSNI01Testc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s*   Tests for certbot.plugins.common.TLSSNI01.c         C   s}   t  j   |  _ t j   } t j j |  j d  | j _	 t j j |  j d  | j _
 d d l m } | d |  |  _ d  S(   NR(   t   worki(   t   TLSSNI01R   (   t   tempfilet   mkdtempt   tempdirR*   R,   R@   Rm   t   joinR(   RB   t   work_dirR   R   t   sni(   R   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR.   (  s    c         C   s   t  j |  j  d  S(   N(   t   shutilt   rmtreeR   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   tearDown1  s    c         C   sM  t  j   t  j   } } t j   } t  j   } d | j j _ t j	 d  } | t j
 d  | f f | j _ t  j d | d t = t  j d |  $ |  j | |  j j | d   Wd  QXWd  QX| j |  j j |  d  | j j j t j d   | j |  j j |  d d	 d
 | j j j t j j t j j |   d  S(   NR   s   rsa512_key.pems   cert_512.pems   certbot.plugins.common.opent   creates%   certbot.plugins.common.util.safe_opent   randomS1t   wbt   chmodi   (   R*   t	   mock_openR    t   TLSSNI01ResponseR,   t   challt   encodet   return_valuet	   test_utilt   load_pyopenssl_private_keyt	   load_certt   response_and_validationRC   RO   R   R   t   _setup_challenge_certR:   t   get_cert_patht   writet   load_vectort   get_key_patht   OpenSSLt   cryptot   dump_privatekeyt   FILETYPE_PEM(   R   R   t   mock_safe_opent   responset   achallt   key(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_setup_challenge_cert4  s&    !		
c         C   sB   t  d } |  j |  j j |  | j | j  j j d   d  S(   Ni    s   utf-8(   R   R   R   t   get_z_domainR   R   t   z_domaint   decode(   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_get_z_domainS  s    
(   R   R   R   R.   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   %  s
   				t    InstallVersionControlledFileTestc           B   s_   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   sA   Tests for certbot.plugins.common.install_version_controlled_file.c         C   s   t  t |   j   d g |  _ t j j |  j d  |  _ t j j |  j d  |  _	 t j j |  j d  |  _
 t j j |  j d  |  _ xX |  j |  j
 f D]D } t | d   } | j |  Wd  QX|  j j t j |   q Wd  S(   Nt   someotherhashs   options-ssl-dest.confs   .options-ssl-conf.txts   options-ssl-old.confs   options-ssl-src.conft   w(   R?   R   R.   t   hashesR@   Rm   R   R   t	   dest_patht	   hash_patht   old_patht   source_patht   openR   t   appendR   Rs   (   R   Rm   t   f(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR.   \  s    c         C   s3   d d l  m } | |  j |  j |  j |  j  d  S(   Ni(   t   install_version_controlled_file(   R   R   R   R   R   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   _callh  s
    	c         C   s   t  j |  j  S(   N(   R   Rs   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   _current_file_hasho  s    c         C   sB   |  j  t j j |  j   |  j t j |  j  |  j    d  S(   N(	   Rl   R@   Rm   Rn   R   R   R   Rs   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   _assert_current_filer  s    c         C   s4   |  j  t j j |  j   |  j   |  j   d  S(   N(   R   R@   Rm   Rn   R   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_no_filew  s    
c         C   s/   x( t  d  D] } |  j   |  j   q Wd  S(   Ni   (   t   rangeR   R   (   R   t   _(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   test_current_file|  s    
c         C   s.   t  j |  j |  j  |  j   |  j   d  S(   N(   R   t   copyfileR   R   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt!   test_prev_file_updates_to_current  s    
c         C   s   |  j    t |  j d   } | j d  Wd  QXt j d  $ } |  j    |  j | j j  Wd  QX|  j	 t
 j j |  j   |  j t j |  j  |  j    |  j t j |  j  |  j    d  S(   Nt   as   a new line for the wrong hash
s   certbot.plugins.common.logger(   R   R   R   R   R*   RC   R   t   warningt   calledRl   R@   Rm   Rn   R   R   Rs   R   R   R   (   R   t   mod_ssl_conft   mock_logger(    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt3   test_manually_modified_current_file_does_not_update  s    

c      	   C   s   t  |  j d   } | j d  Wd  QXt  |  j d   } | j d  Wd  QXt j d  / } |  j   |  j | j j	 d d d  Wd  QX|  j t
 j |  j  |  j    t j d  $ } |  j   |  j | j j  Wd  QXd  S(   NR   s   a new line for the wrong hash
R   t   hashofanoldversions   certbot.plugins.common.loggeri    sh   %s has been manually modified; updated file saved to %s. We recommend updating %s for security purposes.(   R   R   R   R   R*   RC   R   R   R   t	   call_argsR   Rs   R   R   R   R   (   R   R   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt&   test_manually_modified_past_file_warns  s    

(   R   R   R   R.   R   R   R   R   R   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyR   Y  s   								t   __main__((   R   RR   R@   R   R   t   unittestt   josepyt   joseR*   R   t   acmeR    t   certbotR   R   R   t   certbot.testsR   R   R   t   JWKRSAt   loadR   t   AUTH_KEYt"   KeyAuthorizationAnnotatedChallenget   chall_to_challbR   R   t   TestCaseR   R   t   ConfigTestCaseR=   Rw   R   R   t   TempDirTestCaseR   R   t   main(    (    (    s?   /usr/lib/python2.7/dist-packages/certbot/plugins/common_test.pyt   <module>   s@   		,eQ4L