
    M/eM>                        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mZ ddlZddlm	Z	 ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ  G d dej.                        Z G d dej2                        Z G d dej2                        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jB                        Z"e#dk(  r4 ejH                   e
jJ                  ejL                  dd e'gz                yy)z Tests for certbot._internal.log.    N)Optional)mock)messages)errors)util)	constants)
filesystem)osc                        e Zd ZdZed        Z fdZ ej                  d       ej                  d       ej                  d       ej                  d      d                             Z	 xZ
S )	PreArgParseSetupTestz4Tests for certbot._internal.log.pre_arg_parse_setup.c                     ddl m}  |       S )Nr   )pre_arg_parse_setup)certbot._internal.logr   )clsargskwargsr   s       B/usr/lib/python3/dist-packages/certbot/_internal/tests/log_test.py_callzPreArgParseSetupTest._call   s    ="$$    c                 J    t        j                          t        |           y N)loggingshutdownsupertearDownself	__class__s    r   r   zPreArgParseSetupTest.tearDown   s     	r   certbot._internal.log.sysz/certbot._internal.log.pre_arg_parse_except_hook'certbot._internal.log.logging.getLoggerz*certbot._internal.log.util.atexit_registerc           	         dg|_         t        j                  |_        | j                           |       }|j                  j                  t        j                         |j                  j                  dk(  sJ d }|j                  j                  D ][  }|d   d   }|3t        |t        j                  j                        r|}|j                  }	@t        |t        j                        r[J  t        	t        j                        sJ |j                  t        j                          |j#                  ddd       |j                  |dddddt$        j&                         y )	Nz--debug   r         TFdebugquietlog_path)argvsysversion_infor   setLevelassert_called_once_withr   DEBUG
addHandler
call_countcall_args_list
isinstancehandlersMemoryHandlertargetStreamHandlerr   
excepthookr   ANY)
r   mock_registermock_getmock_except_hookmock_sysmock_root_loggermemory_handlercallhandlerr5   s
             r   test_itzPreArgParseSetupTest.test_it$   s3   
 # # 0 0

#:!!99'--H**55:::CG$//>> 	BD1gajG%*Wg>N>N>\>\*]!('..!'7+@+@AAA	B &'"7"7888--g.>.>?Aq!$00Aq!4utxx 	1 	Qr   )__name__
__module____qualname____doc__classmethodr   r   r   patchrA   __classcell__r   s   @r   r   r      s|    >% % TZZ+,TZZABTZZ9:TZZ<=Q > ; C -Qr   r   c                   N     e Zd ZdZed        Z fdZ fdZd Zd Z	d Z
 xZS )PostArgParseSetupTestz5Tests for certbot._internal.log.post_arg_parse_setup.c                     ddl m}  ||i |S )Nr   )post_arg_parse_setup)r   rM   )r   r   r   rM   s       r   r   zPostArgParseSetupTest._callD   s    >#T4V44r   c                 J   t         |           d| j                  _        d| j                  _        d| j                  _        t        j                  d   | j                  _        t        t        j                  d      | _        ddlm}  |t        j                               | _        ddlm} ddlm}  |       | _        | j&                  j(                  | _         || j&                        | _        t/        j0                  | j,                  | j                   g	      | _        y )
