
    M/e`                        d 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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c mZ  G d d	ej(                        Z G d
 dej(                        Z G d dej(                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej(                        Z G d dej(                        Z  G d dej(                        Z! G d  d!ej(                        Z" G d" d#ej(                        Z# G d$ d%ej(                        Z$ G d& d'ej(                        Z% G d( d)ej(                        Z& G d* d+ej(                        Z'e(d,k(  r4 ejR                   e
jT                  ejV                  d-d e,gz                yy).zTests for certbot.util.    N)reload)mock)errors)
filesystem)osc                   ,    e Zd ZdZed        Zd Zd Zy)EnvNoSnapForExternalCallsTestz6Tests for certbot.util.env_no_snap_for_external_calls.c                     ddl m}  |       S )Nr   )env_no_snap_for_external_calls)certbot.utilr   )clsr   s     C/usr/lib/python3/dist-packages/certbot/_internal/tests/util_test.py_callz#EnvNoSnapForExternalCallsTest._call   s    ?-//    c                    t         j                  d   }t         j                  j                         }d|z   |d<   d|d<   d|d<   t        j                  d|      5  | j                         d   |k(  sJ 	 d d d        y # 1 sw Y   y xY w)	NPATH"RANDOM_NONSENSE_GARBAGE/blah/blah:RANDOM_NONSENSE_GARBAGESNAPTrueCERTBOT_SNAPPEDcertbot.compat.os.environ.copyreturn_value)r   environcopyr   patchr   )selforiginal_pathenv_copy_dicts      r   test_removedz*EnvNoSnapForExternalCallsTest.test_removed   s    

6*

) D} Tf 9f+1'(ZZ8}U 	9::<'=888	9 	9 	9s   A>>Bc                    t         j                  j                         }d|d   z   |d<   |j                         }t        j                  d|      5  |j                  dd        |j                  dd        | j                         d   |d   k(  sJ d|d<   | j                         d   |d   k(  sJ |d= d|d<   | j                         d   |d   k(  sJ 	 d d d        y # 1 sw Y   y xY w)	Nr   r   r   r   r   r   r   r   )r   r   r   r   r   popr   )r   env_copy_dict_unmodifiedr    s      r   	test_noopz'EnvNoSnapForExternalCallsTest.test_noop"   s    #%::??#4 +O&v.,/ (0557ZZ8}U 
	Lfd+/6::<'+CF+KKKK$=M&!::<'+CF+KKKKf%/5M+,::<'+CF+KKKK
	L 
	L 
	Ls   BCC'N)__name__
__module____qualname____doc__classmethodr   r!   r%    r   r   r	   r	      s"    @0 09Lr   r	   c                       e Zd ZdZed        Z ej                  d      d        Z ej                  d      d        Z	 ej                  d      d        Z
y)RunScriptTestz"Tests for certbot.util.run_script.c                     ddl m}  ||      S )Nr   )
run_script)r   r/   )r   paramsr/   s      r   r   zRunScriptTest._call6   s    +&!!r   zcertbot.util.subprocess.runc                     d |       _         d |       _        d |       _        | j                  dg      \  }}|dk(  sJ |dk(  sJ y)z.These will be changed soon enough with reload.r   stdoutstderrtestN)
returncoder2   r3   r   )r   mock_runouterrs       r   test_defaultzRunScriptTest.test_default;   sN     !"
$
$
::vh'Shhr   c                     t         |_        t        j                  t        j
                        5  | j                  dg       d d d        y # 1 sw Y   y xY w)Nr4   )OSErrorside_effectpytestraisesr   SubprocessErrorr   r   r6   s     r   test_bad_processzRunScriptTest.test_bad_processF   s?    &]]6112 	!JJx 	! 	! 	!s   AAc                     d |       _         t        j                  t        j                        5  | j                  dg       d d d        y # 1 sw Y   y xY w)N   r4   )r5   r=   r>   r   r?   r   r@   s     r   test_failurezRunScriptTest.test_failureM   sA     !
]]6112 	!JJx 	! 	! 	!s   AAN)r&   r'   r(   r)   r*   r   r   r   r9   rA   rD   r+   r   r   r-   r-   4   sw    ," " TZZ-. / TZZ-.! /! TZZ-.! /!r   r-   c                   ,    e Zd ZdZed        Zd Zd Zy)ExeExistsTestz"Tests for certbot.util.exe_exists.c                     ddl m}  ||      S )Nr   )
exe_exists)r   rH   )r   exerH   s      r   r   zExeExistsTest._callX   s    +#r   c                     t        j                  dd      5  | j                  d      sJ 	 d d d        y # 1 sw Y   y xY w)N%certbot.util.filesystem.is_executableTr   /path/to/exer   r   r   r   s    r   test_exe_existszExeExistsTest.test_exe_exists]   s8    ZZ?dS 	.::n---	. 	. 	.   6?c                     t        j                  dd      5  | j                  d      rJ 	 d d d        y # 1 sw Y   y xY w)NrK   Fr   rL   rM   rN   s    r   test_exe_not_existsz!ExeExistsTest.test_exe_not_existsa   s;    ZZ?eT 	2zz.1111	2 	2 	2rP   N)r&   r'   r(   r)   r*   r   rO   rR   r+   r   r   rF   rF   U   s!    , .2r   rF   c                        e Zd ZdZed        Z fdZ ej                  d       ej                  d      d               Z	 xZ
S )LockDirUntilExitz+Tests for certbot.util.lock_dir_until_exit.c                     ddl m}  ||i |S )Nr   )lock_dir_until_exit)r   rV   )r   argskwargsrV   s       r   r   zLockDirUntilExit._callh       4"D3F33r   c                 T    t         |           dd l}t        |j                         y )Nr   )supersetUpr   reload_moduleutil)r   certbot	__class__s     r   r\   zLockDirUntilExit.setUpm   s    gll#r   zcertbot.util.loggerzcertbot.util.atexit_registerc                    t         j                  j                  | j                  d      }t	        j
                  |       | j                  | j                         | j                  |       | j                  |       |j                  dk(  sJ |j                  d   d   }ddl	m
} t        |j                        dk(  sJ  |        |j                  j                  dk(  sJ y )NsubdirrC   r   )r^      )r   pathjointempdirr   mkdirr   
call_count	call_argsr_   r^   len_LOCKSdebug)r   mock_registermock_loggerrb   registered_funcr^   s         r   test_itzLockDirUntilExit.test_its   s     dllH5 

4<< 

6

6''1,,,'11!4Q7  4;;1$$$   ++q000r   )r&   r'   r(   r)   r*   r   r\   r   r   rp   __classcell__r`   s   @r   rT   rT   f   sQ    54 4$ TZZ%&TZZ./1 0 '1r   rT   c                   v    e Zd ZdZd Z ej                  d      d        Z ej                  d      d        Zy)SetUpCoreDirTestz/Tests for certbot.util.make_or_verify_core_dir.c                     ddl m}  ||i |S )Nr   )set_up_core_dir)r   rv   )r   rW   rX   rv   s       r   r   zSetUpCoreDirTest._call   s    0///r   z certbot.util.lock_dir_until_exitc                     t         j                  j                  | j                  d      }| j	                  |dd       t         j                  j                  |      sJ |j                  dk(  sJ y )Nnew  FrC   )r   rd   re   rf   r   existsrh   )r   	mock_locknew_dirs      r   test_successzSetUpCoreDirTest.test_success   sT    '',,t||U3

