U
    ÓZjÊT  ã                   @   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mZ ddl	m
  mZ ddlmZ ddlmZ ddlmZ G dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZzeZW n$ ek
�r   ddlZejZY nX G dd„ dejƒZG dd„ dejƒZ G dd„ dejƒZ!G dd„ dejƒZ"G dd„ dejƒZ#G dd„ dejƒZ$G dd „ d ejƒ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.util.é    N)Úreload_module)Úerrors)Úos)Ú
filesystemc                   @   sR   e Zd ZdZedd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZ	e d¡d	d
„ ƒZ
dS )ÚRunScriptTestz"Tests for certbot.util.run_script.c                 C   s   ddl m} ||ƒS )Nr   )Ú
run_script)Úcertbot.utilr   )ÚclsÚparamsr   © r   úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/util_test.pyÚ_call   s    zRunScriptTest._callúcertbot.util.subprocess.Popenc                 C   s>   d|ƒ _ d|ƒ j_|  dg¡\}}|  |d¡ |  |d¡ dS )z.These will be changed soon enough with reload.r   )ÚstdoutÚstderrÚtestr   r   N)Ú
returncodeÚcommunicateÚreturn_valuer   ÚassertEqual)ÚselfÚ
mock_popenÚoutÚerrr   r   r   Útest_default   s
    
zRunScriptTest.test_defaultc                 C   s   t |_|  tj| jdg¡ d S )Nr   )ÚOSErrorÚside_effectÚassertRaisesr   ÚSubprocessErrorr   ©r   r   r   r   r   Útest_bad_process"   s    zRunScriptTest.test_bad_processc                 C   s*   d|ƒ j _d|ƒ _|  tj| jdg¡ d S )N)Ú r!   é   r   )r   r   r   r   r   r   r   r   r   r   r   Útest_failure(   s    
zRunScriptTest.test_failureN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   ÚmockÚpatchr   r    r#   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S )	ÚExeExistsTestz"Tests for certbot.util.exe_exists.c                 C   s   ddl m} ||ƒS )Nr   )Ú
exe_exists)r   r,   )r	   Úexer,   r   r   r   r   3   s    zExeExistsTest._callc              	   C   s.   t jddd�� |  |  d¡¡ W 5 Q R X d S )Nú%certbot.util.filesystem.is_executableT©r   ú/path/to/exe)r)   r*   Ú
assertTruer   ©r   r   r   r   Útest_exe_exists8   s    zExeExistsTest.test_exe_existsc              	   C   s.   t jddd�� |  |  d¡¡ W 5 Q R X d S )Nr.   Fr/   r0   )r)   r*   ÚassertFalser   r2   r   r   r   Útest_exe_not_exists<   s    z!ExeExistsTest.test_exe_not_existsN)r$   r%   r&   r'   r(   r   r3   r5   r   r   r   r   r+   0   s
   
r+   c                       sH   e Zd ZdZedd„ ƒZ‡ fdd„Ze d¡e d¡dd	„ ƒƒZ	‡  Z
S )
ÚLockDirUntilExitz+Tests for certbot.util.lock_dir_until_exit.c                 O   s   ddl m} |||ŽS )Nr   )Úlock_dir_until_exit)r   r7   )r	   ÚargsÚkwargsr7   r   r   r   r   C   s    zLockDirUntilExit._callc                    s$   t t| ƒ ¡  dd l}t|jƒ d S ©Nr   )Úsuperr6   ÚsetUpr   r   Úutil)r   Úcertbot©Ú	__class__r   r   r<   H   s    zLockDirUntilExit.setUpzcertbot.util.loggerzcertbot.util.atexit_registerc                 C   s�   t j | jd¡}t |¡ |  | j¡ |  |¡ |  |¡ |  |jd¡ |j	d d }ddl
m} |  t|jƒdk¡ |ƒ  |  |jjd¡ d S )NÚsubdirr"   r   )r=   é   )r   ÚpathÚjoinÚtempdirr   Úmkdirr   r   Ú
call_countÚ	call_argsr>   r=   r1   ÚlenZ_LOCKSÚdebug)r   Zmock_registerZmock_loggerrA   Zregistered_funcr=   r   r   r   Útest_itN   s    


