o
    S۷i                    @   sj  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
mZ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 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ZG dd dejZ G dd deZ!G dd dejZ"dS )    N)as_bytesmaxint)Mockpatchsentinel)DummyOptions)DummyPConfig)DummyProcess)DummyPGroupConfig)DummyDispatcher)
DummyEvent)DummyFCGIGroupConfig)DummySocketConfig)DummyProcessGroup)DummyFCGIProcessGroup
Subprocess)
BadCommandc                   @   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$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dS )SubprocessTestsc                 C      ddl m} |S )Nr   r   )supervisor.processr   )selfr    r   S/home/ubuntu/vllm_env/lib/python3.10/site-packages/supervisor/tests/test_process.py_getTargetClass      zSubprocessTests._getTargetClassc                 O      |   |i |S Nr   r   argkwr   r   r   _makeOne      zSubprocessTests._makeOnec                 C      ddl m} |  d S Nr   )clearsupervisor.eventsr'   r   r'   r   r   r   tearDown"      
zSubprocessTests.tearDownc                 C   sJ   ddl m} ddlm} |j D ]\}}|ds"| ||| qd S )Nr   ProcessStates)getProcessStateDescription__)supervisor.statesr.   r   r/   __dict__items
startswithassertEqual)r   r.   r/   	statenamecoder   r   r   test_getProcessStateDescription&   s   
z/SubprocessTests.test_getProcessStateDescriptionc                 C   s   t  }t|ddddd}| |}| |j| | |jj| | |jd | |jd | |jd | |jd | |j	d | 
|j | 
|j | |jd | |ji  | |ji  | |jd  d S )Ncatbin/catz/tmp/temp123.logz/tmp/temp456.logstdout_logfilestderr_logfiler   )r   r	   r#   r5   configoptions	laststartpidlaststopdelayassertFalseadministrative_stopkillingbackoffpipesdispatchersspawnerrr   r?   r>   instancer   r   r   	test_ctor-   s&   
zSubprocessTests.test_ctorc                 C   sH   t  }t|dd}| |}t|}| |d | |d d S )Nr9   r:   z<Subprocess atzwith name cat in state STOPPED>)r   r	   r#   repr
assertTruer4   endswith)r   r?   r>   rL   sr   r   r   	test_reprA   s   
zSubprocessTests.test_reprc                 C   h   t  }t|dd}| |}tddtddd|_|  | |jd jd | |jd jd	 d S 
Ntest/testTreadablewritabler      r   r\   F)r   r	   r#   r   rI   
reopenlogsr5   logs_reopenedrK   r   r   r   test_reopenlogsI      
zSubprocessTests.test_reopenlogsc                 C   rS   rT   )r   r	   r#   r   rI   
removelogsr5   logs_removedrK   r   r   r   test_removelogsS   r`   zSubprocessTests.test_removelogsc                 C   sj   t  }t|ddddd}| |}tddtddd	|_|  | |jd
 j | |jd j d S )NrU   rV   /tmp/fooz/tmp/barr;   TrW   rY   r[   r   r\   )	r   r	   r#   r   rI   drainrO   read_event_handledwrite_event_handledrK   r   r   r   
test_drain]   s   
zSubprocessTests.test_drainc                 C   .   t  }t|dd}| |}| t|j d S )N
extraquotezextraquote"r   r	   r#   assertRaisesr   get_execv_argsrK   r   r   r   *test_get_execv_args_bad_command_extraquotei      
z:SubprocessTests.test_get_execv_args_bad_command_extraquotec                 C   ri   )Nempty rk   rK   r   r   r   %test_get_execv_args_bad_command_emptyo   ro   z5SubprocessTests.test_get_execv_args_bad_command_emptyc                 C   ri   )Nwhitespaceonlyz 	 rk   rK   r   r   r   .test_get_execv_args_bad_command_whitespaceonlyu   ro   z>SubprocessTests.test_get_execv_args_bad_command_whitespaceonlyc                 C   s:   t  }t|dd}| |}| }| |ddgf d S )Nnotthere	/nottherer   r	   r#   rm   r5   r   r?   r>   rL   argsr   r   r   test_get_execv_args_abs_missing{   
   
z/SubprocessTests.test_get_execv_args_abs_missingc                 C   s<   t  }t|dd}| |}| }| |dddgf d S )Nru   z/notthere "an argument"rv   an argumentrw   rx   r   r   r   *test_get_execv_args_abs_withquotes_missing   
   
z:SubprocessTests.test_get_execv_args_abs_withquotes_missingc                 C   s:   t  }t|dd}| |}| }| |ddgf d S )Nru   rw   rx   r   r   r   test_get_execv_args_rel_missing   r{   z/SubprocessTests.test_get_execv_args_rel_missingc                 C   s<   t  }t|dd}| |}| }| |dddgf d S )Nru   znotthere "an argument"r|   rw   rx   r   r   r   *test_get_execv_args_rel_withquotes_missing   r~   z:SubprocessTests.test_get_execv_args_rel_withquotes_missingc                 C   s`   d}t  }t|d|}| |}| }| t|d | |d d | |d ddg d S )Nz/bin/sh foosh   r   /bin/shr\   foor   r	   r#   rm   r5   lenr   
executabler?   r>   rL   ry   r   r   r   test_get_execv_args_abs      
z'SubprocessTests.test_get_execv_args_absc                 C   s`   d}t  }t|d|}| |}| }| t|d | |d d | |d ddg d S )Nzsh foor   r   r   r   r\   r   r   r   r   r   r   test_get_execv_args_rel   r   z'SubprocessTests.test_get_execv_args_relc                    s   t  B}tj|j\ }d| }t }t|d|} fdd|_| 	|}|
 }| |d |j | |d |dg W d    d S 1 sIw   Y  d S )Nz%s foor   c                      s    gS r   r   r   dirnamer   r   <lambda>   s    zUSubprocessTests.test_get_execv_args_rel_searches_using_pconfig_path.<locals>.<lambda>r   r\   r   )tempfileNamedTemporaryFileospathsplitnamer   r	   get_pathr#   rm   r5   )r   fbasenamer   r?   r>   rL   ry   r   r   r   3test_get_execv_args_rel_searches_using_pconfig_path   s   

"zCSubprocessTests.test_get_execv_args_rel_searches_using_pconfig_pathc                 C   sL   t  }t|dd}| |}|d | |jd | |jjd d d S )NrU   rV   r   r   zspawnerr: foo)r   r	   r#   record_spawnerrr5   rJ   loggerdatarK   r   r   r   test_record_spawnerr   s   

z$SubprocessTests.test_record_spawnerrc                 C   sr   t  }t|dd}| |}d|_ddlm} |j|_| }| 	|d  | 	|j
jd d | 	|j|j d S )Nr   r   Tr   r-   zprocess 'sh' already running)r   r	   r#   rA   r1   r.   RUNNINGstatespawnr5   r   r   )r   r?   r>   rL   r.   resultr   r   r   test_spawn_already_running   s   
z*SubprocessTests.test_spawn_already_runningc           	         s  t  }t|dd}| |}ddlm} |j|_ddlm} g  |	|j
 fdd | }| |d  | |jd | |jjd d	 | |j | |j ddlm} | |j|j | t d
  d } d }| |j|j | |j|j d S )Nbadz/bad/filenamer   r-   eventsc                    
     | S r   appendxLr   r   r         
 zBSubprocessTests.test_spawn_fail_check_execv_args.<locals>.<lambda>zbad filenamezspawnerr: bad filenamer   r\   )r   r	   r#   r1   r.   BACKOFFr   
supervisorr   	subscribeProcessStateEventr   r5   rJ   r   r   rO   rC   rG   r   	__class__ProcessStateStartingEventProcessStateBackoffEvent	r   r?   r>   rL   r.   r   r   event1event2r   r   r    test_spawn_fail_check_execv_args   s*   
z0SubprocessTests.test_spawn_fail_check_execv_argsc           	         s  t  }ttjttj|_t|dd}| |}ddl	m
} |j|_ddlm} g  ||j fdd | }| |d  | |jd | |jjd d	 | |j | |j ddl	m
} | |j|j | t d
  \}}| |j|j | |j|j d S )Ngood/good/filenamer   r-   r   c                    r   r   r   r   r   r   r   r      r   zCSubprocessTests.test_spawn_fail_make_pipes_emfile.<locals>.<lambda>z#too many open files to spawn 'good'z-spawnerr: too many open files to spawn 'good'r   )r   OSErrorerrnoEMFILEr   strerrormake_pipes_exceptionr	   r#   r1   r.   r   r   r   r   r   r   r   r5   rJ   r   r   rO   rC   rG   r   r   r   r   r   r   r   r   !test_spawn_fail_make_pipes_emfile   s6   

z1SubprocessTests.test_spawn_fail_make_pipes_emfilec           
         s  t  }ttjttj|_t|dd}| |}ddl	m
} |j|_ddlm} g  ||j fdd | }| |d  d}| |j| | |jjd d	|  | |j | |j ddl	m
} | |j|j | t d
  \}}	| |j|j | |	j|j d S )Nr   r   r   r-   r   c                    r   r   r   r   r   r   r   r     r   zBSubprocessTests.test_spawn_fail_make_pipes_other.<locals>.<lambda>z2unknown error making dispatchers for 'good': EPERMspawnerr: %sr   )r   r   r   EPERMr   r   r   r	   r#   r1   r.   r   r   r   r   r   r   r   r5   rJ   r   r   rO   rC   rG   r   r   r   r   
r   r?   r>   rL   r.   r   r   msgr   r   r   r   r    test_spawn_fail_make_pipes_other   s0   

