U
    ÓZjž;  ã                   @   sT  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ 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G dd„ dejƒZG dd„ dejƒZG dd„ dejƒZ e!dk�rPe "¡  dS )zTests for certbot.log.é    N)Úmessages)ÚOptional)Ú	constants)Úerrors)Úutil)Ú
filesystem)Úosc                   @   sL   e Zd ZdZedd„ ƒZe d¡e d¡e d¡e d¡dd	„ ƒƒƒƒZd
S )ÚPreArgParseSetupTestz*Tests for certbot.log.pre_arg_parse_setup.c                 O   s   ddl m} |ƒ S )Nr   )Úpre_arg_parse_setup)Úcertbot.logr
   )ÚclsÚargsÚkwargsr
   © r   úY/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/log_test.pyÚ_call   s    zPreArgParseSetupTest._callúcertbot.log.sysz%certbot.log.pre_arg_parse_except_hookúcertbot.log.logging.getLoggerz certbot.log.util.atexit_registerc           
      C   sÖ   dg|_ tj|_|  ¡  |ƒ }|j tj¡ |  |j	j
d¡ d }|j	jD ]D}|d d }|d krzt|tjjƒrz|}|j}	qH|  t|tjƒ¡ qH|  t|	tjƒ¡ | tj¡ | ddd¡ |j|ddddtjd� d S )Nz--debugé   r   é   é   T©ÚdebugÚlog_path)ÚargvÚsysÚversion_infor   ÚsetLevelÚassert_called_once_withÚloggingÚDEBUGÚassertEqualÚ
addHandlerZ
call_countZcall_args_listÚ
isinstanceÚhandlersÚMemoryHandlerÚtargetÚ
assertTrueÚStreamHandlerÚshutdownÚ
excepthookÚmockÚANY)
ÚselfZmock_registerZmock_getÚmock_except_hookÚmock_sysZmock_root_loggerÚmemory_handlerÚcallÚhandlerr&   r   r   r   Útest_it   s4    
ÿ     ÿzPreArgParseSetupTest.test_itN©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r+   Úpatchr3   r   r   r   r   r	      s   
r	   c                       sP   e Zd ZdZedd„ ƒZ‡ fdd„Z‡ fdd„Zdd	„ Zd
d„ Z	dd„ Z
‡  ZS )ÚPostArgParseSetupTestz+Tests for certbot.log.post_arg_parse_setup.c                 O   s   ddl m} |||ŽS )Nr   )Úpost_arg_parse_setup)r   r<   )r   r   r   r<   r   r   r   r   ?   s    zPostArgParseSetupTest._callc                    s¤   t t| ƒ ¡  d| j_d| j_d| j_tjd | j_	t
tjdƒ| _ddlm} |t ¡ ƒ| _ddlm}m} |ƒ | _| jj| _|| jƒ| _tj| j| jgd�| _d S )	NFiè  Úverbose_countÚwr   ©ÚColoredStreamHandler)r%   ÚTempHandler)r$   )Úsuperr;   ÚsetUpÚconfigr   Úmax_log_backupsÚquietr   ZCLI_DEFAULTSr=   Úopenr   Údevnullr   r@   ÚsixÚStringIOÚstream_handlerr%   rA   Útemp_handlerÚpathÚ	temp_pathr0   r+   Ú	MagicMockÚroot_logger)r-   r@   r%   rA   ©Ú	__class__r   r   rC   D   s    

ÿzPostArgParseSetupTest.setUpc                    s:   | j  ¡  | j ¡  | j ¡  | j ¡  tt| ƒ ¡  d S ©N)r0   ÚcloserK   rL   rH   rB   r;   ÚtearDown©r-   rQ   r   r   rU   U   s
    



