o
    Ͱi9                     @   s   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e j
ZG dd de j
ZG dd de j
ZG dd de j
ZdS )    N)as_bytes)DummyOptions)DummyProcess)DummyPConfig)DummyLogger)
DummyEventc                   @   sF   e Zd Zdd Zdd Zdd Zdd
dZdd Zdd Zdd Z	dS )PDispatcherTestsc                 C      ddl m} |  d S Nr   )clearsupervisor.eventsr   selfr    r   U/home/ubuntu/.local/lib/python3.10/site-packages/supervisor/tests/test_dispatchers.pysetUp      
zPDispatcherTests.setUpc                 C   r	   r
   r   r   r   r   r   tearDown   r   zPDispatcherTests.tearDownc                 C      ddl m} |S )Nr   )PDispatcher)supervisor.dispatchersr   )r   r   r   r   r   _getTargetClass      z PDispatcherTests._getTargetClassNstdoutr   c                 C   s   |   |||S Nr   )r   processchannelfdr   r   r   _makeOne   s   zPDispatcherTests._makeOnec                 C      |   }| t|j d S r   )r    assertRaisesNotImplementedErrorreadabler   instr   r   r   test_readable      zPDispatcherTests.test_readablec                 C   r!   r   )r    r"   r#   writabler%   r   r   r   test_writable    r(   zPDispatcherTests.test_writablec                 C   s   |   }| | d  d S r   )r    assertEqualflushr%   r   r   r   
test_flush$   s   zPDispatcherTests.test_flushNr   r   )
__name__
__module____qualname__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 Zdd ZdGd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"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFS )HPOutputDispatcherTestsc                 C   r	   r
   r   r   r   r   r   r   )   r   zPOutputDispatcherTests.setUpc                 C   r	   r
   r   r   r   r   r   r   -   r   zPOutputDispatcherTests.tearDownc                 C   r   )Nr   )POutputDispatcher)r   r3   )r   r3   r   r   r   r   1   r   z&POutputDispatcherTests._getTargetClassr   c                 C   s.   ddl m} |j|jd}|  ||| dS )Nr   events)r   stderr)
supervisorr5   ProcessCommunicationStdoutEventProcessCommunicationStderrEventr   )r   r   r   r5   r   r   r   r    5   s
   zPOutputDispatcherTests._makeOnec                 C   8   t  }t|dd}t|}| |}| | d d S Nprocess1/bin/process1Fr   r   r   r    r+   r)   r   optionsconfigr   
dispatcherr   r   r   r*   <   
   
z$POutputDispatcherTests.test_writablec                 C   >   t  }t|dd}t|}| |}d|_| | d d S Nr<   r=   FTr   r   r   r    closedr+   r$   r?   r   r   r   test_readable_openC      
z)POutputDispatcherTests.test_readable_openc                 C   rD   Nr<   r=   TFrF   r?   r   r   r   test_readable_closedK   rI   z+POutputDispatcherTests.test_readable_closedc                 C   6   t  }t|dd}t|}| |}| t|j d S Nr<   r=   r   r   r   r    r"   r#   handle_write_eventr?   r   r   r   test_handle_write_eventS   
   
z.POutputDispatcherTests.test_handle_write_eventc                 C   sP   t  }d|_t|dddd}t|}| |}| | d  | |jd d S )N   abcr<   r=   d   stdout_capture_maxbytes)r   readfd_resultr   r   r    r+   handle_read_eventoutput_bufferr?   r   r   r   test_handle_read_eventZ   s   
z-POutputDispatcherTests.test_handle_read_eventc                 C   sh   t  }d|_t|dddd}t|}| |}| |j | | d  | |j	d | 
|j d S )N    r<   r=   rS   rT   )r   rV   r   r   r    assertFalserG   r+   rW   rX   
assertTruer?   r   r   r   %test_handle_read_event_no_data_closesd   s   
z<POutputDispatcherTests.test_handle_read_event_no_data_closesc                 C   `   t  }t|dd}t|}| |}ztd   |  Y |jjd }| |	d| d S Ntest/testfoor   z,uncaptured python exception, closing channel
r   r   r   r    
ValueErrorhandle_errorloggerdatar\   
startswithr   r@   rA   r   rB   resultr   r   r   test_handle_errorp      

z(POutputDispatcherTests.test_handle_errorc                    s   t  }t|ddddd}t|}d|_| |}d|_dd	 |j_g   fd
d}ddlm	} |
|jj| |  | t d  d }| |j| | |jd | |jd d S )Nr<   r=   /tmp/fooi  stdout_logfilerU   i  Tc                   S   s   dS )Nhallooor   r   r   r   r   <lambda>   s    zLPOutputDispatcherTests.test_toggle_capturemode_sends_event.<locals>.<lambda>c                         |  d S r   appendeventLr   r   doit      zHPOutputDispatcherTests.test_toggle_capturemode_sends_event.<locals>.doitr   r4      rp   )r   r   r   pidr    capturemode
captureloggetvaluer7   r5   	subscribe
EventTypesPROCESS_COMMUNICATIONtoggle_capturemoder+   lenr   rg   r   r@   rA   r   rB   ry   r5   rv   r   rw   r   #test_toggle_capturemode_sends_event}   s(   
z:POutputDispatcherTests.test_toggle_capturemode_sends_eventc                 C   s   t  }t|dddd}t|}| |}|  | |jjd jd | |jjd j	d | |j
jd jd | |j
jd j	d d S Nr<   r=   rm   ro   r   T)r   r   r   r    
removelogsr+   	normalloghandlersreopenedremovedchildlogr?   r   r   r   test_removelogs   s   
z&POutputDispatcherTests.test_removelogsc                 C   s`   t  }t|dddd}t|}| |}|  | |jjd jd | |j	jd jd d S r   )
r   r   r   r    
reopenlogsr+   r   r   r   r   r?   r   r   r   test_reopenlogs      
z&POutputDispatcherTests.test_reopenlogsc                 C   s   t  }ddlm} |jj|_t|dddd}t|}| |}d|_	|
  | |jjdg | |jjd d | |j	d	 d S )
