
    M/e,                        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m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
k\  rddlmZ nddlZ G d dej(                        Z ej(                  ddd      Z ej(                  ddd      Z eddd      Z G d dej2                        Z G d dej2                        Zedk(  r4 ej:                   ej<                  ej>                  dd e gz                yy)z*Tests for certbot._internal.plugins.disco.    N)List)mock)errors)
interfaces)null)
standalone)webroot)   
   c                       e Zd Zd Zy)_EntryPointLoadFailc                     t        d      )NzLoading failure)RuntimeErrorselfs    L/usr/lib/python3/dist-packages/certbot/_internal/tests/plugins/disco_test.pyloadz_EntryPointLoadFail.load   s    ,--    N)__name__
__module____qualname__r    r   r   r   r      s    .r   r   saz2certbot._internal.plugins.standalone:Authenticatorcertbot.pluginsnamevaluegroupwrz/certbot._internal.plugins.webroot:Authenticatorc                   j    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d Zy)PluginEntryPointTestz;Tests for certbot._internal.plugins.disco.PluginEntryPoint.c                    t        j                  ddd      | _        t        j                  ddd      | _        t        j                  ddd      | _        t        j                  dd	d      | _        d
dlm}  |t              | _	        y )Nep1zp1.ep1:Authenticatorr   r   zp2.pe2:Authenticatorep2zp2.foo.ep2:Authenticatorep3za.ep3:Authenticatorr   PluginEntryPoint)
importlib_metadata
EntryPointr#   ep1primr$   r%   certbot._internal.plugins.discor'   EP_SA	plugin_ep)r   r'   s     r   setUpzPluginEntryPointTest.setUp/   s    %00(#% *44(#%
 &00,#%
 &00'#%
 	E)%0r   c           
          ddl m} | j                  d| j                  d| j                  d| j
                  dt        di}|j                         D ]  \  }}||j                  |      k(  rJ  y )Nr   r&   r#   r$   r%   r   )	r+   r'   r#   r*   r$   r%   r,   itemsentry_point_to_plugin_name)r   r'   namesentry_pointr   s        r   ,test_entry_point_to_plugin_name_not_prefixedzAPluginEntryPointTest.test_entry_point_to_plugin_name_not_prefixedF   so    D HHeLL%HHeHHe4
 "' 	TK+FF{SSSS	Tr   c                 8    d| j                   j                  v sJ y )Nzserver locally)r-   descriptionr   s    r   test_descriptionz%PluginEntryPointTest.test_descriptionT   s    4>>#=#====r   c                     t        j                  d      | j                  _        d| j                  j                  k(  sJ y )NDesc)r6   z	Desc (sa))r   	MagicMockr-   
