U
    ÝÁ]Ê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   )ÚclsZparamsr   © r
   ú9/usr/lib/python3/dist-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.   r/   )r(   r)   ÚassertFalser   r1   r
   r
   r   Útest_exe_not_exists<   s    z!ExeExistsTest.test_exe_not_existsN)r#   r$   r%   r&   r'   r   r2   r4   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   r6   )r	   ÚargsÚkwargsr6   r
   r
   r   r   C   s    zLockDirUntilExit._callc                    s$   t t| ƒ ¡  dd l}t|jƒ d S ©Nr   )Úsuperr5   Ú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<   r0   ÚlenZ_LOCKSÚdebug)r   Zmock_registerZmock_loggerr@   Zregistered_funcr<   r
   r
   r   Útest_itN   s    


zLockDirUntilExit.test_it)r#   r$   r%   r&   r'   r   r;   r(   r)   rJ   Ú__classcell__r
   r
   r>   r   r5   A   s   
r5   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   rM   )r   r7   r8   rM   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   rB   rC   rD   r   r0   Úexistsr   rF   )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 )NrO   F)r   r   r   r   ÚErrorr   rD   )r   Zmock_make_or_verifyr
   r
   r   r"   r   s    zSetUpCoreDirTest.test_failureN)	r#   r$   r%   r&   r   r(   r)   rQ   r"   r
   r
   r
   r   rL   d   s   
rL   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:   rS   r;   r   rB   rC   rD   r   rE   r1   r>   r
   r   r;   €   s    zMakeOrVerifyDirTest.setUpc                 C   s   ddl m} |||ddS )Nr   )Úmake_or_verify_dirT)Ústrict)r   rV   )r   Z	directoryÚmoderV   r
   r
   r   r   †   s    zMakeOrVerifyDirTest._callc                 C   sD   t j | jd¡}|  |d¡ |  t j |¡¡ |  t |d¡¡ d S )NÚbari¨  )	r   rB   rC   rD   r   r0   Úisdirr   Ú