Nr   loggersr<   r=   rm   r   az'process1' stdout output:
arZ   r   r7   r   LevelsByNameTRACloglevelr   r   r    rX   record_outputr+   r   rg   rf   r   r@   r   rA   r   rB   r   r   r   &test_record_output_log_non_capturemode   s   

z=POutputDispatcherTests.test_record_output_log_non_capturemodec                       t  }t|dddd}t|}| |d}d|_g   fdd}d	d
lm} ||jj	| |
  | t d  d	 }| |j| | |jd d S )Nr<   r=   Tstdout_events_enabledr      hello from stdoutc                    rr   r   rs   ru   rw   r   r   ry      rz   zWPOutputDispatcherTests.test_record_output_emits_stdout_event_when_enabled.<locals>.doitr   r4   r{   )r   r   r   r    rX   r7   r5   r   r   PROCESS_LOG_STDOUTr   r+   r   r   rg   r   r   rw   r   2test_record_output_emits_stdout_event_when_enabled       zIPOutputDispatcherTests.test_record_output_emits_stdout_event_when_enabledc                    x   t  }t|dddd}t|}| |d}d|_g   fdd}d	d
lm} ||jj	| |
  | t d	 d S )Nr<   r=   Fr   r   r   c                    rr   r   rs   ru   rw   r   r   ry      rz   z`POutputDispatcherTests.test_record_output_does_not_emit_stdout_event_when_disabled.<locals>.doitr   r4   )r   r   r   r    rX   r7   r5   r   r   r   r   r+   r   r   r@   rA   r   rB   ry   r5   r   rw   r   ;test_record_output_does_not_emit_stdout_event_when_disabled      zRPOutputDispatcherTests.test_record_output_does_not_emit_stdout_event_when_disabledc                    r   )Nr<   r=   Tstderr_events_enabledr6      hello from stderrc                    rr   r   rs   ru   rw   r   r   ry      rz   zWPOutputDispatcherTests.test_record_output_emits_stderr_event_when_enabled.<locals>.doitr   r4   r{   )r   r   r   r    rX   r7   r5   r   r   PROCESS_LOG_STDERRr   r+   r   r   rg   r   r   rw   r   2test_record_output_emits_stderr_event_when_enabled   r   zIPOutputDispatcherTests.test_record_output_emits_stderr_event_when_enabledc                    r   )Nr<   r=   Fr   r6   r   c                    rr   r   rs   ru   rw   r   r   ry      rz   z`POutputDispatcherTests.test_record_output_does_not_emit_stderr_event_when_disabled.<locals>.doitr   r4   )r   r   r   r    rX   r7   r5   r   r   r   r   r+   r   r   r   rw   r   ;test_record_output_does_not_emit_stderr_event_when_disabled   r   zRPOutputDispatcherTests.test_record_output_does_not_emit_stderr_event_when_disabledc                 C   sx   t  }ddlm} |jj|_t|ddddd}t|}| |}d|_	|
  | |jjdg | |jjd d	 d S )
Nr   r   r<   r=   rm   rS   rn   s!   stdout string longer than a tokenz;'process1' stdout output:
stdout string longer than a tokenr   r   r   r   r   7test_record_output_capturemode_string_longer_than_token  s"   