zLockDirUntilExit.test_it)r$   r%   r&   r'   r(   r   r<   r)   r*   rK   Ú__classcell__r   r   r?   r   r6   A   s   
r6   c                   @   s<   e Zd ZdZdd„ Ze d¡dd„ ƒZe d¡dd	„ ƒZd
S )ÚSetUpCoreDirTestz/Tests for certbot.util.make_or_verify_core_dir.c                 O   s   ddl m} |||ŽS )Nr   )Úset_up_core_dir)r   rN   )r   r8   r9   rN   r   r   r   r   g   s    zSetUpCoreDirTest._callz certbot.util.lock_dir_until_exitc                 C   sB   t j | jd¡}|  |dd¡ |  t j |¡¡ |  |jd¡ d S )NÚnewéÀ  Fr"   )	r   rC   rD   rE   r   r1   Úexistsr   rG   )r   Z	mock_lockZnew_dirr   r   r   Útest_successk   s    zSetUpCoreDirTest.test_successzcertbot.util.make_or_verify_dirc                 C   s"   t |_|  tj| j| jdd¡ d S )NrP   F)r   r   r   r   ÚErrorr   rE   )r   Zmock_make_or_verifyr   r   r   r#   r   s    zSetUpCoreDirTest.test_failureN)	r$   r%   r&   r'   r   r)   r*   rR   r#   r   r   r   r   rM   d   s   
rM   c                       sH   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	‡  Z
S )ÚMakeOrVerifyDirTestz°Tests 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                    s2   t t| ƒ ¡  tj | jd¡| _t | jd¡ d S )NÚfooé€  )	r;   rT   r<   r   rC   rD   rE   r   rF   r2   r?   r   r   r<   €   s    zMakeOrVerifyDirTest.setUpc                 C   s   ddl m} |||dd�S )Nr   )Úmake_or_verify_dirT)Ústrict)r   rW   )r   Ú	directoryÚmoderW   r   r   r   r   †   s    zMakeOrVerifyDirTest._callc                 C   sD   t j | jd¡}|  |d¡ |  t j |¡¡ |  t |d¡¡ d S )NÚbari¨  )	r   rC   rD   rE   r   r1   Úisdirr   Ú
check_mode)r   rC   r   r   r   Útest_creates_dir_when_missingŠ   s    z1MakeOrVerifyDirTest.test_creates_dir_when_missingc                 C   s&   |   | jd¡ |  t | jd¡¡ d S )NrV   )r   rC   r1   r   r]   r2   r   r   r   Ú(test_existing_correct_mode_does_not_fail�   s    z<MakeOrVerifyDirTest.test_existing_correct_mode_does_not_failc                 C   s   |   tj| j| jd¡ d S )Né   )r   r   rS   r   rC   r2   r   r   r   Útest_existing_wrong_mode_fails”   s    z2MakeOrVerifyDirTest.test_existing_wrong_mode_failsc              	   C   s8   t j td¡� }tƒ |_|  t| jdd¡ W 5 Q R X d S )NÚmakedirsr[   iøÞ» )r)   r*   Úobjectr   r   r   r   r   )r   rb   r   r   r   Útest_reraises_os_error—   s    z*MakeOrVerifyDirTest.test_reraises_os_error)r$   r%   r&   r'   r<   r   r^   r_   ra   rd   rL   r   r   r?   r   rT   x   s   rT   c                       sB   e Zd ZdZ‡ fdd„Zddd„Zdd„ Zd	d
„ Zdd„ Z‡  Z	S )ÚUniqueFileTestz#Tests for certbot.util.unique_file.c                    s$   t t| ƒ ¡  tj | jd¡| _d S ©Nzfoo.txt)r;   re   r<   r   rC   rD   rE   Údefault_namer2   r?   r   r   r<       s    zUniqueFileTest.setUprV   c                 C   s   ddl m} || j|ƒS )Nr   )Úunique_file)r   rh   rg   )r   rZ   rh   r   r   r   r   ¥   s    zUniqueFileTest._callc              	   C   sF   |   ¡ \}}| d¡ | ¡  t|ƒ�}|  | ¡ d¡ W 5 Q R X d S )Nr[   )r   ÚwriteÚcloseÚopenr   Úread)r   ÚfdÚnameÚfr   r   r   Útest_returns_fd_for_writing©   s
    