z0SubprocessTests.test_spawn_fail_make_pipes_otherc                    s  t  }t|dddd}dd }||_| |}ddlm} |j|_dd	lm	} g  |
|j fd
d | }| |d  d}| |j| | |jjd d|  | |j | |j ddlm} | |j|j | t d  \}	}
| |	j|j | |
j|j d S )Nr9   /bin/catz/a/directory)r   commandr<   c                 S   
   t tjr   )IOErrorr   EISDIRenveloper   r   r   raise_eisdir     
zMSubprocessTests.test_spawn_fail_make_dispatchers_eisdir.<locals>.raise_eisdirr   r-   r   c                    r   r   r   r   r   r   r   r   !  r   zISubprocessTests.test_spawn_fail_make_dispatchers_eisdir.<locals>.<lambda>z2unknown error making dispatchers for 'cat': EISDIRr   r   )r   r	   make_dispatchersr#   r1   r.   r   r   r   r   r   r   r   r5   rJ   r   r   rO   rC   rG   r   r   r   r   )r   r?   r>   r   rL   r.   r   r   r   r   r   r   r   r   'test_spawn_fail_make_dispatchers_eisdir  s2   
z7SubprocessTests.test_spawn_fail_make_dispatchers_eisdirc           
         >  t  }ttjttj|_t|dd}| |}ddl	m
} |j|_ddlm} g  ||j fdd | }| |d  d}| |j| | |jjd d	|  | t|jd
 | t|jd
 | |j | |j ddl	m
} | |j|j | t d  \}}	| |j|j | |	j|j d S )Nr   r   r   r-   r   c                    r   r   r   r   r   r   r   r   :  r   z=SubprocessTests.test_spawn_fork_fail_eagain.<locals>.<lambda>z3Too many processes in process table to spawn 'good'r      r   )r   r   r   EAGAINr   r   fork_exceptionr	   r#   r1   r.   r   r   r   r   r   r   r   r5   rJ   r   r   r   parent_pipes_closedchild_pipes_closedrO   rC   rG   r   r   r   r   r   r   r   test_spawn_fork_fail_eagain0  4   

z+SubprocessTests.test_spawn_fork_fail_eagainc           
         r   )Nr   r   r   r-   r   c                    r   r   r   r   r   r   r   r   U  r   z<SubprocessTests.test_spawn_fork_fail_other.<locals>.<lambda>z+unknown error during fork for 'good': EPERMr   r   r   )r   r   r   r   r   r   r   r	   r#   r1   r.   r   r   r   r   r   r   r   r5   rJ   r   r   r   r   r   rO   rC   rG   r   r   r   r   r   r   r   test_spawn_fork_fail_otherK  r   z*SubprocessTests.test_spawn_fork_fail_otherc                 C   s   t  }d|_t|dddd}| |}| }| |d  | |jd  | |jd  | |jd | t	|j
d | t	|j|jd  | |jd | |jddgf | |jd | |jdd	i d S )
Nr   r   r   r\   uidT   r   *supervisor: child process was not spawned
)r   forkpidr	   r#   r   r5   r   r   pgrp_setr   duped
fds_closedminfdsprivsdropped
execv_argsexecve_calledwrittenr   r?   r>   rL   r   r   r   r   test_spawn_as_child_setuid_okf  s&   
z-SubprocessTests.test_spawn_as_child_setuid_okc                 C   s   t  }d|_d|_t|dddd}| |}| }| |d  | |jd  | |jd  | |j	d | t
|jd | t
|j|jd  | |jd	d
i | |jd  | |jd | |jd d S )Nr   zfailure reasonr   r   r\   r   Tr   r   z[supervisor: couldn't setuid to 1: failure reason
supervisor: child process was not spawned
F   )r   r   
setuid_msgr	   r#   r   r5   r   r   r   r   r   r   r   r   r   r   	_exitcoder   r   r   r   test_spawn_as_child_setuid_fail|  s$   
z/SubprocessTests.test_spawn_as_child_setuid_failc                 C   s   t  }d|_t|dddd}| |}| }| |d  | |jd  | |jd  | |jd | t	|j
d | t	|j|jd  | |jddgf | |jd | |jd | |jdd	i d S )
Nr   r   r   /tmp	directoryTr   r   r   )r   r   r	   r#   r   r5   r   r   r   r   r   r   r   r   changed_directoryr   r   r   r   r   r   test_spawn_as_child_cwd_ok  s*   
z*SubprocessTests.test_spawn_as_child_cwd_okc                 C   s   t  }d|_t|dddd}| |}| }| |d  | |jddgf | |jd | |jd | |j	ddi d S )Nr   r   r   r   )umaskTr   )
r   r   r	   r#   r   r5   r   umasksetr   r   r   r   r   r   test_spawn_as_child_sets_umask  s   
z.SubprocessTests.test_spawn_as_child_sets_umaskc                 C   s   t  }d|_ttjttj|_t|dddd}| 	|}|
 }| |d  | |jd  | |jd  | |jd | t|jd | t|j|jd  | |jd  dd	i}| |j| | |jd
 | |jd | |jd d S )Nr   r   r   r   r   Tr   r   zUsupervisor: couldn't chdir to /tmp: ENOENT
supervisor: child process was not spawned
r   F)r   r   r   r   ENOENTr   r   chdir_exceptionr	   r#   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r>   rL   r   outr   r   r   test_spawn_as_child_cwd_fail  s,   

z,SubprocessTests.test_spawn_as_child_cwd_failc                 C   s   t  }d|_ttjttj|_t|dd}| 	|}|
 }| |d  | |jd  | |jd  | |jd | t|jd | t|j|jd  ddi}| |j| | |jd  | |jd d S )	Nr   r   r   Tr   r   zZsupervisor: couldn't exec /good/filename: EPERM
supervisor: child process was not spawned
r   )r   r   r   r   r   r   r   execv_exceptionr	   r#   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   &test_spawn_as_child_execv_fail_oserror  s$   

z6SubprocessTests.test_spawn_as_child_execv_fail_oserrorc                 C   s   t  }d|_ttj|_t|dd}| |}| }| 	|d  | 	|j
d  | 	|jd  | 	|jd | 	t|jd | 	t|j|jd  |jd }d}| || | d|v  | 	|jd  | 	|jd	 d S )
Nr   r   r   Tr   r   z)supervisor: couldn't exec /good/filename:RuntimeErrorr   )r   r   r   r   r   r   r	   r#   r   r5   r   r   r   r   r   r   r   r   rO   r4   r   r   )r   r?   r>   rL   r   r   headr   r   r   ,test_spawn_as_child_execv_fail_runtime_error  s$   

z<SubprocessTests.test_spawn_as_child_execv_fail_runtime_errorc                 C   sh   t  }d|_t|ddddid}| |}| }| |d  | |jddgf | |jd d d S )Nr   r9   r   _TEST_1)environment)r   r   r	   r#   r   r5   r   execv_environmentr   r   r   r   ,test_spawn_as_child_uses_pconfig_environment  s   
z<SubprocessTests.test_spawn_as_child_uses_pconfig_environmentc                 C   s   t  }d|_t|dd}| |}G dd d}| |_| |j_| }| |d  | |jddgf | |j	d d | |j	d d | |j	d	 d
 | |j	d d d S )Nr   r9   r   c                   @      e Zd ZdZdS )zQSubprocessTests.test_spawn_as_child_environment_supervisor_envvars.<locals>.DummydummyN)__name__
__module____qualname__r   r   r   r   r   Dummy      r  SUPERVISOR_ENABLEDr   SUPERVISOR_PROCESS_NAMESUPERVISOR_GROUP_NAMEr  SUPERVISOR_SERVER_URLzhttp://localhost:9001)
r   r   r	   r#   groupr>   r   r5   r   r  )r   r?   r>   rL   r  r   r   r   r   2test_spawn_as_child_environment_supervisor_envvars  s.   




zBSubprocessTests.test_spawn_as_child_environment_supervisor_envvarsc                 C   s   t  }d|_t|dddd}d|_| |}| }| |d  | |jd  | |jd  | |j	d | t
|jd | t
|j|jd  | |jd | |jddgf | |jd | |jdd	i d S )
Nr   r   r   r\   r   Tr   r   r   )r   r   r	   redirect_stderrr#   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   %test_spawn_as_child_stderr_redirected  s(   
z5SubprocessTests.test_spawn_as_child_stderr_redirectedc                 C   s,  t  }d|_t|dd}| |}| }| |d | |jd jt | |jd jt | |jd jt | |j	d d | |j	d d | |j	d	 d | |j
d  | t|jd
 | |jjd d | |jd  | |j | |jjjd | ddlm} | |j|j d S )N
   r   r            stdinstdoutstderrr   r   zspawned: 'good' with pid 10r-   )r   r   r	   r#   r   r5   rI   r   r   rH   r   r   r   r   r   rJ   rO   rC   r>   r?   
pidhistoryr1   r.   r   STARTING)r   r?   r>   rL   r   r.   r   r   r   test_spawn_as_parent/  s(   
z$SubprocessTests.test_spawn_as_parentc                 C   s   t  }d|_t|dddd}| |}| }| |d | |jd jt | |jd jt | |j	d d | |j	d	 d | |j	d
 d  d S )Nr  r   r   T)r  r  r  r  r  r  )
r   r   r	   r#   r   r5   rI   r   r   rH   r   r   r   r   test_spawn_redirect_stderrE  s   
z*SubprocessTests.test_spawn_redirect_stderrc                 C   s   d}t  }t|d|}| |}dd }| t|j| d|_|  || |jd }| 	||j
| j d|_| t|j| d S )Nr   outputa    r\   r  T)r   r	   r#   rl   r   writer   r   rH   r5   rI   input_bufferrF   r   r   r?   r>   rL   sentstdin_fdr   r   r   
test_writeS  s   