zNPOutputDispatcherTests.test_record_output_capturemode_string_longer_than_tokenc                 C   sZ   t  }t|ddddd}t|}| |}d|_|  | |jjg  | |jd d S )Nr<   r=   rm   rS   rn   r   )	r   r   r   r    rX   r   r+   r   rg   r?   r   r   r   ;test_record_output_capturemode_string_not_longer_than_token  s   
zRPOutputDispatcherTests.test_record_output_capturemode_string_not_longer_than_tokenc                    s  ddl m} ddl m} g   fdd}||| |j}|j}|d | }t }ddlm} ||_d}	t|d	d
|	dd}
t	|
}| 
|}zh||_|  | tj|	d | t|jd | t d  d }ddl m} | |j| | |j| | |jd | |jd W z|j  |j  t|	 W d S  ttfy   Y d S w z|j  |j  t|	 W w  ttfy   Y w w )Nr   ProcessCommunicationEventr   c                    rr   r   rs   ru   r4   r   r   ry   ,  rz   zJPOutputDispatcherTests.test_stdout_capturemode_single_buffer.<locals>.doits   hello	getLogger/tmp/logr<   r=   i  rn   r{   r8   r   )r   r   r   BEGIN_TOKEN	END_TOKENr   supervisor.loggersr   r   r   r    rX   r   r+   ospathgetsizer   r8   	__class__r   r   rg   r~   closer   removeOSErrorIOError)r   r   r   ry   r   r   rg   r@   r   logfilerA   r   rB   rv   r8   r   r4   r   %test_stdout_capturemode_single_buffer&  sX   





z<POutputDispatcherTests.test_stdout_capturemode_single_bufferc                    sN  ddl m} ddl m} g   fdd}||| dd l}tt|d|j}t|jd }|j}|j	}|| | | | }	d}
|	
|
}|d |
 }|d	 |
 }|d
 }t }ddlm} ||_d}t|dd|dd}t|}| |}z||_|  dd |jjD  t|d}| | | W d    n1 sw   Y  | |j|t|d   | t d | j|7  _|  | t d dd |jjD  t|d}| | | W d    n1 sw   Y  | |j|t|d   | t d | j|7  _|  dd |jjD  t|d}| | |d
  W d    n	1 s5w   Y  | t d	  d }ddl m} | |j| | |j| | |jd | |j| W z|j  |j  t !| W d S  t"t#fy   Y d S w z|j  |j  t !| W w  t"t#fy   Y w w )Nr   r   r   c                    rr   r   rs   ru   r4   r   r   ry   V  rz   zMPOutputDispatcherTests.test_stdout_capturemode_multiple_buffers.<locals>.doitletters      :r{      r   r   r<   r=   i'  rn   c                 S      g | ]}|  qS r   r,   .0xr   r   r   
<listcomp>t      zSPOutputDispatcherTests.test_stdout_capturemode_multiple_buffers.<locals>.<listcomp>rbc                 S   r   r   r   r   r   r   r   r   }  r   c                 S   r   r   r   r   r   r   r   r     r   r   r   )$r   r   r   stringr   getattrascii_lettersdigitsr   r   splitr   r   r   r   r   r    rX   r   r   r   openr+   readr   r8   r   r   r   rg   r~   r   r   r   r   r   )r   r   r   ry   r   r   r   r   r   rg   colonbrokenfirstsecondthirdr@   r   r   rA   r   rB   frv   r8   r   r4   r   (test_stdout_capturemode_multiple_buffersR  s   






z?POutputDispatcherTests.test_stdout_capturemode_multiple_buffersc                 C   s   t  }d|_t|dddd}t|}| |}d}d}||_|  | t|j	j
d | |j	j
d	 | d
|_||_|  | t|j	j
d | |j	j
d | d S NTr<   r=   rm   r   4   [34mHello world... this is longer than a token![0m+   Hello world... this is longer than a token!r{   r   Fr   )r   
strip_ansir   r   r    rX   r   r+   r   r   rg   r   r@   rA   r   rB   ansinoansir   r   r   test_strip_ansi  $   
z&POutputDispatcherTests.test_strip_ansic                 C   s|   t  }t|dd}t|}| |}| |j| | |jd | |jd | |jd  | |j	d  | |j
d  d S Nr<   r=   r   r   )r   r   r   r    r+   r   r   r   r~   r   r   r?   r   r   r   test_ctor_no_logfiles  s   
z,POutputDispatcherTests.test_ctor_no_logfilesc                 C   s   t  }t|dddd}t|}| |}| |j| | |jd | |jd | |jd  | |j	j
t | |j|j	 d S Nr<   r=   rm   r   r   r   )r   r   r   r    r+   r   r   r   r~   r   r   r   r   r?   r   r   r   test_ctor_logfile_only  s   
z-POutputDispatcherTests.test_ctor_logfile_onlyc                 C   s   t  }t|dddd}t|}| |}| |j| | |jd | |jd | |jj	t
 | |jd  | |jd  d S )Nr<   r=   i,  rT   r   r   )r   r   r   r    r+   r   r   r   r~   r   r   r   r   r?   r   r   r   test_ctor_capturelog_only  s   