NFi  verbose_countwr   ColoredStreamHandlerr4   TempHandler)r3   )r   setUpconfigr&   max_log_backupsr'   r   CLI_DEFAULTSrO   openr
   devnullr   rR   ioStringIOstream_handlerr4   rU   temp_handlerpath	temp_pathr>   r   	MagicMockroot_logger)r   rR   r4   rU   r   s       r   rV   zPostArgParseSetupTest.setUpI   s    !&*#!$-$:$:?$K!BJJ,>22;;=A75'M**//+D,=,=>>>))4+>+>?Ar   c                     | j                   j                          | j                  j                          | j                  j                          | j                  j                          t
        |           y r   )r>   closer^   r_   r[   r   r   r   s    r   r   zPostArgParseSetupTest.tearDown[   sT    !!#!!#!r   c                    t        j                  d      5 }| j                  |_        d}t        j                  |      5 }t        j                  d      5 }t        j
                  |_        | j                  | j                         d d d        d d d        d d d        t        j                  j                  | j                  j                  d      }| j                  j                  j                  | j                         | j                  j                  j                   sJ t        j                  j#                  |      sJ t        j                  j#                  | j$                        rJ j'                  ddd       j                  ddd| j                  j(                  | j                  j*                  |       | j,                  j.                  }| j                  j*                  r|t0        j2                  k(  sJ y |t0        j4                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)	Nr    0certbot._internal.log.post_arg_parse_except_hookr   zletsencrypt.logr#   r"   r$   r%   )r   rG   rc   return_valuer*   r+   r   rW   r
   r`   joinlogs_dirremoveHandlerr-   r>   r/   calledexistsra   r7   r&   r'   r^   levelr   QUIET_LOGGING_LEVELDEFAULT_LOGGING_LEVEL)r   mock_get_loggerexcept_hook_pathr;   r<   r(   rn   s          r   test_commonz!PostArgParseSetupTest.test_commonb   s   ZZAB 	,o+/+;+;O(Q,- ,1AZZ ;< ,,/,<,<H)JJt{{+,,	, 77<< 4 46GH&&>>	!**1111ww~~h'''77>>$..111Aq!$00q!4;;,,++##h 	1 	8 ##));;I99999I;;;;;), ,, ,	, 	,s:   )H3H&1HH&H3H#H&&H0	+H33H=c                 F    d| j                   _        | j                          y NT)rW   r&   rs   r   s    r   
test_debugz PostArgParseSetupTest.test_debug}        r   c                 F    d| j                   _        | j                          y ru   )rW   r'   rs   rv   s    r   
test_quietz PostArgParseSetupTest.test_quiet   rx   r   )rB   rC   rD   rE   rF   r   rV   r   rs   rw   rz   rH   rI   s   @r   rK   rK   A   s2    ?5 5A$<6r   rK   c                        e Zd ZdZed        Z fdZ ej                  d      d        Z	d Z
d Zd Z ej                  d	      d
        Z xZS )SetupLogFileHandlerTestz7Tests for certbot._internal.log.setup_log_file_handler.c                     ddl m}  ||i |S )Nr   )setup_log_file_handler)r   r~   )r   r   r   r~   s       r   r   zSetupLogFileHandlerTest._call   s    @%t6v66r   c                 D    t         |           d| j                  _        y )N*   )r   rV   rW   rX   r   s    r   rV   zSetupLogFileHandlerTest.setUp   s    &(#r   z;certbot._internal.main.logging.handlers.RotatingFileHandlerc                     t         |_        	 | j                  | j                  dd       | j	                  d       y # t
        j                  $ r}dt        |      v sJ Y d }~y d }~ww xY w)Ntest.log%(message)szError not raised.z
--logs-dir)IOErrorside_effectr   rW   failr   Errorstr)r   mock_handlererrs      r   test_failurez$SetupLogFileHandlerTest.test_failure   sZ    #* 	+JJt{{J> II)* || 	,3s8+++	,s   < A(A##A(c                 (    | j                  d       y )NTshould_rollover)_test_success_commonrv   s    r   test_success_with_rolloverz2SetupLogFileHandlerTest.test_success_with_rollover   s    !!$!7r   c                 J    d| j                   _        | j                  d       y )Nr   Fr   )rW   rX   r   rv   s    r   test_success_without_rolloverz5SetupLogFileHandlerTest.test_success_without_rollover   s    &'#!!%!8r   c                 $   d}| j                  | j                  |d      \  }}|j                          |j                  t        j
                  k(  sJ |j                  j                  t        j                  k(  sJ t        j                  j                  | j                  j                  |      }||k(  sJ t        j                  j                  | j                  j                  |dz         }t        j                  j                  |      |k(  sJ y )Nr   r   z.1)r   rW   re   rn   r   r.   	formatter	convertertime	localtimer
   r`   ri   rj   rm   )r   r   log_filer@   r(   expected_pathbackup_paths          r   r   z,SetupLogFileHandlerTest._test_success_common   s     JJt{{HmL}}---  **dnn<<<T[[%9%98D=(((ggll4;;#7#7DIww~~k*o===r   z:certbot._internal.log.logging.handlers.RotatingFileHandlerc                     | j                  | j                  dd       |j                  d   d   }| j                  j                  |k(  sJ y )Nr   r   r#   backupCount)r   rW   	call_argsrX   )r   r   backup_counts      r   test_max_log_backups_usedz1SetupLogFileHandlerTest.test_max_log_backups_used   sC    

4;;
M:#--a0?{{**l:::r   )rB   rC   rD   rE   rF   r   rV   r   rG   r   r   r   r   r   rH   rI   s   @r   r|   r|      sn    A7 7) TZZMN+ O+89> TZZLM; N;r   r|   c                   (    e Zd ZdZd Zd Zd Zd Zy)ColoredStreamHandlerTestz4Tests for certbot._internal.log.ColoredStreamHandlerc                 b   t        j                         | _        d | j                  _        t	        j
                         | _        | j                  j                  t        j                         ddl	m
}  || j                        | _        | j                  j                  | j                         y )Nc                       yru    r   r   r   <lambda>z0ColoredStreamHandlerTest.setUp.<locals>.<lambda>   s    r   r   rQ   )r\   r]   streamisattyr   	getLoggerloggerr,   r.   r   rR   r@   r/   )r   rR   s     r   rV   zColoredStreamHandlerTest.setUp   sj    kkm)'')W]]+>+DKK8t||,r   c                 8    | j                   j                          y r   r@   re   rv   s    r   r   z!ColoredStreamHandlerTest.tearDown       r   c                     d}| j                   j                  |       | j                  j                         dj	                  |      k(  sJ y )NzI did a thingz{0}
)r   r&   r   getvalueformatr   msgs     r   test_formatz$ColoredStreamHandlerTest.test_format   s=    #{{##%)<<<<r   c                    d}t         j                  | j                  _        | j                  j                  |       | j                  j                         dj                  t        j                  |t        j                        k(  sJ y )NzI did another thingz
{0}{1}{2}
)r   r.   r@   	red_levelr   r&   r   r   r   r   ANSI_SGR_REDANSI_SGR_RESETr   s     r   test_format_and_red_levelz2ColoredStreamHandlerTest.test_format_and_red_level   sn    #!(#{{##%&--d.?.?.1.2.A.ACC 	C Cr   N)rB   rC   rD   rE   rV   r   r   r   r   r   r   r   r      s    >-=
Cr   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	MemoryHandlerTestz-Tests for certbot._internal.log.MemoryHandlerc                    t        j                  t              | _        | j                  j	                  t         j
                         d| _        t        j                         | _	        t        j                  | j                        | _        ddlm}  || j                        | _        | j                  j                  | j                         y )Nzhi therer   rS   )r   r   rB   r   r,   r.   r   r\   r]   r   r6   r^   r   r4   r@   r/   )r   r4   s     r   rV   zMemoryHandlerTest.setUp   s    ''1W]]+kkm%33DKK@7$T%8%89t||,r   c                 l    | j                   j                          | j                  j                          y r   )r@   re   r^   rv   s    r   r   zMemoryHandlerTest.tearDown   s$    !!#r   c                     | j                          | j                  j                  d       | j                  j	                         | j
                  dz   k(  sJ y )NTforce
)_test_log_debugr@   flushr   r   r   rv   s    r   
test_flushzMemoryHandlerTest.test_flush   sF    &{{##%D888r   c                     | j                   j                  | j                         | j                  j	                          | j
                  j                         dk(  sJ y )N )r   criticalr   r@   r   r   r   rv   s    r   test_not_flushedz"MemoryHandlerTest.test_not_flushed   sC    TXX&{{##%+++r   c                    | j                          t        j                         }t        j                  |      }| j
                  j                  |       | j
                  j                  d       | j                  j                         dk(  sJ |j                         | j                  dz   k(  sJ |j                          y )NTr   r   r   )r   r\   r]   r   r6   r@   	setTargetr   r   r   r   re   )r   