zSubprocessTests.test_writec                 C   sr   d}t  }t|d|}| |}dd }| t|j| d|_|  |jd }|j	| 
  | t|j| d S Nr   r  r  r  r\   r  )r   r	   r#   rl   r   r   r   r   rH   rI   closer"  r   r   r   test_write_dispatcher_closedb  s   

z,SubprocessTests.test_write_dispatcher_closedc              
   C   s   d}t  }t|d|}| |}d|_|  |jd }|j|   d |jd< z|d | 	d W d S  t
y[ } z| |jd tj | |jd d W Y d }~d S d }~ww )	Nr   r  r\   r  r   nothing raisedr   zProcess has no stdin channel)r   r	   r#   r   r   rH   rI   r'  r   failr   r5   ry   r   EPIPE)r   r   r?   r>   rL   r$  excr   r   r   test_write_stdin_fd_noneo  s"   



 z(SubprocessTests.test_write_stdin_fd_nonec                 C   s   d}t  }t|d|}| |}dd }| t|j| d|_|  |jd }tt	j
tt	j
|j| _| t|j| d S r&  )r   r	   r#   rl   r   r   r   r   rH   r   r+  r   r   rI   flush_exceptionr"  r   r   r   (test_write_dispatcher_flush_raises_epipe  s   


z8SubprocessTests.test_write_dispatcher_flush_raises_epipec                    s  ddl m} zg   fdd}ttj| | }t }t|d|}| |}| }|jj	d }| 
|d | t|jd | 
|j | |j| |j}		 z	td	 }
W n tyw } z|jd tjkrm W Y d }~nd }~ww qStd
 | 
|
tt|	dk |tj}td
 | |d  tdtj\}}td	 }
| |
tt|	d |   g  W zt!| W n   Y ttjtj" d S zt!| W n   Y ttjtj" w )Nr   )makeSpewc                     s     d d S )NTr   )ry   sigchldsr   r   
sighandler  s   z=SubprocessTests._dont_test_spawn_and_kill.<locals>.sighandlerspewzspawned: 'spew' with pidr   r\   psg?)#supervisor.tests.baser0  signalSIGCHLDr   r	   r#   r   r   r   rO   r4   r5   r   rH   rA   r   popenreadr   ry   r   EINTRtimesleepfindr   rN   killSIGTERMwaitpidWNOHANGassertNotEqualremoveSIG_DFL)r   r0  r3  r   r?   r>   rL   r   r   origpidr   whyrA   stsr   r1  r   _dont_test_spawn_and_kill  s\   


z)SubprocessTests._dont_test_spawn_and_killc                 C   s   t  }t|dd}| |}d|_tdd}d|i|_ddlm} |j|_	t

 |_|  | |j | |jd | |j | |jjd d	 | |j | |jd tj d S )
NrU   rV      TrY   r   r   r-   )killing test (pid 11) with signal SIGTERM)r   r	   r#   rA   r   rI   r1   r.   r   r   r=  laststopreportstoprO   rE   r5   rC   r   r   rF   killsr8  rA  r   r?   r>   rL   
dispatcherr.   r   r   r   	test_stop  s    



zSubprocessTests.test_stopc              
   C   s   t  }t|dd}| |}d|_tdd}d|i|_ddlm} |j|_	z|
  | d	 W d S  tyM } z| |jd d
 W Y d }~d S d }~ww )NrU   rV   rK  TrY   r   r   r-   r)  zCAssertion failed for test: STOPPED not in RUNNING STARTING STOPPING)r   r	   r#   rA   r   rI   r1   r.   STOPPEDr   rN  r*  AssertionErrorr5   ry   )r   r?   r>   rL   rQ  r.   r,  r   r   r   &test_stop_not_in_stoppable_state_error  s   


 z6SubprocessTests.test_stop_not_in_stoppable_state_errorc                 C   sj   t  }t|dd}| |}d|_tdd}d|i|_ddlm} |j|_	|
  | t|jjd d S )	NrU   rV   rK  TrY   r   r   r-   )r   r	   r#   rA   r   rI   r1   r.   rS  r   stop_reportr5   r   r   r   rP  r   r   r   3test_stop_report_logs_nothing_if_not_stopping_state  s   


zCSubprocessTests.test_stop_report_logs_nothing_if_not_stopping_statec                 C   s   t  }t|dd}| |}d|_tdd}d|i|_ddlm} |j|_	| 
|jd |  | 
t|jjd	 | 
|jjd d
 | |jd |  | 
t|jjd	 d S )NrU   rV   rK  TrY   r   r   r-   r\   waiting for test to stop)r   r	   r#   rA   r   rI   r1   r.   STOPPINGr   r5   rM  rV  r   r   r   rD  rP  r   r   r   1test_stop_report_logs_throttled_by_laststopreport  s   


zASubprocessTests.test_stop_report_logs_throttled_by_laststopreportc                 C   s   t   d }t }t|dd}| |}d|_tdd}d|i|_dd	lm} |j	|_
||_|  | t|jjd | |j|k  t d
 |  | t|jjd | |jjd d | |jd |  | t|jjd d S )N  rU   rV   rK  TrY   r   r   r-   r   r\   rX  )r=  r   r	   r#   rA   r   rI   r1   r.   rY  r   rM  rV  r5   r   r   r   rO   r>  rD  )r   future_timer?   r>   rL   rQ  r.   r   r   r   )test_stop_report_laststopreport_in_future  s(   



z9SubprocessTests.test_stop_report_laststopreport_in_futurec                    s   t  }t|dd}| |}g  ddlm} ddlm} ||j fdd |j	|_
|  | |j | |j | |j | |j
|j | t d  d }| |j|j d S )	NrU   rV   r   r-   r   c                    r   r   r   r   r   r   r   r   "  r   z.SubprocessTests.test_give_up.<locals>.<lambda>r\   )r   r	   r#   r1   r.   r   r   r   r   r   r   give_uprO   system_stoprD   rC   rG   r5   FATALr   r   ProcessStateFatalEventr   r?   r>   rL   r.   r   eventr   r   r   test_give_up  s    
zSubprocessTests.test_give_upc                 C   sL   t  }t|dd}| |}|tj | |jjd d | 	|j
 d S )NrU   rV   r   z=attempted to kill test with sig SIGTERM but it wasn't running)r   r	   r#   r@  r8  rA  r5   r   r   rD   rF   rK   r   r   r   test_kill_nopid-  s   
zSubprocessTests.test_kill_nopidc                       t  }t|dd}| |}d|_g  ddlm} ddlm} ||j	 fdd |j
|_|tj | |jjd d	 | |j | |jd tj | t d
  d }| |j|j d S )NrU   rV   rK  r   r-   r   c                    r   r   r   r   r   r   r   r   >  r   z9SubprocessTests.test_kill_from_starting.<locals>.<lambda>rL  r\   )r   r	   r#   rA   r1   r.   r   r   r   r   r  r   r@  r8  rA  r5   r   r   rO   rF   rO  r   r   ProcessStateStoppingEventrb  r   r   r   test_kill_from_starting6      
z'SubprocessTests.test_kill_from_startingc                    rf  )NrU   rV   rK  r   r-   r   c                    r   r   r   r   r   r   r   r   Q  r   z8SubprocessTests.test_kill_from_running.<locals>.<lambda>rL  r\   )r   r	   r#   rA   r1   r.   r   r   r   r   r   r   r@  r8  rA  r5   r   r   rO   rF   rO  r   r   rg  rb  r   r   r   test_kill_from_runningI  ri  z&SubprocessTests.test_kill_from_runningc                    s.  t  }t|dd}ttjttj|_| |}g  ddl	m
} ddlm} ||j fdd d|_|j|_|tj | |jjd d	 | |jjd
 d | d|jjd
 v  | |j | |jd | |j|j | t d  d } d
 }| |j|j | |j|j  d S )NrU   rV   r   r-   r   c                    r   r   r   r   r   r   r   r   e  r   z>SubprocessTests.test_kill_from_running_error.<locals>.<lambda>rK  rL  r\   zunknown problem killing test	Tracebackr   )!r   r	   r   r   r   r   r   kill_exceptionr#   r1   r.   r   r   r   r   rA   r   r   r@  r8  rA  r5   r   r   rO   r4   rD   rF   UNKNOWNr   r   rg  ProcessStateUnknownEvent)r   r?   r>   rL   r.   r   r   r   r   r   r   test_kill_from_running_error\  s4   

z,SubprocessTests.test_kill_from_running_errorc                    s  t  }t|dd}ttjttj|_| |}g  ddl	m
} ddlm} ||j fdd d|_|j|_|tj | |jjd d	 | |jjd
 dt|j  | |j | |jd | |j|j | t d
  d }| |j|j d S )NrU   rV   r   r-   r   c                    r   r   r   r   r   r   r   r     r   zDSubprocessTests.test_kill_from_running_error_ESRCH.<locals>.<lambda>rK  rL  r\   zFunable to signal test (pid 11), it probably just exited on its own: %s)r   r	   r   r   ESRCHr   r   rl  r#   r1   r.   r   r   r   r   rA   r   r   r@  r8  rA  r5   r   r   strrO   rF   rY  r   r   rg  )r   r?   r>   rL   r.   r   r   r   r   r   "test_kill_from_running_error_ESRCHw  s.   

