o
    þâf ã                   @   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‚„ ZCdƒd„„ ZDd…d†„ ZEd‡dˆ„ ZFd‰dŠ„ ZGd‹dŒ„ ZHddŽ„ ZIdd„ ZJd‘d’„ ZKd“d”„ ZLd•d–„ ZMd—d˜„ ZNd™dš„ ZOd›dœ„ ZPddž„ ZQdŸd „ ZRd¡d¢„ ZSd£d¤„ ZTd¥d¦„ ZUd§d¨„ ZVd©dª„ ZWd«d¬„ ZXd­d®„ ZYd¯d°„ ZZd±d²„ Z[d³d´„ Z\dµS )¶ÚSubprocessTestsc                 C   ó   ddl m} |S )Nr   r   )Úsupervisor.processr   )Úselfr   © r   úP/var/www/html/venv/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 ]\}}t|tƒr"|  ||ƒ|¡ qd S )Nr   ©ÚProcessStates)ÚgetProcessStateDescription)	Úsupervisor.statesr.   r   r/   Ú__dict__ÚitemsÚ
isinstanceÚintÚ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Ú
assertTrueÚ
startswithÚ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   rT   rU   )r   r	   r#   r   rI   Ú
removelogsr5   Úlogs_removedrK   r   r   r   Útest_removelogsS   ra   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 )NrV   rW   ú/tmp/fooz/tmp/barr;   TrX   rZ   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   rj   )NÚemptyÚ rl   rK   r   r   r   Ú%test_get_execv_args_bad_command_emptyo   rp   z5SubprocessTests.test_get_execv_args_bad_command_emptyc                 C   rj   )NÚwhitespaceonlyz 	 rl   rK   r   r   r   Ú.test_get_execv_args_bad_command_whitespaceonlyu   rp   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#   rn   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 )Nrv   z/notthere "an argument"rw   úan argumentrx   ry   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 )Nrv   rx   ry   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 )Nrv   znotthere "an argument"r}   rx   ry   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#   rn   r5   Úlen©r   Ú
executabler?   r>   rL   rz   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#   rn   r5   )r   ÚfÚbasenamer‰   r?   r>   rL   rz   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 )NrV   rW   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   r0   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#   r0   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#   r0   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#   r0   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#   r0   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#   r0   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#   r0   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   rP   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?   Ú
pidhistoryr0   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#   rm   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#   rm   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   rz   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#   rm   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} zÐg ‰ ‡ 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§   )rz   ©Úsigchldsr   r   Ú
sighandler“  s   z=SubprocessTests._dont_test_spawn_and_kill.<locals>.sighandlerÚspewzspawned: 'spew' with pidrÒ   r]   Úpsgš™™™™™¹?éÿÿÿÿ)#Úsupervisor.tests.baser1  ÚsignalÚSIGCHLDr   r	   r#   r    r›   rœ   rO   rP   r5   r‡   rH   rA   r’   ÚpopenÚreadrÉ   rz   r¼   ÚEINTRÚtimeÚsleepÚfindr   rN   ÚkillÚSIGTERMÚwaitpidÚWNOHANGÚassertNotEqualÚremoveÚSIG_DFL)r   r1  r4  r‰   r?   r>   rL   r¡   rÄ   Úorigpidrœ   ÚwhyrA   Ústsr   r2  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 )
NrV   rW   é   TrZ   r…   r   r-   ú)killing test (pid 11) with signal SIGTERM)r   r	   r#   rA   r   rI   r0   r.   rž   rŸ   r>  ÚlaststopreportÚstoprO   rE   r5   rC   r›   rœ   rF   Úkillsr9  rB  ©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 )NrV   rW   rL  TrZ   r…   r   r-   r*  zCAssertion failed for test: STOPPED not in RUNNING STARTING STOPPING)r   r	   r#   rA   r   rI   r0   r.   ÚSTOPPEDrŸ   rO  r+  ÚAssertionErrorr5   rz   )r   r?   r>   rL   rR  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 )	NrV   rW   rL  TrZ   r…   r   r-   )r   r	   r#   rA   r   rI   r0   r.   rT  rŸ   Ústop_reportr5   r‡   r›   rœ   rQ  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 )NrV   rW   rL  TrZ   r…   r   r-   r]   úwaiting for test to stop)r   r	   r#   rA   r   rI   r0   r.   ÚSTOPPINGrŸ   r5   rN  rW  r‡   r›   rœ   rE  rQ  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é  rV   rW   rL  TrZ   r…   r   r-   rƒ   r]   rY  )r>  r   r	   r#   rA   r   rI   r0   r.   rZ  rŸ   rN  rW  r5   r‡   r›   rœ   rO   r?  rE  )r   Úfuture_timer?   r>   rL   rR  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 )	NrV   rW   r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r   "  r­   z.SubprocessTests.test_give_up.<locals>.<lambda>r]   )r   r	   r#   r0   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 )NrV   rW   r   z=attempted to kill test with sig SIGTERM but it wasn't running)r   r	   r#   rA  r9  rB  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 )NrV   rW   rL  r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r   >  r­   z9SubprocessTests.test_kill_from_starting.<locals>.<lambda>rM  r]   )r   r	   r#   rA   r0   r.   r¯   r¥   r°   r±   r  rŸ   rA  r9  rB  r5   r›   rœ   rO   rF   rP  r‡   r²   ÚProcessStateStoppingEventrc  r   r«   r   Útest_kill_from_starting6  ó    
z'SubprocessTests.test_kill_from_startingc                    rg  )NrV   rW   rL  r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r   Q  r­   z8SubprocessTests.test_kill_from_running.<locals>.<lambda>rM  r]   )r   r	   r#   rA   r0   r.   r¯   r¥   r°   r±   rž   rŸ   rA  r9  rB  r5   r›   rœ   rO   rF   rP  r‡   r²   rh  rc  r   r«   r   Útest_kill_from_runningI  rj  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 )NrV   rW   r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r   e  r­   z>SubprocessTests.test_kill_from_running_error.<locals>.<lambda>rL  rM  r]   zunknown problem killing testÚ	Tracebackrƒ   )!r   r	   r»   r¼   rÂ   r’   r¾   Úkill_exceptionr#   r0   r.   r¯   r¥   r°   r±   rA   rž   rŸ   rA  r9  rB  r5   r›   rœ   rO   rP   rD   rF   ÚUNKNOWNr‡   r²   rh  Ú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 )NrV   rW   r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r   €  r­   zDSubprocessTests.test_kill_from_running_error_ESRCH.<locals>.<lambda>rL  rM  r]   zFunable to signal test (pid 11), it probably just exited on its own: %s)r   r	   r»   r¼   ÚESRCHr’   r¾   rm  r#   r0   r.   r¯   r¥   r°   r±   rA   rž   rŸ   rA  r9  rB  r5   r›   rœ   ÚstrrO   rF   rZ  r‡   r²   rh  )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 )
NrV   rW   rL  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   r0   r.   r¯   r¥   r°   r±   rZ  rŸ   rA  r9  ÚSIGKILLr5   r›   rœ   rO   rF   rP  ©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 )	NrV   rW   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#   r0   r.   r¯   r¥   r°   r±   r®   rŸ   rA  r9  ru  r5   r›   rœ   rD   rF   r²   ÚProcessStateStoppedEventrc  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 )NrV   rW   T)ÚkillasgrouprL  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 SIGKILLéõÿÿÿrt  rv  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 )NrV   rW   T)ÚstopasgrouprL  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 SIGTERMr{  r]   )rA   rL  )r   r	   r#   rA   r0   r.   r¯   r¥   r°   r±   rž   rŸ   rA  r9  rB  r5   r›   rœ   rO   rF   rP  r‡   r²   rh  Úextra_valuesÚ
from_staterc  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 )NrV   rW   r   r-   z9attempted to send test sig SIGWINCH but it wasn't running)r   r	   r#   r0   r.   rT  rŸ   r9  ÚSIGWINCHr5   r›   rœ   r‡   rP  ©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 )NrV   rW   rL  r   r-   ú"sending test (pid 11) sig SIGWINCHr]   )r   r	   r#   rA   r0   r.   rž   rŸ   r9  r  r5   r›   rœ   r‡   rP  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 )NrV   rW   r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r   ø  r­   zFSubprocessTests.test_signal_from_running_error_ESRCH.<locals>.<lambda>rL  r„  r]   zJunable to signal test (pid 11), it probably just now exited on its own: %s)r   r	   r»   r¼   rq  r’   r¾   rm  r#   r0   r.   r¯   r¥   r°   r±   rA   rž   rŸ   r9  r  r5   r›   rœ   rr  rD   rF   r‡   rv  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 )NrV   rW   r   r-   r¤   c                    r¦   r   r§   r©   r«   r   r   r     r­   z@SubprocessTests.test_signal_from_running_error.<locals>.<lambda>rL  r„  r]   z%unknown problem sending sig test (11)rl  )r   r	   r»   r¼   rÂ   r’   r¾   rm  r#   r0   r.   r¯   r¥   r°   r±   rA   rž   rŸ   r9  r  r5   r›   rœ   rO   rP   rD   rF   rn  r‡   r²   ro  rc  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 )Nrv   rw   re   ©r<   )é{   r]   r‰  Trr   ©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)r7  ©rA   r‰  )r   r	   r#   Ú
waitstatusr>   r?   r  rF   rH   r0   r.   r¯   r¥   rZ  rŸ   r°   r±   rA   ÚfinishrD   r5   rÕ   rI   r›   rœ   Ú
exitstatusr‡   r²   rx  r~  r  ©r   r?   r>   rL   rH   r.   r¥   rd  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 )Nrv   rw   re   rˆ  r‰  rr   rŠ  r7  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   Ú	exitcodesr0   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 )Nrv   rw   re   rˆ  r‰  rr   rŠ  r7  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@   r0   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 )Nrv   rw   re   r  ©r<   Ú	startsecsr‰  rr   rŠ  r7  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@   r0   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 )Nrv   rw   re   r  rš  r‰  rr   rŠ  r7  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@   r0   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 )Nrv   rw   re   rˆ  r‰  rr   rŠ  r7  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­   rv   rw   re   r  rš  r-   r‰  r]   rƒ   )r¯   r¥   r°   r±   ÚEventRejectedEventr   r	   r#   r0   r.   rž   rŸ   r   rd  r  r5   r‡   r²   r•  Úprocess)	r   r¥   r?   r>   rL   r.   rd  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 )NrV   rW   ©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 )NrV   rW   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 )
Nrv   rw   re   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¨   r0   r.   r¯  r   ÚSHUTDOWNÚmoodr	   r#   r@   rT  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±   r0   r.   r¯  r   rž   r²  r	   r#   r@   rT  rŸ   r³  r5   r  r‡   r²   r³   r  ©
r   r¥   r½  r.   r¯  r?   rµ  r¡  rd  Ú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¨   r0   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±   r0   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¡  rd  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±   r0   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¡  rd  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¨   r0   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±   r0   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±   r0   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±   r0   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±   r0   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¡  rd  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±   r0   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¡  rd  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±   r0   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¡  rd  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±   r0   r.   r   r	   r#   r@   rG   rC   r`  rÖ  r×  r®   rŸ   r³  r5   rO   r›   rœ   r‡   r²   rb  r  ra  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¨   r0   r.   r   r	   r#   r   rC   rZ  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¨   r0   r.   r   r	   r#   rC   rA   rF   rZ  rŸ   r³  rO   rE  r5   r›   rœ   rP  r9  ru  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 )NrV   rW   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-   rV   rW   r  r]   )r0   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   rS   r`   rd   ri   ro   rs   ru   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.  r0  rK  rS  rV  rX  r[  r^  re  rf  ri  rk  rp  rs  rw  ry  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#   rm   Ú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  rm   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   rJ  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 resultú0FastCGISubprocess.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   rz   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   r0   r.   r	   r
   rZ  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   r0   r.   r	   r
   rZ  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)r0   r.   r   r	   r
   rT  rž   r  r®   rC   rG   r   r#   r  Ústop_allr5   Ústop_calledrŸ   ra  )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   r0   r.   r	   r
   rZ  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   r0   r.   r	   r
   rZ  r   r#   r  r^   r5   r_   r  r   r   r   r`   ’  r  z%ProcessGroupBaseTests.test_reopenlogsc                 C   r'  r(  )r   r0   r.   r	   r
   rZ  r   r#   r  rb   r5   Úlogsremovedr  r   r   r   rd     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   rE  )	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`   rd   r0  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   r3  )r   r3  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   rQ   )r   r?   rñ  r  rR   r   r   r   rS   Ã  s   