new_streamnew_stream_handlers      r   test_target_resetz#MemoryHandlerTest.test_target_reset   s    [[]
$22:>12&{{##%+++""$4777  "r   c                 N    | j                   j                  | j                         y r   )r   r&   r   rv   s    r   r   z!MemoryHandlerTest._test_log_debug   s    $((#r   N)
rB   rC   rD   rE   rV   r   r   r   r   r   r   r   r   r   r      s#    7	-$9
,	#$r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TempHandlerTestz,Tests for certbot._internal.log.TempHandler.c                 6    d| _         ddlm}  |       | _        y )NFr   rT   )closedr   rU   r@   )r   rU   s     r   rV   zTempHandlerTest.setUp  s    5"}r   c                 8    | j                   j                          y r   r   rv   s    r   r   zTempHandlerTest.tearDown  r   r   c                 \    t        j                  | j                  j                  d      sJ y )Ni  )r	   check_permissionsr@   r`   rv   s    r   test_permissionsz TempHandlerTest.test_permissions  s"    ++DLL,=,=uEEEr   c                     | j                   j                          t        j                  j	                  | j                   j                        rJ y r   )r@   re   r
   r`   rm   rv   s    r   test_deletezTempHandlerTest.test_delete  s5    77>>$,,"3"34444r   c                 N   | j                   j                  t        j                                | j                   j	                          t
        j                  j                  | j                   j                        sJ t        j                  | j                   j                         y r   )	r@   emitr   rb   re   r
   r`   rm   removerv   s    r   test_no_deletezTempHandlerTest.test_no_delete  sa    $..*+ww~~dll//000
		$,,##$r   N)	rB   rC   rD   rE   rV   r   r   r   r   r   r   r   r   r     s    6%
F5%r   r   c                   P    e Zd ZdZed        Z ej                  d      d        Zy)PreArgParseExceptHookTestz:Tests for certbot._internal.log.pre_arg_parse_except_hook.c                     ddl m}  ||i |S )Nr   )pre_arg_parse_except_hook)r   r   )r   r   r   r   s       r   r   zPreArgParseExceptHookTest._call  s    C($9&99r   rg   c                     t        j                         }d}ddi} | j                  |g|i |  |j                  |i | |j                  j                  d       y )N)somer   r   r   Tr   )r   rb   r   r-   r   )r   mock_post_arg_parse_except_hookr>   r   r   s        r   rA   z!PreArgParseExceptHookTest.test_it#  sh    ) (#