z2SubprocessTests.test_kill_from_running_error_ESRCHc                    s   t  }t|dd}| |}d|_g  ddlm} ddlm} ||j	 fdd |j
|_|tj | |jjd d	 | |j | |jd tj |  g  d S )
NrU   rV   rK  r   r-   r   c                    r   r   r   r   r   r   r   r     r   z9SubprocessTests.test_kill_from_stopping.<locals>.<lambda>z)killing test (pid 11) with signal SIGKILLr   r	   r#   rA   r1   r.   r   r   r   r   rY  r   r@  r8  SIGKILLr5   r   r   rO   rF   rO  r   r?   r>   rL   r.   r   r   r   r   test_kill_from_stopping  s   
z'SubprocessTests.test_kill_from_stoppingc                    s   t  }t|dd}| |}g  ddlm} ddlm} ||j fdd |j	|_
|tj | |jjd d | |j  d }| |j|j d S )	NrU   rV   r   r-   r   c                    r   r   r   r   r   r   r   r     r   z8SubprocessTests.test_kill_from_backoff.<locals>.<lambda>z2Attempted to kill test, which is in BACKOFF state.)r   r	   r#   r1   r.   r   r   r   r   r   r   r@  r8  rt  r5   r   r   rD   rF   r   ProcessStateStoppedEventrb  r   r   r   test_kill_from_backoff  s   
z&SubprocessTests.test_kill_from_backoffc                    s   t  }t|dddd}| |}d|_g  ddlm} ddlm} ||j	 fd	d
 |j
|_|tj | |jjd d | |j | |jd tj |  g  d S )NrU   rV   T)killasgrouprK  r   r-   r   c                    r   r   r   r   r   r   r   r     r   zGSubprocessTests.test_kill_from_stopping_w_killasgroup.<locals>.<lambda>z7killing test (pid 11) process group with signal SIGKILLrs  ru  r   r   r   %test_kill_from_stopping_w_killasgroup  s   
z5SubprocessTests.test_kill_from_stopping_w_killasgroupc                    s   t  }t|dddd}| |}d|_g  ddlm} ddlm} ||j	 fd	d
 |j
|_|tj | |jjd d | |j | |jd tj | t d  d }| |j|j | |jdg | |j|j
 d S )NrU   rV   T)stopasgrouprK  r   r-   r   c                    r   r   r   r   r   r   r   r     r   z2SubprocessTests.test_stopasgroup.<locals>.<lambda>z7killing test (pid 11) process group with signal SIGTERMrz  r\   )rA   rK  )r   r	   r#   rA   r1   r.   r   r   r   r   r   r   r@  r8  rA  r5   r   r   rO   rF   rO  r   r   rg  extra_values
from_staterb  r   r   r   test_stopasgroup  s$   
z SubprocessTests.test_stopasgroupc                 C   sf   t  }t|dd}| |}ddlm} |j|_|tj | 	|j
jd d | 	t|jd d S )NrU   rV   r   r-   z9attempted to send test sig SIGWINCH but it wasn't running)r   r	   r#   r1   r.   rS  r   r8  SIGWINCHr5   r   r   r   rO  r   r?   r>   rL   r.   r   r   r   test_signal_from_stopped  s   
z(SubprocessTests.test_signal_from_stoppedc                 C   s   t  }t|dd}| |}d|_ddlm} |j|_|tj	 | 
|jjd d | 
t|jd | |j|jv  | 
|j|j tj	 d S )NrU   rV   rK  r   r-   "sending test (pid 11) sig SIGWINCHr\   )r   r	   r#   rA   r1   r.   r   r   r8  r  r5   r   r   r   rO  rO   r  r   r   r   test_signal_from_running  s   
z(SubprocessTests.test_signal_from_runningc                    s   t  }t|dd}ttjttj|_| |}g  ddl	m
} ddlm} ||j fdd d|_|j|_|tj | |jjd d	 | |jjd
 dt|j  | |j | |j|j | |jd | t d d S )NrU   rV   r   r-   r   c                    r   r   r   r   r   r   r   r     r   zFSubprocessTests.test_signal_from_running_error_ESRCH.<locals>.<lambda>rK  r  r\   zJunable to signal test (pid 11), it probably just now exited on its own: %s)r   r	   r   r   rp  r   r   rl  r#   r1   r.   r   r   r   r   rA   r   r   r8  r  r5   r   r   rq  rD   rF   r   ru  r   r   r   $test_signal_from_running_error_ESRCH  s.   

z4SubprocessTests.test_signal_from_running_error_ESRCHc                    s  t  }t|dd}ttjttj|_| |}g  ddl	m
} ddlm} ||j fdd d|_|j|_|tj | |jjd d	 | |jjd
 d | d|jjd
 v  | |j | |j|j | |jd | t d
  d }| |j|j d S )NrU   rV   r   r-   r   c                    r   r   r   r   r   r   r   r     r   z@SubprocessTests.test_signal_from_running_error.<locals>.<lambda>rK  r  r\   z%unknown problem sending sig test (11)rk  )r   r	   r   r   r   r   r   rl  r#   r1   r.   r   r   r   r   rA   r   r   r8  r  r5   r   r   rO   r4   rD   rF   rm  r   r   rn  rb  r   r   r   test_signal_from_running_error  s4   

z.SubprocessTests.test_signal_from_running_errorc                    sH  t  }t|dddd}| |}d|_||jjjd< d|_ddd	}||_d
dl	m
} d
dlm} |j|_g  ||j fdd d|_|dd | |j | |jd
 | |j| | |ji  | |ji  | |jjd
 d | |jd | t d  d
 }| |j|j | |jdg | |j|j d S )Nru   rv   rd   r<   ){   r\   r  Trq   r  r  r   r-   r   c                    r   r   r   r   r   r   r   r   -  r   z<SubprocessTests.test_finish_stopping_state.<locals>.<lambda>r\   z(stopped: notthere (terminated by SIGHUP)r6  rA   r  )r   r	   r#   
waitstatusr>   r?   r  rF   rH   r1   r.   r   r   rY  r   r   r   rA   finishrD   r5   r   rI   r   r   
exitstatusr   r   rw  r}  r~  r   r?   r>   rL   rH   r.   r   rc  r   r   r   test_finish_stopping_state  s:   

z*SubprocessTests.test_finish_stopping_statec                    sV  t  }t|dddd}| |}||jjjd< ddd}||_dg|j_d	d
lm	} d	dl
m} |j|_g  ||j fdd d|_|dd | |j | |jd	 | |j| | |ji  | |ji  | |jjd	 d | |jd | t d  d	 }| |j|j | |jd | |jddg | |j|j d S )Nru   rv   rd   r  r  rq   r  r6  r   r-   r   c                    r   r   r   r   r   r   r   r   K  r   zISubprocessTests.test_finish_running_state_exit_expected.<locals>.<lambda>r\   1exited: notthere (terminated by SIGHUP; expected)TexpectedTr  ) r   r	   r#   r>   r?   r  rH   	exitcodesr1   r.   r   r   r   r   r   r   rA   r  rD   rF   r5   r   rI   r   r   r  r   r   ProcessStateExitedEventr  r}  r~  r  r   r   r   'test_finish_running_state_exit_expected>  sB   


z7SubprocessTests.test_finish_running_state_exit_expectedc                    s  t  }t|dddd}| |}||jjjd< ddd}||_dg|j_t d	 |_	d
dl
m} d
dlm} |j|_g  ||j fdd d|_|dd | |j | |jd
 | |j| | |ji  | |ji  | |jjd
 d | |jjd d | |jd | t d  d
 }| |j|j | |jd | |j dg | |j!|j  d }| |j|j" | |jd | |j ddg | |j!|j# d S )Nru   rv   rd   r  r  rq   r  r6  r[  r   r-   r   c                    r   r   r   r   r   r   r   r   l  r   zPSubprocessTests.test_finish_starting_state_laststart_in_future.<locals>.<lambda>r\   process 'notthere' (123) laststart time is in the future, don't know how long process was running so assuming it did not exit too quicklyr  r   Tr  r  )$r   r	   r#   r>   r?   r  rH   r  r=  r@   r1   r.   r   r   r  r   r   r   rA   r  rD   rF   r5   r   rI   r   r   r  r   r   ProcessStateRunningEventr  r}  r~  r  r   r  r   r   r   .test_finish_starting_state_laststart_in_future^  sP   


z>SubprocessTests.test_finish_starting_state_laststart_in_futurec                    sB  t  }t|ddddd}| |}||jjjd< ddd}||_d	g|j_t |_	d
dl
m} d
dlm} |j|_g  ||j fdd d|_|dd | |j | |jd
 | |j| | |ji  | |ji  | |jjd
 d | |jd  | t d  d
 }| |j|j | |j|j d S )Nru   rv   rd   r  r<   	startsecsr  rq   r  r6  r   r-   r   c                    r   r   r   r   r   r   r   r     r   zOSubprocessTests.test_finish_starting_state_exited_too_quickly.<locals>.<lambda>r\   z5exited: notthere (terminated by SIGHUP; not expected)) r   r	   r#   r>   r?   r  rH   r  r=  r@   r1   r.   r   r   r  r   r   r   rA   r  rD   rF   r5   r   rI   r   r   r  r   r   r   r~  r  r   r   r   -test_finish_starting_state_exited_too_quickly  s<   



z=SubprocessTests.test_finish_starting_state_exited_too_quicklyc                    sb  t  }t|ddddd}| |}||jjjd< ddd}||_d	g|j_t |_	d
dl
m} d
dlm} |j|_g  ||j fdd d|_|dd | |j | |jd
 | |j| | |ji  | |ji  | |jjd
 d | |jd	 | t d  d
 }| |j|j | |jd | |j ddg | |j!|j d S )Nru   rv   rd   r  r  r  rq   r  r6  r   r-   r   c                    r   r   r   r   r   r   r   r     r   zdSubprocessTests.test_finish_running_state_exited_too_quickly_due_to_clock_rollback.<locals>.<lambda>r\   r  Tr  r  "r   r	   r#   r>   r?   r  rH   r  r=  r@   r1   r.   r   r   r   r   r   r   rA   r  rD   rF   r5   r   rI   r   r   r  r   r   r  r  r}  r~  r  r   r   r   Btest_finish_running_state_exited_too_quickly_due_to_clock_rollback  sD   