z0POutputDispatcherTests.test_ctor_capturelog_onlyc                 C   st   ddl m} t }t|dd|dd}t|}| |}| |j| | |jd | |j	d | |j
d  d S )Nr   )logfile_namer<   r=    r   r   )supervisor.datatypesr   r   r   r   r    r+   r   r   r   r   )r   r   r@   rA   r   rB   r   r   r   (test_ctor_stdout_logfile_is_empty_string  s   
z?POutputDispatcherTests.test_ctor_stdout_logfile_is_empty_stringc                 C   s~   ddl m}m} t }t|dd|d|dd}t|}| |}| |j| | |j	d | |j
d | |jd  d S )	Nr   booleanr   r<   r=   NONEfalsero   stdout_syslogr   )r   r   r   r   r   r   r    r+   r   r   r   r   )r   r   r   r@   rA   r   rB   r   r   r   5test_ctor_stdout_logfile_none_and_stdout_syslog_false  s   
zLPOutputDispatcherTests.test_ctor_stdout_logfile_none_and_stdout_syslog_falsec           
      C   s   ddl m}m} ddlm}m} ddlm} | }|j|_	t
|dd|d|dd	}t|}| |}	| |	j| | |	jd
 | |	jd | t|	jjd | |	jjd j| d S )Nr   r   )r   SyslogHandlerServerOptionsr<   r=   r   truer   r   r{   )r   r   r   r   r   r   supervisor.optionsr   r   r   r   r   r    r+   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r@   rA   r   rB   r   r   r   4test_ctor_stdout_logfile_none_and_stdout_syslog_true  s$   
zKPOutputDispatcherTests.test_ctor_stdout_logfile_none_and_stdout_syslog_truec           
      C   s   ddl m}m} ddlm}m} ddlm} | }|j|_	t
|dd|d|dd	}t|}| |}	| |	j| | |	jd
 | |	jd | t|	jjd | |	jjd j| |	j  d S )Nr   r   )FileHandlerr   r   r<   r=   rm   r   r   r   r{   )r   r   r   r   r   r   r   r   r   r   r   r   r    r+   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r@   rA   r   rB   r   r   r   4test_ctor_stdout_logfile_str_and_stdout_syslog_false  s"   
zKPOutputDispatcherTests.test_ctor_stdout_logfile_str_and_stdout_syslog_falsec           	         s   ddl m}m} ddlm m}m ddlm} | }|j	|_
t|dd|d|dd	}t|}| |}| |j| | |jd
 | |jd | t|jjd | t fdd|jjD  | tfdd|jjD  |j  d S )Nr   r   )r   r   r   r   r<   r=   rm   r   r   r   r   c                 3       | ]}t | V  qd S r   
isinstancer   h)r   r   r   	<genexpr>       z]POutputDispatcherTests.test_ctor_stdout_logfile_str_and_stdout_syslog_true.<locals>.<genexpr>c                 3   r   r   r   r  )r   r   r   r  "  r  )r   r   r   r   r   r   r   r   r   r   r   r   r   r    r+   r   r   r   r   r   r   r\   anyr   )	r   r   r   r   r   r@   rA   r   rB   r   )r   r   r   3test_ctor_stdout_logfile_str_and_stdout_syslog_true  s,   


zJPOutputDispatcherTests.test_ctor_stdout_logfile_str_and_stdout_syslog_truec                 C   b   t  }t|dd}t|}| |}t|}| d|v  | |dd | |d| d S )Nr<   r=   r3   "supervisor.tests.base.DummyProcess	(stdout)>	r   r   r   r    reprr\   assertNotEqualfindendswithr   r@   rA   r   rB   dreprr   r   r   	test_repr&     
z POutputDispatcherTests.test_reprc                 C   T   t  }t|dd}t|}| |}|  | |jd |  | |jd d S Nr<   r=   Tr   r   r   r    r   r+   rG   r?   r   r   r   
test_close2     
z!POutputDispatcherTests.test_closeN)r   )%r/   r0   r1   r   r   r   r    r*   rH   rK   rP   rY   r]   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r2   (   sF    


,Fr2   c                   @   s   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d Zdd Zdd Zdd  Zd!S )"PInputDispatcherTestsc                 C   r   )Nr   )PInputDispatcher)r   r  )r   r  r   r   r   r   >  r   z%PInputDispatcherTests._getTargetClassc                 C      d}|   ||dS )Nstdinr   r   r   r   r   r   r   r   r    B     zPInputDispatcherTests._makeOnec                 C   2   t d }| |}d|_d|_| | d d S )Nr   FTr   r    input_bufferrG   r+   r)   r   r   rB   r   r   r   test_writable_open_nodataF  
   
