o
    Ͱi.S                     @   sZ  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 G dd	 d	ejZG d
d dZG dd deejZG dd deejZejdrmeZneZG dd deZG dd de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ejZG dd dZdS )    N)PY2)	as_string)StringIO)unicode)mock)DummyStreamc                   @      e Zd Zdd ZdS )
LevelTestsc                 C   s0   ddl m} |j D ]
}| |d qd S )Nr   loggers_)
supervisorr   LOG_LEVELS_BY_NUMvaluesassertFalse
startswith)selfr   
level_name r   Q/home/ubuntu/.local/lib/python3.10/site-packages/supervisor/tests/test_loggers.py.test_LOG_LEVELS_BY_NUM_doesnt_include_builtins   s   z9LevelTests.test_LOG_LEVELS_BY_NUM_doesnt_include_builtinsN)__name__
__module____qualname__r   r   r   r   r   r	          r	   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
HandlerTestsc                 C   s    t  | _tj| jd| _d S )Nthelog)tempfilemkdtempbasedirospathjoinfilenamer   r   r   r   setUp   s   
zHandlerTests.setUpc                 C   s(   z	t | j W d S  ty   Y d S w N)shutilrmtreer   OSErrorr$   r   r   r   tearDown   s
   zHandlerTests.tearDownc                 O   s   |   }||i |S r&   _getTargetClass)r   argkwklassr   r   r   _makeOne#   s   zHandlerTests._makeOnec                 C   s$   ddl m} |j|jj|d d}|S )Nr   r
   )levelmsgexc_info)r   r   	LogRecordLevelsByNameINFO)r   r2   r   recordr   r   r   _makeLogRecord'   s   zHandlerTests._makeLogRecordN)r   r   r   r%   r*   r0   r8   r   r   r   r   r      s
    r   c                   @   d   e 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S )BareHandlerTestsc                 C      ddl m} |S )Nr   )Handler)supervisor.loggersr<   )r   r<   r   r   r   r,   1      z BareHandlerTests._getTargetClassc                 C   s0   t ttjd}| j|d}| | d  d S Nerrorstream)r   IOErrorerrnoEPIPEr0   assertEqualflushr   rC   instr   r   r   ,test_flush_stream_flush_raises_IOError_EPIPE5   s   z=BareHandlerTests.test_flush_stream_flush_raises_IOError_EPIPEc                 C   s.   t ttjd}| j|d}| t|j d S r?   )r   rD   rE   EALREADYr0   assertRaisesrH   rI   r   r   r   0test_flush_stream_flush_raises_IOError_not_EPIPE:   s   zABareHandlerTests.test_flush_stream_flush_raises_IOError_not_EPIPEc                 C   s,   t  }| j|d}d|_| | d  d S )NrB   T)r   r0   closedrG   closerI   r   r   r   test_close_already_closed?   s   z*BareHandlerTests.test_close_already_closedc                 C   D   t dd}| j|d}| | d  | |j | |jj d S )N2   filenorB   )r   r0   rG   rP   
assertTruerO   rC   rI   r   r   r    test_close_stream_fileno_above_3E   
   
z1BareHandlerTests.test_close_stream_fileno_above_3c                 C   rR   )Nr   rT   rB   )r   r0   rG   rP   r   rO   rC   rI   r   r   r    test_close_stream_fileno_below_3L   rX   z1BareHandlerTests.test_close_stream_fileno_below_3c                 C   s*   t  }| j|d}|  | |j d S )NrB   )r   r0   rP   rV   rO   rI   r   r   r   6test_close_stream_handles_fileno_unsupported_operationS   s   zGBareHandlerTests.test_close_stream_handles_fileno_unsupported_operationc                 C   s8   t  }dd }||_| j|d}|  | |j d S )Nc                   S   s   t  r&   )rD   r   r   r   r   raise_ioerror]   s   zPBareHandlerTests.test_close_stream_handles_fileno_ioerror.<locals>.raise_ioerrorrB   )r   rU   r0   rP   rV   rO   )r   rC   r[   rJ   r   r   r   (test_close_stream_handles_fileno_ioerror[   s   z9BareHandlerTests.test_close_stream_handles_fileno_ioerrorc                 C   sF   t  }| j|d}| d}|| | |jd | |jd d S )NrB      fooT)r   r0   r8   emitrG   flushedwrittenr   rC   rJ   r7   r   r   r   test_emit_gardenpathd   s   