zRSubprocessTests.test_finish_running_state_exited_too_quickly_due_to_clock_rollbackc                    sx  t  }t|dddd}| |}||jjjd< ddd}||_dg|j_t d	 |_	d
dl
m} d
dlm} |j|_g  ||j fdd d|_|dd | |j | |jd
 | |j| | |ji  | |ji  | |jjd
 d | |jjd d | |jd | t d  d
 }| |j|j | |jd | |j ddg | |j!|j d S )Nru   rv   rd   r  r  rq   r  r6  r[  r   r-   r   c                    r   r   r   r   r   r   r   r     r   zOSubprocessTests.test_finish_running_state_laststart_in_future.<locals>.<lambda>r\   r  r  Tr  r  r  r  r   r   r   -test_finish_running_state_laststart_in_future  sJ   


z=SubprocessTests.test_finish_running_state_laststart_in_futurec           	         s   ddl m} g  ||j fdd ||j fdd t }t|dddd	d
}| |}ddlm	} |j
|_t }||_|dd | t d  \}}| |j|j | |j|j | |j| | |j| | |jd  d S )Nr   r   c                    r   r   r   r   r   r   r   r     r   zOSubprocessTests.test_finish_with_current_event_sends_rejected.<locals>.<lambda>c                    r   r   r   r   r   r   r   r     r   ru   rv   rd   r  r  r-   r  r\   r   )r   r   r   r   EventRejectedEventr   r	   r#   r1   r.   r   r   r   rc  r  r5   r   r   r  process)	r   r   r?   r>   rL   r.   rc  r   r   r   r   r   -test_finish_with_current_event_sends_rejected  s.   
z=SubprocessTests.test_finish_with_current_event_sends_rejectedc                 C   s6   t  }t|dd}| |}|  | |jd  d S )NrU   rV   r   r	   r#   set_uidr5   r   rK   r   r   r   test_set_uid_no_uid  s
   
z#SubprocessTests.test_set_uid_no_uidc                 C   sF   t  }t|dddd}| |}| }| |jd | |d  d S )NrU   rV   r\   r   r  )r   r?   r>   rL   r   r   r   r   test_set_uid  s   
zSubprocessTests.test_set_uidc                 C   s   t  }t|ddddd}| |}t|ddddd}| |}t|dddd	d}| |}|||g}|  | ||||g d S )
Nru   rv   rd   r\   )r<   priority	notthere1r   	notthere2r   )r   r	   r#   sortr5   )r   r?   r>   rL   	instance1	instance2r   r   r   r   test_cmp_bypriority  s&   



z#SubprocessTests.test_cmp_bypriorityc                 C   s   ddl m} g }||j|j ddlm}m} t }|j	|_
t|ddd}| |}d|_|j|_|  | |j|j | |g  d S )Nr   r   r.   SupervisorStatesr  /bin/process)r   r   r   r   r   r1   r.   r  r   SHUTDOWNmoodr	   r#   r@   rS  r   
transitionr5   )r   r   emitted_eventsr.   r  r?   pconfigr  r   r   r   7test_transition_stopped_to_starting_supervisor_stopping+  s   
zGSubprocessTests.test_transition_stopped_to_starting_supervisor_stoppingc           
         s   ddl m} g   fdd}||j| ddlm}m} t }|j|_	t
|ddd}| |}d|_|j|_|  | |j|j | t d  d \}}	| |j|j | |j|j | |	|j d S )	Nr   r   c                         | | jjf d S r   r   r  r   eemitted_events_with_statesr   r   
subscriber?     zZSubprocessTests.test_transition_stopped_to_starting_supervisor_running.<locals>.subscriberr  r  r  r\   )r   r   r   r   r1   r.   r  r   r   r  r	   r#   r@   rS  r   r  r5   r  r   r   r   r~  
r   r   r  r.   r  r?   r  r  rc  state_when_event_emittedr   r  r   6test_transition_stopped_to_starting_supervisor_running<  s$   
zFSubprocessTests.test_transition_stopped_to_starting_supervisor_runningc           	      C   s   ddl m} g }||j|j ddlm}m} t }|j	|_
t|ddd}ddlm} ||_| |}d|_d|_|j|_|  | |j|j | |j | |g  d S )	Nr   r   r  r  r  RestartUnconditionallyr\   T)r   r   r   r   r   r1   r.   r  r   r  r  r	   supervisor.datatypesr  autorestartr#   r@   r_  EXITEDr   r  r5   rO   )	r   r   r  r.   r  r?   r  r  r  r   r   r   6test_transition_exited_to_starting_supervisor_stoppingR  s"   
zFSubprocessTests.test_transition_exited_to_starting_supervisor_stoppingc           
         s   ddl m} g   fdd}||j| ddlm} t }t|ddd}ddlm	} ||_
| |}d	|_|j|_|  | |j|j | t d	  d \}}	| |j|j | |j|j | |	|j d S )
Nr   r   c                    r  r   r  r  r  r   r   r  j  r  z`SubprocessTests.test_transition_exited_to_starting_uncond_supervisor_running.<locals>.subscriberr-   r  r  r  r\   )r   r   r   r   r1   r.   r   r	   r  r  r  r#   r@   r  r   r  r5   r  r   r   r   r~  )
r   r   r  r.   r?   r  r  r  rc  r  r   r  r   <test_transition_exited_to_starting_uncond_supervisor_runningg  s&   
zLSubprocessTests.test_transition_exited_to_starting_uncond_supervisor_runningc           
         s   ddl m} g   fdd}||j| ddlm} t }t|ddd}ddlm	} ||_
| |}d	|_|j|_d
|_|  | |j|j | t d	  d \}}	| |j|j | |j|j | |	|j d S )Nr   r   c                    r  r   r  r  r  r   r   r    r  z`SubprocessTests.test_transition_exited_to_starting_condit_supervisor_running.<locals>.subscriberr-   r  r  RestartWhenExitUnexpectedr\   bogus)r   r   r   r   r1   r.   r   r	   r  r  r  r#   r@   r  r   r  r  r5   r  r   r   r   r~  )
r   r   r  r.   r?   r  r  r  rc  r  r   r  r   <test_transition_exited_to_starting_condit_supervisor_running~  s(   
zLSubprocessTests.test_transition_exited_to_starting_condit_supervisor_runningc                 C   s   ddl m} g }||j|j ddlm} t }t|ddd}ddl	m
} ||_| |}d|_|j|_d|_|  | |j|j | |g  d S )Nr   r   r-   r  r  r  r\   )r   r   r   r   r   r1   r.   r   r	   r  r  r  r#   r@   r  r   r  r  r5   )r   r   r  r.   r?   r  r  r  r   r   r   @test_transition_exited_to_starting_condit_fls_supervisor_running  s   
zPSubprocessTests.test_transition_exited_to_starting_condit_fls_supervisor_runningc                    s   ddl m} g  ||j fdd ddlm}m} t }|j|_	t
|ddd}| |}d|_d|_d|_|j|_|  | |j|j |  g  d S )	Nr   r   c                    r   r   r   r   r  r   r   r     r   zYSubprocessTests.test_transition_backoff_to_starting_supervisor_stopping.<locals>.<lambda>r  r  r  r\   )r   r   r   r   r1   r.   r  r   r  r  r	   r#   r@   rC   rG   r   r   r  r5   r   r   r.   r  r?   r  r  r   r  r   7test_transition_backoff_to_starting_supervisor_stopping     
zGSubprocessTests.test_transition_backoff_to_starting_supervisor_stoppingc           
         s   ddl m} g   fdd}||j| ddlm}m} t }|j|_	t
|ddd}| |}d|_d|_d|_|j|_|  | |j|j | t d  d \}}	| |j|j | |j|j | |	|j d S )	Nr   r   c                    r  r   r  r  r  r   r   r    r  zZSubprocessTests.test_transition_backoff_to_starting_supervisor_running.<locals>.subscriberr  r  r  r\   )r   r   r   r   r1   r.   r  r   r   r  r	   r#   r@   rC   rG   r   r   r  r5   r  r   r   r   r~  r  r   r  r   6test_transition_backoff_to_starting_supervisor_running  s(   
zFSubprocessTests.test_transition_backoff_to_starting_supervisor_runningc                    s   ddl m} g  ||j fdd ddlm}m} t }|j|_	t
|ddd}| |}d|_t|_d|_|j|_|  | |j|j |  g  d S )	Nr   r   c                    r   r   r   r   r  r   r   r     r   z_SubprocessTests.test_transition_backoff_to_starting_supervisor_running_notyet.<locals>.<lambda>r  r  r  r\   )r   r   r   r   r1   r.   r  r   r   r  r	   r#   r@   r   rC   rG   r   r   r  r5   r  r   r  r   =test_transition_backoff_to_starting_supervisor_running_notyet  r  zMSubprocessTests.test_transition_backoff_to_starting_supervisor_running_notyetc           	         s  ddl m} g   fdd}||j| ddlm} t }t|ddd}| |}d|_	d|_
d	|_d|_d|_d
|_d|_|j|_|  | |j	d | |j
d | |j | |jjd d | t d  d \}}| |j|j | |j|j | ||j d S )Nr   r   c                    r  r   r  r  r  r   r   r    r  zGSubprocessTests.test_transition_starting_to_running.<locals>.subscriberr-   r  r  r\   Fabcdefz_success: process entered RUNNING state, process has stayed up for > than 10 seconds (startsecs))r   r   r   r   r1   r.   r   r	   r#   rG   rC   r_  r@   rA   stdout_bufferstderr_bufferr  r   r  r5   rD   r   r   r   r   r  r~  r   	r   r   r  r.   r?   r  r  rc  r  r   r  r   #test_transition_starting_to_running  s8   
z3SubprocessTests.test_transition_starting_to_runningc                    sx  ddl m} g   fdd}||j| ddlm} t d }t }d}t|ddd	|d
}| 	|}d|_
d|_d|_||_d|_d|_d|_|j|_|  | |j|j | |j|k  t|d  |  | |j
d | |jd | |j | |j|j | |jjd d| | t d  d \}	}
| |	j|j | |	j|j | |
|j d S )Nr   r   c                    r  r   r  r  r  r   r   r    r  z[SubprocessTests.test_transition_starting_to_running_laststart_in_future.<locals>.subscriberr-   r[  r   r  r  )r  r\   Fr  r  z_success: process entered RUNNING state, process has stayed up for > than {} seconds (startsecs)) r   r   r   r   r1   r.   r=  r   r	   r#   rG   rC   r_  r@   rA   r  r  r  r   r  r5   rO   r>  rD   r   r   r   formatr   r   r  r~  )r   r   r  r.   r\  r?   test_startsecsr  r  rc  r  r   r  r   7test_transition_starting_to_running_laststart_in_future  sL   