z/PInputDispatcherTests.test_writable_open_nodatac                 C   s2   t d }| |}d|_d|_| | d d S )Nr   Fr!  r#  r   r   r   test_writable_open_withdataM  r%  z1PInputDispatcherTests.test_writable_open_withdatac                 C   r   )Nr   TFr!  r#  r   r   r   test_writable_closed_nodataT  r%  z1PInputDispatcherTests.test_writable_closed_nodatac                 C   r   )Nr   TFr!  r#  r   r   r   test_writable_closed_withdata[  r%  z3PInputDispatcherTests.test_writable_closed_withdatac                 C   s&   t d }| |}| | d d S )NF)r   r    r+   r$   r#  r   r   r   r'   b  s   
z#PInputDispatcherTests.test_readablec                 C   sP   t  }t|dd}t|}| |}d|_| | d  | |jd d d S )Nr<   r=   halloooor   )r   r   r   r    r"  r+   rO   writtenr?   r   r   r   rP   g  s   
z-PInputDispatcherTests.test_handle_write_eventc                 C   sZ   t  }t|dd}t|}| |}| |jd |  | |jd | |ji  d S )Nr`   ra   rZ   )r   r   r   r    r+   r"  rO   r*  r?   r   r   r   test_handle_write_event_nodatap  s   
z4PInputDispatcherTests.test_handle_write_event_nodatac                 C   s   t  }t|dd}t|}| |}d|_dd l}t|jt	|j|_
|  | |jd | |jjd d | |jjd d d S )Nr`   ra   r)  r   rZ   zfd 0 closed, stopped monitoring(stdin)>)r   r   r   r    r"  errnor   EPIPEr   strerrorwrite_exceptionrO   r+   r\   rf   rg   rh   r  r   r@   rA   r   rB   r-  r   r   r   $test_handle_write_event_epipe_raisedz  s   