7E5)ww~~g&&&##q(((r   zcertbot.util.make_or_verify_dirc                     t         |_        t        j                  t        j
                        5  | j                  | j                  dd       d d d        y # 1 sw Y   y xY w)Nry   F)r;   r<   r=   r>   r   Errorr   rf   )r   mock_make_or_verifys     r   rD   zSetUpCoreDirTest.test_failure   sD    *1']]6<<( 	3JJt||UE2	3 	3 	3s   AAN)	r&   r'   r(   r)   r   r   r   r}   rD   r+   r   r   rt   rt      sJ    90 TZZ23) 4) TZZ123 33r   rt   c                   @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )MakeOrVerifyDirTestzTests for certbot.util.make_or_verify_dir.

    Note that it is not possible to test for a wrong directory owner,
    as this testing script would have to be run as root.

    c                     t         |           t        j                  j	                  | j
                  d      | _        t        j                  | j                  d       y )Nfoo  )r[   r\   r   rd   re   rf   r   rg   r   r`   s    r   r\   zMakeOrVerifyDirTest.setUp   s:    GGLLu5	E*r   c                 $    ddl m}  |||d      S )Nr   )make_or_verify_dirT)strict)r   r   )r   	directorymoder   s       r   r   zMakeOrVerifyDirTest._call   s    3!)T$??r   c                     t         j                  j                  | j                  d      }| j	                  |d       t         j                  j                  |      sJ t        j                  |d      sJ y )Nbari  )r   rd   re   rf   r   isdirr   
check_mode)r   rd   s     r   test_creates_dir_when_missingz1MakeOrVerifyDirTest.test_creates_dir_when_missing   sT    ww||DLL%0

4ww}}T"""$$T5111r   c                     | j                  | j                  d       t        j                  | j                  d      sJ y )Nr   )r   rd   r   r   rN   s    r   (test_existing_correct_mode_does_not_failz<MakeOrVerifyDirTest.test_existing_correct_mode_does_not_fail   s.    

499e$$$TYY666r   c                     t        j                  t        j                        5  | j	                  | j
                  d       d d d        y # 1 sw Y   y xY w)N   )r=   r>   r   r   r   rd   rN   s    r   test_existing_wrong_mode_failsz2MakeOrVerifyDirTest.test_existing_wrong_mode_fails   s9    ]]6<<( 	)JJtyy%(	) 	) 	)s   A

Ac                    t         j                  j                  t        d      5 }t	               |_        t        j                  t              5  | j                  dd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nmakedirsr   i޻ )	r   r   objectr   r;   r<   r=   r>   r   )r   r   s     r   test_reraises_os_errorz*MakeOrVerifyDirTest.test_reraises_os_error   sk    ZZz:6 	,(#*9H w' ,

5(+,	, 	,, ,	, 	,s#   )A>A2!A>2A;	7A>>B)r&   r'   r(   r)   r\   r   r   r   r   r   rq   rr   s   @r   r   r      s'    +@27),r   r   c                   <     e Zd ZdZ fdZddZd Zd Zd Z xZ	S )UniqueFileTestz#Tests for certbot.util.unique_file.c                     t         |           t        j                  j	                  | j
                  d      | _        y Nzfoo.txt)r[   r\   r   rd   re   rf   default_namer   s    r   r\   zUniqueFileTest.setUp   s'    GGLLyAr   c                 4    ddl m}  || j                  |      S )Nr   )unique_file)r   r   r   )r   r   r   s      r   r   zUniqueFileTest._call   s    ,4,,d33r   c                     | j                         \  }}|j                  d       |j                          t        |      5 }|j	                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )r   writecloseopenread)r   fdnamefs       r   test_returns_fd_for_writingz*UniqueFileTest.test_returns_fd_for_writing   sW    ::<D


$Z 	%1668u$$$	% 	% 	%s    A  A)c                     | j                  d      \  }}| j                  d      \  }}t        j                  |d      sJ t        j                  |d      sJ |j                          |j                          y )Nry   r   )r   r   r   r   )r   fd1name1fd2name2s        r   test_right_modezUniqueFileTest.test_right_mode   sd    ZZ&
UZZ&
U$$UE222$$UE222				r   c                 @   | j                         \  }}| j                         \  }}| j                         \  }}||k7  sJ ||k7  sJ ||k7  sJ t        j                  j                  |      | j                  k(  sJ t        j                  j                  |      | j                  k(  sJ t        j                  j                  |      | j                  k(  sJ t        j                  j                  |      }|j                  d      sJ t        j                  j                  |      }|j                  d      sJ t        j                  j                  |      }	|	j                  d      sJ |j                          |j                          |j                          y r   )r   r   rd   dirnamerf   basenameendswithr   )
r   r   r   r   r   fd3name3	basename1	basename2	basename3s
             r   test_default_existsz"UniqueFileTest.test_default_exists   sC   ZZ\
UZZ\
UZZ\
U~~~~~~wwu%555wwu%555wwu%555GG$$U+	!!),,,GG$$U+	!!),,,GG$$U+	!!),,,						r   )r   )
r&   r'   r(   r)   r\   r   r   r   r   rq   rr   s   @r   r   r      s     -B
4%r   r   c                   *    e Zd ZdZddZd Zd Zd Zy)UniqueLineageNameTestz+Tests for certbot.util.unique_lineage_name.c                 6    ddl m}  || j                  ||      S )Nr   )unique_lineage_name)r   r   rf   )r   filenamer   r   s       r   r   zUniqueLineageNameTest._call   s    4"4<<4@@r   c                     | j                  d      \  }}t        |t        j                        sJ t        j
                  j                  | j                  d      |k(  sJ |j                          y )Nwowzwow.conf)	r   
isinstanceioTextIOWrapperr   rd   re   rf   r   )r   r   rd   s      r   
test_basicz UniqueLineageNameTest.test_basic  sT    **U#4!R--...ww||DLL*5===		r   c                    g }t        d      D ]"  }|j                  | j                  d             $ |d   \  }}t        |t        j
                        sJ t        |t              sJ d|v sJ |D ]  \  }}|j                           y )N
   r   zwow-0009.conf)rangeappendr   r   r   r   strr   )r   items_r   r   s        r   test_multiplez#UniqueLineageNameTest.test_multiple  s    r 	,ALLE*+	,)4!R--...$$$$$&&& 	DAqGGI	r   c                    t        j                  dt        t        j                              5  t        j                  t              5  | j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzcertbot.compat.filesystem.open)r<   r   )r   r   r;   errnoEIOr=   r>   r   rN   s    r   rD   z"UniqueLineageNameTest.test_failure  sa    ZZ8geiiFXY 	"w' "

5!"	" 	"" "	" 	"s#   A8	A,A8,A5	1A88BN)i  )r&   r'   r(   r)   r   r   r   rD   r+   r   r   r   r      s    5A	"r   r   c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )SafelyRemoveTestz%Tests for certbot.util.safely_remove.c                     t         |           t        j                  j	                  | j
                  d      | _        y )Nr   )r[   r\   r   rd   re   rf   r   s    r   r\   zSafelyRemoveTest.setUp  s&    GGLLu5	r   c                 2    ddl m}  || j                        S )Nr   )safely_remove)r   r   rd   )r   r   s     r   r   zSafelyRemoveTest._call   s    .TYY''r   c                     t        | j                  d      5  	 d d d        | j                          t        j                  j	                  | j                        rJ y # 1 sw Y   ExY w)Nw)r   rd   r   r   rz   rN   s    r   test_existszSafelyRemoveTest.test_exists$  sN    $))S! 		

77>>$)),,,,	 	s   AA&c                 z    | j                          t        j                  j                  | j                        rJ y N)r   r   rd   rz   rN   s    r   test_missingzSafelyRemoveTest.test_missing*  s(    

77>>$)),,,,r   c                     t        j                  d      5 }t        |_        t	        j
                  t              5  | j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzcertbot.util.os.remove)r   r   r;   r<   r=   r>   r   )r   mock_removes     r   test_other_error_passthroughz-SafelyRemoveTest.test_other_error_passthrough/  s]    ZZ01 	[&-K#w' 

	 	 	 	s"   %A)AA)A&	"A))A2)
r&   r'   r(   r)   r\   r   r   r   r   rq   rr   s   @r   r   r     s    /6
(--
r   r   c                   ,    e Zd ZdZed        Zd Zd Zy)SafeEmailTestzTest safe_email.c                     ddl m}  ||      S )Nr   )
safe_email)r   r   )r   addrr   s      r   r   zSafeEmailTest._call8  s    +$r   c                 P    g d}|D ]  }| j                  |      rJ d|z          y )N)zcertbot@certbot.orgztbd.ade@gmail.comzabc_def.jdk@hotmail.museum
%s failed.r   r   addrsr   s      r   test_valid_emailszSafeEmailTest.test_valid_emails=  s6    

  	9D::d#8\D%88#	9r   c                 P    g d}|D ]  }| j                  |      sJ d|z          y )N)zcertbot@certbot..orgz.tbd.ade@gmail.comz~/abc_def.jdk@hotmail.museumr   r   r   s      r   test_invalid_emailsz!SafeEmailTest.test_invalid_emailsF  s6    

  	=Dzz$'<)<<'	=r   N)r&   r'   r(   r)   r*   r   r   r   r+   r   r   r   r   6  s!       9=r   r   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)AddDeprecatedArgumentTestzTest add_deprecated_argument.c                 6    t        j                         | _        y r   )argparseArgumentParserparserrN   s    r   r\   zAddDeprecatedArgumentTest.setUpR  s    --/r   c                 L    ddl m}  || j                  j                  ||       y )Nr   )add_deprecated_argument)r   r   r   add_argument)r   argument_namenargsr   s       r   r   zAddDeprecatedArgumentTest._callU  s    8 8 8-Or   c                 .   | j                  dd       t        j                  d      5 }| j                  j	                  dg       d d d        j
                  dk(  sJ d|j                  d   d   v sJ d|j                  d   d   v sJ y # 1 sw Y   GxY w)N--old-optionr   certbot.util.logger.warningrC   is deprecatedr   r   r   r   
parse_argsrh   ri   r   	mock_warns     r   test_warning_no_argz-AddDeprecatedArgumentTest.test_warning_no_argY  s    

>1%ZZ56 	5)KK""N#34	5##q((()"5"5a"8";;;;!4!4Q!7!::::		5 	5s   BBc                 0   | j                  dd       t        j                  d      5 }| j                  j	                  ddg       d d d        j
                  dk(  sJ d|j                  d   d   v sJ d|j                  d   d   v sJ y # 1 sw Y   GxY w)Nr   rC   r   42r   r   r   r   s     r   test_warning_with_argz/AddDeprecatedArgumentTest.test_warning_with_arga  s    

>1%ZZ56 	;)KK""ND#9:	;##q((()"5"5a"8";;;;!4!4Q!7!::::		; 	;s   BBc                 (   | j                  dd       t        j                         }t        j                  d|      5  	 | j
                  j                  dg       d d d        d|j                         vsJ y # t        $ r Y (w xY w# 1 sw Y   -xY w)Nr   rc   z
sys.stdout)rx   z-h)	r   r   StringIOr   r   r   r   
SystemExitgetvalue)r   r2   s     r   	test_helpz#AddDeprecatedArgumentTest.test_helpi  s    

>1%ZZ&1 	&&v.	
 V__%6666  	 	s)   B A99	BBBBBc                 .    | j                  t               y)zTest when ACTION_TYPES_THAT_DONT_NEED_A_VALUE is a set.

        This variable is a set in configargparse versions < 0.12.0.

        N)_test_constant_commonsetrN   s    r   test_set_constantz+AddDeprecatedArgumentTest.test_set_constants  s     	""3'r   c                 .    | j                  t               y)zTest when ACTION_TYPES_THAT_DONT_NEED_A_VALUE is a tuple.

        This variable is a tuple in configargparse versions >= 0.12.0.

        N)r	  tuplerN   s    r   test_tuple_constantz-AddDeprecatedArgumentTest.test_tuple_constant{  s     	""5)r   c                     t        j                  d      5 } |       |_        | j                  dd       | j                  dd       d d d        t	        j                        dk(  sJ y # 1 sw Y   $xY w)Nzcertbot.util.configargparser   rC   z--old-option2rc   )r   r   #ACTION_TYPES_THAT_DONT_NEED_A_VALUEr   rj   )r   typmock_configargparses      r   r	  z/AddDeprecatedArgumentTest._test_constant_common  sj    ZZ56 	+:MFIeCJJ~q)JJ*	+ &JJKqPPP		+ 	+s   1A**A3N)r&   r'   r(   r)   r\   r   r   r  r  r  r  r	  r+   r   r   r   r   P  s/    '0P;;7(*Qr   r   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)EnforceLeValidityzTest enforce_le_validity.c                     ddl m}  ||      S )Nr   )enforce_le_validity)r   r  )r   domainr  s      r   r   zEnforceLeValidity._call  s    4"6**r   c                     t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nz..r=   r>   r   ConfigurationErrorr   rN   s    r   test_sanityzEnforceLeValidity.test_sanity  s5    ]]6445 	JJu	 	 		   ?Ac                     t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nzhello_world.example.comr  rN   s    r   test_invalid_charsz$EnforceLeValidity.test_invalid_chars  s6    ]]6445 	3JJ12	3 	3 	3r  c                     t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nz-a.example.comr  rN   s    r   test_leading_hyphenz%EnforceLeValidity.test_leading_hyphen  6    ]]6445 	*JJ()	* 	* 	*r  c                     t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nza-.example.comr  rN   s    r   test_trailing_hyphenz&EnforceLeValidity.test_trailing_hyphen  r!  r  c                     t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   y xY w)Ncomr  rN   s    r   test_one_labelz EnforceLeValidity.test_one_label  s5    ]]6445 	JJv	 	 	r  c                 0    | j                  d      dk(  sJ y )Nzexample.comr   rN   s    r   test_valid_domainz#EnforceLeValidity.test_valid_domain  s    zz.)^;;;r   c                 (   t        j                  t        j                        5  | j	                  d       d d d        t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)Nzhttp://example.comzhttps://example.comr  rN   s    r   test_input_with_schemez(EnforceLeValidity.test_input_with_scheme  so    ]]6445 	.JJ,-	.]]6445 	/JJ-.	/ 	/	. 	.	/ 	/s   A<!B<BBc                 0    | j                  d      dk(  sJ y )Nzhttp.example.comr   rN   s    r   !test_valid_input_with_scheme_namez3EnforceLeValidity.test_valid_input_with_scheme_name  s    zz-.2EEEEr   N)r&   r'   r(   r)   r   r  r  r   r#  r&  r(  r*  r,  r+   r   r   r  r    s3    #+3**</Fr   r  c                   X    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y)EnforceDomainSanityTestzTest enforce_domain_sanity.c                     ddl m}  ||      S )Nr   )enforce_domain_sanity)r   r0  )r   r  r0  s      r   r   zEnforceDomainSanityTest._call  s    6$V,,r   c                     t        j                  t        j                        5  | j	                  dj                  d             d d d        y # 1 sw Y   y xY w)N   eichhörnchen.example.comzutf-8)r=   r>   r   r  r   encoderN   s    r   test_nonascii_strz)EnforceDomainSanityTest.test_nonascii_str  sE    ]]6445 	IJJ7>>wGH	I 	I 	Is   !AAc                     t        j                  t        j                        5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nr2  r  rN   s    r   test_nonascii_unicodez-EnforceDomainSanityTest.test_nonascii_unicode  s6    ]]6445 	9JJ78	9 	9 	9r  c                     d}t        j                  t        j                        5  | j	                  |       d d d        y # 1 sw Y   y xY w)N   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  )r   long_domains     r   test_too_longz%EnforceDomainSanityTest.test_too_long  s:    ]]6445 	$JJ{#	$ 	$ 	$   AA
c                 N    dj                  dddd      }| j                  |       y )Nz{0}.{1}.{2}.{3}?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb?ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc?dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddformatr   )r   not_too_long_domains     r   test_not_too_longz)EnforceDomainSanityTest.test_not_too_long  s'    077PVW

&'r   c                     d}t        j                  t        j                        5  | j	                  |       d d d        y # 1 sw Y   y xY w)Nzfizz..example.comr  )r   empty_label_domains     r   test_empty_labelz(EnforceDomainSanityTest.test_empty_label  s<    1]]6445 	+JJ)*	+ 	+ 	+r;  c                     d}t        j                  t        j                        5  | j	                  |       d d d        y # 1 sw Y   y xY w)Nzexample.com..r  )r   empty_trailing_label_domains     r   test_empty_trailing_labelz1EnforceDomainSanityTest.test_empty_trailing_label  s<    &6#]]6445 	4JJ23	4 	4 	4r;  c                     d}t        j                  t        j                        5  | j	                  |       d d d        y # 1 sw Y   y xY w)N@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r   long_label_domains     r   test_long_label_1z)EnforceDomainSanityTest.test_long_label_1  s<    #]]6445 	*JJ()	* 	* 	*r;  c                     dj                  dd      }t        j                  t        j                        5  | j                  |       d d d        y # 1 sw Y   y xY w)N{0}.{1}.comrL  r>  )rB  r=   r>   r   r  r   rM  s     r   test_long_label_2z)EnforceDomainSanityTest.test_long_label_2  sI    *11'7C]]6445 	*JJ()	* 	* 	*s   AAc                 J    dj                  dd      }| j                  |       y )NrQ  r=  r>  rA  )r   not_too_long_label_domains     r   test_not_long_labelz+EnforceDomainSanityTest.test_not_long_label  s"    $2$9$9'7$K!

,-r   c                     d}t        j                  t        j                        5  | j	                  |       d d d        y # 1 sw Y   y xY w)N r  )r   empty_domains     r   test_empty_domainz)EnforceDomainSanityTest.test_empty_domain  s:    ]]6445 	%JJ|$	% 	% 	%r;  c                 &    | j                  d       y )Nzthis.is.xn--ls8h.tldr   rN   s    r   test_punycode_okz(EnforceDomainSanityTest.test_punycode_ok  s     	

)*r   N)r&   r'   r(   r)   r   r4  r6  r:  rD  rG  rJ  rO  rR  rU  rY  r[  r+   r   r   r.  r.    sB    %-I9$
(+
4
*
*
.%
+r   r.  c                   (    e Zd ZdZd Zd Zd Zd Zy)IsWildcardDomainTestzTests for is_wildcard_domain.c                      d| _         d| _        y )Nz*.example.orgzexample.org)wildcardno_wildcardrN   s    r   r\   zIsWildcardDomainTest.setUp  s    ()r   c                     ddl m}  ||      S )Nr   )is_wildcard_domain)r   rb  )r   r  rb  s      r   r   zIsWildcardDomainTest._call  s    3!&))r   c                     | j                  | j                        rJ | j                  | j                  j                               rJ y r   )r   r`  r3  rN   s    r   test_no_wildcardz%IsWildcardDomainTest.test_no_wildcard  s>    ::d..///::d..5578888r   c                     | j                  | j                        sJ | j                  | j                  j                               sJ y r   )r   r_  r3  rN   s    r   test_wildcardz"IsWildcardDomainTest.test_wildcard  s7    zz$--(((zz$--..0111r   N)r&   r'   r(   r)   r\   r   rd  rf  r+   r   r   r]  r]    s    '**92r   r]  c                      e Zd ZdZ ej
                  d       ej                  ej                  j                  d      d      d               Z ej
                  d       ej                  ej                  j                  d      d      d               Z ej
                  d       ej                  ej                  j                  d      d      d               Zd Z ej
                  d       ej                  ej                  j                  d      d      d	               Z ej
                  d       ej                  ej                  j                  d      d      d
               Zy)