>3D3F3?'??		4444@r   N)	rB   rC   rD   rE   rF   r   r   rG   rA   r   r   r   r   r     s:    D: : TZZBC	A D	Ar   r   c                   j    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 ZddZd Zd Zd Zy)PostArgParseExceptHookTestz;Tests for certbot._internal.log.post_arg_parse_except_hook.c                     ddl m}  ||i |S )Nr   )post_arg_parse_except_hook)r   r   )r   r   r   r   s       r   r   z PostArgParseExceptHookTest._call2  s    D)4:6::r   c                      d| _         d| _        y )Nztest error messagezfoo.log)	error_msgr(   rv   s    r   rV   z PostArgParseExceptHookTest.setUp7  s    -!r   c                     t         }| j                  |d      \  }}| j                  |j                  |       | j	                  |       y NFr&   )BaseException_test_common_assert_exception_loggederror_assert_logfile_outputr   exc_typemock_loggeroutputs       r   test_base_exceptionz.PostArgParseExceptHookTest.test_base_exception;  sE     "///FV%%k&7&7B##F+r   c                     t         }| j                  |d      \  }}| j                  |j                  |       | j	                  |       y )NTr   )
ValueErrorr   r   r   r   r   s       r   rw   z%PostArgParseExceptHookTest.test_debugA  sE    "///EV%%k&7&7B##F+r   c                     t         }| j                  |dd      \  }}| j                  |j                  |       d|vsJ y )NT)r&   r'   See the logfile)r   r   r   r   r   s       r   rz   z%PostArgParseExceptHookTest.test_quietG  sG    "//D/QV%%k&7&7B ...r   c                     t         j                  }| j                  |d      \  }}| j                  |j                  |       | j                  ||       y r   )r   PluginErrorr   r   r&   _assert_quiet_outputr   s       r   test_custom_errorz,PostArgParseExceptHookTest.test_custom_errorM  sM    %%"///FV%%k&7&7B!!+v6r   c                     t        t        t        j                              fd}| j	                  |d      \  }}| j                  |j                  t        j                         | j                  ||       t        j                  |vsJ y )Nc                 F    t         j                  j                  |       S )z6Wraps ACME errors so the constructor takes only a msg.)detail)r   r   	with_code)r   	acme_codes    r   get_acme_errorzBPostArgParseExceptHookTest.test_acme_error.<locals>.get_acme_errorW  s    >>++Ic+BBr   Fr   )
nextiterr   ERROR_CODESr   r   r&   r   r   ERROR_PREFIX)r   r  r   r   r  s       @r   test_acme_errorz*PostArgParseExceptHookTest.test_acme_errorS  sx    h2234		C #//e/LV%%k&7&7H!!+v6$$F222r   c                     t         }| j                  |d      \  }}| j                  |j                  |       | j	                  ||       y r   )r   r   r   r&   r   r   s       r   test_other_errorz+PostArgParseExceptHookTest.test_other_error`  sG    "///FV%%k&7&7B!!+v6r   c                 r    t         }| j                  |d      \  }}|j                  j                  d       y )NFr   zExiting due to user request.)KeyboardInterruptr   r   r-   r   s       r   test_keyboardinterruptz1PostArgParseExceptHookTest.test_keyboardinterruptf  s6    $"///FV112PQr   c           
      \  	 t        j                         		fd}	  || j                        # t        $ r t	        j
                         }t        j                  d      5 }||j                  _	        t        j                  d	      5  	  | j                  |||| j                  d | j                  d       n0# t        $ r$}	j                  t        |             Y d}~nd}~ww xY wddd       n# 1 sw Y   nxY wddd       n# 1 sw Y   nxY wY nw xY w	j!                         }|fS )z,Returns the mocked logger and stderr output.c                  .    j                  | d          y)zWrite error to mock_err.r   N)write)r   unused_kwargsmock_errs     r   	write_errz:PostArgParseExceptHookTest._test_common.<locals>.write_erro  s    NN47#r   zcertbot._internal.log.loggerz certbot._internal.log.sys.stderrr%   zSystemExit not raised.N)r\   r]   r   r   r*   exc_infor   rG   r   r   r   r(   r   