plugin_clsdescription_with_namer   s    r   test_description_with_namez/PluginEntryPointTest.test_description_with_nameW   s/    $(NNv$F!dnnBBBBBr   c                     t        j                  d      | j                  _        d| j                  j                  k(  sJ y )Nz	Long desc)long_descriptionr   r:   r-   r;   r?   r   s    r   test_long_descriptionz*PluginEntryPointTest.test_long_description[   s2    $(NN(%*!dnn=====r   c                     t        j                  ddg      | j                  _        d| j                  j                  k(  sJ y )NzLong desc not foundr6   )r6   specr@   r   s    r   !test_long_description_nonexistentz6PluginEntryPointTest.test_long_description_nonexistent`   s7    $(NN-]O%E!$(G(GGGGr   c                 *   | j                   j                  t        j                  f      sJ | j                   j                  t        j                  f      rJ | j                   j                  t        j                  t        j                  f      rJ y N)r-   ifacesr   Authenticator	Installerr   s    r   test_ifacesz PluginEntryPointTest.test_ifacese   s{    ~~$$j&>&>%@AAA>>((**>*>)@AAA>>((  *":":*< = 	= = =r   c                    | j                   j                  du sJ | j                   j                  du sJ | j                   j                  du sJ | j                   j                  du sJ | j                   j
                  J | j                   j                  t        u sJ d| j                   j                  k(  sJ | j                   j                  t        j                  u sJ y )NFr   )r-   initializedpreparedmisconfigured	availableproblemr3   r,   r   r;   r   rH   r   s    r   test__init__z!PluginEntryPointTest.test__init__k   s    ~~))U222~~&&%///~~++u444~~''5000~~%%---~~))U222t~~*****~~((J,D,DDDDr   c                    t        j                         }| j                  j                  |      }| j                  j                  du sJ |j
                  |u sJ | j                  j                         |u sJ |j
                  |u sJ | j                  j                  d      |u sJ |j
                  |u sJ | j                  j                  du sJ | j                  j                  du sJ | j                  j                  du sJ y )NconfigT{   F)	r   r:   r-   initrL   rT   rM   rN   rO   )r   rT   plugins      r   	test_initzPluginEntryPointTest.test_initv   s    !$$F$3~~))T111}}&&&~~""$...}}&&&~~""3'6111}}&&&~~&&%///~~++u444~~''5000r   c                 &   t        j                         }| j                  j                  |       | j                  j	                          | j                  j
                  sJ | j                  j                  du sJ t        | j                         y )NrS   F)r   r:   r-   rV   preparerM   rN   str)r   rT   s     r   test_preparez!PluginEntryPointTest.test_prepare   sl    !6* ~~&&&&~~++u444 	DNNr   c                    t        j                         }t        j                  |j                  _        || j                  _        t        | j                  j	                         t        j                        sJ | j                  j                  sJ | j                  j                  sJ t        | j                  j                  t        j                        sJ | j                  j                  sJ y rF   )r   r:   r   MisconfigurationErrorrZ   side_effectr-   _initialized
isinstancerM   rN   rP   rO   r   rW   s     r   test_prepare_misconfiguredz/PluginEntryPointTest.test_prepare_misconfigured   s    !%+%A%A"&,#$..002F4P4PQQQ~~&&&&~~++++$..00&2N2NOOO~~''''r   c                    t        j                         }t        j                  |j                  _        || j                  _        t        | j                  j	                         t        j                        sJ | j                  j                  du sJ | j                  j                  du sJ | j                  j                  du sJ y NTF)r   r:   r   NoInstallationErrorrZ   r_   r-   r`   ra   rM   rN   rO   rb   s     r   test_prepare_no_installationz1PluginEntryPointTest.test_prepare_no_installation   s    !%+%?%?"&,#$..002F4N4NOOO~~&&$...~~++u444~~''5000r   c                    t        j                         }t        j                  |j                  _        || j                  _        t        | j                  j	                         t        j                        sJ | j                  j                  sJ | j                  j                  du sJ | j                  j                  du sJ y )NF)r   r:   r   PluginErrorrZ   r_   r-   r`   ra   rM   rN   rO   rb   s     r   !test_prepare_generic_plugin_errorz6PluginEntryPointTest.test_prepare_generic_plugin_error   s    !%+%7%7"&,#$..002F4F4FGGG~~&&&&~~++u444~~''5000r   c                 R    t        | j                        }d|v sJ d|vsJ d|v sJ y )NrH   rI   Plugin)r[   r-   )r   outputs     r   test_strzPluginEntryPointTest.test_str   s:    T^^$&(((&(((6!!!r   c                 8    dt        | j                        k(  sJ y )NzPluginEntryPoint#sa)reprr-   r   s    r   	test_reprzPluginEntryPointTest.test_repr   s    $T^^(<<<<r   N)r   r   r   __doc__r.   r4   r7   r=   rA   rD   rJ   rQ   rX   r\   rc   rg   rj   rn   rq   r   r   r   r!   r!   ,   sT    E1.T>C>
H
=	E1 	(11"=r   r!   c                   z    e Zd ZdZe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y)PluginsRegistryTestz:Tests for certbot._internal.plugins.disco.PluginsRegistry.c                     ddl m}  ||      S )Nr   PluginsRegistry)r+   rw   )clspluginsrw   s      r   _create_new_registryz(PluginsRegistryTest._create_new_registry   s    Cw''r   c                 ^   t        j                         | _        d| j                  _        t        | j                  j
                  _        | j                  j                  | j                  i| _        | j                  | j                        | _	        t        j                  ddd      | _        y )Nr   r#   zp1.ep1r   r   )r   r:   r-   r   	TypeError__hash__r_   ry   rz   regr(   r)   r#   r   s    r   r.   zPluginsRegistryTest.setUp   sy    )$.7+++T^^<,,T\\:%00#%r   c                 H   ddl m} t        j                  d      5 }t        gt
        | j                  gg|j                  _        t        j                  j                  t        j                  d      5 }t        j                  t        j                  t        j                   t        j                   g|_        |j#                         }d d d        d d d        d   j$                  t        j                  u sJ |d   j&                  t        u sJ |d   j$                  t        j                  u sJ |d   j&                  t
        u sJ |d   j$                  t        j                   u sJ |d   j&                  | j                  u sJ d|vsJ y # 1 sw Y   xY w# 1 sw Y   xY w)	Nr   rv   2certbot._internal.plugins.disco.importlib_metadatar   r   r   r#   zp1:ep1)r+   rw   r   patchr,   EP_WRr#   entry_pointsr_   objectr(   r)   r   rH   r	   r   rI   find_allr;   r3   )r   rw   	mock_meta	mock_loadry   s        r   test_find_allz!PluginsRegistryTest.test_find_all   sj   CZZLM 	5QZ%*2I"". ""#5#@#@&I 5Y,,g.C.CNNDNN)4	% *224	5		5 t}'':+C+CCCCt}((E111t}''7+@+@@@@t}((E111u~((DNN:::u~))TXX555w&&&5 5		5 	5s%   AF3AFFF	FF!c                 p   ddl m} t        j                  d      5 }t        gt
        | j                  gg|j                  _        | j                  t        j                        5 }|j                          d d d        dt        j                        v sJ 	 d d d        y # 1 sw Y   ,xY w# 1 sw Y   y xY w)Nr   rv   r   zstandalone' plugin errored)r+   rw   r   r   EP_SA_LOADFAILr   r#   r   r_   assertRaisesr   ri   r   r[   	exception)r   rw   r   cms       r   test_find_all_error_messagez/PluginsRegistryTest.test_find_all_error_message   s    CZZLM 	EQZ   5$(("32I"". ""6#5#56 +"((*+/3r||3DDDD	E 	E
