ó
Y[c           @   sW  d  Z  d d l Z d d l Z d d l 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 m Z d d l m Z d d l m Z m Z m Z d d l m Z d d l m 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 e j f d „  ƒ  YZ e  d k rSe j! ƒ  n  d S(   s%   Tests for certbot.plugins.standalone.iÿÿÿÿN(   t   errno(   t
   challenges(   t
   standalone(   t   Dictt   Tuplet   Set(   t   achallenges(   t   errors(   t	   acme_util(   t   utilt   ServerManagerTestc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s3   Tests for certbot.plugins.standalone.ServerManager.c         C   s>   d d l  m } i  |  _ i  |  _ | |  j |  j ƒ |  _ d  S(   Niÿÿÿÿ(   t   ServerManager(   t   certbot.plugins.standaloneR   t   certst   http_01_resourcest   mgr(   t   selfR   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   setUp   s    		c         C   s<   |  j  |  j j |  j k ƒ |  j  |  j j |  j k ƒ d  S(   N(   t
   assertTrueR   R   R   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt	   test_init#   s    c         C   s   |  j  j d d d | ƒ } | j ƒ  d d } |  j |  j  j ƒ  i | | 6ƒ |  j  j d | ƒ |  j |  j  j ƒ  i  ƒ d  S(   Nt   porti    t   challenge_typei   (   R   t   runt   getsocknamest   assertEqualt   runningt   stop(   R   R   t   serverR   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   _test_run_stop(   s
     c         C   s   |  j  t j ƒ d  S(   N(   R   R   t   TLSSNI01(   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_run_stop_tls_sni_01/   s    c         C   s   |  j  t j ƒ d  S(   N(   R   R   t   HTTP01(   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_run_stop_http_012   s    c         C   s°   |  j  j d d d t j ƒ } | j ƒ  d d } |  j  j d | d t j ƒ } |  j |  j  j ƒ  i | | 6ƒ |  j | | k ƒ |  j  j | ƒ |  j |  j  j ƒ  i  ƒ d  S(   NR   i    R   i   (	   R   R   R   R   R   R   R   R   R   (   R   R   R   t   server2(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_run_idempotent5   s     c         C   s«   t  j  t  j ƒ } | j d ƒ | j ƒ  d } t  j  ƒ  } y | j d | f ƒ Wn t  j k
 rh n X|  j t j |  j j	 | d t
 j ƒ|  j |  j j ƒ  i  ƒ d  S(   Nt    i    i   R   (   R#   i    (   t   sockett   AF_INET6t   bindt   getsocknamet   errort   assertRaisesR   t   StandaloneBindErrorR   R   R   R   R   R   (   R   t   some_serverR   t   maybe_another_server(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_run_bind_error>   s    
(
   t   __name__t
   __module__t   __doc__R   R   R   R   R    R"   R-   (    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyR
      s   							t   SupportedChallengesActionTestc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s7   Tests for plugins.standalone.SupportedChallengesAction.c         C   sl   t  j d ƒ 8 } t  j d ƒ   |  j j |  j | g ƒ } Wd  QXWd  QX|  j | j j ƒ t | |  j	 ƒ S(   Ns!   certbot.plugins.standalone.loggers
   sys.stderr(
   t   mockt   patcht   parsert
   parse_argst   flagR   t   warningt   calledt   getattrt   dest(   R   t   valuet   mock_loggert   config(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   _callP   s
    'c         C   sa   d |  _  |  j  d j d d ƒ |  _ t j ƒ  |  _ d d l m } |  j j |  j  d | ƒd  S(   Ns!   --standalone-supported-challengesi   t   -t   _iÿÿÿÿ(   t   SupportedChallengesActiont   action(	   R6   t   replaceR:   t   argparset   ArgumentParserR4   R   RA   t   add_argument(   R   RA   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyR   Z   s
    	c         C   sh   |  j  d |  j d ƒ ƒ |  j  d |  j d ƒ ƒ |  j  d |  j d ƒ ƒ |  j  d |  j d ƒ ƒ d  S(   Ns
   tls-sni-01s   http-01s   tls-sni-01,http-01s   http-01,tls-sni-01(   R   R>   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_correctb   s    c         C   s2   d t  j j k s t ‚ |  j t |  j d ƒ d  S(   Nt   foo(   R   t	   Challenget   TYPESt   AssertionErrorR)   t
   SystemExitR>   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_unrecognizedh   s    c         C   s   |  j  t |  j d ƒ d  S(   Nt   dns(   R)   RL   R>   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_not_subsetl   s    c         C   sO   |  j  d |  j d ƒ ƒ |  j  d |  j d ƒ ƒ |  j  d |  j d ƒ ƒ d  S(   Ns
   tls-sni-01t   dvsnis   http-01,tls-sni-01s   http-01,dvsnis   tls-sni-01,http-01s   dvsni,http-01(   R   R>   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt
   test_dvsnio   s    (	   R.   R/   R0   R>   R   RG   RM   RO   RQ   (    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyR1   M   s   	
				c          C   sF   t  j  t  j t  j d ƒ }  |  j d ƒ |  j ƒ  d } |  j ƒ  | S(   s%   Gets an open port number from the OS.i    R#   i   (   R#   i    (   R$   t   AF_INETt   SOCK_STREAMR&   R'   t   close(   t   open_socketR   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   get_open_portu   s
    
t   AuthenticatorTestc           B   s³   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 j ƒ  d „  ƒ Z e
 j ƒ  d	 „  ƒ Z d
 „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z RS(   s3   Tests for certbot.plugins.standalone.Authenticator.c         C   se   d d l  m } t j d t ƒ  d t ƒ  d d ƒ |  _ | |  j d d ƒ|  _ t j ƒ  |  j _ d  S(	   Niÿÿÿÿ(   t   Authenticatort   tls_sni_01_portt   http01_portt   standalone_supported_challengess   tls-sni-01,http-01t   nameR   (   R   RX   R2   t	   MagicMockRV   R=   t   autht   servers(   R   RX   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyR      s    	c         C   s&   |  j  |  j j t j t j g ƒ d  S(   N(   R   R^   t   supported_challengesR   R   R   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_supported_challengesŠ   s    c         C   s,   d |  j  _ |  j |  j j t j g ƒ d  S(   Ns
   tls-sni-01(   R=   R[   R   R^   R`   R   R   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt$   test_supported_challenges_configuredŽ   s    c         C   s&   |  j  t |  j j ƒ  t j ƒ ƒ d  S(   N(   R   t
   isinstanceR^   t	   more_infot   sixt   string_types(   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_more_info“   s    c         C   s/   |  j  |  j j d d  ƒ t j t j g ƒ d  S(   Nt   domain(   R   R^   t   get_chall_preft   NoneR   R   R   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_get_chall_pref–   s    c         C   s5   d |  j  _ |  j |  j j d d  ƒ t j g ƒ d  S(   Ns
   tls-sni-01Rh   (   R=   R[   R   R^   Ri   Rj   R   R   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_get_chall_pref_configuredš   s    c         C   sW   |  j  ƒ  } |  j j | ƒ } g  | D] } | j | j ƒ ^ q% } |  j | | ƒ d  S(   N(   t   _get_achallsR^   t   performt   responset   account_keyR   (   R   t   achallsRo   t   achallt   expected(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_performŸ   s    %c         C   sƒ   | ƒ  } t  j } t j t j d | ƒ d ƒ } | g d t j ƒ  g |  j j j _	 | j
 } t | _ |  j ƒ  |  j | ƒ d  S(   NR    iÿÿÿÿi   (   t   socket_errorst
   EADDRINUSER   R*   R2   R]   R^   R_   R   t   side_effectt   yesnot   Truet   return_valueRt   t   _assert_correct_yesno_call(   R   t   mock_get_utilityt   mock_utilityR    R(   t
   mock_yesno(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_perform_eaddrinuse_retry¦   s    		&		
c         C   sN   | ƒ  } | j  } t | _ t j } |  j t j |  j | ƒ |  j	 | ƒ d  S(   N(
   Rx   t   FalseRz   Ru   Rv   R)   R   t   PluginErrort   _fail_performR{   (   R   R|   R}   R~   R    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt    test_perform_eaddrinuse_no_retry²   s    				c         C   sC   | j  \ } } |  j d | d k ƒ |  j | j d t ƒ ƒ d  S(   Ns   in usei    t   default(   t	   call_argsR   t   assertFalset   getRy   (   R   R~   t
   yesno_argst   yesno_kwargs(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyR{   ¼   s    c         C   s&   t  j } |  j t j |  j | ƒ d  S(   N(   Ru   t   EACCESR)   R   R   R‚   (   R   R    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_perform_eaccesÁ   s    	c         C   s&   t  j } |  j t j |  j | ƒ d  S(   N(   Ru   t   ENOTCONNR)   R   R*   R‚   (   R   R    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt$   test_perform_unexpected_socket_errorÅ   s    	c         C   sJ   t  j t j d | ƒ d ƒ } | |  j j j _ |  j j |  j	 ƒ  ƒ d  S(   NR    iÿÿÿÿ(
   R   R*   R2   R]   R^   R_   R   Rw   Rn   Rm   (   R   R    R(   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyR‚   Ê   s    c         C   sm   d } t  j j t j d ƒ ƒ } t j d t j d | d | ƒ } t j d t j	 d | d | ƒ } | | g S(   Nt	   localhosts   rsa512_key.pemt   challbRh   Rp   (
   t   joset   JWKt   loadt	   test_utilt   load_vectorR   t"   KeyAuthorizationAnnotatedChallengeR   t   HTTP01_Pt
   TLSSNI01_P(   t   clsRh   t   keyt   http_01t
   tls_sni_01(    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyRm   Ï   s    		c         C   s‚  i d d 6d d 6|  j  j j _ |  j  j d j d ƒ |  j  j d j d d g ƒ |  j  j d g ƒ |  j |  j  j i t	 ƒ  d 6t	 d d g ƒ d 6ƒ |  j  j j
 j d ƒ i d d 6|  j  j j _ |  j  j d g ƒ |  j |  j  j i t	 ƒ  d 6t	 d g ƒ d 6ƒ |  j d |  j  j j
 j ƒ |  j  j d g ƒ |  j |  j  j i t	 ƒ  d 6t	 g  ƒ d 6ƒ |  j  j j
 j d ƒ d  S(   Nt   server1i   R!   i   t   chall1t   chall2t   chall3(   R^   R_   R   Rz   t   servedt   addt   updatet   cleanupR   t   setR   t   assert_called_once_witht
   call_countt   assert_called_with(   R   (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   test_cleanupÚ   s&    !(   R.   R/   R0   R   Ra   Rb   Rg   Rk   Rl   Rt   R“   t   patch_get_utilityR   Rƒ   R{   R‹   R   R‚   t   classmethodRm   R¨   (    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyRW   ~   s    								
				t   __main__("   R0   RD   R$   t   unittestR    Ru   t   josepyR   R2   Re   t   OpenSSL.cryptot   OpenSSLt   acmeR   R   t   acme_standalonet   acme.magic_typingR   R   R   t   certbotR   R   t   certbot.testsR   R	   R“   t   TestCaseR
   R1   RV   RW   R.   t   main(    (    (    sC   /usr/lib/python2.7/dist-packages/certbot/plugins/standalone_test.pyt   <module>   s*   4(		v