zPostArgParseSetupTest.tearDownc                 C   s  t  d¡�R}| j|_d}t  |¡�0}t  d¡�}tj|_|  | j¡ W 5 Q R X W 5 Q R X W 5 Q R X | jj 	| j
¡ |  | jjj¡ |  tj tj | jjd¡¡¡ |  tj | j¡¡ | ddd¡ |j	ddd| jj| jjd� | jj}| jj�r|  |tj¡ n|  || jj d	 ¡ d S )
Nr   ú&certbot.log.post_arg_parse_except_hookr   zletsencrypt.logr   r   r   r   é
   )r+   r:   rP   Zreturn_valuer   r   r   rD   ÚremoveHandlerr   r0   r'   r"   Úcalledr   rM   ÚexistsÚjoinÚlogs_dirÚassertFalserN   r*   r   rK   ÚlevelrF   r!   r   ZQUIET_LOGGING_LEVELr=   )r-   Zmock_get_loggerZexcept_hook_pathr.   r/   r_   r   r   r   Útest_common\   s8    *ÿ ÿ    ÿ
z!PostArgParseSetupTest.test_commonc                 C   s   d| j _|  ¡  d S ©NT)rD   r   r`   rV   r   r   r   Ú
test_debugu   s    z PostArgParseSetupTest.test_debugc                 C   s   d| j _|  ¡  d S ra   )rD   rF   r`   rV   r   r   r   Ú
test_quiety   s    z PostArgParseSetupTest.test_quiet)r5   r6   r7   r8   r9   r   rC   rU   r`   rb   rc   Ú__classcell__r   r   rQ   r   r;   <   s   
r;   c                       sh   e Zd ZdZedd„ ƒZ‡ fdd„Ze d¡dd„ ƒZ	d	d
„ Z
dd„ Zdd„ Ze d¡dd„ ƒZ‡  ZS )ÚSetupLogFileHandlerTestz-Tests for certbot.log.setup_log_file_handler.c                 O   s   ddl m} |||ŽS )Nr   )Úsetup_log_file_handler)r   rf   )r   r   r   rf   r   r   r   r   �   s    zSetupLogFileHandlerTest._callc                    s   t t| ƒ ¡  d| j_d S )Né*   )rB   re   rC   rD   rE   rV   rQ   r   r   rC   †   s    zSetupLogFileHandlerTest.setUpz1certbot.main.logging.handlers.RotatingFileHandlerc              
   C   s`   t |_z|  | jdd¡ W n6 tjk
rP } z|  dt|ƒk¡ W 5 d }~X Y nX |  d¡ d S )Nútest.logú%(message)sz
--logs-dirzError not raised.)	ÚIOErrorÚside_effectr   rD   r   ÚErrorr'   ÚstrÚfail)r-   Úmock_handlerÚerrr   r   r   Útest_failureŠ   s    $z$SetupLogFileHandlerTest.test_failurec                 C   s   | j dd� d S )NT©Úshould_rollover)Ú_test_success_commonrV   r   r   r   Útest_success_with_rollover•   s    z2SetupLogFileHandlerTest.test_success_with_rolloverc                 C   s   d| j _| jdd� d S )Nr   Frr   )rD   rE   rt   rV   r   r   r   Útest_success_without_rollover˜   s    z5SetupLogFileHandlerTest.test_success_without_rolloverc                 C   sŽ   d}|   | j|d¡\}}| ¡  |  |jtj¡ |  |jjt	j
¡ tj | jj|¡}|  ||¡ tj | jj|d ¡}|  tj |¡|¡ d S )Nrh   ri   z.1)r   rD   rT   r!   r_   r   r    Ú	formatterÚ	converterÚtimeÚ	localtimer   rM   r\   r]   r[   )r-   rs   Úlog_filer2   r   Zexpected_pathZbackup_pathr   r   r   rt   œ   s    z,SetupLogFileHandlerTest._test_success_commonz0certbot.log.logging.handlers.RotatingFileHandlerc                 C   s2   |   | jdd¡ |jd d }|  | jj|¡ d S )Nrh   ri   r   ÚbackupCount)r   rD   Ú	call_argsr!   rE   )r-   ro   Zbackup_countr   r   r   Útest_max_log_backups_usedª   s    z1SetupLogFileHandlerTest.test_max_log_backups_used)r5   r6   r7   r8   r9   r   rC   r+   r:   rq   ru   rv   rt   r~   rd   r   r   rQ   r   re   ~   s   