OsInfoTestz Test OS / distribution detectionzcertbot.util.distrolinuxzrequires Linuxc                 ~    dd l m} d|j                  _        |j	                         }t        |      dk(  sJ d|v sJ y )Nr   zfirst debian third   debian)r   r^   liker   get_systemd_os_likerj   )r   m_distrocbutilid_likess       r   test_systemd_os_release_likez'OsInfoTest.test_systemd_os_release_like  sA     	&%9"--/8}!!!8###r   c                 h   dd l m} t        j                  dd      5  d|j                  _        g d|j                  _        |j                         dj                  |j                  d	            k(  sJ 	 d d d        d
g|j                  _        |j                         d
k(  sJ y # 1 sw Y   1xY w)Nr   platform.system_alias)ri  r  r  r   1.0)rW  	somethingrv   T)prettywhatever)r   r^   r   r   versionr   r   r<   get_os_info_uare   get_python_os_infor   ro  rp  s      r   test_get_os_info_uazOsInfoTest.test_get_os_info_ua  s     	&ZZ/%:< 	M,1H)(FHMM%((*HHV%>%>d%>%KLM M M	M &0L!$$&*444	M 	Ms   AB((B1c                 P   dd l m} t        j                  d      5 }d|j                  _        d|j                  _        d|_        |j                         dk(  sJ d|j                  _        d|j                  _        |j                         d	k(  sJ 	 d d d        y # 1 sw Y   y xY w)
Nr   zplatform.systemr   rz  ri  )r   rz  rv  else)rv  r  )r   r^   r   r   idr   rz  get_os_info)r   ro  rp  mock_platforms       r   test_get_os_infozOsInfoTest.test_get_os_info  s     	&ZZ)* 	Am'-HKK$,5H))0M&%%'+>>>>'2HKK$,2H)%%'+@@@@	A 	A 	As   A6BB%c                 x   dd l m} t        j                  dd      5  t        j                  dd      5  |j	                         d   dk(  sJ 	 d d d        t        j                  dd      5  t        j                  d	      5 }d
 |       _        |j	                         d   dk(  sJ |j	                         d   d
k(  sJ 	 d d d        d d d        t        j                  dd      5  |j	                         dk(  sJ 	 d d d        t        j                  dd      5  t        j                  dd      5  |j	                         dk(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   OxY w# 1 sw Y   y xY w)Nr   zcertbot.util._USE_DISTROFrt  )
NonSystemDr  r  r   
nonsystemd)darwinrW  rW  zsubprocess.runz42.42.42r  rC   )freebsdz
9.3-RC3-p1rW  )r  9)windowsrW  rW  zplatform.win32_ver)4242952rW  )r  r  )r   r^   r   r   r|  r2   )r   rp  run_mocks      r   test_non_systemd_os_infoz#OsInfoTest.test_non_systemd_os_info*  s   %ZZ2E: 	63)CE F00215EEEF 3);= HZZ 01 HX(2HJ%!446q9XEEE!446q9ZGGGHH 3)FH G0026FFFFG 3)<> 6ZZ 4-DF 6!446$56 6 666!	6 	6F FH HH HG G6 66 6!	6 	6s   F0E'F0.F =E4F 
F0)F F0F$7FF$F0'E1	,F04E=9F  F		F0F	F0F!F$$F-	)F00F9c                     dd l m} d|j                  _        d|j                  _        |j                         d   dk(  sJ y )Nr   rW  ri  r   r^   r  r   rz  r|  r}  s      r   test_python_os_info_notfoundz'OsInfoTest.test_python_os_info_notfoundC  s=     	&#% (*%((*1-888r   c                 ~    dd l m} d|j                  _        d|j                  _        |j                         dk(  sJ y )Nr   testdistr  )r  r  r  r}  s      r   test_python_os_info_customz%OsInfoTest.test_python_os_info_customK  s9     	&#- (,%((*.@@@@r   N)r&   r'   r(   r)   r   r   unittest
skipUnlesssysplatform
startswithrr  r~  r  r  r  r  r+   r   r   rh  rh    st   *TZZ%&X009;KL$ M '$ TZZ%&X009;KL5 M '5 TZZ%&X009;KL
A M '
A62 TZZ%&X009;KL9 M '9 TZZ%&X009;KLA M 'Ar   rh  c                   8    e Zd ZdZd Zed        Zd Zd Zd Z	y)AtexitRegisterTestz'Tests for certbot.util.atexit_register.c                 V    t        j                         | _        d| _        ddi| _        y )N)hianswer*   )r   	MagicMockfuncrW   rX   rN   s    r   r\   zAtexitRegisterTest.setUpV  s"    NN$		nr   c                     ddl m}  ||i |S )Nr   )atexit_register)r   r  )r   rW   rX   r  s       r   r   zAtexitRegisterTest._call[  s    0///r   c                     | j                  t        j                                 | j                  j                  | j
                  i | j                   y r   )_test_commonr   getpidr  assert_called_withrW   rX   rN   s    r   test_calledzAtexitRegisterTest.test_called`  s7    "))+&$		$$dii?4;;?r   c                 \    | j                  d       | j                  j                  du sJ y )Nr   )initial_pidF)r  r  calledrN   s    r   test_not_calledz"AtexitRegisterTest.test_not_calledd  s+    b)yy5(((r   c                    t        j                  d|      5  t        j                  d      5 } | j                  | j                  g| j                  i | j
                   d d d        j                  j                  sJ |j                  j                  \  }}|d   } ||dd  i | d d d        y # 1 sw Y   SxY w# 1 sw Y   y xY w)Nzcertbot.util._INITIAL_PIDzcertbot.util.atexitr   rC   )	r   r   r   r  rW   rX   registerr  ri   )r   r  mock_atexitrW   rX   atexit_funcs         r   r  zAtexitRegisterTest._test_commonh  s    ZZ3[A 	-12 Ak

499@tyy@DKK@A ''....&//99LD&q'Kab,V,	- 	-A A	- 	-s#   C 5B4"A	C 4B=	9C  C	N)
r&   r'   r(   r)   r\   r*   r   r  r  r  r+   r   r   r  r  T  s.    1%
 0 0@)	-r   r  c                   8    e Zd ZdZed        Zd Zd Zd Zd Z	y)LooseVersionTestzTest for certbot.util.LooseVersion.

    These tests are based on the original tests for
    distutils.version.LooseVersion at
    https://github.com/python/cpython/blob/v3.10.0/Lib/distutils/tests/test_version.py#L58-L81.

    c                     ddl m}  ||i |S )Nr   )LooseVersion)r   r  )r   rW   rX   r  s       r   r   zLooseVersionTest._call}  s    -T,V,,r   c                     d}|D ]9  \  }}| j                  |      j                  | j                  |            dk(  r9J  y )N)z1.5.1z1.5.2b2z3.4jz
1996.07.122g611gz0.960923z	2.2beta29z1.13++z5.5.kw)2.0z2.0.1)abr   r   try_risky_comparisonr   comparisonsv1v2s       r   test_less_thanzLooseVersionTest.test_less_than  sI     " 	MFB::b>66tzz"~F"LLL	Mr   c                     d}|D ]9  \  }}| j                  |      j                  | j                  |            dk(  r9J  y )N))8.02r  )1ar  )r  2.0.0)r  r  r   r  r  s       r   
test_equalzLooseVersionTest.test_equal  sI     " 	LFB::b>66tzz"~F!KKK	Lr   c                     d}|D ]9  \  }}| j                  |      j                  | j                  |            dk(  r9J  y )N)161z3.10a)z3.2.pl0z3.1.1.6rC   r  r  s       r   test_greater_thanz"LooseVersionTest.test_greater_than  sG    $! 	LFB::b>66tzz"~F!KKK	Lr   c                     d}|D ]Y  \  }}t        j                  t              5  | j                  |      j	                  | j                  |            sJ 	 d d d        [ y # 1 sw Y   fxY w)N))zbookworm/sidr  )r  ru  )r=   r>   
ValueErrorr   r  r  s       r   test_incompariblez"LooseVersionTest.test_incomparible  sm    ! 	KFBz* Kzz"~::4::b>JJJK K	KK Ks   2A""A+	N)
r&   r'   r(   r)   r*   r   r  r  r  r  r+   r   r   r  r  t  s3     - -	MLLKr   r  c                   2    e Zd ZdZed        Zd Zd Zd Zy)ParseLooseVersionTestzTest for certbot.util.parse_loose_version.

    These tests are based on the original tests for
    distutils.version.LooseVersion at
    https://github.com/python/cpython/blob/v3.10.0/Lib/distutils/tests/test_version.py#L58-L81.

    c                     ddl m}  ||i |S )Nr   )parse_loose_version)r   r  )r   rW   rX   r  s       r   r   zParseLooseVersionTest._call  rY   r   c                 f    d}|D ]*  \  }}| j                  |      | j                  |      k  r*J  y )N)r  r  r  r  r  r   r  s       r   r  z$ParseLooseVersionTest.test_less_than  s<    "
 " 	3FB::b>DJJrN222	3r   c                 N    | j                  d      | j                  d      k(  sJ y )Nr  r   rN   s    r   r  z ParseLooseVersionTest.test_equal  s"    zz&!TZZ%7777r   c                 f    d}|D ]*  \  }}| j                  |      | j                  |      kD  r*J  y )Nr  r   r  s       r   r  z'ParseLooseVersionTest.test_greater_than  s:    $! 	3FB::b>DJJrN222	3r   N)	r&   r'   r(   r)   r*   r   r  r  r  r+   r   r   r  r    s*     4 4383r   r  __main__rC   )-r)   r   r   	importlibr   r]   r   r  r  r   r=   r_   r   certbot.compatr   r   certbot.tests.utiltestsr^   	test_utilTestCaser	   r-   rF   TempDirTestCaserT   rt   r   r   r   r   r   r   r  r.  r]  rh  r  r  r  r&   exitmainargv__file__r+   r   r   <module>r     s      - 	 
     %  & &LH$5$5 LD!H%% !B2H%% 2"!1y00 !1H3y00 3*$,)33 $,N1Y.. 1h"I55 "<y00 <=H%% =48Q 1 1 8Qv$F)) $FN8+h// 8+v28,, 2(PA"" PAf-** -@,Kx(( ,K^3H-- 3B zCHH[V[[!"
234 r   