SystemExitr  r   r   )
r   
error_typer&   r'   r  r  r   exit_errr   r  s
            @r   r   z'PostArgParseExceptHookTest._test_commonk  s   ;;=	$	<T^^,, 	<||~H:; 	<{09!!-ZZ BHM <<"

%U%$--Y
 		":; & 6 s8}556	< < <	< 	< 	<	< ""$F""si   . 2D (DC3
B:(C3:	C'	C"	C3"C'	'C3*	D3C<8D?	DD	DDc                     |j                   sJ |j                  d   }d|v sJ |d   }|t        j                  t        j                  f}||k(  sJ y )Nr#   r  )rl   r   r   r8   )r   log_funcr   call_kwargsactual_exc_infoexpected_exc_infos         r   r   z3PostArgParseExceptHookTest._assert_exception_logged  sZ    ((+[(((%j1%txx:"3333r   c                 0    d|v sJ | j                   |v sJ y )Nr   )r(   )r   r   s     r   r   z1PostArgParseExceptHookTest._assert_logfile_output  s"     F***}}&&&r   c                     |j                   j                  du sJ |j                  j                  sJ | j                  |v sJ y )NF)	exceptionrl   r&   r   )r   r   r   s      r   r   z/PostArgParseExceptHookTest._assert_quiet_output  sC    $$++u444  ''''~~'''r   N)F)rB   rC   rD   rE   rF   r   rV   r   rw   rz   r   r  r	  r  r   r   r   r   r   r   r   r   r   0  sT    E; ;",,/737R
#44'(r   r   c                   2    e Zd ZdZed        Zd Zd Zd Zy)ExitWithAdviceTestz1Tests for certbot._internal.log.exit_with_advice.c                     ddl m}  ||i |S )Nr   )exit_with_advice)r   r"  )r   r   r   r"  s       r   r   zExitWithAdviceTest._call  s    :000r   c                     t         j                  j                  | j                  d      }t	        |d      j                          | j                  |      }d|vsJ ||v sJ y )Nr   rP   logfiles)r
   r`   ri   tempdirrZ   re   r   )r   r   err_strs      r   test_log_filez ExitWithAdviceTest.test_log_file  sY    77<<j9Xs!!###H-(((7"""r   c                 f    | j                  | j                        }d|v sJ | j                  |v sJ y )Nr$  )r   r%  )r   r&  s     r   test_log_dirzExitWithAdviceTest.test_log_dir  s6    ##DLL1W$$$||w&&&r   c                     	  | j                   |i | | j                  d       y # t        $ r}t        |      cY d }~S d }~ww xY w)NzSystemExit was not raised.)r   r  r   r   )r   r   r   r   s       r   r   zExitWithAdviceTest._test_common  sD    	DJJ'' 			./  	s8O	s   & 	A
?AAN)	rB   rC   rD   rE   rF   r   r'  r)  r   r   r   r   r   r     s&    ;1 1#'0r   r   __main__r#   )(rE   r\   r   logging.handlersr*   r   typingr   unittestr   pytestacmer   certbotr   r   certbot._internalr   certbot.compatr	   r
   certbot.tests	test_utilTestCaser   ConfigTestCaserK   r|   r   r   r   r   r   TempDirTestCaser   rB   exitmainr)   __file__r   r   r   <module>r<     s#   & 	   
         ' %  +(Q8,, (QVBI44 BJ0;i66 0;fCx00 C@($)) ($V%h'' %0A 1 1 A(e(!2!2 e(P022 0: zCHH[V[[!"
234 r   