z*UniqueFileTest.test_returns_fd_for_writingc                 C   sT   |   d¡\}}|   d¡\}}|  t |d¡¡ |  t |d¡¡ | ¡  | ¡  d S )NrP   rV   )r   r1   r   r]   rj   )r   Úfd1Úname1Úfd2Úname2r   r   r   Útest_right_mode°   s    zUniqueFileTest.test_right_modec           
      C   sú   |   ¡ \}}|   ¡ \}}|   ¡ \}}|  ||¡ |  ||¡ |  ||¡ |  tj |¡| j¡ |  tj |¡| j¡ |  tj |¡| j¡ tj |¡}|  | 	d¡¡ tj |¡}|  | 	d¡¡ tj |¡}	|  |	 	d¡¡ | 
¡  | 
¡  | 
¡  d S rf   )r   ZassertNotEqualr   r   rC   ÚdirnamerE   Úbasenamer1   Úendswithrj   )
r   rq   rr   rs   rt   Zfd3Zname3Z	basename1Z	basename2Z	basename3r   r   r   Útest_default_exists¸   s$    z"UniqueFileTest.test_default_exists)rV   )
r$   r%   r&   r'   r<   r   rp   ru   ry   rL   r   r   r?   r   re   �   s   
re   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚUniqueLineageNameTestz+Tests for certbot.util.unique_lineage_name.éÿ  c                 C   s   ddl m} || j||ƒS )Nr   )Úunique_lineage_name)r   r|   rE   )r   ÚfilenamerZ   r|   r   r   r   r   Û   s    zUniqueLineageNameTest._callc                 C   sB   |   d¡\}}|  t|tƒ¡ |  tj | jd¡|¡ | 	¡  d S )NÚwowzwow.conf)
r   r1   Ú
isinstanceÚ	file_typer   r   rC   rD   rE   rj   )r   ro   rC   r   r   r   Ú
test_basicß   s    z UniqueLineageNameTest.test_basicc                 C   s|   g }t j d¡D ]}| |  d¡¡ q|d \}}|  t|tƒ¡ |  t|t jƒ¡ |  d|k¡ |D ]\}}| 	¡  qfd S )Né
   r~   éÿÿÿÿzwow-0009.conf)
ÚsixÚmovesÚrangeÚappendr   r1   r   r€   Ústring_typesrj   )r   ÚitemsÚ_ro   rn   r   r   r   Útest_multipleå   s    z#UniqueLineageNameTest.test_multiplec              	   C   s4   t jdttjƒd�� |  t| jd¡ W 5 Q R X d S )Nzcertbot.compat.filesystem.open)r   r~   )r)   r*   r   ÚerrnoZEIOr   r   r2   r   r   r   r#   ð   s    z"UniqueLineageNameTest.test_failureN)r{   )r$   r%   r&   r'   r   r�   r‹   r#   r   r   r   r   rz   Ø   s
   