z%BareHandlerTests.test_emit_gardenpathc                 C   sJ   t td}| j|d}| d}|| | |jd | |jd d S )Nr@   rB   r]   T)r   UnicodeErrorr0   r8   r^   rG   r_   r`   ra   r   r   r   test_emit_unicode_errorl   s   


z(BareHandlerTests.test_emit_unicode_errorc                    s\   t td}| j|d}g   fdd|_| d}|| | |jd | |jd d S )Nr@   rB   c                      
     dS NTappendr   handledr   r   <lambda>x      
 z8BareHandlerTests.test_emit_other_error.<locals>.<lambda>r]   F    )	r   
ValueErrorr0   handleErrorr8   r^   rG   r_   r`   ra   r   ri   r   test_emit_other_errort   s   


z&BareHandlerTests.test_emit_other_errorN)r   r   r   r,   rK   rN   rQ   rW   rY   rZ   r\   rb   rd   rp   r   r   r   r   r:   0   s    	r:   c                   @   sl   e 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 )FileHandlerTestsc                 C   r;   )Nr   )FileHandler)r=   rr   )r   rr   r   r   r   r,      r>   z FileHandlerTests._getTargetClassc                 C   s`   |  | j}| tj| j| j | |jd | |j| j | |j	j
| j |  d S )Nab)r0   r#   rV   r    r!   existsrG   modebaseFilenamerC   namerP   r   handlerr   r   r   	test_ctor   s   zFileHandlerTests.test_ctorc                 C   s:   |  | j}|j  t |_|  | |jjd d S rf   )r0   r#   rC   rP   r   rG   rO   rx   r   r   r   
test_close   s
   
zFileHandlerTests.test_closec                 C   sB   |  | j}|j  tt|_| t|j | |jjd d S NF)	r0   r#   rC   rP   r   r)   rM   rG   rO   rx   r   r   r   test_close_raises   s
   

z"FileHandlerTests.test_close_raisesc                 C   sV   |  | j}|j  t }||_|  | |jd | |jj| j |  d S rf   )	r0   r#   rC   rP   r   reopenrG   rO   rw   r   ry   rC   r   r   r   test_reopen   s   
zFileHandlerTests.test_reopenc                 C   sV   |  | j}|j  t }||_tj| jdd|_	| 
t|j | |jd d S )Nnotthereza.logT)r0   r#   rC   rP   r   r    r!   r"   r   rv   rM   rD   r~   rG   rO   r   r   r   r   test_reopen_raises   s   
z#FileHandlerTests.test_reopen_raisesc                 C   sH   |  | j}| tj| j| j |  | tj| j| j d S r&   )r0   r#   rV   r    r!   rt   remover   rx   r   r   r   test_remove_exists   s   z#FileHandlerTests.test_remove_existsc                 C   sT   |  | j}t| j | tj| j| j |  | tj| j| j d S r&   )r0   r#   r    r   r   r!   rt   rx   r   r   r   test_remove_doesntexist   s
   z(FileHandlerTests.test_remove_doesntexistc                 C   sN   |  | j}t| j t| j | tj| j| j | t	|j d S r&   )
r0   r#   r    r   mkdirrV   r!   rt   rM   r)   rx   r   r   r   test_remove_raises   s
   z#FileHandlerTests.test_remove_raisesc                 C   j   |  | j}| d}|| |  t| jd}| | d W d    d S 1 s.w   Y  d S )N   hello!rbr0   r#   r8   r^   rP   openrG   readr   ry   r7   fr   r   r   test_emit_ascii_noerror      

"z(FileHandlerTests.test_emit_ascii_noerrorc                 C   r   )Ns   fiír   r   r   r   r   r   test_emit_unicode_noerror   r   z*FileHandlerTests.test_emit_unicode_noerrorc                 C   sv   |  | j}|j  ttd|_| d}ztj}t }|t_|	| W |t_n|t_w | 
|jd|j d S )Nr@   r   s   OSError
)r0   r#   rC   rP   r   r)   r8   sysstderrr^   rV   r`   endswith)r   ry   r7   
old_stderrdummy_stderrr   r   r   test_emit_error   s   

z FileHandlerTests.test_emit_errorN)r   r   r   r,   rz   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   rq   ~   s    
	rq   /dev/stdoutc                   @   r   )StdoutTestsc                 C   sH   |  d}| |jdv |j | |jd | |jjd |  d S )Nr   )wbrs   )r0   rV   ru   rG   rv   rC   rw   rP   rx   r   r   r   test_ctor_with_dev_stdout   s
   