z:PInputDispatcherTests.test_handle_write_event_epipe_raisedc                 C   sZ   t  }t|dd}t|}| |}d|_dd l}t|jt	|j|_
| t|j d S )Nr`   ra   r)  r   )r   r   r   r    r"  r-  r   EBADFr   r/  r0  r"   rO   r1  r   r   r   'test_handle_write_event_uncaught_raised  s   

z=PInputDispatcherTests.test_handle_write_event_uncaught_raisedc                 C   s`   t  }t|dd}t|}| |}d|_d|_|  | t|jd | |j	d d d S )Nr`   ra   r{   2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1   r   r   )
r   r   r   r    write_acceptr"  rO   r+   r   r*  r?   r   r   r   %test_handle_write_event_over_os_limit  s   
z;PInputDispatcherTests.test_handle_write_event_over_os_limitc                 C   s$   t d }| |}| t|j d S r   )r   r    r"   r#   rW   r#  r   r   r   rY     s   
z,PInputDispatcherTests.test_handle_read_eventc                 C   r^   r_   rc   ri   r   r   r   rk     rl   z'PInputDispatcherTests.test_handle_errorc                 C   r  )Nr<   r=   r  r	  r
  r,  r  r  r   r   r   r    r  zPInputDispatcherTests.test_reprc                 C   r  r  r  r?   r   r   r   r    r  z PInputDispatcherTests.test_closeN)r/   r0   r1   r   r    r$  r&  r'  r(  r'   rP   r+  r2  r4  r8  rY   rk   r  r  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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#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dES )FPEventListenerDispatcherTestsc                 C   r	   r
   r   r   r   r   r   r     r   z#PEventListenerDispatcherTests.setUpc                 C   r	   r
   r   r   r   r   r   r     r   z&PEventListenerDispatcherTests.tearDownc                 C   r   )Nr   )PEventListenerDispatcher)r   r:  )r   r:  r   r   r   r     r   z-PEventListenerDispatcherTests._getTargetClassc                 C   r  r.   r   r  r   r   r   r      r  z&PEventListenerDispatcherTests._makeOnec                 C   r:   r;   r>   r?   r   r   r   r*     rC   z+PEventListenerDispatcherTests.test_writablec                 C   rD   rE   rF   r?   r   r   r   rH     rI   z0PEventListenerDispatcherTests.test_readable_openc                 C   rD   rJ   rF   r?   r   r   r   rK     rI   z2PEventListenerDispatcherTests.test_readable_closedc                 C   rL   rM   rN   r?   r   r   r   rP     rQ   z5PEventListenerDispatcherTests.test_handle_write_eventc                 C   s   t  }t|dddd}t|}ddlm} |j|_| |}|j|_	| 
| d  | 
|j|j | 
|jd | 
t|jjd | 
|jjd |j d S )	Nr<   r=   rm   r   r   EventListenerStatesrZ   r{   )r   r   r   r   r<  ACKNOWLEDGEDlistener_stater    READY_FOR_EVENTS_TOKENrV   r+   rW   READYstate_bufferr   r   rg   r   r@   rA   r   r<  rB   r   r   r   9test_handle_read_event_calls_handle_listener_state_change  s    
zWPEventListenerDispatcherTests.test_handle_read_event_calls_handle_listener_state_changec                 C   sj   t  }d|_t|dd}t|}| |}| | d  | |jd ddlm	} | |j
j|j d S )Nr   r<   r=   rZ   r   r;  )r   rV   r   r   r    r+   rW   rA  r   r<  r   r>  r=  )r   r@   rA   r   rB   r<  r   r   r   test_handle_read_event_nodata  s   

z;PEventListenerDispatcherTests.test_handle_read_event_nodatac                 C   sL   t  }d|_t|dd}t|}| |}| | d  | |jd  d S )N"   supercalifragilisticexpialidociousr<   r=   )r   rV   r   r   r    r+   rW   r   r?   r   r   r   %test_handle_read_event_logging_nologs  s   
zCPEventListenerDispatcherTests.test_handle_read_event_logging_nologsc                 C   sj   t  }d|_t|dddd}t|}| |}| | d  | t|jj	d | |jj	d d d S )NrE  r<   r=   rm   r   r{   r   )
r   rV   r   r   r    r+   rW   r   r   rg   r?   r   r   r   'test_handle_read_event_logging_childlog  s   
zEPEventListenerDispatcherTests.test_handle_read_event_logging_childlogc                 C   s   t  }t|dd}t|}ddlm} | |}|j|_d|_| 	|
 d  | 	|jd | 	|jjg  | 	|j|j d S )Nr<   r=   r   r;  s   whateverrZ   )r   r   r   r   r<  r    UNKNOWNr>  rA  r+   handle_listener_state_changerf   rg   rB  r   r   r   .test_handle_listener_state_change_from_unknown)  s   
zLPEventListenerDispatcherTests.test_handle_listener_state_change_from_unknownc                 C   s   t  }t|dd}t|}ddlm} | |}|j|_d|_| 	|
 d  | 	|jd | 	|jjd d | 	|j|j d S )Nr<   r=   r   r;  s   READY
rZ   process1: ACKNOWLEDGED -> READY)r   r   r   r   r<  r    r=  r>  rA  r+   rI  rf   rg   r@  rB  r   r   r   7test_handle_listener_state_change_acknowledged_to_ready6  s   
zUPEventListenerDispatcherTests.test_handle_listener_state_change_acknowledged_to_readyc                 C      t  }t|dd}t|}ddlm} | |}|j|_d|_| 	|
 d  | 	|jd | 	|jjd d | 	|jjd d	 | 	|j|j d S )
Nr<   r=   r   r;  s   READY
garbage
rZ   rK  r{   process1: READY -> UNKNOWNr   r   r   r   r<  r    r=  r>  rA  r+   rI  rf   rg   rH  rB  r   r   r   6test_handle_listener_state_change_acknowledged_gobblesD  s    
zTPEventListenerDispatcherTests.test_handle_listener_state_change_acknowledged_gobblesc                 C   s   t  }t|dd}t|}ddlm} | |}|j|_d|_| 	|
 d  | 	|jd | 	|jjg  | 	|j|j d S )Nr<   r=   r   r;  s   RE)r   r   r   r   r<  r    r=  r>  rA  r+   rI  rf   rg   rB  r   r   r   >test_handle_listener_state_change_acknowledged_to_insufficientT  s   
z\PEventListenerDispatcherTests.test_handle_listener_state_change_acknowledged_to_insufficientc                 C   rM  )
Nr<   r=   r   r;     bogus data yorZ   !process1: ACKNOWLEDGED -> UNKNOWNr{   process1: has entered the UNKNOWN state and will no longer receive events, this usually indicates the process violated the eventlistener protocolrO  rB  r   r   r   9test_handle_listener_state_change_acknowledged_to_unknownb      
zWPEventListenerDispatcherTests.test_handle_listener_state_change_acknowledged_to_unknownc                 C   rM  )
Nr<   r=   r   r;  rR  rZ   rN  r{   rT  )r   r   r   r   r<  r    r@  r>  rA  r+   rI  rf   rg   rH  rB  r   r   r   2test_handle_listener_state_change_ready_to_unknownt  rV  zPPEventListenerDispatcherTests.test_handle_listener_state_change_ready_to_unknownc                 C   sp   t  }t|dd}t|}ddlm} | |}|j|_d|_| 	|
 d  | 	|jd | 	|j|j d S )Nr<   r=   r   r;  rR  )r   r   r   r   r<  r    BUSYr>  rA  r+   rI  rB  r   r   r   6test_handle_listener_state_change_busy_to_insufficient  s   
zTPEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_insufficientc                 C      t  }t|dd}t|}ddlm} | |}|j|_G dd d}| |_| |j_	ddlm
} ||jj	_d|_| | d  | |jd	 | |jjd d
 | |jjd d | |j|j d S )Nr<   r=   r   r;  c                   @      e Zd ZdS )ziPEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_acknowledged_procd.<locals>.DummyNr/   r0   r1   r   r   r   r   Dummy      r]  default_handlers   RESULT 2
OKabcrR   process1: event was processedr{   process1: BUSY -> ACKNOWLEDGEDr   r   r   r   r<  r    rX  r>  grouprA   r`  result_handlerrA  r+   rI  rf   rg   r=  r   r@   rA   r   r<  rB   r]  r`  r   r   r   <test_handle_listener_state_change_busy_to_acknowledged_procd  .   


zZPEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_acknowledged_procdc                 C   rZ  )Nr<   r=   r   r;  c                   @   r[  )zlPEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_acknowledged_rejected.<locals>.DummyNr\  r   r   r   r   r]    r^  r]  r_  s   RESULT 4
FAILabcrR   process1: event was rejectedr{   rb  rc  rf  r   r   r   ?test_handle_listener_state_change_busy_to_acknowledged_rejected  rh  z]PEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_acknowledged_rejectedc           
         s  ddl m} ddl m} g   fdd}||| t }t|dd}t|}ddlm} | |}|j	|_
t }	|	|_d	|_| | d  | |jd
 | |jjd d | |jjd d | |jjd d | |j
|j |  d j| |  d j|	 d S )Nr   )EventRejectedEventr   c                    rr   r   rs   ru   r4   r   r   ry     rz   z]PEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_unknown.<locals>.doitr<   r=   r;  s   bogus data
rZ   z'process1: bad result line: 'bogus data'r{   process1: BUSY -> UNKNOWNr   rT  )r   rk  r   r   r   r   r   r<  r    rX  r>  r   rv   rA  r+   rI  rf   rg   rH  r   )
r   rk  r   ry   r@   rA   r   r<  rB   current_eventr   r4   r   1test_handle_listener_state_change_busy_to_unknown  s<   

zOPEventListenerDispatcherTests.test_handle_listener_state_change_busy_to_unknownc                 C   s   t  }t|dd}t|}ddlm} | |}|j|_G dd d}| |_| |j_	ddlm
} ||jj	_d|_| | d  | |jd	 | |jjd d
 | |jjd d | |jjd d | |jjd d | |j|j d S )Nr<   r=   r   r;  c                   @   r[  )zTPEventListenerDispatcherTests.test_handle_listener_state_busy_gobbles.<locals>.DummyNr\  r   r   r   r   r]    r^  r]  r_  s   RESULT 2
OKbogus data
rZ   ra  r{   rb  r   rS     rT  )r   r   r   r   r<  r    rX  r>  rd  rA   r`  re  rA  r+   rI  rf   rg   rH  rf  r   r   r   'test_handle_listener_state_busy_gobbles  s:   