rz   c                       s@   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z‡  Z	S )ÚSafelyRemoveTestz%Tests for certbot.util.safely_remove.c                    s$   t t| ƒ ¡  tj | jd¡| _d S )NrU   )r;   r�   r<   r   rC   rD   rE   r2   r?   r   r   r<   ø   s    zSafelyRemoveTest.setUpc                 C   s   ddl m} || jƒS )Nr   )Úsafely_remove)r   rŽ   rC   )r   rŽ   r   r   r   r   ý   s    zSafelyRemoveTest._callc              	   C   s8   t | jdƒ� W 5 Q R X |  ¡  |  tj | j¡¡ d S )NÚw)rk   rC   r   r4   r   rQ   r2   r   r   r   Útest_exists  s    
zSafelyRemoveTest.test_existsc                 C   s    |   ¡  |  tj | j¡¡ d S ©N)r   r4   r   rC   rQ   r2   r   r   r   Útest_missing  s    zSafelyRemoveTest.test_missingc              	   C   s.   t  d¡�}t|_|  t| j¡ W 5 Q R X d S )Nzcertbot.util.os.remove)r)   r*   r   r   r   r   )r   Zmock_remover   r   r   Útest_other_error_passthrough  s    z-SafelyRemoveTest.test_other_error_passthrough)
r$   r%   r&   r'   r<   r   r�   r’   r“   rL   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S )	ÚSafeEmailTestzTest safe_email.c                 C   s   ddl m} ||ƒS )Nr   )Ú
safe_email)r   r•   )r	   Úaddrr•   r   r   r   r     s    zSafeEmailTest._callc                 C   s.   dddg}|D ]}|   |  |¡d| ¡ qd S )Nzcertbot@certbot.orgztbd.ade@gmail.comzabc_def.jdk@hotmail.museumú
%s failed.)r1   r   ©r   Úaddrsr–   r   r   r   Útest_valid_emails  s    ýzSafeEmailTest.test_valid_emailsc                 C   s.   dddg}|D ]}|   |  |¡d| ¡ qd S )Nzcertbot@certbot..orgz.tbd.ade@gmail.comz~/abc_def.jdk@hotmail.museumr—   )r4   r   r˜   r   r   r   Útest_invalid_emails"  s    ýz!SafeEmailTest.test_invalid_emailsN)r$   r%   r&   r'   r(   r   rš   r›   r   r   r   r   r”     s
   
	r”   c                   @   sP   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S )ÚAddDeprecatedArgumentTestzTest add_deprecated_argument.c                 C   s   t  ¡ | _d S r‘   )ÚargparseÚArgumentParserÚparserr2   r   r   r   r<   .  s    zAddDeprecatedArgumentTest.setUpc                 C   s    ddl m} || jj||ƒ d S )Nr   )Úadd_deprecated_argument)r   r    rŸ   Úadd_argument)r   Úargument_nameÚnargsr    r   r   r   r   1  s    zAddDeprecatedArgumentTest._callc              	   C   sp   |   dd¡ t d¡�}| j dg¡ W 5 Q R X |  |jd¡ |  d|jd d k¡ |  d|jd d ¡ d S )Nú--old-optionr   úcertbot.util.logger.warningr"   úis deprecated©	r   r)   r*   rŸ   Ú
parse_argsr   rG   r1   rH   ©r   Ú	mock_warnr   r   r   Útest_warning_no_arg5  s    z-AddDeprecatedArgumentTest.test_warning_no_argc              	   C   sr   |   dd¡ t d¡�}| j ddg¡ W 5 Q R X |  |jd¡ |  d|jd d k¡ |  d|jd d ¡ d S )Nr¤   r"   r¥   Ú42r¦   r   r§   r©   r   r   r   Útest_warning_with_arg=  s    z/AddDeprecatedArgumentTest.test_warning_with_argc              	   C   sl   |   dd¡ t ¡ }tjd|d��. z| j dg¡ W n tk
rJ   Y nX W 5 Q R X |  d| 	¡ k¡ d S )Nr¤   rB   z
sys.stdout)rO   z-h)
r   r„   ÚStringIOr)   r*   rŸ   r¨   Ú
SystemExitr1   Úgetvalue)r   r   r   r   r   Ú	test_helpE  s    z#AddDeprecatedArgumentTest.test_helpc                 C   s   |   t¡ dS )z†Test 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Úsetr2   r   r   r   Útest_set_constantO  s    z+AddDeprecatedArgumentTest.test_set_constantc                 C   s   |   t¡ dS )z‹Test when ACTION_TYPES_THAT_DONT_NEED_A_VALUE is a tuple.

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

        N)r²   Útupler2   r   r   r   Útest_tuple_constantW  s    z-AddDeprecatedArgumentTest.test_tuple_constantc              	   C   sL   t  d¡�&}|ƒ |_|  dd¡ |  dd¡ W 5 Q R X |  t|jƒd¡ d S )Nzcertbot.util.configargparser¤   r"   z--old-option2rB   )r)   r*   Z#ACTION_TYPES_THAT_DONT_NEED_A_VALUEr   r   rI   )r   ÚtypZmock_configargparser   r   r   r²   _  s     ÿz/AddDeprecatedArgumentTest._test_constant_commonN)r$   r%   r&   r'   r<   r   r«   r­   r±   r´   r¶   r²   r   r   r   r   rœ   ,  s   