re   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚColoredStreamHandlerTestz*Tests for certbot.log.ColoredStreamHandlerc                 C   sX   t  ¡ | _dd„ | j_t ¡ | _| j tj¡ ddl	m
} || jƒ| _| j | j¡ d S )Nc                   S   s   dS ra   r   r   r   r   r   Ú<lambda>¶   ó    z0ColoredStreamHandlerTest.setUp.<locals>.<lambda>r   r?   )rI   rJ   ÚstreamÚisattyr   Ú	getLoggerÚloggerr   r    r   r@   r2   r"   )r-   r@   r   r   r   rC   ´   s    

zColoredStreamHandlerTest.setUpc                 C   s   | j  ¡  d S rS   ©r2   rT   rV   r   r   r   rU   ¾   s    z!ColoredStreamHandlerTest.tearDownc                 C   s,   d}| j  |¡ |  | j ¡ d |¡¡ d S )NzI did a thingz{0}
)r…   r   r!   r‚   ÚgetvalueÚformat©r-   Úmsgr   r   r   Útest_formatÁ   s    z$ColoredStreamHandlerTest.test_formatc                 C   s>   d}t j| j_| j |¡ |  | j ¡ d 	t
j|t
j¡¡ d S )NzI did another thingz
{0}{1}{2}
)r   r    r2   Z	red_levelr…   r   r!   r‚   r‡   rˆ   r   ZANSI_SGR_REDZANSI_SGR_RESETr‰   r   r   r   Útest_format_and_red_levelÆ   s    
þÿz2ColoredStreamHandlerTest.test_format_and_red_levelN)r5   r6   r7   r8   rC   rU   r‹   rŒ   r   r   r   r   r   ±   s
   
r   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚMemoryHandlerTestz#Tests for certbot.log.MemoryHandlerc                 C   sb   t  t¡| _| j t j¡ d| _t ¡ | _	t  
| j	¡| _ddlm} || jƒ| _| j | j¡ d S )Nzhi therer   )r%   )r   r„   r5   r…   r   r    rŠ   rI   rJ   r‚   r(   rK   r   r%   r2   r"   )r-   r%   r   r   r   rC   Ó   s    
zMemoryHandlerTest.setUpc                 C   s   | j  ¡  | j ¡  d S rS   )r2   rT   rK   rV   r   r   r   rU   Þ   s    
zMemoryHandlerTest.tearDownc                 C   s2   |   ¡  | jjdd� |  | j ¡ | jd ¡ d S )NT©ÚforceÚ
)Ú_test_log_debugr2   Úflushr!   r‚   r‡   rŠ   rV   r   r   r   Ú
test_flushâ   s    zMemoryHandlerTest.test_flushc                 C   s.   | j  | j¡ | j ¡  |  | j ¡ d¡ d S )NÚ )r…   ÚcriticalrŠ   r2   r’   r!   r‚   r‡   rV   r   r   r   Útest_not_flushedç   s    
z"MemoryHandlerTest.test_not_flushedc                 C   sh   |   ¡  t ¡ }t |¡}| j |¡ | jjdd� |  | j	 
¡ d¡ |  | 
¡ | jd ¡ | ¡  d S )NTrŽ   r”   r�   )r‘   rI   rJ   r   r(   r2   Ú	setTargetr’   r!   r‚   r‡   rŠ   rT   )r-   Z
new_streamZnew_stream_handlerr   r   r   Útest_target_resetí   s    
z#MemoryHandlerTest.test_target_resetc                 C   s   | j  | j¡ d S rS   )r…   r   rŠ   rV   r   r   r   r‘   ø   s    z!MemoryHandlerTest._test_log_debugN)
r5   r6   r7   r8   rC   rU   r“   r–   r˜   r‘   r   r   r   r   r�   Ñ   s   r�   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTempHandlerTestz"Tests for certbot.log.TempHandler.c                 C   s   d| _ ddlm} |ƒ | _d S )NFr   )rA   )Úclosedr   rA   r2   )r-   rA   r   r   r   rC   þ   s    zTempHandlerTest.setUpc                 C   s   | j  ¡  d S rS   r†   rV   r   r   r   rU     s    zTempHandlerTest.tearDownc                 C   s   |   t | jjd¡¡ d S )Ni€  )r'   r   Zcheck_permissionsr2   rM   rV   r   r   r   Útest_permissions  s    z TempHandlerTest.test_permissionsc                 C   s$   | j  ¡  |  tj | j j¡¡ d S rS   )r2   rT   r^   r   rM   r[   rV   r   r   r   Útest_delete	  s    
zTempHandlerTest.test_deletec                 C   sB   | j  t ¡ ¡ | j  ¡  |  tj | j j¡¡ t 	| j j¡ d S rS   )
r2   Úemitr+   rO   rT   r'   r   rM   r[   ÚremoverV   r   r   r   Útest_no_delete  s    
zTempHandlerTest.test_no_deleteN)	r5   r6   r7   r8   rC   rU   r›   rœ   rŸ   r   r   r   r   r™   ü   s   r™   c                   @   s.   e Zd ZdZedd„ ƒZe d¡dd„ ƒZdS )ÚPreArgParseExceptHookTestz0Tests for certbot.log.pre_arg_parse_except_hook.c                 O   s   ddl m} |||ŽS )Nr   )Úpre_arg_parse_except_hook)r   r¡   )r   r   r   r¡   r   r   r   r     s    zPreArgParseExceptHookTest._callrW   c                 C   sD   t  ¡ }d}ddi}| j|f|ž|Ž |j||Ž |jjdd� d S )N)Úsomer   r¢   r   TrŽ   )r+   rO   r   r   r’   )r-   Zmock_post_arg_parse_except_hookr0   r   r   r   r   r   r3     s     ÿz!PreArgParseExceptHookTest.test_itNr4   r   r   r   r   r      s
   