zEPEventListenerDispatcherTests.test_handle_listener_state_busy_gobblesc                    s   ddl m} t }t|dd}t|}g   fdd}ddlm} ||j| ddlm	} | 
|}d	d
 }	G dd d}
|
 |_|
 |j_|	|jj_|j|_|d | t d | |j|j | |jjd d | |jjd d d S )Nr   r   r<   r=   c                    rr   r   rs   ru   rw   r   r   ry     rz   zEPEventListenerDispatcherTests.test_handle_result_accept.<locals>.doitr4   r;  c                 S   s   d S r   r   rv   rj   r   r   r   handle     zGPEventListenerDispatcherTests.test_handle_result_accept.<locals>.handlec                   @   r[  )zFPEventListenerDispatcherTests.test_handle_result_accept.<locals>.DummyNr\  r   r   r   r   r]  
  r^  r]  rb   ra  r{   rb  )r   r   r   r   r   r7   r5   rk  r   r<  r    rd  rA   re  rX  r>  handle_resultr+   r   r=  rf   rg   )r   r   r@   rA   r   ry   r5   r<  rB   rr  r]  r   rw   r   test_handle_result_accept  s6   



z7PEventListenerDispatcherTests.test_handle_result_acceptc                    s  ddl m} t }t|dd}t|}g   fdd}ddlm} ||j| ddlm	} | 
|}d	d
 }	G dd d}
|
 |_|
 |j_|	|jj_|j|_|d | t d |  d j|j | |j|j | |jjd d | |jjd d d S )Nr   r   r<   r=   c                    rr   r   rs   ru   rw   r   r   ry     rz   zJPEventListenerDispatcherTests.test_handle_result_rejectevent.<locals>.doitr4   r;  c                 S   s   ddl m} ||)Nr   )RejectEvent)r   rv  )rv   rj   rv  r   r   r   rejected%     zNPEventListenerDispatcherTests.test_handle_result_rejectevent.<locals>.rejectedc                   @   r[  )zKPEventListenerDispatcherTests.test_handle_result_rejectevent.<locals>.DummyNr\  r   r   r   r   r]  (  r^  r]  rb   r{   ri  rb  )r   r   r   r   r   r7   r5   rk  r   r<  r    rd  rA   re  rX  r>  rt  r+   r   r   r=  rf   rg   )r   r   r@   rA   r   ry   r5   r<  rB   rw  r]  r   rw   r   test_handle_result_rejectevent  s8   