rœ   c                   @   sX   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S )ÚEnforceLeValidityzTest enforce_le_validity.c                 C   s   ddl m} ||ƒS )Nr   )Úenforce_le_validity)r   r¹   )r   Údomainr¹   r   r   r   r   j  s    zEnforceLeValidity._callc                 C   s   |   tj| jd¡ d S )Nz..©r   r   ÚConfigurationErrorr   r2   r   r   r   Útest_sanityn  s    zEnforceLeValidity.test_sanityc                 C   s   |   tj| jd¡ d S )Nzhello_world.example.comr»   r2   r   r   r   Útest_invalid_charsq  s
      ÿz$EnforceLeValidity.test_invalid_charsc                 C   s   |   tj| jd¡ d S )Nz-a.example.comr»   r2   r   r   r   Útest_leading_hyphenu  s
      ÿz%EnforceLeValidity.test_leading_hyphenc                 C   s   |   tj| jd¡ d S )Nza-.example.comr»   r2   r   r   r   Útest_trailing_hypheny  s
      ÿz&EnforceLeValidity.test_trailing_hyphenc                 C   s   |   tj| jd¡ d S )NÚcomr»   r2   r   r   r   Útest_one_label}  s    z EnforceLeValidity.test_one_labelc                 C   s   |   |  d¡d¡ d S )Nzexample.com©r   r   r2   r   r   r   Útest_valid_domain€  s    z#EnforceLeValidity.test_valid_domainc                 C   s(   |   tj| jd¡ |   tj| jd¡ d S )Nzhttp://example.comzhttps://example.comr»   r2   r   r   r   Útest_input_with_schemeƒ  s    z(EnforceLeValidity.test_input_with_schemec                 C   s   |   |  d¡d¡ d S )Nzhttp.example.comrÃ   r2   r   r   r   Ú!test_valid_input_with_scheme_name‡  s    z3EnforceLeValidity.test_valid_input_with_scheme_nameN)r$   r%   r&   r'   r   r½   r¾   r¿   rÀ   rÂ   rÄ   rÅ   rÆ   r   r   r   r   r¸   h  s   r¸   c                   @   sp   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S )ÚEnforceDomainSanityTestzTest enforce_domain_sanity.c                 C   s   ddl m} ||ƒS )Nr   )Úenforce_domain_sanity)r   rÈ   )r   rº   rÈ   r   r   r   r   Ž  s    zEnforceDomainSanityTest._callc                 C   s   |   tj| jd d¡¡ d S )Nõ   eichhÃ¶rnchen.example.comzutf-8)r   r   r¼   r   Úencoder2   r   r   r   Útest_nonascii_str’  s    ÿz)EnforceDomainSanityTest.test_nonascii_strc                 C   s   |   tj| jd¡ d S )NrÉ   r»   r2   r   r   r   Útest_nonascii_unicode–  s    ÿz-EnforceDomainSanityTest.test_nonascii_unicodec                 C   s   d}|   tj| j|¡ d S )NA   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar»   )r   Zlong_domainr   r   r   Útest_too_longš  s    ÿz%EnforceDomainSanityTest.test_too_longc                 C   s   d  dddd¡}|  |¡ d S )Nz{0}.{1}.{2}.{3}Ú?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaÚ?bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ?cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ?ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd©Úformatr   )r   Znot_too_long_domainr   r   r   Útest_not_too_longŸ  s    z)EnforceDomainSanityTest.test_not_too_longc                 C   s   d}|   tj| j|¡ d S )Nzfizz..example.comr»   )r   Zempty_label_domainr   r   r   Útest_empty_label£  s    ÿz(EnforceDomainSanityTest.test_empty_labelc                 C   s   d}|   tj| j|¡ d S )Nzexample.com..r»   )r   Zempty_trailing_label_domainr   r   r   Útest_empty_trailing_label¨  s    ÿz1EnforceDomainSanityTest.test_empty_trailing_labelc                 C   s   d}|   tj| j|¡ d S )NÚ@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar»   ©r   Zlong_label_domainr   r   r   Útest_long_label_1­  s    ÿz)EnforceDomainSanityTest.test_long_label_1c                 C   s"   d  dd¡}|  tj| j|¡ d S )Nú{0}.{1}.comrÕ   rÏ   )rÑ   r   r   r¼   r   rÖ   r   r   r   Útest_long_label_2²  s    ÿz)EnforceDomainSanityTest.test_long_label_2c                 C   s   d  dd¡}|  |¡ d S )NrØ   rÎ   rÏ   rÐ   )r   Znot_too_long_label_domainr   r   r   Útest_not_long_label·  s    z+EnforceDomainSanityTest.test_not_long_labelc                 C   s   d}|   tj| j|¡ d S )Nr!   r»   )r   Zempty_domainr   r   r   Útest_empty_domain»  s    ÿz)EnforceDomainSanityTest.test_empty_domainc                 C   s   |   d¡ d S )Nzthis.is.xn--ls8h.tld)r   r2   r   r   r   Útest_punycode_okÀ  s    z(EnforceDomainSanityTest.test_punycode_okN)r$   r%   r&   r'   r   rË   rÌ   rÍ   rÒ   rÓ   rÔ   r×   rÙ   rÚ   rÛ   rÜ   r   r   r   r   rÇ   ‹  s   rÇ   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚIsWildcardDomainTestzTests for is_wildcard_domain.c                 C   s   d| _ d| _d S )Nz*.example.orgzexample.org)ÚwildcardÚno_wildcardr2   r   r   r   r<   É  s    zIsWildcardDomainTest.setUpc                 C   s   ddl m} ||ƒS )Nr   )Úis_wildcard_domain)r   rà   )r   rº   rà   r   r   r   r   Í  s    zIsWildcardDomainTest._callc                 C   s,   |   |  | j¡¡ |   |  | j ¡ ¡¡ d S r‘   )r4   r   rß   rÊ   r2   r   r   r   Útest_no_wildcardÑ  s    z%IsWildcardDomainTest.test_no_wildcardc                 C   s,   |   |  | j¡¡ |   |  | j ¡ ¡¡ d S r‘   )r1   r   rÞ   rÊ   r2   r   r   r   Útest_wildcardÕ  s    z"IsWildcardDomainTest.test_wildcardN)r$   r%   r&   r'   r<   r   rá   râ   r   r   r   r   rÝ   Æ  s
   rÝ   c                   @   s  e Zd ZdZe d¡e ej	 