zGSubprocessTests.test_transition_starting_to_running_laststart_in_futurec           
         s  ddl m} g   fdd}||j| ddlm} t d }t }t|ddd}| 	|}d	|_
||_d|_|j|_|  | |j|j | |j|k  |  | |j|j | t d	  d \}}	| |j|j | |j|j | |	|j d S )
Nr   r   c                    r  r   r  r  r  r   r   r  C  r  zWSubprocessTests.test_transition_backoff_to_starting_delay_in_future.<locals>.subscriberr-   r[  r  r  r\   )r   r   r   r   r1   r.   r=  r   r	   r#   r@   rC   rG   r   r   r  r5   rO   r  r   r   r   r~  )
r   r   r  r.   r\  r?   r  r  rc  r  r   r  r   3test_transition_backoff_to_starting_delay_in_future@  s.   
zCSubprocessTests.test_transition_backoff_to_starting_delay_in_futurec           	         s  ddl m} g   fdd}||j| ddlm} t }t|ddd}| |}d|_	d	|_
d|_d
|_d|_d|_|j|_|  | |j
d | |jd | |j | |jjd d | t d  d \}}| |j|j | |j|j | ||j d S )Nr   r   c                    r  r   r  r  r  r   r   r  j  r  zDSubprocessTests.test_transition_backoff_to_fatal.<locals>.subscriberr-   r  r  r\   i'  Fr  r  zHgave up: process entered FATAL state, too many start retries too quickly)r   r   r   r   r1   r.   r   r	   r#   r@   rG   rC   r_  r  r  r   r   r  r5   rO   r   r   r   r   ra  r~  r`  r  r   r  r    test_transition_backoff_to_fatalg  s6   
z0SubprocessTests.test_transition_backoff_to_fatalc                 C   s   ddl m} g }||j|j ddlm} t }t|ddd}| 	|}t
|_|j|_|  | |j|j | |g  d S )Nr   r   r-   r  r  )r   r   r   r   r   r1   r.   r   r	   r#   r   rC   rY  r   r  r5   r   r   r  r.   r?   r  r  r   r   r   'test_transition_stops_unkillable_notyet  s   
z7SubprocessTests.test_transition_stops_unkillable_notyetc                 C   s   ddl m} g }||j|j ddlm} t }t|ddd}| 	|}d|_
d|_d|_|j|_|  | |j | |j
d | |j|j | |jjd d | |jd tj | |g  d S )	Nr   r   r-   r  r  r\   Fz"killing 'process' (1) with SIGKILL)r   r   r   r   r   r1   r.   r   r	   r#   rC   rA   rF   rY  r   r  rO   rD  r5   r   r   rO  r8  rt  r  r   r   r    test_transition_stops_unkillable  s(   
z0SubprocessTests.test_transition_stops_unkillablec                 C   s8   t  }t|dd}| |}d|_| |dd d S )NrU   rV   r  F)r   r	   r#   r   r5   change_staterK   r   r   r   2test_change_state_doesnt_notify_if_no_state_change  s
   
zBSubprocessTests.test_change_state_doesnt_notify_if_no_state_changec                 C   s\   ddl m} t }t|dd}| |}d|_||j | |j	d | 
|jdk d S )Nr   r-   rU   rV   r  r\   )r1   r.   r   r	   r#   r   r  r   r5   rG   rO   rC   )r   r.   r?   r>   rL   r   r   r   (test_change_state_sets_backoff_and_delay  s   
z8SubprocessTests.test_change_state_sets_backoff_and_delayN)]r  r  r  r   r#   r+   r8   rM   rR   r_   rc   rh   rn   rr   rt   rz   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/  rJ  rR  rU  rW  rZ  r]  rd  re  rh  rj  ro  rr  rv  rx  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  r   r   r   r   r      s    



+"	 )"!%$8'#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eedeejddd Zeedeejddd Zeededddd ZdS )FastCGISubprocessTestsc                 C   r   )Nr   )FastCGISubprocess)r   r  )r   r  r   r   r   r     r   z&FastCGISubprocessTests._getTargetClassc                 O   r   r   r   r    r   r   r   r#     r$   zFastCGISubprocessTests._makeOnec                 C   r%   r&   r(   r*   r   r   r   r+     r,   zFastCGISubprocessTests.tearDownc                 C   s8   t  }d|_t|dddd}| |}| t|j d S Nr   r   r   r\   r   )r   r   r	   r#   rl   NotImplementedErrorr   rK   r   r   r   test_no_group  s
   
z$FastCGISubprocessTests.test_no_groupc                 C   sF   t  }d|_t|dddd}| |}tt||_| t|j	 d S r  )
r   r   r	   r#   r   r   r  rl   r  r   rK   r   r   r   test_no_socket_manager  s   
z-FastCGISubprocessTests.test_no_socket_managerc                 C   s   t  }d|_t|dddd}| |}td}t|ddd |}t||_| }| 	|d  | 	t
|jd	 | 	|jd d | 	|j|jd
  d | 	|j|jd  d | 	t
|j|jd	  d S )Nr   r   r   r\   r   r  whatever  r   child_stdoutchild_stderrr   )r   r   r	   r#   r   r   r   r  r   r5   r   r   rH   r   r   r   r?   r>   rL   sock_configgconfigr   r   r   r   test_prepare_child_fds  s    


z-FastCGISubprocessTests.test_prepare_child_fdsc                 C   s   t  }d|_t|dddd}d|_| |}td}t|dd	d |}t||_|	 }| 
|d  | 
t|jd
 | 
|jd d | 
t|j|jd  d S )Nr   r   r   r\   r   T   r  r  r   r   )r   r   r	   r  r#   r   r   r   r  r   r5   r   r   r   r   r  r   r   r   (test_prepare_child_fds_stderr_redirected  s   


z?FastCGISubprocessTests.test_prepare_child_fds_stderr_redirectedc                 C   sn   t  }t|dddd}| |}td}t|ddd |}t||_| |jd u  |	  | 
|jd u  d S )Nr   r   r\   r   r  r  r  )r   r	   r#   r   r   r   r  rO   	fcgi_sockbefore_spawnrD   )r   r?   r>   rL   r  r  r   r   r   !test_before_spawn_gets_socket_ref  s   


z8FastCGISubprocessTests.test_before_spawn_gets_socket_refc                 C   sB   t  }t|dddd}| |}d|_|  | |jd u  d S )Nr   r   r\   r   hello)r   r	   r#   r  after_finishrO   rK   r   r   r   $test_after_finish_removes_socket_ref
  s   
z;FastCGISubprocessTests.test_after_finish_removes_socket_refr  )return_valuec                 C   s   t  }t|dddd}| |}t |_|tjtj}| 	tj
|d | 	d|jjd tj}| 	d|jd |jd d }|jd d	 }| 	tj|d
 | 	tj|d d S )Nr   r   r\   r   z3FastCGISubprocess.finish() did not pass thru resultz0FastCGISubprocess.after_finish() not called oncez#Subprocess.finish() not called oncer   r   z*Subprocess.finish() pid arg was not passedz*Subprocess.finish() sts arg was not passed)r   r	   r#   r   r  r  r   rA   rI  r5   finish_result
call_countr   	call_args)r   r?   r>   rL   r   finish_mockpid_argsts_argr   r   r   test_finish_override  s.   




z+FastCGISubprocessTests.test_finish_overrider   c                 C   sl   t  }t|dddd}| |}t |_| }| tj|d | d|jj	d t
j}| d|j	d d S )Nr   r   r\   r   z2FastCGISubprocess.spawn() did not pass thru result0FastCGISubprocess.before_spawn() not called oncez"Subprocess.spawn() not called once)r   r	   r#   r   r  r   r5   r   ppidr  r   )r   r?   r>   rL   r   
spawn_mockr   r   r   test_spawn_override_success)  s   


z2FastCGISubprocessTests.test_spawn_override_successNc                 C   sj   t  }t|dddd}| |}t |_d|_| }| d |d | d|jjd | d |jd d S )	Nr   r   r\   r   znuke me on errorz2FastCGISubprocess.spawn() did return None on errorr  z:FastCGISubprocess.spawn() did not remove sock ref on error)	r   r	   r#   r   r  r  r   r5   r  r   r   r   r   test_spawn_error9  s   