z<PEventListenerDispatcherTests.test_handle_result_rejecteventc                    s$  ddl m} t }t|dd}t|}g   fdd}ddlm} ||j| ddlm	} | 
|}d	d
 }	G dd d}
|
 |_|
 |j_|	|jj_|	|j_|j|_|d | t d |  d j|j | |j|j | |jjd d | |jjd d | |jjd d d S )Nr   r   r<   r=   c                    rr   r   rs   ru   rw   r   r   ry   >  rz   zHPEventListenerDispatcherTests.test_handle_result_exception.<locals>.doitr4   r;  c                 S   s   t r   )rd   rq  r   r   r   	exceptionD  rs  zMPEventListenerDispatcherTests.test_handle_result_exception.<locals>.exceptionc                   @   r[  )zIPEventListenerDispatcherTests.test_handle_result_exception.<locals>.DummyNr\  r   r   r   r   r]  F  r^  r]  rb   r{   zprocess1: event caused an errorrl  r   rT  )r   r   r   r   r   r7   r5   rk  r   r<  r    rd  rA   re  rX  r>  rt  r+   r   r   rH  rf   rg   )r   r   r@   rA   r   ry   r5   r<  rB   rz  r]  r   rw   r   test_handle_result_exception8  s@   



z:PEventListenerDispatcherTests.test_handle_result_exceptionc                 C   r^   r_   rc   ri   r   r   r   rk   [  rl   z/PEventListenerDispatcherTests.test_handle_errorc                 C   s`   t  }t|dddd}t|}| |}|  | |jjd jd | |jjd j	d d S r   )
r   r   r   r    r   r+   r   r   r   r   r?   r   r   r   r   h  r   z-PEventListenerDispatcherTests.test_removelogsc                 C   sJ   t  }t|dddd}t|}| |}|  | |jjd jd d S r   )	r   r   r   r    r   r+   r   r   r   r?   r   r   r   r   r  s   
z-PEventListenerDispatcherTests.test_reopenlogsc                 C   s   t  }d|_t|dddd}t|}| |}d}d}||_|  | t|j	j
d | |j	j
d	 | d
|_||_|  | t|j	j
d | |j	j
d | d S r   )r   r   r   r   r    rV   rW   r+   r   r   rg   r   r   r   r   r   {  r   z-PEventListenerDispatcherTests.test_strip_ansic                 C   s`   t  }t|dd}t|}| |}| |j| | |jd | |jd | |jd  d S r   )	r   r   r   r    r+   r   r   r   r   r?   r   r   r   test_ctor_nologfiles  s   
z2PEventListenerDispatcherTests.test_ctor_nologfilesc                 C   sf   t  }t|dddd}t|}| |}| |j| | |jd | |jd | |jj	t
 d S r   )r   r   r   r    r+   r   r   r   r   r   r   r?   r   r   r   r     s   
z4PEventListenerDispatcherTests.test_ctor_logfile_onlyc                 C   r  )Nr<   r=   r:  r	  r
  r  r  r  r   r   r   r    r  z'PEventListenerDispatcherTests.test_reprc                 C   r  r  r  r?   r   r   r   r    r  z(PEventListenerDispatcherTests.test_closeN)%r/   r0   r1   r   r   r   r    r*   rH   rK   rP   rC  rD  rF  rG  rJ  rL  rP  rQ  rU  rW  rY  rg  rj  rn  rp  ru  ry  r{  rk   r   r   r   r|  r   r  r  r   r   r   r   r9    sF    #
	
r9  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
stripEscapeTestsc                 C   s   ddl m} ||S )Nr   )stripEscapes)r   r~  )r   sr~  r   r   r   _callFUT  rx  zstripEscapeTests._callFUTc                 C   s   |  | dd d S )NrZ   r+   r  )r   r   r   r   test_zero_length_string  s   z(stripEscapeTests.test_zero_length_stringc                 C   s   d}d}|  | || d S )Nr   r   r  )r   r   r   r   r   r   	test_ansi  s   zstripEscapeTests.test_ansic                 C   s   d}|  | || d S )Nr   r  )r   r   r   r   r   test_noansi  s   zstripEscapeTests.test_noansiN)r/   r0   r1   r  r  r  r  r   r   r   r   r}    s
    r}  )unittestr   supervisor.compatr   supervisor.tests.baser   r   r   r   r   TestCaser   r2   r  r9  r}  r   r   r   r   <module>   s*            y