d¡d¡dd„ ƒƒZe d¡e ej	 
d¡d¡dd„ ƒƒZe d¡e ej	 
d¡d¡d	d
„ ƒƒZe d¡e d¡e ej	 
d¡d¡dd„ ƒƒƒZe d¡dd„ ƒZe d¡e ej	 
d¡d¡dd„ ƒƒZe d¡e ej	 
d¡d¡dd„ ƒƒZdS )Ú
OsInfoTestz Test OS / distribution detectionzcertbot.util.distroÚlinuxzrequires Linuxc                 C   s>   dd l m} d|j_| ¡ }|  t|ƒd¡ |  d|k¡ d S )Nr   zfirst debian thirdé   Údebian)r   r=   Úliker   Zget_systemd_os_liker   rI   r1   )r   Úm_distroÚcbutilZid_likesr   r   r   Útest_systemd_os_release_likeÝ  s
    z'OsInfoTest.test_systemd_os_release_likec              	   C   s|   dd l m} tjddd��@ d|j_d|j_|jdd� |  | 	¡ d	 
|jdd�¡¡ W 5 Q R X d
|j_|  | 	¡ d
¡ d S )Nr   úplatform.system_alias)rä   r¬   r¬   r/   r!   )Ú	somethingz1.0ÚcodenameT)Úprettyú Zwhatever)r   r=   r)   r*   rn   r   Úlinux_distributionÚget_python_os_infor   Zget_os_info_uarD   ©r   rè   ré   r   r   r   Útest_get_os_info_uaæ  s    ÿ
ÿzOsInfoTest.test_get_os_info_uac              	   C   s\   dd l m} t d¡�<}d|j_d|_|  | ¡ d¡ d|j_|  | ¡ d¡ W 5 Q R X d S )Nr   zplatform.system)rn   ÚversionÚxrä   )rn   rô   )rì   Úelse)r   r=   r)   r*   rð   r   r   Zget_os_info)r   rè   ré   Zmock_platformr   r   r   Útest_get_os_infoõ  s    zOsInfoTest.test_get_os_infozwarnings.warnc                 C   s$   dd l m} | ¡  |  |j¡ d S r:   )r   r=   Zget_systemd_os_infor1   Úcalled)r   rŠ   rª   ré   r   r   r   Ú$test_get_systemd_os_info_deprecation  s    z/OsInfoTest.test_get_systemd_os_info_deprecationr   c                 C   s*  dd l m} t dd¡�� tjddd�� |  | ¡ d d¡ W 5 Q R X tjddd��P t ¡ }d	d
i}|jf |Ž ||_|  | ¡ d d¡ |  | ¡ d d¡ W 5 Q R X tjddd�� |  | ¡ d¡ W 5 Q R X tjddd��0 tjddd�� |  | ¡ d¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   zcertbot.util._USE_DISTROFrë   )Z
NonSystemDr¬   r¬   r/   Z
nonsystemd)Údarwinr!   r!   zcommunicate.return_value)ú42.42.42Úerrorrú   r"   rû   )Úfreebsdz
9.3-RC3-p1r!   )rý   Ú9)Úwindowsr!   r!   zplatform.win32_ver)Z4242Ú95Ú2r!   )rÿ   r   )	r   r=   r)   r*   r   rñ   ZMockZconfigure_mockr   )r   Z
popen_mockré   Z	comm_mockZ
comm_attrsr   r   r   Útest_non_systemd_os_info	  s<    ÿÿÿÿÿÿ
ÿz#OsInfoTest.test_non_systemd_os_infoc                 C   s,   dd l m} d|j_|  | ¡ d d¡ d S )Nr   )r!   r!   r!   rä   ©r   r=   rð   r   r   rñ   rò   r   r   r   Útest_python_os_info_notfound&  s    z'OsInfoTest.test_python_os_info_notfoundc                 C   s(   dd l m} d|j_|  | ¡ d¡ d S )Nr   )Útestdistr¬   r!   )r  r¬   r  rò   r   r   r   Útest_python_os_info_custom-  s    z%OsInfoTest.test_python_os_info_customN)r$   r%   r&   r'   r)   r*   ÚunittestZ
skipUnlessÚsysÚplatformÚ
startswithrê   ró   r÷   rù   r  r  r  r   r   r   r   rã   Ú  s,   

