U
    ÝÁ]\-  ã                   @   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	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
ejdddZejddd
ejdddZG dd„ dejƒZG dd„ dejƒZedkràe ¡  dS )z Tests for certbot.plugins.disco.é    N)ÚList)Úerrors)Ú
interfaces)Ú
standalone)ÚwebrootÚsazcertbot.plugins.standalone)ÚAuthenticatorÚcertbot©Úkey)ZattrsÚdistÚ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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| _ddlm	} |t
ƒ| _d S )NÚep1zp1.ep1Zp1r
   )r   z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   sV   ddl m} | jd| jd| jd| jdtdi}t |¡D ]\}}|  	|| 
|¡¡ q6d 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   |   d| jjk¡ d S )Nztemporary webserver)Ú
assertTruer   Údescription©r   r   r   r   Útest_description=   s    z%PluginEntryPointTest.test_descriptionc                 C   s$   t jdd| j_|  d| jj¡ d S )NZDesc)r'   z	Desc (sa))r   r   r   Ú
plugin_clsr!   Zdescription_with_namer(   r   r   r   Útest_description_with_name@   s
     ÿz/PluginEntryPointTest.test_description_with_namec                 C   s$   t jdd| j_|  d| jj¡ d S )Nz	Long desc)Úlong_description©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gd| j_|  d| jj¡ d S )NzLong desc not foundr'   )r'   Úspecr-   r(   r   r   r   Ú!test_long_description_nonexistentK   s     ÿ
 ÿz6PluginEntryPointTest.test_long_description_nonexistentc                 C   sJ   |   | j tjf¡¡ |  | j tjf¡¡ |  | j tjtjf¡¡ d S ©N)r&   r   Úifacesr   ZIAuthenticatorÚassertFalseZ
IInstallerr(   r   r   r   Útest_ifacesQ   s    
 ÿz PluginEntryPointTest.test_ifacesc                 C   s„   |   | jj¡ |   | jj¡ |   | jj¡ |   | jj¡ |  | jjd k¡ |  | jjt	k¡ |  
d| jj¡ |  | jjtjk¡ d S )Nr   )r3   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|d}|  | jj¡ |  |j|k¡ |  | j ¡ |k¡ |  |j|k¡ |  | j d¡|k¡ |  |j|k¡ |  | jj¡ |  | jj	¡ |  | jj
¡ d S )N©Úconfigé{   )r   r   r   Úinitr&   r5   r<   r3   r6   r7   r8   )r   r<   Ú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_‰tjj}t  d¡~‰|ˆ_‡ ‡‡‡‡fdd„}|ˆjj	_
|  | j ˆ f¡¡ |  | j ˆ ˆf¡¡ |  | j ˆf¡¡ |  | j ˆ ˆf¡¡ W 5 Q R X d S )NÚiface1)Ú__name__Úiface2Úiface3z$certbot.plugins.disco.zope.interfacec                    sB   |ˆkst ‚| ˆ ks(| ˆks(| ˆks(t ‚| ˆkr>ˆj d d ¡‚d S r1   )ÚAssertionErrorÚ
exceptionsZBrokenImplementation)ZifaceÚobj©rA   rC   rD   Z	mock_zoper?   r   r   Úverify_object~   s    z7PluginEntryPointTest.test_verify.<locals>.verify_object)r   r   r   Ú_initializedÚzopeZ	interfacerF   ÚpatchÚverifyZverifyObjectÚside_effectr&   r3   )r   rF   rI   r   rH   r   Útest_verifyr   s    