zProcessGroupTests.test_reprc                 C   r'  r(  )r   r0   r.   r	   r
   rZ  r   r#   r  r³  r5   Útransitionedr  r   r   r   Útest_transitionË  r  z!ProcessGroupTests.test_transitionN)r  r  r  r   rS   r7  r   r   r   r   r2  ¾  s    r2  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   r9  )r   r9  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>  rA  r   r   r   r   ÚDummySocketManagerã  s    rB  ©ÚsocketManager)r   r   Úsocket_configr  r#   ©r   r?   rñ  rB  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                   @   r1  )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   rA  ï  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>  rA  r>   r   r   r   r   rB  í  s    rB  rC  )r   r   rE  r  rm   Ú
ValueErrorr#   rF  r   r   r   Útest___init__with_socket_erroré  s   
þz7FastCGIProcessGroupTests.test___init__with_socket_errorN)r  r  r  r   r#   rG  rJ  r   r   r   r   r8  Ö  s
    
r8  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   rM  )r   rM  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  ó    rP  r   r¤   rƒ   r]   r7  )r   r   Úpool_eventsr#   r¯   r¥   r5   r‡   Ú	callbacksÚ_acceptEventr   Úhandle_rejectedÚserial©r   r?   rñ  rP  Ú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                   @   rN  )zUEventListenerPoolTests.test_before_remove_unsubscribes_from_events.<locals>.EventTypeNrO  r   r   r   r   rP    rQ  rP  r   r¤   rƒ   )
r   r   rR  r#   r¯   r¥   r5   r‡   rS  r  rW  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ñ  rX  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  rV  r   r   r   r   ÚDummyEvent1=  r
  rg  c                       s   e Zd Z”Z” ƒ ZdS )zLEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent2N)r  r  r  r¡  rd  r   ©rg  r  r   r   ÚDummyEvent2?  s    