+ +	E 	Es$   AB,$B 5!B, B)	%B,,B5c                 @    | j                   | j                  d   k(  sJ y Nr   )r-   r~   r   s    r   test_getitemz PluginsRegistryTest.test_getitem   s    ~~&!1111r   c                 :    dgt        | j                        k(  sJ y r   )listr~   r   s    r   	test_iterzPluginsRegistryTest.test_iter   s    x4>)))r   c                 v    dt        | j                  i             k(  sJ dt        | j                        k(  sJ y )Nr      )lenrz   r~   r   s    r   test_lenzPluginsRegistryTest.test_len   s6    C11"56666CM!!!r   c                     d| j                   j                  _        dg| j                  j                  d      k(  sJ | j                   j                  j	                  d       y )Nbazbar)r-   rV   return_valuer~   assert_called_once_withr   s    r   rX   zPluginsRegistryTest.test_init   sI    +0(w$((--....33E:r   c                     | j                   | j                  j                  d       k(  sJ i | j                  j                  d       k(  sJ y )Nc                 8    | j                   j                  d      S )Nmr   
startswithp_eps    r   <lambda>z1PluginsRegistryTest.test_filter.<locals>.<lambda>   s    )=)=c)B r   c                 8    | j                   j                  d      S )Nbr   r   s    r   r   z1PluginsRegistryTest.test_filter.<locals>.<lambda>   s    $))2F2Fs2K r   )ry   r~   filterr   s    r   test_filterzPluginsRegistryTest.test_filter   sH    ||HHOOBCD 	D DTXX__%KLLLLr   c                 (   d| j                   j                  _        | j                  | j                  j                         j
                  k(  sJ d| j                   j                  _        i | j                  j                         j
                  k(  sJ y re   )r-   rG   r   ry   r~   _pluginsr   s    r   rJ   zPluginsRegistryTest.test_ifaces   sh    -1*||txx099999-2*TXX__&/////r   c                     d| j                   j                  _        dg| j                  j                         k(  sJ | j                   j                  j	                          y )Nr   )r-   rZ   r   r~   r   r   s    r   r\   z PluginsRegistryTest.test_prepare  sG    .3+w$((**,,,,668r   c           
      0   g }t         j                  D ci c]7  }|t        j                  t	        j
                  |j                  |            9 }}| j                  |      }|j                          |t        t         j                        k(  sJ y c c}w )N)rZ   )