z PluginEntryPointTest.test_verifyc                 C   sJ   t  ¡ }| jj|d | j ¡  |  | jj¡ |  | jj¡ t	| jƒ d S )Nr;   )
r   r   r   r>   Úpreparer&   r6   r3   r7   Ústr)r   r<   r   r   r   Útest_prepare‰   s    
z!PluginEntryPointTest.test_preparec                 C   sv   t  ¡ }tj|j_|| j_|  t	| j ¡ tjƒ¡ |  | jj
¡ |  | jj¡ |  t	| jjtjƒ¡ |  | jj¡ d S r1   )r   r   r   ZMisconfigurationErrorrP   rN   r   rJ   r&   Ú
isinstancer6   r7   r9   r8   ©r   r?   r   r   r   Útest_prepare_misconfigured“   s    
ÿÿz/PluginEntryPointTest.test_prepare_misconfiguredc                 C   s`   t  ¡ }tj|j_|| j_|  t	| j ¡ tjƒ¡ |  | jj
¡ |  | jj¡ |  | jj¡ d S r1   )r   r   r   ZNoInstallationErrorrP   rN   r   rJ   r&   rS   r6   r3   r7   r8   rT   r   r   r   Útest_prepare_no_installation    s    
ÿz1PluginEntryPointTest.test_prepare_no_installationc                 C   s`   t  ¡ }tj|j_|| j_|  t	| j ¡ tjƒ¡ |  | jj
¡ |  | jj¡ |  | jj¡ d S r1   )r   r   r   ZPluginErrorrP   rN   r   rJ   r&   rS   r6   r3   r7   r8   rT   r   r   r   Ú!test_prepare_generic_plugin_error«   s    
z6PluginEntryPointTest.test_prepare_generic_plugin_errorc                 C   s   |   dt| jƒ¡ d S )NzPluginEntryPoint#sa)r!   Úreprr   r(   r   r   r   Ú	test_reprµ   s    zPluginEntryPointTest.test_reprN)rB   Ú
__module__Ú__qualname__Ú__doc__r   r%   r)   r+   r.   r0   r4   r:   r@   rO   rR   rU   rV   rW   rY   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   r_   )ÚclsÚpluginsr_   r   r   r   Ú_create_new_registry¼   s    z(PluginsRegistryTest._create_new_registryc                 C   s>   t  ¡ | _d| j_t| jj_| jj| ji| _|  | j¡| _	d S ©Nr   )
r   r   r   r$   Ú	TypeErrorÚ__hash__rN   ra   rb   Úregr(   r   r   r   r   Á   s
    

zPluginsRegistryTest.setUpc              	   C   sš   ddl m} t d¡&}ttgƒttgƒg|j_| 	¡ }W 5 Q R X |  
|d jtjk¡ |  
|d jtk¡ |  
|d jtjk¡ |  
|d jtk¡ d S )Nr   r^   z#certbot.plugins.disco.pkg_resourcesr   r   )r   r_   r   rL   Úiterr   ÚEP_WRZiter_entry_pointsrN   Zfind_allr&   r*   r   r   r#   r   )r   r_   Zmock_pkgra   r   r   r   Útest_find_allÈ   s    ÿz!PluginsRegistryTest.test_find_allc                 C   s   |   | j| jd ¡ d S rc   )r!   r   rf   r(   r   r   r   Útest_getitemÓ   s    z PluginsRegistryTest.test_getitemc                 C   s   |   dgt| jƒ¡ d S rc   )r!   Úlistrf   r(   r   r   r   Ú	test_iterÖ   s    zPluginsRegistryTest.test_iterc                 C   s,   |   dt|  i ¡ƒ¡ |   dt| jƒ¡ d S )Nr   é   )r!   Úlenrb   rf   r(   r   r   r   Útest_lenÙ   s    zPluginsRegistryTest.test_lenc                 C   s2   d| j j_|  dg| j d¡¡ | j j d¡ d S )NÚbazZbar)r   r>   Úreturn_valuer!   rf   Úassert_called_once_withr(   r   r   r   r@   Ý   s    
zPluginsRegistryTest.test_initc                 C   s6   |   | j| j dd„ ¡¡ |   i | j dd„ ¡¡ d S )Nc                 S   s   | j  d¡S )NÚm©r$   Ú
startswith©Zp_epr   r   r   Ú<lambda>å   ó    z1PluginsRegistryTest.test_filter.<locals>.<lambda>c                 S   s   | j  d¡S )NÚbrt   rv   r   r   r   rw   ç   rx   )r!   ra   rf   Úfilterr(   r   r   r   Útest_filterâ   s    þ ÿzPluginsRegistryTest.test_filterc                 C   sB   d| j j_|  | j| j ¡ j¡ d| j j_|  i | j ¡ j¡ d S ©NTF)r   r2   rq   r!   ra   rf   Ú_pluginsr(   r   r   r   r4   é   s    

zPluginsRegistryTest.test_ifacesc                 C   sN   d| j j_|  | j| j t ¡ ¡j¡ d| j j_|  i | j t ¡ ¡j¡ d S r|   )	r   rM   rq   r!   ra   rf   r   r   r}   r(   r   r   r   rO   ð   s    
 ÿ
zPluginsRegistryTest.test_verifyc                 C   s.   d| j j_|  dg| j ¡ ¡ | j j ¡  d S )Nrp   )r   rP   rq   r!   rf   rr   r(   r   r   r   rR   ø   s    
z PluginsRegistryTest.test_preparec                    sD   g ‰ t ‡ fdd„tjD ƒƒ}|  |¡}| ¡  |  ˆ ttjƒ¡ d S )Nc                 3   s(   | ] }|t jt ˆ j|¡d fV  qdS ))rP   N)r   r   Ú	functoolsÚpartialÚappend)Ú.0Úc©Úorderr   r   Ú	<genexpr>ÿ   s   ÿz9PluginsRegistryTest.test_prepare_order.<locals>.<genexpr>)ÚdictÚstringZascii_lettersrb   rP   r!   Úsorted©r   ra   rf   r   rƒ   r   Útest_prepare_orderý   s    þ
z&PluginsRegistryTest.test_prepare_orderc                 C   s>   d| j _|  | j| j ¡ j¡ d| j _|  i | j ¡ j¡ d S r|   )r   r8   r!   ra   rf   r}   r(   r   r   r   Útest_available  s    z"PluginsRegistryTest.test_availablec                 C   sD   |   | j t ¡ ¡d k¡ d| j_|   | j | j ¡ ¡| jk¡ d S )NT)r&   rf   Z	find_initr   ÚMockr   r5   r>   r(   r   r   r   Útest_find_init  s
    ÿz"PluginsRegistryTest.test_find_initc                 C   s"   dd„ | j _|  dt| jƒ¡ d S )Nc                 S   s   dS )NzPluginEntryPoint#mockr   ©Ú_r   r   r   rw     rx   z/PluginsRegistryTest.test_repr.<locals>.<lambda>z&PluginsRegistry(PluginEntryPoint#mock))r   Ú__repr__r!   rX   rf   r(   r   r   r   rY     s    ÿzPluginsRegistryTest.test_reprc                 C   sd   |   dt|  i ¡ƒ¡ dd„ | j_|   dt| jƒ¡ | jj| jddi}|  |¡}|   dt|ƒ¡ d S )Nz
No pluginsc                 S   s   dS )NrŒ   r   rŽ   r   r   r   rw     rx   z.PluginsRegistryTest.test_str.<locals>.<lambda>rŒ   ZfooZBarz	Bar

Mock)r!   rQ   rb   r   Ú__str__rf   r$   r‰   r   r   r   Útest_str  s    
zPluginsRegistryTest.test_strN)rB   rZ   r[   r\   Úclassmethodrb   r   ri   rj   rl   ro   r@   r{   r4   rO   rR   rŠ   r‹   r   rY   r’   r   r   r   r   r]   ¹   s$   
r]   Ú__main__)r\   r~   r‡   Zunittestr   r   r    Zzope.interfacerK   Zacme.magic_typingr   r	   r   r   Zcertbot.pluginsr   r   r   r   r   rh   ZTestCaser   r]   rB   Úmainr   r   r   r   Ú<module>   s:    
ý 
ý j