z'FastCGISubprocessTests.test_spawn_error)r  r  r  r   r#   r+   r  r  r  r  r  r  r   objectr   r   r   r  r  r  r  r  r   r   r   r   r    s     	

r  c                   @   sT   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S )ProcessGroupBaseTestsc                 C   r   )Nr   )ProcessGroupBase)r   r	  )r   r	  r   r   r   r   I  r   z%ProcessGroupBaseTests._getTargetClassc                 O   r   r   r   )r   ry   r"   r   r   r   r#   M  r$   zProcessGroupBaseTests._makeOnec                 C   sj   t  }ddlm} t|ddd}t||jd}t||gd}| |}d|i|_|	 }| 
||g d S Nr   r-   process1/bin/process1r   pconfigs)r   r1   r.   r	   r
   rY  r   r#   	processesget_unstopped_processesr5   )r   r?   r.   pconfig1r  r  r  	unstoppedr   r   r   test_get_unstopped_processesP     

z2ProcessGroupBaseTests.test_get_unstopped_processesc                 C   s\   t  }ddlm} t|ddd}t||jd}t||gd}| |}d|i|_|	  d S r
  )
r   r1   r.   r	   r
   rY  r   r#   r  before_remover   r?   r.   r  r  r  r  r   r   r   test_before_remove[  s   

z(ProcessGroupBaseTests.test_before_removec                 C   s  ddl m} t }t|ddd}t||jd}t|ddd}t||jd}t|ddd	}t||jd}t|d
d
d}	t|	|jd}
d|
_	d|
_
t|||||	gd}| |}||||
d|_|  | |jd | |jd | |jd | |
jd | |
j|j d S )Nr   r-   r  r  r  process2/bin/process2process3z/bin/process3process4z/bin/process4  r  r  )r  r  r  r  FT)r1   r.   r   r	   r
   rS  r   r  r   rC   rG   r   r#   r  stop_allr5   stop_calledr   r`  )r   r.   r?   r  r  pconfig2r  pconfig3r  pconfig4r  r  r  r   r   r   test_stop_alle  s4   

z#ProcessGroupBaseTests.test_stop_allc           
      C   s   t  }ddlm} t|ddd}t||jd}dd i|_t|ddd}t||jd}d	d i|_t|||gd
}| |}||d|_	|
 }	| |	d d d d S )Nr   r-   r  r  r  r  r  r  r  r  )r  r  )r  r  )r   r1   r.   r	   r
   rY  rI   r   r#   r  get_dispatchersr5   )
r   r?   r.   r  r  r   r  r  r  r   r   r   r   test_get_dispatchers  s   


z*ProcessGroupBaseTests.test_get_dispatchersc                 C   j   t  }ddlm} t|ddd}t||jd}t||gd}| |}d|i|_|	  | 
|jd d S Nr   r-   r  r  r  r  T)r   r1   r.   r	   r
   rY  r   r#   r  r]   r5   r^   r  r   r   r   r_     r  z%ProcessGroupBaseTests.test_reopenlogsc                 C   r&  r'  )r   r1   r.   r	   r
   rY  r   r#   r  ra   r5   logsremovedr  r   r   r   rc     r  z%ProcessGroupBaseTests.test_removelogsc           	      C   s   t  }t|}| |}t|}| |}t|}| |}d|j_d|j_d|j_||g}|  | |||g | || | || d S )Nr  r\   )r   r   r#   r>   r  r  r5   rD  )	r   r?   gconfig1group1gconfig2group2config3group3r   r   r   r   test_ordering_and_comparison  s   


z2ProcessGroupBaseTests.test_ordering_and_comparisonN)r  r  r  r   r#   r  r  r#  r%  r_   rc   r/  r   r   r   r   r  H  s    
r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )ProcessGroupTestsc                 C   r   )Nr   )ProcessGroup)r   r2  )r   r2  r   r   r   r     r   z!ProcessGroupTests._getTargetClassc                 C   sD   t  }t|}| |}t|}| d|v  | |d| d S )Nzsupervisor.process.ProcessGroupnamed whatever>r   r   r#   rN   rO   rP   )r   r?   r  r  rQ   r   r   r   rR     s   
zProcessGroupTests.test_reprc                 C   r&  r'  )r   r1   r.   r	   r
   rY  r   r#   r  r  r5   transitionedr  r   r   r   test_transition  r  z!ProcessGroupTests.test_transitionN)r  r  r  r   rR   r6  r   r   r   r   r1    s    r1  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
FastCGIProcessGroupTestsc                 C   r   )Nr   )FastCGIProcessGroup)r   r8  )r   r8  r   r   r   r     r   z(FastCGIProcessGroupTests._getTargetClassc                 K   s   |   }||fi |S r   r   )r   r>   kwargsclsr   r   r   r#     s   z!FastCGIProcessGroupTests._makeOnec                 C   s6   t  }t|}d |_G dd dt}| j||d d S )Nc                   @   s   e Zd Zdd Zdd ZdS )zVFastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManagerc                 S      d S r   r   r   r>   r   r   r   r   __init__      z_FastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManager.__init__c                 S   r;  r   r   r   r   r   r   
get_socket  r>  zaFastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManager.get_socketN)r  r  r  r=  r@  r   r   r   r   DummySocketManager  s    rA  socketManager)r   r   socket_configr  r#   r   r?   r  rA  r   r   r   !test___init__without_socket_error  s
   z:FastCGIProcessGroupTests.test___init__without_socket_errorc                 C   s<   t  }t|}d |_G dd dt}| jt| j||d d S )Nc                   @   r0  )zSFastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManagerc                 S   r;  r   r   r<  r   r   r   r=    r>  z\FastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.__init__c                 S   s   t d)Nr  )KeyErrorr?  r   r   r   r@    s   z^FastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.get_socketc                 S   s   dS )Nr>   r   r?  r   r   r   r>     s   zZFastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.configN)r  r  r  r=  r@  r>   r   r   r   r   rA    s    rA  rB  )r   r   rD  r  rl   
ValueErrorr#   rE  r   r   r   test___init__with_socket_error  s   
z7FastCGIProcessGroupTests.test___init__with_socket_errorN)r  r  r  r   r#   rF  rI  r   r   r   r   r7    s
    
r7  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'S )(EventListenerPoolTestsc                 C   r%   r&   r(   r*   r   r   r   setUp  r,   zEventListenerPoolTests.setUpc                 C   r%   r&   r(   r*   r   r   r   r+     r,   zEventListenerPoolTests.tearDownc                 C   r   )Nr   )EventListenerPool)r   rL  )r   rL  r   r   r   r     r   z&EventListenerPoolTests._getTargetClassc                 C   s   t  }t|}G dd d}|f|_| |}ddlm} | t|jd | |jd ||j	f | |jd |j
|jf | |jd d S )Nc                   @      e Zd ZdS )z3EventListenerPoolTests.test_ctor.<locals>.EventTypeNr  r  r  r   r   r   r   	EventType      rO  r   r   r   r\   r6  )r   r   pool_eventsr#   r   r   r5   r   	callbacks_acceptEventr  handle_rejectedserialr   r?   r  rO  poolr   r   r   r   rM     s   

z EventListenerPoolTests.test_ctorc                 C   sj   t  }t|}G dd d}|f|_| |}ddlm} | t|jd |	  | t|jd d S )Nc                   @   rM  )zUEventListenerPoolTests.test_before_remove_unsubscribes_from_events.<locals>.EventTypeNrN  r   r   r   r   rO    rP  rO  r   r   r   )
r   r   rQ  r#   r   r   r5   r   rR  r  rV  r   r   r   +test_before_remove_unsubscribes_from_events  s   
zBEventListenerPoolTests.test_before_remove_unsubscribes_from_eventsc           	      C   s   t  }d|_t|}d|_| |}ddlm} ||jj	ddd}|
dd	\}}|
 }| |d d
 | |d	 d | |d d | |d d | |d d | |d d | |d d | |d d S )Nthesupervisornamethepoolnamer   r   P      zpayload

r\   zver:3.0zserver:thesupervisornamer   z	serial:80r   zpool:thepoolnamer  zpoolserial:20r  z&eventname:PROCESS_COMMUNICATION_STDOUTr   zlen:8)r   
identifierr   r   r#   r   r   _eventEnvelope
EventTypesPROCESS_COMMUNICATION_STDOUTr   r5   )	r   r?   r  rW  r   r   headerpayloadheadersr   r   r   test__eventEnvelope   s&   
z*EventListenerPoolTests.test__eventEnvelopec                    s   t  }t|}t|ddd}t|t||gd}| |}di|_d d g|_G dd d G  fddd}| }d|_|| | 	|j|j
d d g d S )	Nr  r  r  c                   @   r  )zLEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent1r  N)r  r  r  rU  r   r   r   r   DummyEvent1=  r	  rf  c                       s   e Zd ZZ  ZdS )zLEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent2N)r  r  r  r  rc  r   rf  r  r   r   DummyEvent2?  s    
rh  r\   )r   r   r	   r
   r#   r  event_bufferrU  rT  r5   rc  )r   r?   r  r  rW  rh  
dummyeventr   rg  r    test_handle_rejected_no_overflow4  s   