stringascii_lettersr   r:   	functoolspartialappendrz   rZ   sorted)r   ordercry   r~   s        r   test_prepare_orderz&PluginsRegistryTest.test_prepare_order
  s     ))
 t~~i&7&7a&HII
 
 ''0 v334444
s   <Bc                     d| j                   _        | j                  | j                  j                         j                  k(  sJ d| j                   _        i | j                  j                         j                  k(  sJ y re   )r-   rO   ry   r~   r   r   s    r   test_availablez"PluginsRegistryTest.test_available  s`    #' ||txx113<<<<<#( TXX'')22222r   c                    | j                   j                  t        j                               J d| j                  _        | j                   j                  | j                  j                               | j                  u sJ y )NT)r~   	find_initr   Mockr-   rL   rV   r   s    r   test_find_initz"PluginsRegistryTest.test_find_init  s]    xx!!$))+.666%)"xx!!$.."5"5"78DNNJJJr   c                 \    d | j                   _        dt        | j                        k(  sJ y )Nc                      y)NzPluginEntryPoint#mockr   _s    r   r   z/PluginsRegistryTest.test_repr.<locals>.<lambda>#      r   z&PluginsRegistry(PluginEntryPoint#mock))r-   __repr__rp   r~   r   s    r   rq   zPluginsRegistryTest.test_repr"  s+    "C7dhh( 	( (r   c                 $   dt        | j                  i             k(  sJ d | j                  _        dt        | j                        k(  sJ | j                  j
                  | j                  ddi}| j                  |      }dt        |      k(  sJ y )Nz
No pluginsc                      y)Nr   r   r   s    r   r   z.PluginsRegistryTest.test_str.<locals>.<lambda>)  r   r   r   fooBarz	Bar

Mock)r[   rz   r-   __str__r~   r   )r   ry   r~   s      r   rn   zPluginsRegistryTest.test_str'  s    s4#<#<R#@AAAA!1TXX&&&>>&&uE''0C(((r   N)r   r   r   rr   classmethodrz   r.   r   r   r   r   r   rX   r   rJ   r\   r   r   r   rq   rn   r   r   r   rt   rt      se    D( (	%'&	E2*";
M
09

53K
(
)r   rt   __main__r   )!rr   r   r   systypingr   unittestr   pytestcertbotr   r   certbot._internal.pluginsr   r   r	   version_infoimportlib.metadatametadatar(   r)   r   r,   r   r   TestCaser!   rt   r   exitmainargv__file__r   r   r   <module>r      s   0   
       * 0 -w3.,77 .
 	&%%	
>
	
 	&%%	
;
	
 %	
>
J=8,, J=Zt)(++ t)n zCHH[V[[!"
234 r   