ri  r]   )r   r   r	   r
   r#   r  Úevent_bufferrV  rU  r5   rd  )r   r?   rñ  r  rX  ri  Ú
dummyeventr   rh  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   ©rV  ©r   rV  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¡  rd  ro  ©r   r  r   r   r>  T  s   zhEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEvent.__init__Nrp  r   rr  r   r   ÚDummyRejectedEventS  s    rs  r  ÚbÚcÚrejectedc                 S   s   g | ]}|j ‘qS r   rn  )Ú.0rª   r   r   r   Ú
<listcomp>]  s    zWEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.<listcomp>)rv  rt  ru  r   z9pool whatever event buffer overflowed, discarding event a)r   r   r	   r
   Úbuffer_sizer#   r  rj  rU  r5   r>   r?   r›   rœ   )r   r?   rñ  r  rX  rs  Úevent_aÚevent_bÚevent_cÚ	rej_eventÚserialsr   rr  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	   r0   r  r#   r  r»   r¼   r,  r’   r¾   Úwrite_exceptionÚREADYÚlistener_stater   rT  Údispatchr5   rj  r›   rœ   )r   r?   rñ  r  r  rX  r  rd  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  r0   r  rƒ  r„  r   rT  r5   rV  Úpool_serials)	r   r‡  r?   rñ  r  rX  r  r  rd  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.EventListenerPoolr4  r5  )r   r?   rñ  rX  rR   r   r   r   rS   ˆ  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   r0   r.   r	   r
   r  r   r#   r  r   rV  r  ÚBUSYr„  rT  r³  r5   r6  rj  ©	r   r?   r.   r  r  rñ  rX  rd  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   r0   r.   r	   r
   r  r   r#   r  r   r  rV  rƒ  r„  rT  r³  r5   r6  rj  Ú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   r0   r.   r	   r
   rž   r   r#   r  r   r  rƒ  r„  r  rT  r³  r5   r6  rj  rŽ  r”   rŠ  rd  ©r   r?   r.   r  r  rX  rd  r  r“  rc  rd  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   r0   r.   r	   r
   rž   r   r#   Údispatch_throttler>  Úlast_dispatchr  r   r  rƒ  r„  r  rT  r³  r5   r6  rj  )	r   r?   r.   r  r  rX  rd  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   r0   r.   r	   r
   rž   r   r#   r˜  r>  r™  r  r   r  rƒ  r„  r  rT  r³  r5   r6  rj  rŽ  r”   rŠ  rd  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   r0   r.   r	   r
   rž   r   r#   r˜  r™  r  r   r  rƒ  r„  r  rT  r³  r5   r6  rj  rO   )