z7EventListenerPoolTests.test_handle_rejected_no_overflowc                    s   t  }t|}t|ddd}t|t||gd}d|_| |}di|_G dd d G  fddd} d	} d
} d}|d}	|||g|_||	 dd |jD }
| 	|
g d | 	|j
jjjd d d S )Nr  r  r  r   c                   @      e Zd Zdd ZdS )zWEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyEventc                 S   s
   || _ d S r   rU  r   rU  r   r   r   r=  Q  r   z`EventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyEvent.__init__Nr  r  r  r=  r   r   r   r   r   P      r   c                       s   e Zd Z fddZdS )z_EventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEventc                    s   | _  || _d S r   )r  rc  rn  r   r  r   r   r=  T  s   zhEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEvent.__init__Nro  r   rq  r   r   DummyRejectedEventS  s    rr  r  bcrejectedc                 S   s   g | ]}|j qS r   rm  ).0r   r   r   r   
<listcomp>]  s    zWEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.<listcomp>)ru  rs  rt  r   z9pool whatever event buffer overflowed, discarding event a)r   r   r	   r
   buffer_sizer#   r  ri  rT  r5   r>   r?   r   r   )r   r?   r  r  rW  rr  event_aevent_bevent_c	rej_eventserialsr   rq  r   ,test_handle_rejected_event_buffer_overflowedG  s*   


zCEventListenerPoolTests.test_handle_rejected_event_buffer_overflowedc                 C   s   t  }t|}t|ddd}ddlm} t||gd}| |}|jd }ttj	t
tj	|_|j|_t }|| |  | |j|j | |j|g | |jjd d | |jjd d d S )	Nr  r  r   EventListenerStatesr  zUepipe occurred while sending event abc to listener process1, listener state unchangedr\   z<rebuffering event abc for pool whatever (buf size=0, max=10))r   r   r	   r1   r  r#   r  r   r   r+  r   r   write_exceptionREADYlistener_stater   rS  dispatchr5   ri  r   r   )r   r?   r  r  r  rW  r  rc  r   r   r   test_dispatch_pipe_errorc  s,   



z/EventListenerPoolTests.test_dispatch_pipe_errorc           	      C   s   ddl m} t }t|}t|ddd}t||gd}| |}|jd }ddlm} |j	|_
td }|| | |j|j | |jd |j d S )Nr   )GlobalSerialr  r  r  r  r  )r   r  r   r   r	   r#   r  r1   r  r  r  r   rS  r5   rU  pool_serials)	r   r  r?   r  r  rW  r  r  rc  r   r   r   1test__acceptEvent_attaches_pool_serial_and_serialy  s   


zHEventListenerPoolTests.test__acceptEvent_attaches_pool_serial_and_serialc                 C   sB   t  }t|}| |}t|}| d|v  | |d d S )Nz$supervisor.process.EventListenerPoolr3  r4  )r   r?   r  rW  rQ   r   r   r   rR     s   
z EventListenerPoolTests.test_reprc           	      C   s   t  }ddlm} t|ddd}t||jd}t||gd}| |}d|i|_t	 }d|_
ddlm} |j|_|| |  | |jd	 | |j|g d S )
Nr   r-   r  r  r  r  r  r  T)r   r1   r.   r	   r
   r  r   r#   r  r   rU  r  BUSYr  rS  r  r5   r5  ri  	r   r?   r.   r  r  r  rW  rc  r  r   r   r   test_transition_nobody_ready  s   


z3EventListenerPoolTests.test_transition_nobody_readyc           	      C   s   t  }ddlm} t|ddd}t||jd}t||gd}| |}d|i|_t	 }ddlm
} d|_|j|_|| |  | |jd	 | |j|g | |jd
 | |j|j d S )Nr   r-   r  r  r  r  r  r\   T    )r   r1   r.   r	   r
   r  r   r#   r  r   r  rU  r  r  rS  r  r5   r5  ri  stdin_bufferr  r   r   r   &test_transition_event_proc_not_running  s"   


z=EventListenerPoolTests.test_transition_event_proc_not_runningc                    s   t  }ddlm} t|ddd}t||jd}t||gd |  }d|i|_t	 }ddlm
} |j|_G  fdd	d	}||_|| |  | |jd
 | |jg  |jdd\}	}
| |
d|
 | |j|j | |j| d S )Nr   r-   r  r  r  r  r  c                          e Zd Z ZdS )zMEventListenerPoolTests.test_transition_event_proc_running.<locals>.DummyGroupNr  r  r  r>   r   r  r   r   
DummyGroup  r	  r  T   
r\      dummy event)r   r1   r.   r	   r
   r   r   r#   r  r   r  r  r  r  rS  r  r5   r5  ri  r  r   r  rc  r   r?   r.   r  r  rW  rc  r  r  rb  rc  r   r  r   "test_transition_event_proc_running  s(   


z9EventListenerPoolTests.test_transition_event_proc_runningc           	         s   t  }ddlm} t|ddd}t||jd}t||gd |  }d|_t		 |_
d|i|_t }ddlm} |j|_G  fd	d
d
}||_|| |  | |jd | |j|g d S )Nr   r-   r  r  r  r  r  r  c                       r  )zkEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_notyet.<locals>.DummyGroupNr  r   r  r   r   r    r	  r  T)r   r1   r.   r	   r
   r   r   r#   dispatch_throttler=  last_dispatchr  r   r  r  r  r  rS  r  r5   r5  ri  )	r   r?   r.   r  r  rW  rc  r  r  r   r  r   @test_transition_event_proc_running_with_dispatch_throttle_notyet  s$   



zWEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_notyetc                    s  t  }ddlm} t|ddd}t||jd}t||gd |  }d|_t		 d |_
d|i|_t }dd	lm} |j|_G  fd
dd}||_|| |  | |jd | |jg  |jdd\}	}
| |
d|
 | |j|j | |j| d S )Nr   r-   r  r  r  r  r  r  r  c                       r  )zjEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_ready.<locals>.DummyGroupNr  r   r  r   r   r    r	  r  Tr  r\   r  )r   r1   r.   r	   r
   r   r   r#   r  r=  r  r  r   r  r  r  r  rS  r  r5   r5  ri  r  r   r  rc  r  r   r  r   ?test_transition_event_proc_running_with_dispatch_throttle_ready  s,   


zVEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_readyc           
         s   t   d }t }ddlm} t|ddd}t||jd}t||gd |  }d|_	||_
d|i|_t }dd	lm} |j|_G  fd
dd}	|	|_|| |  | |jd | |j|g | |j
|k  d S )Nr[  r   r-   r  r  r  r  r  r  c                       r  )z|EventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_future.<locals>.DummyGroupNr  r   r  r   r   r  	  r	  r  T)r=  r   r1   r.   r	   r
   r   r   r#   r  r  r  r   r  r  r  r  rS  r  r5   r5  ri  rO   )
r   r\  r?   r.   r  r  rW  rc  r  r  r   r  r   Qtest_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_future  s(   


zhEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_futurec                 C   sv   t  }ddlm} t|ddd}t||jd}t||gd}| |}d|i|_t	 }|
| | ||d d S )Nr   r-   r  r  r  r  F)r   r1   r.   r	   r
   rS  r   r#   r  r   rS  r5   _dispatchEvent)r   r?   r.   r  r  r  rW  rc  r   r   r   test__dispatchEvent_notready	  s   


z3EventListenerPoolTests.test__dispatchEvent_notreadyc           
         s   t  }ddlm} t|ddd}t||jd}dd }||_t||gd |  }d|i|_	t
 }dd	lm} |j|_G  fd
dd}	|	|_|| | t|j| d S )Nr   r-   r  r  r  c                 S   r   r   )r   r   r   r   r   r   r   raise_epipe$	  r   zcEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSError.<locals>.raise_epiper  r  c                       r  )zbEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSError.<locals>.DummyGroupNr  r   r  r   r   r  -	  r	  r  )r   r1   r.   r	   r
   r   r   r   r#   r  r   r  r  r  r  rS  rl   r   r  )
r   r?   r.   r  r  r  rW  rc  r  r  r   r  r   7test__dispatchEvent_proc_write_raises_non_EPIPE_OSError	  s    


zNEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSErrorN)r  r  r  rK  r+   r   rM   rX  re  rk  r~  r  r  rR   r  r  r  r  r  r  r  r  r   r   r   r   rJ    s(    rJ  c                   @   r0  )test_new_serialc                 C   s   ddl m} ||S )Nr   )
new_serial)r   r  )r   instr  r   r   r   _callFUT4	  s   ztest_new_serial._callFUTc                    sN   ddl m  G  fdddt}| }| |}| |jd | |d d S )Nr   r   c                       s   e Zd Z fddZdS )z8test_new_serial.test_inst_serial_is_maxint.<locals>.Instc                    s
    | _ d S r   rm  r?  r   r   r   r=  ;	  r   zAtest_new_serial.test_inst_serial_is_maxint.<locals>.Inst.__init__Nro  r   r   r   r   Inst:	  s    r  )supervisor.compatr   r  r  r5   rU  r   r  r  r   r   r   r   test_inst_serial_is_maxint8	  s   
z*test_new_serial.test_inst_serial_is_maxintc                 C   s>   G dd dt }| }| |}| |jd | |d d S )Nc                   @   rl  )z<test_new_serial.test_inst_serial_is_not_maxint.<locals>.Instc                 S   s
   d| _ d S )Nr\   rm  r?  r   r   r   r=  D	  r   zEtest_new_serial.test_inst_serial_is_not_maxint.<locals>.Inst.__init__Nro  r   r   r   r   r  C	  rp  r  r   )r  r  r5   rU  r  r   r   r   test_inst_serial_is_not_maxintB	  s
   
z.test_new_serial.test_inst_serial_is_not_maxintN)r  r  r  r  r  r  r   r   r   r   r  3	  s    
r  )#r   r   r8  r   r=  unittestr  r   r   r7  r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   supervisor.optionsr   TestCaser   r  r  r1  r7  rJ  r  r   r   r   r   <module>   sX                 5 v"  =