z%StdoutTests.test_ctor_with_dev_stdoutN)r   r   r   r   r   r   r   r   r      r   r   c                   @   r9   )RotatingFileHandlerTestsc                 C   r;   )Nr   )RotatingFileHandler)r=   r   )r   r   r   r   r   r,      r>   z(RotatingFileHandlerTests._getTargetClassc                 C   sB   |  | j}| |jd | |jd | |jd |  d S )Nrs   i    
   )r0   r#   rG   ru   maxBytesbackupCountrP   rx   r   r   r   rz      s
   z"RotatingFileHandlerTests.test_ctorc                 C   s  | j | jddd}| d}|| | tj| jd  | tj| jd  || | tj| jd  | tj| jd  || | tj| jd  | tj| jd  || | tj| jd  | tj| jd  || | tj| jd  | tj| jd  || | tj| jd  | tj| jd  || |	  | tj| jd  | tj| jd  t
| jd}| | d W d    n1 sw   Y  t
| jd d}| | d W d    n	1 sw   Y  t
| jd d}| | d W d    d S 1 s9w   Y  d S )	Nr      r   r      aaaa.1z.2r   s   aaaaaaaaaaaa)r0   r#   r8   r^   r   r    r!   rt   rV   rP   r   rG   r   r   r   r   r   test_emit_does_rollover   sB   







$z0RotatingFileHandlerTests.test_emit_does_rolloverc                 C   s   | j | jddd}| d}|| | tj| j | tj| jd  t	| j | tj| j || |
  | tj| j | tj| jd  d S )N      r   r   r   )r0   r#   r8   r^   rV   r    r!   rt   r   unlinkrP   r   ry   r7   r   r   r   test_current_logfile_removed'  s   


z5RotatingFileHandlerTests.test_current_logfile_removedc                    sl   |  | j}g g   fdd|_dd |_fdd|_|dd | dg |  g  |  d S )Nc                    
     | S r&   rg   vremovesr   r   rk   <  rl   zZRotatingFileHandlerTests.test_removeAndRename_destination_does_not_exist.<locals>.<lambda>c                 S      dS r|   r   r   r   r   r   rk   =      c                         | |fS r&   rg   strenamesr   r   rk   >      foobarr   r   r0   r#   _remove_exists_renameremoveAndRenamerG   rP   r   rJ   r   r   r   r   /test_removeAndRename_destination_does_not_exist8  s   
zHRotatingFileHandlerTests.test_removeAndRename_destination_does_not_existc                    sn   |  | j}g g   fdd|_dd |_fdd|_|dd | dg |  dg |  d S )Nc                    r   r&   rg   r   r   r   r   rk   H  rl   zRRotatingFileHandlerTests.test_removeAndRename_destination_exists.<locals>.<lambda>c                 S   r   rf   r   r   r   r   r   rk   I  r   c                    r   r&   rg   r   r   r   r   rk   J  r   r   r   r   r   r   r   r   r   'test_removeAndRename_destination_existsD  s   
z@RotatingFileHandlerTests.test_removeAndRename_destination_existsc                    s\   dd }|  | j}g  ||_dd |_ fdd|_|dd |  dg |  d S )	Nc                 S   
   t tjr&   r)   rE   ENOENTfnr   r   r   r   Q     
