
\\\-              	   @   sJ  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	 m
 Z
 d d l m Z d d l m Z d d l m Z d d l m Z e j d d	 d
 d d e j d d  Z e j d d d
 d d e j d d  Z Gd d   d e j  Z Gd d   d e j  Z e d k rFe j   d S)z Tests for certbot.plugins.disco.    N)List)errors)
interfaces)
standalone)webrootsazcertbot.plugins.standaloneZattrsAuthenticatordistkeycertbotwrzcertbot.plugins.webrootc               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  S)!PluginEntryPointTestz1Tests for certbot.plugins.disco.PluginEntryPoint.c             C   s   t  j d d d t j d d  |  _ t  j d d d t j d d  |  _ t  j d d	 d t j d d  |  _ t  j d
 d d t j d d  |  _ d d l m	 } | t
  |  _ d  S)Nep1zp1.ep1r	   r
   Zp1zp2.ep2Zp2ep2z
p2.foo.ep2ep3za.ep3Zp3r   )PluginEntryPoint)pkg_resources
EntryPointmock	MagicMockr   ep1primr   r   certbot.plugins.discor   EP_SA	plugin_ep)selfr    r   </usr/lib/python3/dist-packages/certbot/plugins/disco_test.pysetUp   s    !!!!zPluginEntryPointTest.setUpc          
   C   s}   d d l  m } |  j d |  j d |  j d |  j d t d i } x6 t j |  D]% \ } } |  j	 | | j
 |   qP Wd  S)Nr   )r   zp1:ep1zp2:ep1zp2:ep2zp3:ep3r   )r   r   r   r   r   r   r   sixZ	iteritemsassertEqualZentry_point_to_plugin_name)r   r   namesentry_pointnamer   r   r   test_entry_point_to_plugin_name.   s    				z4PluginEntryPointTest.test_entry_point_to_plugin_namec             C   s   |  j  d |  j j k  d  S)Nztemporary webserver)
assertTruer   description)r   r   r   r   test_description=   s    z%PluginEntryPointTest.test_descriptionc             C   s2   t  j d d  |  j _ |  j d |  j j  d  S)Nr%   ZDescz	Desc (sa))r   r   r   
plugin_clsr   Zdescription_with_name)r   r   r   r   test_description_with_name@   s    z/PluginEntryPointTest.test_description_with_namec             C   s2   t  j d d  |  j _ |  j d |  j j  d  S)Nlong_descriptionz	Long desc)r   r   r   r'   r   r)   )r   r   r   r   test_long_descriptionE   s    	z*PluginEntryPointTest.test_long_descriptionc             C   s;   t  j d d d d g  |  j _ |  j d |  j j  d  S)Nr%   zLong desc not foundspec)r   r   r   r'   r   r)   )r   r   r   r   !test_long_description_nonexistentK   s    	z6PluginEntryPointTest.test_long_description_nonexistentc             C   sg   |  j  |  j j t j f   |  j |  j j t j f   |  j |  j j t j t j f   d  S)N)r$   r   ifacesr   ZIAuthenticatorassertFalseZ
IInstaller)r   r   r   r   test_ifacesQ   s    z PluginEntryPointTest.test_ifacesc             C   s   |  j  |  j j  |  j  |  j j  |  j  |  j j  |  j  |  j j  |  j |  j j d  k  |  j |  j j t	 k  |  j
 d |  j j  |  j |  j j t j k  d  S)Nr   )r.   r   initializedpreparedmisconfigured	availabler$   problemr!   r   r   r"   r'   r   r   )r   r   r   r   test__init__W   s    z!PluginEntryPointTest.test__init__c             C   s   t  j   } |  j j d |  } |  j |  j j  |  j | j | k  |  j |  j j   | k  |  j | j | k  |  j |  j j d  | k  |  j | j | k  |  j |  j j  |  j |  j j	  |  j |  j j
  d  S)Nconfig{   )r   r   r   initr$   r0   r6   r.   r1   r2   r3   )r   r6   pluginr   r   r   	test_initb   s    zPluginEntryPointTest.test_initc                s!  t  j d d    t  j d d   t  j d d   t  j   |  j _  t j j } t  j d    |  _       f d d   } |  j j	 _
 |  j |  j j   f   |  j |  j j    f   |  j |  j j  f   |  j |  j j    f   Wd  QRXd  S)N__name__iface1iface2iface3z$certbot.plugins.disco.zope.interfacec                sa   |  k s t   |    k s< |   k s< |   k s< t   |   k r]  j j d  d    d  S)N)AssertionError