rã   c                   @   s<   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	„ Zd
d„ Z	dS )ÚAtexitRegisterTestz'Tests for certbot.util.atexit_register.c                 C   s   t  ¡ | _d| _ddi| _d S )N)ÚhiZansweré*   )r)   Z	MagicMockÚfuncr8   r9   r2   r   r   r   r<   7  s    
zAtexitRegisterTest.setUpc                 O   s   ddl m} |||ŽS )Nr   )Úatexit_register)r   r  )r	   r8   r9   r  r   r   r   r   <  s    zAtexitRegisterTest._callc                 C   s$   |   t ¡ ¡ | jj| j| jŽ d S r‘   )Ú_test_commonr   Úgetpidr  Zassert_called_withr8   r9   r2   r   r   r   Útest_calledA  s    zAtexitRegisterTest.test_calledc                 C   s   | j dd� |  | jj¡ d S )Nrƒ   )Úinitial_pid)r  r4   r  rø   r2   r   r   r   Útest_not_calledE  s    z"AtexitRegisterTest.test_not_calledc              
   C   s~   t  d|¡�h t  d¡�}| j| jf| jž| jŽ W 5 Q R X |  |jj¡ |jj	\}}|d }||dd … |Ž W 5 Q R X d S )Nzcertbot.util._INITIAL_PIDzcertbot.util.atexitr   r"   )
r)   r*   r   r  r8   r9   r1   Úregisterrø   rH   )r   r  Zmock_atexitr8   r9   Zatexit_funcr   r   r   r  I  s    "zAtexitRegisterTest._test_commonN)
r$   r%   r&   r'   r<   r(   r   r  r  r  r   r   r   r   r  5  s   
r  Ú__main__)*r'   r�   rŒ   r  r  r)   r„   Z	six.movesr   Zcertbot.tests.utilZtestsr=   Z	test_utilr>   r   Zcertbot.compatr   r   ZTestCaser   r+   ZTempDirTestCaser6   rM   rT   re   Úfiler€   Ú	NameErrorÚioÚTextIOWrapperrz   r�   r”   rœ   r¸   rÇ   rÝ   rã   r  r$   Úmainr   r   r   r   Ú<module>   sB   #%4<#;[ 