zRRotatingFileHandlerTests.test_removeAndRename_remove_raises_ENOENT.<locals>.removec                 S   r   rf   r   r   r   r   r   rk   V  r   zTRotatingFileHandlerTests.test_removeAndRename_remove_raises_ENOENT.<locals>.<lambda>c                    r   r&   rg   r   r   r   r   rk   W  r   r   r   r   r   r   r   rJ   r   r   r   )test_removeAndRename_remove_raises_ENOENTP  s   
zBRotatingFileHandlerTests.test_removeAndRename_remove_raises_ENOENTc                 C   B   dd }|  | j}||_dd |_| t|jdd |  d S )Nc                 S   r   r&   r)   rE   EAGAINr   r   r   r   r   ]  r   z]RotatingFileHandlerTests.test_removeAndRename_remove_raises_other_than_ENOENT.<locals>.removec                 S   r   rf   r   r   r   r   r   rk   a  r   z_RotatingFileHandlerTests.test_removeAndRename_remove_raises_other_than_ENOENT.<locals>.<lambda>r   r   )r0   r#   r   r   rM   r)   r   rP   r   r   r   r   4test_removeAndRename_remove_raises_other_than_ENOENT\     
zMRotatingFileHandlerTests.test_removeAndRename_remove_raises_other_than_ENOENTc                 C   sD   dd }|  | j}||_dd |_| |ddd  |  d S )Nc                 S   r   r&   r   r   dr   r   r   renamef  r   zRRotatingFileHandlerTests.test_removeAndRename_rename_raises_ENOENT.<locals>.renamec                 S   r   r|   r   r   r   r   r   rk   j  r   zTRotatingFileHandlerTests.test_removeAndRename_rename_raises_ENOENT.<locals>.<lambda>r   r   )r0   r#   r   r   rG   r   rP   r   r   rJ   r   r   r   )test_removeAndRename_rename_raises_ENOENTe  s   
zBRotatingFileHandlerTests.test_removeAndRename_rename_raises_ENOENTc                 C   r   )Nc                 S   r   r&   r   r   r   r   r   r   o  r   z]RotatingFileHandlerTests.test_removeAndRename_rename_raises_other_than_ENOENT.<locals>.renamec                 S   r   r|   r   r   r   r   r   rk   s  r   z_RotatingFileHandlerTests.test_removeAndRename_rename_raises_other_than_ENOENT.<locals>.<lambda>r   r   )r0   r#   r   r   rM   r)   r   rP   r   r   r   r   4test_removeAndRename_rename_raises_other_than_ENOENTn  r   zMRotatingFileHandlerTests.test_removeAndRename_rename_raises_other_than_ENOENTc                 C   s.   |  | j}d|_| | d  |  d S )Nr   )r0   r#   r   rG   
doRolloverrP   r   r   r   r   !test_doRollover_maxbytes_lte_zerow  s   z:RotatingFileHandlerTests.test_doRollover_maxbytes_lte_zeroN)r   r   r   r,   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    *			r   c                   @   s>   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd ZdS )BoundIOTestsc                 C   r;   )Nr   )BoundIO)r=   r   )r   r   r   r   r   r,     r>   zBoundIOTests._getTargetClass c                 C      |   }|||S r&   r+   )r   maxbytesbufr/   r   r   r   r0        
zBoundIOTests._makeOnec                 C   s(   |  dd}|d | |jd d S )Nr      a   b)r0   writerG   r   r   ior   r   r   test_write_overflow  s   
z BoundIOTests.test_write_overflowc                 C   s    |  dd}| | d d S )Nr   r   )r0   rG   getvaluer   r   r   r   test_getvalue  s   zBoundIOTests.test_getvaluec                 C   &   |  dd}|  | |jd d S Nr   r   rm   )r0   clearrG   r   r   r   r   r   
test_clear     zBoundIOTests.test_clearc                 C   r   r   )r0   rP   rG   r   r   r   r   r   r{     r   zBoundIOTests.test_closeN)r   )	r   r   r   r,   r0   r   r   r   r{   r   r   r   r   r   ~  s    
r   c                   @   sf   e Zd Zdd Zd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 )LoggerTestsc                 C   r;   )Nr   )Logger)r=   r   )r   r   r   r   r   r,     r>   zLoggerTests._getTargetClassNc                 C   r   r&   r+   )r   r1   handlersr/   r   r   r   r0     r   zLoggerTests._makeOnec                 C   j   ddl m} t|j}| |j|f}|d | t|jd |j	|_
|d | t|jd d S Nr   r5   hellor   )r=   r5   DummyHandlerBLATr0   blatherrG   lenrecordsTRACr1   r   r5   ry   loggerr   r   r   test_blather     


zLoggerTests.test_blatherc                 C   r   r   )r=   r5   r   r   r0   tracerG   r   r   DEBGr1   r   r   r   r   
test_trace  r   zLoggerTests.test_tracec                 C   r   r   )r=   r5   r   r  r0   debugrG   r   r   r6   r1   r   r   r   r   
test_debug  r   zLoggerTests.test_debugc                 C   r   r   )r=   r5   r   r6   r0   inforG   r   r   WARNr1   r   r   r   r   	test_info  r   zLoggerTests.test_infoc                 C   r   r   )r=   r5   r   r  r0   warnrG   r   r   ERROr1   r   r   r   r   	test_warn  r   zLoggerTests.test_warnc                 C   r   r   )r=   r5   r   r	  r0   rA   rG   r   r   CRITr1   r   r   r   r   
test_error  r   zLoggerTests.test_errorc                 C   sF   ddl m} t|j}| |j|f}|d | t|jd d S r   )	r=   r5   r   r  r0   criticalrG   r   r   r   r   r   r   test_critical  s
   