check_mode)r   rB   r
   r
   r   Útest_creates_dir_when_missingŠ   s    z1MakeOrVerifyDirTest.test_creates_dir_when_missingc                 C   s&   |   | jd¡ |  t | jd¡¡ d S )NrU   )r   rB   r0   r   r[   r1   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   rR   r   rB   r1   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ÚmakedirsrY   iøÞ» )r(   r)   Úobjectr   r   r   r   r   )r   r`   r
   r
   r   Útest_reraises_os_error—   s    z*MakeOrVerifyDirTest.test_reraises_os_error)r#   r$   r%   r&   r;   r   r\   r]   r_   rb   rK   r
   r
   r>   r   rS   x   s   rS   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:   rc   r;   r   rB   rC   rD   Údefault_namer1   r>   r
   r   r;       s    zUniqueFileTest.setUprU   c                 C   s   ddl m} || j|ƒS )Nr   )Úunique_file)r   rf   re   )r   rX   rf   r
   r
   r   r   ¥   s    zUniqueFileTest._callc              	   C   sF   |   ¡ \}}| d¡ | ¡  t|ƒ}|  | ¡ d¡ W 5 Q R X d S )NrY   )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 )NrO   rU   )r   r0   r   r[   rh   )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 rd   )r   ZassertNotEqualr   r   rB   ÚdirnamerD   Úbasenamer0   Úendswithrh   )
r   ro   rp   rq   rr   Zfd3Zname3Z	basename1Z	basename2Z	basename3r
   r
   r   Útest_default_exists¸   s$    z"UniqueFileTest.test_default_exists)rU   )
r#   r$   r%   r&   r;   r   rn   rs   rw   rK   r
   r
   r>   r   rc      s   
rc   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   rz   rD   )r   ÚfilenamerX   rz   r
   r
   r   r   Û   s    zUniqueLineageNameTest._callc                 C   sB   |   d¡\}}|  t|tƒ¡ |  tj | jd¡|¡ | 	¡  d S )NÚwowzwow.conf)
r   r0   Ú
isinstanceÚ	file_typer   r   rB   rC   rD   rh   )r   rm   rB   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)
ÚsixZmovesÚrangeÚappendr   r0   r}   r~   Zstring_typesrh   )r   ÚitemsÚ_rm   rl   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   r1   r
   r
   r   r"   ð   s    z"UniqueLineageNameTest.test_failureN)ry   )r#   r$   r%   r&   r   r   r‡   r"   r
   r
   r
   r   rx   Ø   s
   
rx   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 )NrT   )r:   r‰   r;   r   rB   rC   rD   r1   r>   r
   r   r;   ø   s    zSafelyRemoveTest.setUpc                 C   s   ddl m} || jƒS )Nr   )Úsafely_remove)r   rŠ   rB   )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)ri   rB   r   r3   r   rP   r1   r
   r
   r   Útest_exists  s    
zSafelyRemoveTest.test_existsc                 C   s    |   ¡  |  tj | j¡¡ d S ©N)r   r3   r   rB   rP   r1   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   rK   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.)r0   r   ©r   Z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“   )r3   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Úparserr1   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   Z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   rF   r0   rG   ©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ž   rA   z
sys.stdout)rN   z-h)
r   r‚   ÚStringIOr(   r)   rš   r¢   Ú
SystemExitr0   Ú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Úsetr1   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¬   Útupler1   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-option2rA   )r(   r)   Z#ACTION_TYPES_THAT_DONT_NEED_A_VALUEr   r   rH   )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   r1   r
   r
   r   Útest_sanityn  s    zEnforceLeValidity.test_sanityc                 C   s   |   tj| jd¡ d S )Nzhello_world.example.comrµ   r1   r
   r
   r   Útest_invalid_charsq  s
      ÿz$EnforceLeValidity.test_invalid_charsc                 C   s   |   tj| jd¡ d S )Nz-a.example.comrµ   r1   r
   r
   r   Útest_leading_hyphenu  s
      ÿz%EnforceLeValidity.test_leading_hyphenc                 C   s   |   tj| jd¡ d S )Nza-.example.comrµ   r1   r
   r
   r   Útest_trailing_hypheny  s
      ÿz&EnforceLeValidity.test_trailing_hyphenc                 C   s   |   tj| jd¡ d S )NZcomrµ   r1   r
   r
   r   Útest_one_label}  s    z EnforceLeValidity.test_one_labelc                 C   s   |   |  d¡d¡ d S )Nzexample.com©r   r   r1   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µ   r1   r
   r
   r   Útest_input_with_schemeƒ  s    z(EnforceLeValidity.test_input_with_schemec                 C   s   |   |  d¡d¡ d S )Nzhttp.example.comr¼   r1   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   Úencoder1   r
   r
   r   Útest_nonascii_str’  s    ÿz)EnforceDomainSanityTest.test_nonascii_strc                 C   s   |   tj| jd¡ d S )NrÂ   rµ   r1   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   r1   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_wildcardr1   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   )r3   r   rØ   rÃ   r1   r
   r
   r   Útest_no_wildcardÑ  s    z%IsWildcardDomainTest.test_no_wildcardc                 C   s,   |   |  | j¡¡ |   |  | j ¡ ¡¡ d S r   )r0   r   r×   rÃ   r1   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é   Zdebian)r   r<   Zliker   Zget_systemd_os_liker   rH   r0   )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.0ZcodenameT)Zprettyú Zwhatever)r   r<   r(   r)   rl   r   Úlinux_distributionÚget_python_os_infor   Zget_os_info_uarC   ©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)rl   ÚversionÚxrÝ   )rl   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 r9   )r   r<   Zget_systemd_os_infor0   Ú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Úfuncr7   r8   r1   r
   r
   r   r;   7  s    
zAtexitRegisterTest.setUpc                 O   s   ddl m} |||ŽS )Nr   )Úatexit_register)r   r  )r	   r7   r8   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_withr7   r8   r1   r
   r
   r   Útest_calledA  s    zAtexitRegisterTest.test_calledc                 C   s   | j dd |  | jj¡ d S )Nr   )Úinitial_pid)r  r3   r  rí   r1   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  r7   r8   r0   Úregisterrí   rG   )r   r  Zmock_atexitr7   r8   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TempDirTestCaser5   rL   rS   rc   Úfiler~   Ú	NameErrorÚioÚTextIOWrapperrx   r‰   r   r—   r²   rÀ   rÖ   rÜ   r   r#   Úmainr
   r
   r
   r   Ú<module>   sB   #%4<#;[ 