r    c                   @   sl   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚPostArgParseExceptHookTestz1Tests for certbot.log.post_arg_parse_except_hook.c                 O   s   ddl m} |||ŽS )Nr   )Úpost_arg_parse_except_hook)r   r¤   )r   r   r   r¤   r   r   r   r   *  s    z PostArgParseExceptHookTest._callc                 C   s   d| _ d| _d S )Nztest error messagezfoo.log)Ú	error_msgr   rV   r   r   r   rC   /  s    z PostArgParseExceptHookTest.setUpc                 C   s2   t }| j|dd�\}}|  |j|¡ |  |¡ d S ©NF©r   )ÚKeyboardInterruptÚ_test_commonÚ_assert_exception_loggedÚerrorÚ_assert_logfile_output©r-   Úexc_typeÚmock_loggerÚoutputr   r   r   Útest_base_exception3  s    z.PostArgParseExceptHookTest.test_base_exceptionc                 C   s2   t }| j|dd�\}}|  |j|¡ |  |¡ d S )NTr§   )Ú
ValueErrorr©   rª   r«   r¬   r­   r   r   r   rb   9  s    z%PostArgParseExceptHookTest.test_debugc                 C   s6   t j}| j|dd�\}}|  |j|¡ |  ||¡ d S r¦   )r   ZPluginErrorr©   rª   r   Ú_assert_quiet_outputr­   r   r   r   Útest_custom_error?  s    z,PostArgParseExceptHookTest.test_custom_errorc                    s^   t t tj¡ƒ‰ ‡ fdd„}| j|dd�\}}|  |jtj¡ |  	||¡ |  
tj|k¡ d S )Nc                    s   t jjˆ | d�S )z6Wraps ACME errors so the constructor takes only a msg.)Údetail)r   rl   Z	with_code)rŠ   ©Z	acme_coder   r   Úget_acme_errorI  s    zBPostArgParseExceptHookTest.test_acme_error.<locals>.get_acme_errorFr§   )ÚnextrI   Úiterkeysr   ZERROR_CODESr©   rª   r   rl   r³   r^   ZERROR_PREFIX)r-   r·   r¯   r°   r   r¶   r   Útest_acme_errorE  s    z*PostArgParseExceptHookTest.test_acme_errorc                 C   s4   t }| j|dd�\}}|  |j|¡ |  ||¡ d S r¦   )r²   r©   rª   r   r³   r­   r   r   r   Útest_other_errorR  s    z+PostArgParseExceptHookTest.test_other_errorc                    sÚ   t  ¡ ‰ ‡ fdd„}z|| jƒ‚W n¦ tk
rÈ   t ¡ }t d¡�z}||j_	t dˆ ¡�Z z| j
||| jdœŽ W n0 tk
r¤ } zˆ  t|ƒ¡ W 5 d}~X Y nX |  d¡ W 5 Q R X W 5 Q R X Y nX ˆ  ¡ }||fS )z,Returns the mocked logger and stderr output.c                     s   ˆ   | d ¡ dS )zWrite error to mock_err.r   N)Úwrite)r   Zunused_kwargs©Zmock_errr   r   Ú	write_err\  s    z:PostArgParseExceptHookTest._test_common.<locals>.write_errzcertbot.log.loggerzcertbot.log.sys.stderrr   NzSystemExit not raised.)rI   rJ   r¥   ÚBaseExceptionr   Úexc_infor+   r:   r«   rk   r   r   Ú
SystemExitr¼   rm   rn   r‡   )r-   Z
error_typer   r¾   rÀ   r¯   Zexit_errr°   r   r½   r   r©   X  s(      ÿ $z'PostArgParseExceptHookTest._test_commonc                 C   sJ   |   |j¡ |jd }|   d|k¡ |d }|tjtjf}|  ||¡ d S )Nr   rÀ   )r'   rZ   r}   r+   r,   r!   )r-   Zlog_funcr®   Zcall_kwargsZactual_exc_infoZexpected_exc_infor   r   r   rª   r  s    
z3PostArgParseExceptHookTest._assert_exception_loggedc                 C   s"   |   d|k¡ |   | j|k¡ d S )NzPlease see the logfile)r'   r   )r-   r°   r   r   r   r¬   {  s    z1PostArgParseExceptHookTest._assert_logfile_outputc                 C   s0   |   |jj¡ |  |jj¡ |  | j|k¡ d S rS   )r^   Ú	exceptionrZ   r'   r   r¥   )r-   r¯   r°   r   r   r   r³     s    z/PostArgParseExceptHookTest._assert_quiet_outputN)r5   r6   r7   r8   r9   r   rC   r±   rb   r´   rº   r»   r©   rª   r¬   r³   r   r   r   r   r£   (  s   
	r£   c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )ÚExitWithLogPathTestz)Tests for certbot.log.exit_with_log_path.c                 O   s   ddl m} |||ŽS )Nr   )Úexit_with_log_path)r   rÄ   )r   r   r   rÄ   r   r   r   r   ‡  s    zExitWithLogPathTest._callc                 C   sH   t j | jd¡}t|dƒ ¡  |  |¡}|  d|k¡ |  ||k¡ d S )Nrh   r>   Úlogfiles)r   rM   r\   ÚtempdirrG   rT   r©   r'   )r-   r{   Úerr_strr   r   r   Útest_log_fileŒ  s
    
z!ExitWithLogPathTest.test_log_filec                 C   s.   |   | j¡}|  d|k¡ |  | j|k¡ d S )NrÅ   )r©   rÆ   r'   )r-   rÇ   r   r   r   Útest_log_dir”  s    z ExitWithLogPathTest.test_log_dirc              
   O   sN   z| j ||Ž W n. tk
r> } zt|ƒ W Y ¢S d }~X Y nX |  d¡ d S )NzSystemExit was not raised.)r   rÁ   rm   rn   )r-   r   r   rp   r   r   r   r©   š  s
    z ExitWithLogPathTest._test_commonN)	r5   r6   r7   r8   r9   r   rÈ   rÉ   r©   r   r   r   r   rÃ   …  s   
rÃ   Ú__main__)#r8   r   Úlogging.handlersr   ry   Zunittestr+   rI   Zacmer   Zacme.magic_typingr   Zcertbotr   r   r   Zcertbot.compatr   r   Zcertbot.testsZ	test_utilZTestCaser	   ZConfigTestCaser;   re   r   r�   r™   r    r£   ZTempDirTestCaserÃ   r5   Úmainr   r   r   r   Ú<module>   s4   &B3 +]