exceptionsZBrokenImplementation)Zifaceobj)r<   r=   r>   	mock_zoper9   r   r   verify_object~   s    *z7PluginEntryPointTest.test_verify.<locals>.verify_object)r   r   r   _initializedzopeZ	interfacer@   patchverifyZverifyObjectside_effectr$   r.   )r   r@   rC   r   )r<   r=   r>   rB   r9   r   test_verifyr   s    	z PluginEntryPointTest.test_verifyc             C   sc   t  j   } |  j j d |  |  j j   |  j |  j j  |  j |  j j  t	 |  j  d  S)Nr6   )
r   r   r   r8   preparer$   r1   r.   r2   str)r   r6   r   r   r   test_prepare   s    z!PluginEntryPointTest.test_preparec             C   s   t  j   } t j | j _ | |  j _ |  j t	 |  j j   t j   |  j |  j j
  |  j |  j j  |  j t	 |  j j t j   |  j |  j j  d  S)N)r   r   r   ZMisconfigurationErrorrJ   rH   r   rD   r$   
isinstancer1   r2   r4   r3   )r   r9   r   r   r   test_prepare_misconfigured   s    z/PluginEntryPointTest.test_prepare_misconfiguredc             C   s   t  j   } t j | j _ | |  j _ |  j t	 |  j j   t j   |  j |  j j
  |  j |  j j  |  j |  j j  d  S)N)r   r   r   ZNoInstallationErrorrJ   rH   r   rD   r$   rM   r1   r.   r2   r3   )r   r9   r   r   r   test_prepare_no_installation   s    z1PluginEntryPointTest.test_prepare_no_installationc             C   s   t  j   } t j | j _ | |  j _ |  j t	 |  j j   t j   |  j |  j j
  |  j |  j j  |  j |  j j  d  S)N)r   r   r   ZPluginErrorrJ   rH   r   rD   r$   rM   r1   r.   r2   r3   )r   r9   r   r   r   !test_prepare_generic_plugin_error   s    "z6PluginEntryPointTest.test_prepare_generic_plugin_errorc             C   s   |  j  d t |  j   d  S)NzPluginEntryPoint#sa)r   reprr   )r   r   r   r   	test_repr   s    zPluginEntryPointTest.test_reprN)r;   
__module____qualname____doc__r   r#   r&   r(   r*   r,   r/   r5   r:   rI   rL   rN   rO   rP   rR   r   r   r   r   r      s    

r   c               @   s   e  Z d  Z d Z e d d    Z d d   Z d d   Z d d	   Z d
 d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z d" S)#PluginsRegistryTestz0Tests for certbot.plugins.disco.PluginsRegistry.c             C   s   d d l  m } | |  S)Nr   )PluginsRegistry)r   rW   )clspluginsrW   r   r   r   _create_new_registry   s    z(PluginsRegistryTest._create_new_registryc             C   s[   t  j   |  _ d |  j _ t |  j j _ |  j j |  j i |  _ |  j |  j  |  _	 d  S)Nr   )
r   r   r   r"   	TypeError__hash__rH   rY   rZ   reg)r   r   r   r   r      s
    zPluginsRegistryTest.setUpc          
   C   s   d d l  m } t j d  7 } t t g  t t g  g | j _ | j	   } Wd  QRX|  j
 | d j t j k  |  j
 | d j t k  |  j
 | d j t j k  |  j
 | d j t k  d  S)Nr   )rW   z#certbot.plugins.disco.pkg_resourcesr   r   )r   rW   r   rF   iterr   EP_WRZiter_entry_pointsrH   Zfind_allr$   r'   r   r   r!   r   )r   rW   Zmock_pkgrY   r   r   r   test_find_all   s    z!PluginsRegistryTest.test_find_allc             C   s   |  j  |  j |  j d  d  S)Nr   )r   r   r]   )r   r   r   r   test_getitem   s    z PluginsRegistryTest.test_getitemc             C   s    |  j  d g t |  j   d  S)Nr   )r   listr]   )r   r   r   r   	test_iter   s    zPluginsRegistryTest.test_iterc             C   s<   |  j  d t |  j i     |  j  d t |  j   d  S)Nr      )r   lenrZ   r]   )r   r   r   r   test_len   s    zPluginsRegistryTest.test_lenc             C   sE   d |  j  j _ |  j d g |  j j d   |  j  j j d  d  S)NbazZbar)r   r8   return_valuer   r]   assert_called_once_with)r   r   r   r   r:      s    zPluginsRegistryTest.test_initc             C   sK   |  j  |  j |  j j d d     |  j  i  |  j j d d     d  S)Nc             S   s   |  j  j d  S)Nm)r"   