r   r]  r?   r.   r  r  rX  rd  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   r0   r.   r	   r
   rT  r   r#   r  r   rT  r5   Ú_dispatchEvent)r   r?   r.   r  r  rñ  rX  rd  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   r0   r.   r	   r
   rž   r!  r   r#   r  r   r  rƒ  r„  r  rT  rm   r»   r  )
r   r?   r.   r  r  rŸ  rX  rd  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  rL  r+   r   rM   rY  rf  rl  r  r†  r‰  rS   rŒ  r  r—  rš  r›  rœ  rž  r   r   r   r   r   rK  ø  s(    rK  c                   @   r1  )Ú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   rn  r@  r   r   r   r>  ;	  rÎ   zAtest_new_serial.test_inst_serial_is_maxint.<locals>.Inst.__init__Nrp  r   r   r   r   ÚInst:	  s    r¥  )Úsupervisor.compatr   r  r¤  r5   rV  ©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                   @   rm  )z<test_new_serial.test_inst_serial_is_not_maxint.<locals>.Instc                 S   s
   d| _ d S )Nr]   rn  r@  r   r   r   r>  D	  rÎ   zEtest_new_serial.test_inst_serial_is_not_maxint.<locals>.Inst.__init__Nrp  r   r   r   r   r¥  C	  rq  r¥  rƒ   )r  r¤  r5   rV  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’   r9  r   r>  Úunittestr¦  r   r   r8  r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Úsupervisor.optionsr   ÚTestCaser   rå  r	  r2  r8  rK  r¡  r   r   r   r   Ú<module>   sX                 5 v"  =