zLoggerTests.test_criticalc                 C   s@   ddl m} t|j}| |j|f}|  | |jd d S )Nr   r   T)r=   r5   r   r  r0   rP   rG   rO   r   r   r   r   r{     s
   
zLoggerTests.test_closec                 C   s8   ddl m} t|j}| |j|f}| t|j d S )Nr   r   )r=   r5   r   r  r0   rM   NotImplementedErrorr   r   r   r   r   r     s   
zLoggerTests.test_getvalue)NN)r   r   r   r,   r0   r   r  r  r  r
  r  r  r{   r   r   r   r   r   r     s    






r   c                       s   e Zd Z fddZ  ZS )
MockSysLogc                    s>   |d }t jdk rt|tr|  tt| j|i | d S )N)   r   )r   version_info
isinstancer   encodesuperr  __call__)r   argskwargsmessage	__class__r   r   r    s   zMockSysLog.__call__)r   r   r   r  __classcell__r   r   r  r   r    s    r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	de
 dd Ze	de
 dd Ze	de
 dd ZerLe	de
 dd Zdd ZdS e	de
 dd Zdd ZdS )SyslogHandlerTestsc                 C      d S r&   r   r$   r   r   r   r%        zSyslogHandlerTests.setUpc                 C   r  r&   r   r$   r   r   r   r*     r   zSyslogHandlerTests.tearDownc                 C   s   t djjS )Nzsupervisor.loggers)
__import__r   SyslogHandlerr$   r   r   r   r,     s   z"SyslogHandlerTests._getTargetClassc                 C   s
   |    S r&   r+   r$   r   r   r   r0     r   zSyslogHandlerTests._makeOnec                    sL   G dd dt }| }|  }g   fdd|_|| |  dg d S )Nc                   @   r   )zASyslogHandlerTests.test_emit_record_asdict_raises.<locals>.Recordc                 S   s   t r&   )	TypeErrorr$   r   r   r   asdict  r   zHSyslogHandlerTests.test_emit_record_asdict_raises.<locals>.Record.asdictN)r   r   r   r$  r   r   r   r   Record  r   r%  c                      re   rf   rg   r   ri   r   r   rk     rl   zCSyslogHandlerTests.test_emit_record_asdict_raises.<locals>.<lambda>T)objectr0   ro   r^   rG   )r   r%  r7   ry   r   ri   r   test_emit_record_asdict_raises  s   
z1SyslogHandlerTests.test_emit_record_asdict_raiseszsyslog.syslogc                 C   sL   |   }| d}|| tjd | d}|| tjd d S )Nr   zhello!zhi!r0   r8   r^   syslogassert_called_withr   r   r   r   r     s   



z*SyslogHandlerTests.test_emit_ascii_noerrorc                 C      |   }|  d S r&   )r0   rP   rx   r   r   r   r{   !     zSyslogHandlerTests.test_closec                 C   r+  r&   )r0   r~   rx   r   r   r   r   &  r,  zSyslogHandlerTests.test_reopenc                 C   s4   |   }td}| |}|| tjd d S )N   fií   fiÃ­)r0   r   r8   r^   r)  r*  )r   ry   inpr7   r   r   r   r   ,  s
   

z,SyslogHandlerTests.test_emit_unicode_noerrorc                    sL   |   }g   fdd}||_| td}|| |  tdg d S )Nc                        s	  |  td S r&   rh   rc   r2   calledr   r   fake_syslog6     
CSyslogHandlerTests.test_emit_unicode_witherror.<locals>.fake_syslogr-  r.  )r0   _syslogr8   r   r^   rG   r   ry   r5  r7   r   r3  r   test_emit_unicode_witherror3  s   
z.SyslogHandlerTests.test_emit_unicode_witherrorc                 C   s,   |   }| d}|| tjd d S )Nr-  r(  r   r   r   r   r   ?  s   

c                    sD   |   }g   fdd}||_| d}|| |  dg d S )Nc                    r0  r&   r1  r2  r3  r   r   r5  H  r6  r7  r-  )r0   r8  r8   r^   rG   r9  r   r3  r   r:  E  s   

N)r   r   r   r%   r*   r,   r0   r'  r   patchr  r   r{   r   r   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S )	r   Fc                 C   s   || _ g | _d S r&   )r1   r   )r   r1   r   r   r   __init__S  s   
zDummyHandler.__init__c                 C   s   | j | d S r&   )r   rh   )r   r7   r   r   r   r^   V  s   zDummyHandler.emitc                 C   s
   d| _ d S rf   )rO   r$   r   r   r   rP   X  r   zDummyHandler.closeN)r   r   r   rP   r<  r^   r   r   r   r   r   Q  s
    r   ) rE   r   unittestr   r'   r    r)  supervisor.compatr   r   r   r   supervisor.tests.baser   r   TestCaser	   r   r:   rq   r!   rt   StdoutTestsBaser&  r   r   r   r   Mockr  r  r   r   r   r   r   <module>   s8   Nb
 Z
S