startswith)p_epr   r   r   <lambda>   s    z1PluginsRegistryTest.test_filter.<locals>.<lambda>c             S   s   |  j  j d  S)Nb)r"   rk   )rl   r   r   r   rm      s    )r   rY   r]   filter)r   r   r   r   test_filter   s
    zPluginsRegistryTest.test_filterc             C   s]   d |  j  j _ |  j |  j |  j j   j  d |  j  j _ |  j i  |  j j   j  d  S)NTF)r   r-   rh   r   rY   r]   _plugins)r   r   r   r   r/      s    zPluginsRegistryTest.test_ifacesc             C   so   d |  j  j _ |  j |  j |  j j t j    j  d |  j  j _ |  j i  |  j j t j    j  d  S)NTF)	r   rG   rh   r   rY   r]   r   r   rq   )r   r   r   r   rI      s
    "zPluginsRegistryTest.test_verifyc             C   s?   d |  j  j _ |  j d g |  j j    |  j  j j   d  S)Nrg   )r   rJ   rh   r   r]   ri   )r   r   r   r   rL      s    z PluginsRegistryTest.test_preparec                s^   g    t    f d d   t j D  } |  j |  } | j   |  j   t t j   d  S)Nc             3   s6   |  ], } | t  j d  t j   j |   f Vq d S)rJ   N)r   r   	functoolspartialappend).0c)orderr   r   	<genexpr>   s   z9PluginsRegistryTest.test_prepare_order.<locals>.<genexpr>)dictstringZascii_lettersrZ   rJ   r   sorted)r   rY   r]   r   )rw   r   test_prepare_order   s    
z&PluginsRegistryTest.test_prepare_orderc             C   sW   d |  j  _ |  j |  j |  j j   j  d |  j  _ |  j i  |  j j   j  d  S)NTF)r   r3   r   rY   r]   rq   )r   r   r   r   test_available  s    z"PluginsRegistryTest.test_availablec             C   s`   |  j  |  j j t j    d  k  d |  j _ |  j  |  j j |  j j    |  j k  d  S)NT)r$   r]   Z	find_initr   Mockr   r0   r8   )r   r   r   r   test_find_init  s    %z"PluginsRegistryTest.test_find_initc             C   s/   d d   |  j  _ |  j d t |  j   d  S)Nc             S   s   d S)NzPluginEntryPoint#mockr   )_r   r   r   rm     s    z/PluginsRegistryTest.test_repr.<locals>.<lambda>z&PluginsRegistry(PluginEntryPoint#mock))r   __repr__r   rQ   r]   )r   r   r   r   rR     s    	zPluginsRegistryTest.test_reprc             C   s   |  j  d t |  j i     d d   |  j _ |  j  d t |  j   |  j j |  j d d i } |  j |  } |  j  d t |   d  S)Nz
No pluginsc             S   s   d S)Nr~   r   )r   r   r   r   rm     s    z.PluginsRegistryTest.test_str.<locals>.<lambda>r~   ZfooZBarz	Bar

Mock)r   rK   rZ   r   __str__r]   r"   )r   rY   r]   r   r   r   test_str  s    zPluginsRegistryTest.test_strN)r;   rS   rT   rU   classmethodrZ   r   r`   ra   rc   rf   r:   rp   r/   rI   rL   r|   r}   r   rR   r   r   r   r   r   rV      s"   rV   __main__)Authenticator)r   )rU   rr   rz   Zunittestr   r   r   Zzope.interfacerE   Zacme.magic_typingr   r   r   r   Zcertbot.pluginsr   r   r   r   r   r_   ZTestCaser   rV   r;   mainr   r   r   r   <module>   s0   		j