
    Ac                       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ej6                        Z G d dej6                        Z G d dej6                        Z G d de      Z G d dej6                        Z  G d de      Z! G d dej6                        Z"y)    N)as_bytesmaxint)Mockpatchsentinel)DummyOptions)DummyPConfig)DummyProcess)DummyPGroupConfig)DummyDispatcher)
DummyEvent)DummyFCGIGroupConfig)DummySocketConfig)DummyProcessGroup)DummyFCGIProcessGroup
Subprocess)
BadCommandc                   (   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTdS ZUdT ZVdU ZWdV ZXdW ZYdX ZZdY Z[dZ Z\y[)\SubprocessTestsc                     ddl m} |S )Nr   r   )supervisor.processr   )selfr   s     ?/usr/lib/python3/dist-packages/supervisor/tests/test_process.py_getTargetClasszSubprocessTests._getTargetClass   s    1    c                 .     | j                         |i |S Nr   r   argkws      r   _makeOnezSubprocessTests._makeOne       %t##%s1b11r   c                     ddl m}  |        y Nr   )clearsupervisor.eventsr(   r   r(   s     r   tearDownzSubprocessTests.tearDown"   
    +r   c                     ddl m} ddlm} |j                  j                         D ].  \  }}t        |t              s| j                   ||      |       0 y )Nr   ProcessStates)getProcessStateDescription)	supervisor.statesr0   r   r1   __dict__items
isinstanceintassertEqual)r   r0   r1   	statenamecodes        r   test_getProcessStateDescriptionz/SubprocessTests.test_getProcessStateDescription&   sL    3A,55;;= 	NOIt$$  !;D!A9M	Nr   c                 B   t               }t        |dddd      }| j                  |      }| j                  |j                  |       | j                  |j                  j
                  |       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                         | j                  |j                         | j                  |j                  d       | j                  |j                  i        | j                  |j                  i        | j                  |j                   d        y )Ncatbin/catz/tmp/temp123.logz/tmp/temp456.logstdout_logfilestderr_logfiler   )r	   r
   r$   r7   configoptions	laststartpidlaststopdelayassertFalseadministrative_stopkillingbackoffpipesdispatchersspawnerrr   rB   rA   instances       r   	test_ctorzSubprocessTests.test_ctor-   sF   .gui-?-?A ==(&100':++Q/q)++Q/**A.+556))*))1-,--r2**D1r   c                     t               }t        |dd      }| j                  |      }t        |      }| j	                  |j                  d             | j	                  |j                  d             y )Nr<   r=   z<Subprocess atzwith name cat in state STOPPED>)r	   r
   r$   repr
assertTrue
startswithendswith)r   rB   rA   rO   ss        r   	test_reprzSubprocessTests.test_reprA   sZ    .gui8==(N%567

#DEFr   c                 T   t               }t        |dd      }| j                  |      }t        d      t        d      d|_        |j                          | j                  |j                  d   j                  d       | j                  |j                  d   j                  d	       y 
Ntest/testTreadablewritabler      r   ra   F)r	   r
   r$   r   rL   
reopenlogsr7   logs_reopenedrN   s       r   test_reopenlogszSubprocessTests.test_reopenlogsI   s    .gvw7==("14"@"14"@ B--a0>>E--a0>>Fr   c                 T   t               }t        |dd      }| j                  |      }t        d      t        d      d|_        |j                          | j                  |j                  d   j                  d       | j                  |j                  d   j                  d	       y rY   )r	   r
   r$   r   rL   
removelogsr7   logs_removedrN   s       r   test_removelogszSubprocessTests.test_removelogsS   s    .gvw7==("14"@"14"@ B--a0==tD--a0==uEr   c                 V   t               }t        |dddd      }| j                  |      }t        d      t        d      d	|_        |j                          | j                  |j                  d
   j                         | j                  |j                  d   j                         y )NrZ   r[   /tmp/fooz/tmp/barr>   Tr\   r^   r`   r   ra   )	r	   r
   r$   r   rL   drainrS   read_event_handledwrite_event_handledrN   s       r   
test_drainzSubprocessTests.test_drain]   s    .gvw-7-79 ==("14"@"14"@ B,,Q/BBC,,Q/CCDr   c                     t               }t        |dd      }| j                  |      }| j                  t        |j
                         y )N
extraquotezextraquote"r	   r
   r$   assertRaisesr   get_execv_argsrN   s       r   *test_get_execv_args_bad_command_extraquotez:SubprocessTests.test_get_execv_args_bad_command_extraquotei   s;    .g|]C==(*h&=&=>r   c                     t               }t        |dd      }| j                  |      }| j                  t        |j
                         y )Nempty rq   rN   s       r   %test_get_execv_args_bad_command_emptyz5SubprocessTests.test_get_execv_args_bad_command_emptyo   s;    .gw3==(*h&=&=>r   c                     t               }t        |dd      }| j                  |      }| j                  t        |j
                         y )Nwhitespaceonlyz 	 rq   rN   s       r   .test_get_execv_args_bad_command_whitespaceonlyz>SubprocessTests.test_get_execv_args_bad_command_whitespaceonlyu   s<    .g'7@==(*h&=&=>r   c                     t               }t        |dd      }| j                  |      }|j                         }| j	                  |ddgf       y )Nnotthere	/nottherer	   r
   r$   rs   r7   r   rB   rA   rO   argss        r   test_get_execv_args_abs_missingz/SubprocessTests.test_get_execv_args_abs_missing{   sJ    .gz;?==(&&(k];<r   c                     t               }t        |dd      }| j                  |      }|j                         }| j	                  |dddgf       y )Nr}   z/notthere "an argument"r~   an argumentr   r   s        r   *test_get_execv_args_abs_withquotes_missingz:SubprocessTests.test_get_execv_args_abs_withquotes_missing   sN    .gz3LM==(&&(k=-IJKr   c                     t               }t        |dd      }| j                  |      }|j                         }| j	                  |ddgf       y )Nr}   r   r   s        r   test_get_execv_args_rel_missingz/SubprocessTests.test_get_execv_args_rel_missing   sJ    .gz:>==(&&(
ZL9:r   c                     t               }t        |dd      }| j                  |      }|j                         }| j	                  |dddgf       y )Nr}   znotthere "an argument"r   r   r   s        r   *test_get_execv_args_rel_withquotes_missingz:SubprocessTests.test_get_execv_args_rel_withquotes_missing   sN    .gz3KL==(&&(
Z,GHIr   c                    d}t               }t        |d|      }| j                  |      }|j                         }| j	                  t        |      d       | j	                  |d   d       | j	                  |d   ddg       y )Nz/bin/sh foosh   r   /bin/shra   foor	   r
   r$   rs   r7   lenr   
executablerB   rA   rO   r   s         r   test_get_execv_args_absz'SubprocessTests.test_get_execv_args_abs   sy    "
.gtZ8==(&&(TA&a),a9e"45r   c                    d}t               }t        |d|      }| j                  |      }|j                         }| j	                  t        |      d       | j	                  |d   d       | j	                  |d   ddg       y )Nzsh foor   r   r   r   ra   r   r   r   s         r   test_get_execv_args_relz'SubprocessTests.test_get_execv_args_rel   sx    
.gtZ8==(&&(TA&a),a4-0r   c                    t        j                         5 }t        j                  j	                  |j
                        \  }d|z  }t               }t        |d|      }fd|_        | j                  |      }|j                         }| j                  |d   |j
                         | j                  |d   |dg       d d d        y # 1 sw Y   y xY w)Nz%s foor   c                  
     gS r    )dirnames   r   <lambda>zUSubprocessTests.test_get_execv_args_rel_searches_using_pconfig_path.<locals>.<lambda>   s	    k r   r   ra   r   )tempfileNamedTemporaryFileospathsplitnamer	   r
   get_pathr$   rs   r7   )	r   fbasenamer   rB   rA   rO   r   r   s	           @r   3test_get_execv_args_rel_searches_using_pconfig_pathzCSubprocessTests.test_get_execv_args_rel_searches_using_pconfig_path   s    ((* 		9a "aff 5GX!H,J"nG!'4<F1FO}}V,H**,DT!Waff-T!Wx&78		9 		9 		9s   B*C		Cc                     t               }t        |dd      }| j                  |      }|j                  d       | j	                  |j
                  d       | j	                  |j                  j                  d   d       y )NrZ   r[   r   r   zspawnerr: foo)r	   r
   r$   record_spawnerrr7   rM   loggerdatarN   s       r   test_record_spawnerrz$SubprocessTests.test_record_spawnerr   sh    .gvw7==(  '**E2,,Q/Ar   c                 r   t               }t        |dd      }| j                  |      }d|_        ddlm} |j                  |_        |j                         }| j                  |d        | j                  |j                  j                  d   d       | j                  |j                  |j                         y )Nr   r   Tr   r/   zprocess 'sh' already running)r	   r
   r$   rD   r2   r0   RUNNINGstatespawnr7   r   r   )r   rB   rA   rO   r0   results         r   test_spawn_already_runningz*SubprocessTests.test_spawn_already_running   s    .gtY7==(3&..!&,,Q/1OP)>)>?r   c                 F  	 t               }t        |dd      }| j                  |      }ddlm} |j
                  |_        ddlm} g 	|j                  |j                  	fd       |j                         }| j                  |d        | j                  |j                  d       | j                  |j                  j                  d   d       | j!                  |j"                         | j!                  |j$                         ddlm} | j                  |j                  |j
                         | j                  t'        	      d	       	d   }	d
   }| j                  |j(                  |j*                         | j                  |j(                  |j,                         y )Nbadz/bad/filenamer   r/   eventsc                 &    j                  |       S r   appendxLs    r   r   zBSubprocessTests.test_spawn_fail_check_execv_args.<locals>.<lambda>       QXXa[ r   zbad filenamezspawnerr: bad filenamer   ra   )r	   r
   r$   r2   r0   BACKOFFr   
supervisorr   	subscribeProcessStateEventr   r7   rM   r   r   rS   rF   rJ   r   	__class__ProcessStateStartingEventProcessStateBackoffEvent
r   rB   rA   rO   r0   r   r   event1event2r   s
            @r    test_spawn_fail_check_execv_argsz0SubprocessTests.test_spawn_fail_check_execv_args   sD   .guo>==(3&..%113HI!&**N;,,Q/1IJ'(()3)>)>?Q#11))6+K+KL))6+J+JKr   c                   	 t               }t        t        j                  t	        j
                  t        j                              |_        t        |dd      }| j                  |      }ddl	m
} |j                  |_        ddlm} g 	|j                  |j                   	fd       |j#                         }| j%                  |d        | j%                  |j&                  d       | j%                  |j(                  j*                  d   d       | j-                  |j.                         | j-                  |j0                         ddl	m
} | j%                  |j                  |j                         | j%                  t3        	      d	       	\  }}| j%                  |j4                  |j6                         | j%                  |j4                  |j8                         y )
Ngood/good/filenamer   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zCSubprocessTests.test_spawn_fail_make_pipes_emfile.<locals>.<lambda>   r   r   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$   r2   r0   r   r   r   r   r   r   r   r7   rM   r   r   rS   rF   rJ   r   r   r   r   r   s
            @r   !test_spawn_fail_make_pipes_emfilez1SubprocessTests.test_spawn_fail_make_pipes_emfile   sg   .'.u||/1{{5<</H(J$gv/?@==(3&..%113HI!&**>	@,,Q/H	J'(()3)>)>?Q#))6+K+KL))6+J+JKr   c                   
 t               }t        t        j                  t	        j
                  t        j                              |_        t        |dd      }| j                  |      }ddl	m
} |j                  |_        ddlm} g 
|j                  |j                   
fd       |j#                         }| j%                  |d        d}| j%                  |j&                  |       | j%                  |j(                  j*                  d   d|z         | j-                  |j.                         | j-                  |j0                         ddl	m
} | j%                  |j                  |j                         | j%                  t3        
      d	       
\  }}	| j%                  |j4                  |j6                         | j%                  |	j4                  |j8                         y )
Nr   r   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zBSubprocessTests.test_spawn_fail_make_pipes_other.<locals>.<lambda>  r   r   z2unknown error making dispatchers for 'good': EPERMspawnerr: %sr   )r	   r   r   EPERMr   r   r   r
   r$   r2   r0   r   r   r   r   r   r   r   r7   rM   r   r   rS   rF   rJ   r   r   r   r   r   rB   rA   rO   r0   r   r   msgr   r   r   s             @r    test_spawn_fail_make_pipes_otherz0SubprocessTests.test_spawn_fail_make_pipes_other   si   .'.u{{/1{{5;;/G(I$gv/?@==(3&..%113HI!&B**C0,,Q/#1EF'(()3)>)>?Q#))6+K+KL))6+J+JKr   c                 ^   t               }t        |ddd      }d }||_        | j                  |      }ddlm} |j                  |_        ddlm	} g |j                  |j                  fd	       |j                         }| j                  |d        d
}| j                  |j                  |       | j                  |j                  j                   d   d|z         | j#                  |j$                         | j#                  |j&                         ddlm} | j                  |j                  |j                         | j                  t)              d       \  }	}
| j                  |	j*                  |j,                         | j                  |
j*                  |j.                         y )Nr<   /bin/catz/a/directory)r   commandr?   c                 4    t        t        j                        r   )IOErrorr   EISDIRenvelopes    r   raise_eisdirzMSubprocessTests.test_spawn_fail_make_dispatchers_eisdir.<locals>.raise_eisdir      %,,''r   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zISubprocessTests.test_spawn_fail_make_dispatchers_eisdir.<locals>.<lambda>!  r   r   z2unknown error making dispatchers for 'cat': EISDIRr   r   )r	   r
   make_dispatchersr$   r2   r0   r   r   r   r   r   r   r   r7   rM   r   r   rS   rF   rJ   r   r   r   r   )r   rB   rA   r   rO   r0   r   r   r   r   r   r   s              @r   'test_spawn_fail_make_dispatchers_eisdirz7SubprocessTests.test_spawn_fail_make_dispatchers_eisdir  sV   .gE:-;=	(".==(3&..%113HI!&B**C0,,Q/#1EF'(()3)>)>?Q#))6+K+KL))6+J+JKr   c                 Z  
 t               }t        t        j                  t	        j
                  t        j                              |_        t        |dd      }| j                  |      }ddl	m
} |j                  |_        ddlm} g 
|j                  |j                   
fd       |j#                         }| j%                  |d        d}| j%                  |j&                  |       | j%                  |j(                  j*                  d   d|z         | j%                  t-        |j.                        d	       | j%                  t-        |j0                        d	       | j3                  |j4                         | j3                  |j6                         ddl	m
} | j%                  |j                  |j                         | j%                  t-        
      d
       
\  }}	| j%                  |j8                  |j:                         | j%                  |	j8                  |j<                         y )Nr   r   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z=SubprocessTests.test_spawn_fork_fail_eagain.<locals>.<lambda>:  r   r   z3Too many processes in process table to spawn 'good'r      r   )r	   r   r   EAGAINr   r   fork_exceptionr
   r$   r2   r0   r   r   r   r   r   r   r   r7   rM   r   r   r   parent_pipes_closedchild_pipes_closedrS   rF   rJ   r   r   r   r   s             @r   test_spawn_fork_fail_eagainz+SubprocessTests.test_spawn_fork_fail_eagain0  s   .!()+U\\)B"Dgv/?@==(3&..%113HI!&C**C0,,Q/#1EFW8891=W778!<'(()3)>)>?Q#))6+K+KL))6+J+JKr   c                 Z  
 t               }t        t        j                  t	        j
                  t        j                              |_        t        |dd      }| j                  |      }ddl	m
} |j                  |_        ddlm} g 
|j                  |j                   
fd       |j#                         }| j%                  |d        d}| j%                  |j&                  |       | j%                  |j(                  j*                  d   d|z         | j%                  t-        |j.                        d	       | j%                  t-        |j0                        d	       | j3                  |j4                         | j3                  |j6                         ddl	m
} | j%                  |j                  |j                         | j%                  t-        
      d
       
\  }}	| j%                  |j8                  |j:                         | j%                  |	j8                  |j<                         y )Nr   r   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z<SubprocessTests.test_spawn_fork_fail_other.<locals>.<lambda>U  r   r   z+unknown error during fork for 'good': EPERMr   r   r   )r	   r   r   r   r   r   r   r
   r$   r2   r0   r   r   r   r   r   r   r   r7   rM   r   r   r   r   r   rS   rF   rJ   r   r   r   r   s             @r   test_spawn_fork_fail_otherz*SubprocessTests.test_spawn_fork_fail_otherK  s   .!()+U[[)A"Cgv/?@==(3&..%113HI!&;**C0,,Q/#1EFW8891=W778!<'(()3)>)>?Q#))6+K+KL))6+J+JKr   c                    t               }d|_        t        |ddd      }| j                  |      }|j	                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                        d       | j                  t        |j                        |j                  dz
         | j                  |j                  d       | j                  |j                  ddgf       | j                  |j                  d       | j                  |j                   dd	i       y )
Nr   r   r   ra   uidT   r   *supervisor: child process was not spawned
)r	   forkpidr
   r$   r   r7   r   r   pgrp_setr   duped
fds_closedminfdsprivsdropped
execv_argsexecve_calledwrittenr   rB   rA   rO   r   s        r   test_spawn_as_child_setuid_okz-SubprocessTests.test_spawn_as_child_setuid_okf  s9   .gv/?QG==(!&44d;33T:))40W]]+Q/W//0'..12DE--q1++*-=,>?	B..5 	>?	Ar   c                    t               }d|_        d|_        t        |ddd      }| j	                  |      }|j                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                        d       | j                  t        |j                        |j                  dz
         | j                  |j                  d	d
i       | j                  |j                  d        | j                  |j                   d       | j                  |j"                  d       y )Nr   zfailure reasonr   r   ra   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   r7   r   r   r   r   r   r   r   r   r   r   	_exitcoder   s        r   test_spawn_as_child_setuid_failz/SubprocessTests.test_spawn_as_child_setuid_fail|  s9   .-gv/?QG==(!&44d;33T:))40W]]+Q/W//0'..12DE ? @	A 	--t4..6**C0r   c                    t               }d|_        t        |ddd      }| j                  |      }|j	                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                        d       | j                  t        |j                        |j                  dz
         | j                  |j                  ddgf       | j                  |j                  d       | j                  |j                  d       | j                  |j                   dd	i       y )
Nr   r   r   /tmp	directoryTr   r   r   )r	   r   r
   r$   r   r7   r   r   r   r   r   r   r   r   changed_directoryr   r   r   s        r   test_spawn_as_child_cwd_okz*SubprocessTests.test_spawn_as_child_cwd_ok  s<   .gv/?(.0==(!&44d;33T:))40W]]+Q/W//0'..12DE++*-=,>?	B22D9..5 	>?	Ar   c                    t               }d|_        t        |ddd      }| j                  |      }|j	                         }| j                  |d        | j                  |j                  ddgf       | j                  |j                  d       | j                  |j                  d       | j                  |j                  ddi       y )Nr   r   r   r   )umaskTr   )
r	   r   r
   r$   r   r7   r   umasksetr   r   r   s        r   test_spawn_as_child_sets_umaskz.SubprocessTests.test_spawn_as_child_sets_umask  s    .gv/?qI==(!&++*-=,>?	B))1-..5 	>?	Ar   c                    t               }d|_        t        t        j                  t        j                  t        j                              |_        t        |ddd      }| j                  |      }|j                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                         d       | j                  t        |j"                        |j$                  dz
         | j                  |j&                  d        dd	i}| j                  |j(                  |       | j                  |j*                  d
       | j                  |j,                  d       | j                  |j.                  d       y )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   r7   r   r   r   r   r   r   r   r   r   r  r  r   r   rB   rA   rO   r   outs         r   test_spawn_as_child_cwd_failz,SubprocessTests.test_spawn_as_child_cwd_fail  sn   .")%,,*,++ell*C#Egv/?(.0==(!&44d;33T:))40W]]+Q/W//0'..12DE++T2 @ A#.**C022E:..6r   c                 ,   t               }d|_        t        t        j                  t        j                  t        j                              |_        t        |dd      }| j                  |      }|j                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                         d       | j                  t        |j"                        |j$                  dz
         ddi}| j                  |j&                  |       | j                  |j(                  d        | j                  |j*                  d       y )	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   r7   r   r   r   r   r   r   r   r   r   r  r  s         r   &test_spawn_as_child_execv_fail_oserrorz6SubprocessTests.test_spawn_as_child_execv_fail_oserror  s=   .")%++*,++ekk*B#Dgv/?@==(!&44d;33T:))40W]]+Q/W//0'..12DE @ A#.--t4**C0r   c                 0   t               }d|_        t        t        j                        |_        t        |dd      }| j                  |      }|j                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                        d       | j                  t        |j                        |j                   dz
         |j"                  d   }d}| j%                  |j'                  |             | j%                  d|v        | j                  |j(                  d        | j                  |j*                  d	       y )
Nr   r   r   Tr   r   z)supervisor: couldn't exec /good/filename:RuntimeErrorr   )r	   r   r  r   r  r  r
   r$   r   r7   r   r   r   r   r   r   r   r   rS   rT   r   r  )r   rB   rA   rO   r   r   heads          r   ,test_spawn_as_child_execv_fail_runtime_errorz<SubprocessTests.test_spawn_as_child_execv_fail_runtime_error  s>   .".u||"<gv/?@==(!&44d;33T:))40W]]+Q/W//0'..12DEooa :t,-#-.--t4**C0r   c                 *   t               }d|_        t        |ddddi      }| j                  |      }|j	                         }| j                  |d        | j                  |j                  ddgf       | j                  |j                  d   d       y )Nr   r<   r   _TEST_1)environment)r	   r   r
   r$   r   r7   r   execv_environmentr   s        r   ,test_spawn_as_child_uses_pconfig_environmentz<SubprocessTests.test_spawn_as_child_uses_pconfig_environment  s    .guj+3C.:==(!&++j:,-GI228<cBr   c                 4   t               }d|_        t        |dd      }| j                  |      } G d d      } |       |_         |       |j                  _        |j                         }| j                  |d        | j                  |j                  ddgf       | j                  |j                  d   d       | j                  |j                  d   d       | j                  |j                  d	   d
       | j                  |j                  d   d       y )Nr   r<   r   c                       e Zd ZdZy)QSubprocessTests.test_spawn_as_child_environment_supervisor_envvars.<locals>.DummydummyN)__name__
__module____qualname__r   r   r   r   Dummyr#    s    Dr   r(  SUPERVISOR_ENABLEDr  SUPERVISOR_PROCESS_NAMESUPERVISOR_GROUP_NAMEr$  SUPERVISOR_SERVER_URLzhttp://localhost:9001)
r	   r   r
   r$   grouprA   r   r7   r   r  )r   rB   rA   rO   r(  r   s         r   2test_spawn_as_child_environment_supervisor_envvarszBSubprocessTests.test_spawn_as_child_environment_supervisor_envvars  s   .guj9==(	 	 %!&++j:,-GI%%&:;S	B%%&?@%	I%%&=>	I%%&=>#	%r   c                    t               }d|_        t        |ddd      }d|_        | j	                  |      }|j                         }| j                  |d        | j                  |j                  d        | j                  |j                  d        | j                  |j                  d       | j                  t        |j                        d       | j                  t        |j                        |j                  dz
         | j                  |j                  d       | j                  |j                  ddgf       | j                  |j                   d       | j                  |j"                  dd	i       y )
Nr   r   r   ra   r   Tr   r   r   )r	   r   r
   redirect_stderrr$   r   r7   r   r   r   r   r   r   r   r   r   r   r   r   s        r   %test_spawn_as_child_stderr_redirectedz5SubprocessTests.test_spawn_as_child_stderr_redirected  sA   .gv/?QG!%==(!&44d;33T:))40W]]+Q/W//0'..12DE--q1++*-=,>?	B..5 	>?	Ar   c                 n   t               }d|_        t        |dd      }| j                  |      }|j	                         }| j                  |d       | j                  |j                  d   j                  t               | j                  |j                  d   j                  t               | j                  |j                  d   j                  t               | j                  |j                  d   d       | j                  |j                  d   d       | j                  |j                  d	   d       | j                  |j                  d        | j                  t        |j                        d
       | j                  |j                  j                  d   d       | j                  |j                  d        | j!                  |j"                         | j                  |j$                  j&                  j(                  d   |       ddlm} | j                  |j.                  |j0                         y )N
   r   r            stdinstdoutstderrr   r   zspawned: 'good' with pid 10r/   )r	   r   r
   r$   r   r7   rL   r   r   rK   r   r   r   r   r   rM   rS   rF   rA   rB   
pidhistoryr2   r0   r   STARTING)r   rB   rA   rO   r   r0   s         r   test_spawn_as_parentz$SubprocessTests.test_spawn_as_parent/  s   .gv/?@==(!$--a0::OL--a0::OL--a0::OL0!411511544d;W778!<,,Q/1NO**D1'00;;B?J3)?)?@r   c                    t               }d|_        t        |ddd      }| j                  |      }|j	                         }| j                  |d       | j                  |j                  d   j                  t               | j                  |j                  d   j                  t               | j                  |j                  d   d       | j                  |j                  d	   d       | j                  |j                  d
   d        y )Nr3  r   r   T)r0  r4  r5  r7  r8  r9  )
r	   r   r
   r$   r   r7   rL   r   r   rK   r   s        r   test_spawn_redirect_stderrz*SubprocessTests.test_spawn_redirect_stderrE  s    .gv/?.24==(!$--a0::OL--a0::OL0!4115148r   c                    d}t               }t        |d|      }| j                  |      }ddz  }| j                  t        |j
                  |       d|_        |j                          |j                  |       |j                  d   }| j                  ||j                  |   j                         d|_        | j                  t        |j
                  |       y )Nr   outputa    ra   r7  T)r	   r
   r$   rr   r   writer   r   rK   r7   rL   input_bufferrI   r   r   rB   rA   rO   sentstdin_fds          r   
test_writezSubprocessTests.test_writeS  s    
.gx<==(g'8>>48t>>'*x33H=JJK'8>>48r   c                 l   d}t               }t        |d|      }| j                  |      }ddz  }| j                  t        |j
                  |       d|_        |j                          |j                  d   }|j                  |   j                          | j                  t        |j
                  |       y Nr   r@  rA  rB  ra   r7  )r	   r
   r$   rr   r   rC  r   r   rK   rL   closerE  s          r   test_write_dispatcher_closedz,SubprocessTests.test_write_dispatcher_closedb  s    
.gx<==(g'8>>48>>'*X&,,.'8>>48r   c                    d}t               }t        |d|      }| j                  |      }d|_        |j	                          |j
                  d   }|j                  |   j                          d |j
                  d<   	 |j                  d       | j                  d       y # t        $ rV}| j                  |j                  d   t        j                         | j                  |j                  d   d       Y d }~y d }~ww xY w)	Nr   r@  ra   r7  r   nothing raisedr   zProcess has no stdin channel)r	   r
   r$   r   r   rK   rL   rK  rC  failr   r7   r   r   EPIPE)r   r   rB   rA   rO   rG  excs          r   test_write_stdin_fd_nonez(SubprocessTests.test_write_stdin_fd_noneo  s    
.gx<==(>>'*X&,,."&w	JNN5!II&' 	JSXXa[%++6SXXa[*HII	Js   >"B! !	D *AC;;D c                    d}t               }t        |d|      }| j                  |      }ddz  }| j                  t        |j
                  |       d|_        |j                          |j                  d   }t	        t        j                  t        j                  t        j                              |j                  |   _        | j                  t        |j
                  |       y rJ  )r	   r
   r$   rr   r   rC  r   r   rK   r   rP  r   r   rL   flush_exceptionrE  s          r   (test_write_dispatcher_flush_raises_epipez8SubprocessTests.test_write_dispatcher_flush_raises_epipe  s    
.gx<==(g'8>>48>>'*9@46KK4L:NX&6'8>>48r   c           	      n   ddl m} 	 g fd}t        j                  t        j                  |        |       }t	               }t        |d|      }| j                  |      }|j                         }|j                  j                  d   }| j                  |j                  d             | j                  t        |j                        d       | j                  |j                         | j                  |j                  |       |j                  }		 	 t!        j"                  d      j%                         }
	 t/        j0                  d       | j                  |
j3                  t5        t7        |	                  d	k7         |j9                  t        j:                        }t/        j0                  d       | j                  |d        t!        j<                  d	t         j>                        \  }}t!        j"                  d      j%                         }
| j                  |
j3                  t5        t7        |	                  d	       | jA                  g        	 t!        jB                  |       t        j                  t        j                  t        jD                         y # t&        $ r+}|j(                  d   t*        j,                  k7  r Y d }~nd }~ww xY w#  Y pxY w# 	 t!        jB                         n#  Y nxY wt        j                  t        j                  t        jD                         w xY w)
Nr   )makeSpewc                  (    j                  d       y )NTr   )r   sigchldss    r   
sighandlerz=SubprocessTests._dont_test_spawn_and_kill.<locals>.sighandler  s    %r   spewzspawned: 'spew' with pidr   psg?)#supervisor.tests.baserW  signalSIGCHLDr	   r
   r$   r   r   r   rS   rT   r7   r   rK   rD   r   popenreadr   r   r   EINTRtimesleepfindr   rR   killSIGTERMwaitpidWNOHANGassertNotEqualremoveSIG_DFL)r   rW  rZ  r   rB   rA   rO   r   r   origpidr   whyrD   stsrY  s                 @r   _dont_test_spawn_and_killz)SubprocessTests._dont_test_spawn_and_kill  sC   2&	:H&MM&..*5!J"nG!'6:>F}}V,H^^%F..%%a(COOCNN+EFGS0!4OOHLL)X\\62llG88D>..0D
 JJsOOODIIhtG}&=>"DF--/CJJsOS$'zz"bjj1HC88D>&&(DTYYxW'>?D"-		*% MM&..&..9%  xx{ekk1 2	 (		*%MM&..&..9s[   DK" #J" 9D K" K "	K+!KK" KK" K"L4$K:9L4:K><8L4c                    t               }t        |dd      }| j                  |      }d|_        t	        d      }d|i|_        ddlm} |j                  |_	        t        j                         |_        |j                          | j                  |j                         | j                  |j                  d       | j                  |j                          | j                  |j"                  j$                  d   d	       | j                  |j&                         | j                  |j(                  d   t*        j,                         y )
NrZ   r[      Tr^   r   r   r/   )killing test (pid 11) with signal SIGTERM)r	   r
   r$   rD   r   rL   r2   r0   r   r   rd  laststopreportstoprS   rH   r7   rF   r   r   rI   killsr_  rh  r   rB   rA   rO   
dispatcherr0   s         r   	test_stopzSubprocessTests.test_stop  s    .gvw7==($d3
 %j13&.."&))+44500!4',,Q/ 2* 	+(()r*FNN;r   c                 h   t               }t        |dd      }| j                  |      }d|_        t	        d      }d|i|_        ddlm} |j                  |_	        	 |j                          | j                  d	       y # t        $ r)}| j                  |j                  d   d
       Y d }~y d }~ww xY w)NrZ   r[   rs  Tr^   r   r   r/   rN  zCAssertion failed for test: STOPPED not in RUNNING STARTING STOPPING)r	   r
   r$   rD   r   rL   r2   r0   STOPPEDr   rv  rO  AssertionErrorr7   r   )r   rB   rA   rO   ry  r0   rQ  s          r   &test_stop_not_in_stoppable_state_errorz6SubprocessTests.test_stop_not_in_stoppable_state_error  s    .gvw7==($d3
 %j13&..	<MMOII&' 	<SXXa[ +; < <	<s   !A? ?	B1B,,B1c                 8   t               }t        |dd      }| j                  |      }d|_        t	        d      }d|i|_        ddlm} |j                  |_	        |j                          | j                  t        |j                  j                        d       y )	NrZ   r[   rs  Tr^   r   r   r/   )r	   r
   r$   rD   r   rL   r2   r0   r|  r   stop_reportr7   r   r   r   rx  s         r   3test_stop_report_logs_nothing_if_not_stopping_statezCSubprocessTests.test_stop_report_logs_nothing_if_not_stopping_state  s~    .gvw7==($d3
 %j13&..W^^00115r   c                 x   t               }t        |dd      }| j                  |      }d|_        t	        d      }d|i|_        ddlm} |j                  |_	        | j                  |j                  d       |j                          | j                  t        |j                  j                        d	       | j                  |j                  j                  d   d
       | j!                  |j                  d       |j                          | j                  t        |j                  j                        d	       y )NrZ   r[   rs  Tr^   r   r   r/   ra   waiting for test to stop)r	   r
   r$   rD   r   rL   r2   r0   STOPPINGr   r7   ru  r  r   r   r   rk  rx  s         r   1test_stop_report_logs_throttled_by_laststopreportzASubprocessTests.test_stop_report_logs_throttled_by_laststopreport  s    .gvw7==($d3
 %j13&//00!4W^^00115,,Q/1KLH33Q7W^^00115r   c                 `   t        j                          dz   }t               }t        |dd      }| j                  |      }d|_        t        d      }d|i|_        dd	lm} |j                  |_
        ||_        |j                          | j                  t        |j                  j                         d       | j#                  |j                  |k         t        j$                  d
       |j                          | j                  t        |j                  j                         d       | j                  |j                  j                   d   d       | j'                  |j                  d       |j                          | j                  t        |j                  j                         d       y )N  rZ   r[   rs  Tr^   r   r   r/   r   ra   r  )rd  r	   r
   r$   rD   r   rL   r2   r0   r  r   ru  r  r7   r   r   r   rS   re  rk  )r   future_timerB   rA   rO   ry  r0   s          r   )test_stop_report_laststopreport_in_futurez9SubprocessTests.test_stop_report_laststopreport_in_future  sN   iikD(.gvw7==($d3
 %j13&//"- 	 	W^^00115 	//+=> 	

1 	W^^00115,,Q/1KLH33Q7W^^00115r   c                 l   t               }t        |dd      }| j                  |      }g ddlm} ddlm} |j                  |j                  fd       |j                  |_
        |j                          | j                  |j                         | j                  |j                         | j                  |j                          | j#                  |j                  |j$                         | j#                  t'              d       d   }| j#                  |j(                  |j*                         y )NrZ   r[   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z.SubprocessTests.test_give_up.<locals>.<lambda>"  r   r   ra   )r	   r
   r$   r2   r0   r   r   r   r   r   r   give_uprS   system_stoprG   rF   rJ   r7   FATALr   r   ProcessStateFatalEventr   rB   rA   rO   r0   r   eventr   s          @r   test_give_upzSubprocessTests.test_give_up  s    .gvw7==(3%113HI&..,,-())*)<)<=Q#!&*G*GHr   c                    t               }t        |dd      }| j                  |      }|j                  t        j
                         | j                  |j                  j                  d   d       | j                  |j                         y )NrZ   r[   r   z=attempted to kill test with sig SIGTERM but it wasn't running)r	   r
   r$   rg  r_  rh  r7   r   r   rG   rI   rN   s       r   test_kill_nopidzSubprocessTests.test_kill_nopid-  sl    .gvw7==(fnn%,,Q/N	P))*r   c                    t               }t        |dd      }| j                  |      }d|_        g ddlm} ddlm} |j                  |j                  fd       |j                  |_        |j                  t        j                         | j                  |j                   j"                  d   d       | j%                  |j&                         | j                  |j(                  d   t        j                         | j                  t+              d	       d   }| j                  |j,                  |j.                         y )
NrZ   r[   rs  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z9SubprocessTests.test_kill_from_starting.<locals>.<lambda>>  r   r   rt  ra   )r	   r
   r$   rD   r2   r0   r   r   r   r   r;  r   rg  r_  rh  r7   r   r   rS   rI   rw  r   r   ProcessStateStoppingEventr  s          @r   test_kill_from_startingz'SubprocessTests.test_kill_from_starting6  s    .gvw7==(3%113HI&//fnn%,,Q/ 2* 	+(()r*FNN;Q#!&*J*JKr   c                    t               }t        |dd      }| j                  |      }d|_        g ddlm} ddlm} |j                  |j                  fd       |j                  |_        |j                  t        j                         | j                  |j                   j"                  d   d       | j%                  |j&                         | j                  |j(                  d   t        j                         | j                  t+              d	       d   }| j                  |j,                  |j.                         y )
NrZ   r[   rs  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z8SubprocessTests.test_kill_from_running.<locals>.<lambda>Q  r   r   rt  ra   )r	   r
   r$   rD   r2   r0   r   r   r   r   r   r   rg  r_  rh  r7   r   r   rS   rI   rw  r   r   r  r  s          @r   test_kill_from_runningz&SubprocessTests.test_kill_from_runningI  s    .gvw7==(3%113HI&..fnn%,,Q/ 2* 	+(()r*FNN;Q#!&*J*JKr   c                 N   t               }t        |dd      }t        t        j                  t        j                  t        j                              |_        | j                  |      }g ddl	m
} ddlm} |j                  |j                  fd       d|_        |j                   |_        |j%                  t&        j(                         | j+                  |j,                  j.                  d   d       | j1                  |j,                  j.                  d	   j3                  d
             | j1                  d|j,                  j.                  d	   v        | j5                  |j6                         | j+                  |j                  d       | j+                  |j"                  |j8                         | j+                  t;              d       d   }d	   }| j+                  |j<                  |j>                         | j+                  |j<                  |j@                         y )NrZ   r[   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z>SubprocessTests.test_kill_from_running_error.<locals>.<lambda>e  r   r   rs  rt  ra   zunknown problem killing test	Tracebackr   )!r	   r
   r   r   r   r   r   kill_exceptionr$   r2   r0   r   r   r   r   rD   r   r   rg  r_  rh  r7   r   r   rS   rT   rG   rI   UNKNOWNr   r   r  ProcessStateUnknownEvent)	r   rB   rA   rO   r0   r   r   r   r   s	           @r   test_kill_from_running_errorz,SubprocessTests.test_kill_from_running_error\  s   .gvw7!()+U[[)A"C==(3%113HI&..fnn%,,Q/ 2* 	+++A.99*, 	-w~~':':1'==>))*r*)>)>?Q#11))6+K+KL))6+J+JKr   c                    t               }t        |dd      }t        t        j                  t        j                  t        j                              |_        | j                  |      }g ddl	m
} ddlm} |j                  |j                  fd       d|_        |j                   |_        |j%                  t&        j(                         | j+                  |j,                  j.                  d   d       | j+                  |j,                  j.                  d	   d
t1        |j                        z         | j3                  |j4                         | j+                  |j                  d       | j+                  |j"                  |j6                         | j+                  t9              d	       d   }| j+                  |j:                  |j<                         y )NrZ   r[   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zDSubprocessTests.test_kill_from_running_error_ESRCH.<locals>.<lambda>  r   r   rs  rt  ra   zFunable to signal test (pid 11), it probably just exited on its own: %s)r	   r
   r   r   ESRCHr   r   r  r$   r2   r0   r   r   r   r   rD   r   r   rg  r_  rh  r7   r   r   strrS   rI   r  r   r   r  )r   rB   rA   rO   r0   r   r   r   s          @r   "test_kill_from_running_error_ESRCHz2SubprocessTests.test_kill_from_running_error_ESRCHw  sf   .gvw7!()+U[[)A"C==(3%113HI&..fnn%,,Q/ 2 	,,Q/ 25&&'2( 	) 	(()r*)?)?@Q#1))6+K+KLr   c                 $   t               }t        |dd      }| j                  |      }d|_        g ddlm} ddlm} |j                  |j                  fd       |j                  |_        |j                  t        j                         | j                  |j                   j"                  d   d       | j%                  |j&                         | j                  |j(                  d   t        j                         | j                  g        y )	NrZ   r[   rs  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z9SubprocessTests.test_kill_from_stopping.<locals>.<lambda>  r   r   z)killing test (pid 11) with signal SIGKILLr	   r
   r$   rD   r2   r0   r   r   r   r   r  r   rg  r_  SIGKILLr7   r   r   rS   rI   rw  r   rB   rA   rO   r0   r   r   s         @r   test_kill_from_stoppingz'SubprocessTests.test_kill_from_stopping  s    .gvw7==(3%113HI&//fnn%,,Q/ 2* 	+(()r*FNN;Br   c                    t               }t        |dd      }| j                  |      }g ddlm} ddlm} |j                  |j                  fd       |j                  |_
        |j                  t        j                         | j                  |j                  j                   d   d       | j#                  |j$                         d   }| j                  |j&                  |j(                         y )NrZ   r[   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z8SubprocessTests.test_kill_from_backoff.<locals>.<lambda>  r   r   z2Attempted to kill test, which is in BACKOFF state.)r	   r
   r$   r2   r0   r   r   r   r   r   r   rg  r_  r  r7   r   r   rG   rI   r   ProcessStateStoppedEventr  s          @r   test_kill_from_backoffz&SubprocessTests.test_kill_from_backoff  s    .gvw7==(3%113HI&..fnn%,,Q/M	O))*!&*I*IJr   c                 (   t               }t        |ddd      }| j                  |      }d|_        g ddlm} ddlm} |j                  |j                  fd	       |j                  |_        |j                  t        j                         | j                  |j                   j"                  d   d
       | j%                  |j&                         | j                  |j(                  d   t        j                         | j                  g        y )NrZ   r[   T)killasgrouprs  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zGSubprocessTests.test_kill_from_stopping_w_killasgroup.<locals>.<lambda>  r   r   z7killing test (pid 11) process group with signal SIGKILLr  r  s         @r   %test_kill_from_stopping_w_killasgroupz5SubprocessTests.test_kill_from_stopping_w_killasgroup  s    .gvwDI==(3%113HI&//fnn%,,Q/ 2= 	>(()s+V^^<Br   c                    t               }t        |ddd      }| j                  |      }d|_        g ddlm} ddlm} |j                  |j                  fd	       |j                  |_        |j                  t        j                         | j                  |j                   j"                  d   d
       | j%                  |j&                         | j                  |j(                  d   t        j                         | j                  t+              d       d   }| j                  |j,                  |j.                         | j                  |j0                  dg       | j                  |j2                  |j                         y )NrZ   r[   T)stopasgrouprs  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z2SubprocessTests.test_stopasgroup.<locals>.<lambda>  r   r   z7killing test (pid 11) process group with signal SIGTERMr  ra   )rD   rs  )r	   r
   r$   rD   r2   r0   r   r   r   r   r   r   rg  r_  rh  r7   r   r   rS   rI   rw  r   r   r  extra_values
from_stater  s          @r   test_stopasgroupz SubprocessTests.test_stopasgroup  s,   .gvwDI==(3%113HI&..fnn%,,Q/ 2= 	>(()s+V^^<Q#!&*J*JK++k];))=+@+@Ar   c                 \   t               }t        |dd      }| j                  |      }ddlm} |j
                  |_        |j                  t        j                         | j                  |j                  j                  d   d       | j                  t        |j                        d       y )NrZ   r[   r   r/   z9attempted to send test sig SIGWINCH but it wasn't running)r	   r
   r$   r2   r0   r|  r   r_  SIGWINCHr7   r   r   r   rw  r   rB   rA   rO   r0   s        r   test_signal_from_stoppedz(SubprocessTests.test_signal_from_stopped  s    .gvw7==(3&..(,,Q/ 2I 	JW]]+Q/r   c                 &   t               }t        |dd      }| j                  |      }d|_        ddlm} |j                  |_        |j                  t        j                         | j                  |j                  j                  d   d       | j                  t        |j                        d       | j                  |j                  |j                  v        | j                  |j                  |j                     t        j                         y )NrZ   r[   rs  r   r/   "sending test (pid 11) sig SIGWINCHra   )r	   r
   r$   rD   r2   r0   r   r   r_  r  r7   r   r   r   rw  rS   r  s        r   test_signal_from_runningz(SubprocessTests.test_signal_from_running  s    .gvw7==(3&..(,,Q/1UVW]]+Q/56x||4fooFr   c                 ^   t               }t        |dd      }t        t        j                  t        j                  t        j                              |_        | j                  |      }g ddl	m
} ddlm} |j                  |j                  fd       d|_        |j                   |_        |j%                  t$        j&                         | j)                  |j*                  j,                  d   d       | j)                  |j*                  j,                  d	   d
t/        |j                        z         | j1                  |j2                         | j)                  |j"                  |j                          | j)                  |j                  d       | j)                  t5              d       y )NrZ   r[   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zFSubprocessTests.test_signal_from_running_error_ESRCH.<locals>.<lambda>  r   r   rs  r  ra   zJunable to signal test (pid 11), it probably just now exited on its own: %s)r	   r
   r   r   r  r   r   r  r$   r2   r0   r   r   r   r   rD   r   r   r_  r  r7   r   r   r  rG   rI   r   r  s         @r   $test_signal_from_running_error_ESRCHz4SubprocessTests.test_signal_from_running_error_ESRCH  sA   .gvw7!()+U[[)A"C==(3%113HI&..(,,Q/0	2,,Q/ 29&&'2( 	) 	))*)>)>?r*Q#r   c                    t               }t        |dd      }t        t        j                  t        j                  t        j                              |_        | j                  |      }g ddl	m
} ddlm} |j                  |j                  fd       d|_        |j                   |_        |j%                  t$        j&                         | j)                  |j*                  j,                  d   d       | j/                  |j*                  j,                  d	   j1                  d
             | j/                  d|j*                  j,                  d	   v        | j3                  |j4                         | j)                  |j"                  |j6                         | j)                  |j                  d       | j)                  t9              d	       d   }| j)                  |j:                  |j<                         y )NrZ   r[   r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z@SubprocessTests.test_signal_from_running_error.<locals>.<lambda>  r   r   rs  r  ra   z%unknown problem sending sig test (11)r  )r	   r
   r   r   r   r   r   r  r$   r2   r0   r   r   r   r   rD   r   r   r_  r  r7   r   r   rS   rT   rG   rI   r  r   r   r  r  s          @r   test_signal_from_running_errorz.SubprocessTests.test_signal_from_running_error  sv   .gvw7!()+U[[)A"C==(3%113HI&..(,,Q/0	2++A.9935 	6w~~':':1'==>))*)>)>?r*Q#!&*I*IJr   c                 4   t               }t        |ddd      }| j                  |      }d|_        ||j                  j
                  j                  d<   d|_        ddd	}||_        d
dl	m
} d
dlm} |j                  |_        g |j                  |j                   fd       d|_        |j%                  dd       | j'                  |j                         | j)                  |j"                  d
       | j)                  |j*                  |       | j)                  |j                  i        | j)                  |j,                  i        | j)                  |j.                  j0                  d
   d       | j)                  |j2                  d       | j)                  t5              d       d
   }| j)                  |j6                  |j8                         | j)                  |j:                  dg       | j)                  |j<                  |j                         y )Nr}   r~   rj   r?   ){   ra   r  Trw   r8  r9  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   z<SubprocessTests.test_finish_stopping_state.<locals>.<lambda>-  r   r   ra   z(stopped: notthere (terminated by SIGHUP)r]  rD   r  )r	   r
   r$   
waitstatusrA   rB   r:  rI   rK   r2   r0   r   r   r  r   r   r   rD   finishrG   r7   r   rL   r   r   
exitstatusr   r   r  r  r  	r   rB   rA   rO   rK   r0   r   r  r   s	           @r   test_finish_stopping_statez*SubprocessTests.test_finish_stopping_state  s   .gz;-79==(&2:**3/b)3%&//113HIQ))*q)44e<,--r2,,Q/ 22 	3,,b1Q#!&*I*IJ++l^<))=+A+ABr   c                 v   t               }t        |ddd      }| j                  |      }||j                  j                  j
                  d<   ddd}||_        dg|j                  _        d	d
lm	} d	dl
m} |j                  |_        g |j                  |j                  fd       d|_        |j#                  dd       | j%                  |j&                         | j)                  |j                   d	       | j)                  |j*                  |       | j)                  |j                  i        | j)                  |j,                  i        | j)                  |j.                  j0                  d	   d       | j)                  |j2                  d       | j)                  t5              d       d	   }| j)                  |j6                  |j8                         | j)                  |j:                  d       | j)                  |j<                  ddg       | j)                  |j>                  |j                         y )Nr}   r~   rj   r  r  rw   r  r]  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zISubprocessTests.test_finish_running_state_exit_expected.<locals>.<lambda>K  r   r   ra   1exited: notthere (terminated by SIGHUP; expected)TexpectedTr  ) r	   r
   r$   rA   rB   r:  rK   	exitcodesr2   r0   r   r   r   r   r   r   rD   r  rG   rI   r7   r   rL   r   r   r  r   r   ProcessStateExitedEventr  r  r  r  s	           @r   'test_finish_running_state_exit_expectedz7SubprocessTests.test_finish_running_state_exit_expected>  s   .gz;-79==(2:**3/b)$&4!3%&..113HIQ))*q)44e<,--r2,,Q/L	N,,b1Q#!77	9.++.@,-OP))=+@+@Ar   c                    t               }t        |ddd      }| j                  |      }||j                  j                  j
                  d<   ddd}||_        dg|j                  _        t        j                         d	z   |_	        d
dl
m} d
dlm} |j                  |_        g |j!                  |j"                  fd       d|_        |j'                  dd       | j)                  |j*                         | j-                  |j$                  d
       | j-                  |j.                  |       | j-                  |j                  i        | j-                  |j0                  i        | j-                  |j2                  j4                  d
   d       | j-                  |j2                  j4                  d   d       | j-                  |j6                  d       | j-                  t9              d       d
   }| j-                  |j:                  |j<                         | j-                  |j>                  d       | j-                  |j@                  dg       | j-                  |jB                  |j                         d   }| j-                  |j:                  |jD                         | j-                  |j>                  d       | j-                  |j@                  ddg       | j-                  |jB                  |jF                         y )Nr}   r~   rj   r  r  rw   r  r]  r  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zPSubprocessTests.test_finish_starting_state_laststart_in_future.<locals>.<lambda>l  r   r   ra   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$   rA   rB   r:  rK   r  rd  rC   r2   r0   r   r   r;  r   r   r   rD   r  rG   rI   r7   r   rL   r   r   r  r   r   ProcessStateRunningEventr  r  r  r  r   r  s	           @r   .test_finish_starting_state_laststart_in_futurez>SubprocessTests.test_finish_starting_state_laststart_in_future^  sr   .gz;-79==(2:**3/b)$&4!!YY[4/3%&//113HIQ))*q)44e<,--r2,,Q/@	A 	,,Q/L	N,,b1Q#!&*I*IJ.++l^<))=+A+AB!&*H*HI.++.@,-OP))=+@+@Ar   c                 6   t               }t        |dddd      }| j                  |      }||j                  j                  j
                  d<   ddd}||_        d	g|j                  _        t        j                         |_	        d
dl
m} d
dlm} |j                  |_        g |j!                  |j"                  fd       d|_        |j'                  dd       | j)                  |j*                         | j-                  |j$                  d
       | j-                  |j.                  |       | j-                  |j                  i        | j-                  |j0                  i        | j-                  |j2                  j4                  d
   d       | j-                  |j6                  d        | j-                  t9              d       d
   }| j-                  |j:                  |j<                         | j-                  |j>                  |j                         y )Nr}   r~   rj   r3  r?   	startsecsr  rw   r  r]  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zOSubprocessTests.test_finish_starting_state_exited_too_quickly.<locals>.<lambda>  r   r   ra   z5exited: notthere (terminated by SIGHUP; not expected)) r	   r
   r$   rA   rB   r:  rK   r  rd  rC   r2   r0   r   r   r;  r   r   r   rD   r  rG   rI   r7   r   rL   r   r   r  r   r   r   r  r  s	           @r   -test_finish_starting_state_exited_too_quicklyz=SubprocessTests.test_finish_starting_state_exited_too_quickly  s   .gz;-72G==(2:**3/b)$&4!!YY[3%&//113HIQ))*q)44e<,--r2,,Q/M	O,,d3Q#!&*I*IJ))=+A+ABr   c                    t               }t        |dddd      }| j                  |      }||j                  j                  j
                  d<   ddd}||_        d	g|j                  _        t        j                         |_	        d
dl
m} d
dlm} |j                  |_        g |j!                  |j"                  fd       d|_        |j'                  dd       | j)                  |j*                         | j-                  |j$                  d
       | j-                  |j.                  |       | j-                  |j                  i        | j-                  |j0                  i        | j-                  |j2                  j4                  d
   d       | j-                  |j6                  d	       | j-                  t9              d       d
   }| j-                  |j:                  |j<                         | j-                  |j>                  d       | j-                  |j@                  ddg       | j-                  |jB                  |j                         y )Nr}   r~   rj   r3  r  r  rw   r  r]  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zdSubprocessTests.test_finish_running_state_exited_too_quickly_due_to_clock_rollback.<locals>.<lambda>  r   r   ra   r  Tr  r  "r	   r
   r$   rA   rB   r:  rK   r  rd  rC   r2   r0   r   r   r   r   r   r   rD   r  rG   rI   r7   r   rL   r   r   r  r   r   r  r  r  r  r  s	           @r   Btest_finish_running_state_exited_too_quickly_due_to_clock_rollbackzRSubprocessTests.test_finish_running_state_exited_too_quickly_due_to_clock_rollback  s   .gz;-72G==(2:**3/b)$&4!!YY[3%&..113HIQ))*q)44e<,--r2,,Q/L	N,,b1Q#!77	9.++.@,-OP))=+@+@Ar   c                     t               }t        |ddd      }| j                  |      }||j                  j                  j
                  d<   ddd}||_        dg|j                  _        t        j                         d	z   |_	        d
dl
m} d
dlm} |j                  |_        g |j!                  |j"                  fd       d|_        |j'                  dd       | j)                  |j*                         | j-                  |j$                  d
       | j-                  |j.                  |       | j-                  |j                  i        | j-                  |j0                  i        | j-                  |j2                  j4                  d
   d       | j-                  |j2                  j4                  d   d       | j-                  |j6                  d       | j-                  t9              d       d
   }| j-                  |j:                  |j<                         | j-                  |j>                  d       | j-                  |j@                  ddg       | j-                  |jB                  |j                         y )Nr}   r~   rj   r  r  rw   r  r]  r  r   r/   r   c                 &    j                  |       S r   r   r   s    r   r   zOSubprocessTests.test_finish_running_state_laststart_in_future.<locals>.<lambda>  r   r   ra   r  r  Tr  r  r  r  s	           @r   -test_finish_running_state_laststart_in_futurez=SubprocessTests.test_finish_running_state_laststart_in_future  s
   .gz;-79==(2:**3/b)$&4!!YY[4/3%&..113HIQ))*q)44e<,--r2,,Q/@	A 	,,Q/L	N,,b1Q#!77	9.++.@,-OP))=+@+@Ar   c                   	 ddl m} g 	|j                  |j                  	fd       |j                  |j                  	fd       t               }t        |dddd	      }| j                  |      }dd
lm	} |j                  |_        t               }||_        |j                  dd       | j                  t!        	      d       	\  }}| j                  |j"                  |j$                         | j                  |j"                  |j                         | j                  |j&                  |       | j                  |j                  |       | j                  |j                  d        y )Nr   r   c                 &    j                  |       S r   r   r   s    r   r   zOSubprocessTests.test_finish_with_current_event_sends_rejected.<locals>.<lambda>  r   r   c                 &    j                  |       S r   r   r   s    r   r   zOSubprocessTests.test_finish_with_current_event_sends_rejected.<locals>.<lambda>  s    ahhqk r   r}   r~   rj   r3  r  r/   r  ra   r   )r   r   r   r   EventRejectedEventr	   r
   r$   r2   r0   r   r   r   r  r  r7   r   r   r  process)
r   r   rB   rA   rO   r0   r  r   r   r   s
            @r   -test_finish_with_current_event_sends_rejectedz=SubprocessTests.test_finish_with_current_event_sends_rejected  s$   %113HI224IJ.gz;-72G==(3&..QQ#))77	9))6+D+DE2u-.r   c                     t               }t        |dd      }| j                  |      }|j                          | j	                  |j
                  d        y )NrZ   r[   r	   r
   r$   set_uidr7   r   rN   s       r   test_set_uid_no_uidz#SubprocessTests.test_set_uid_no_uid  sG    .gvw7==(--t4r   c                     t               }t        |ddd      }| j                  |      }|j                         }| j	                  |j
                  d       | j	                  |d        y )NrZ   r[   ra   r   r  )r   rB   rA   rO   r   s        r   test_set_uidzSubprocessTests.test_set_uid  s[    .gvwA>==( --q1d#r   c                 2   t               }t        |dddd      }| j                  |      }t        |dddd      }| j                  |      }t        |dddd	      }| j                  |      }|||g}|j                          | j	                  ||||g       y )
Nr}   r~   rj   ra   )r?   priority	notthere1r   	notthere2r   )r	   r
   r$   sortr7   )r   rB   rA   rO   	instance1	instance2r   s          r   test_cmp_bypriorityz#SubprocessTests.test_cmp_bypriority  s    .gz;-7'(* ==(g{K-7'(* MM&)	g{K-7'(* MM&)	),	Xy)<=r   c                    ddl m} g }|j                  |j                  |j                         ddlm}m} t               }|j                  |_
        t        |ddd      }| j                  |      }d|_        |j                  |_        |j!                          | j#                  |j                  |j                         | j#                  |g        y )Nr   r   r0   SupervisorStatesr  /bin/process)r   r   r   r   r   r2   r0   r  r	   SHUTDOWNmoodr
   r$   rC   r|  r   
transitionr7   )r   r   emitted_eventsr0   r  rB   pconfigr  s           r   7test_transition_stopped_to_starting_supervisor_stoppingzGSubprocessTests.test_transition_stopped_to_starting_supervisor_stopping+  s    %11>3H3HIE.'00 w	9^L--(%--(=(=>,r   c                   
 ddl m} g 

fd}|j                  |j                  |       ddlm}m} t               }|j                  |_	        t        |ddd      }| j                  |      }d|_        |j                  |_        |j                          | j!                  |j                  |j"                         | j!                  t%        
      d       
d   \  }}	| j!                  |j&                  |j(                         | j!                  |j*                  |j                         | j!                  |	|j"                         y )Nr   r   c                 T    j                  | | j                  j                  f       y r   r   r  r   eemitted_events_with_statess    r   
subscriberzZSubprocessTests.test_transition_stopped_to_starting_supervisor_running.<locals>.subscriber?      &--q!))//.BCr   r  r  r  ra   )r   r   r   r   r2   r0   r  r	   r   r  r
   r$   rC   r|  r   r  r7   r;  r   r   r   r  r   r   r  r0   r  rB   r
  r  r  state_when_event_emittedr  s             @r   6test_transition_stopped_to_starting_supervisor_runningzFSubprocessTests.test_transition_stopped_to_starting_supervisor_running<  s   %%'"	D11:>E.'//w	9^L--(%--(>(>?78!<*DQ*G''&*J*JK))=+@+@A1=3I3IJr   c                    ddl m} g }|j                  |j                  |j                         ddlm}m} t               }|j                  |_
        t        |ddd      }ddlm} ||_        | j                  |      }d|_        d|_        |j$                  |_        |j)                          | j+                  |j&                  |j$                         | j-                  |j"                         | j+                  |g        y )	Nr   r   r  r  r  RestartUnconditionallyra   T)r   r   r   r   r   r2   r0   r  r	   r  r  r
   supervisor.datatypesr  autorestartr$   rC   r  EXITEDr   r  r7   rS   )	r   r   r	  r0   r  rB   r
  r  r  s	            r   6test_transition_exited_to_starting_supervisor_stoppingzFSubprocessTests.test_transition_exited_to_starting_supervisor_stoppingR  s    %11>3H3HIE.'00 w	9^L?4--("%,,(<(<=++,,r   c                   
 ddl m} g 

fd}|j                  |j                  |       ddlm} t               }t        |ddd      }ddlm	} ||_
        | j                  |      }d|_        |j                  |_        |j                          | j!                  |j                  |j"                         | j!                  t%        
      d       
d   \  }}	| j!                  |j&                  |j(                         | j!                  |j*                  |j                         | j!                  |	|j"                         y )	Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  z`SubprocessTests.test_transition_exited_to_starting_uncond_supervisor_running.<locals>.subscriberj  r  r   r/   r  r  r  ra   )r   r   r   r   r2   r0   r	   r
   r  r  r  r$   rC   r  r   r  r7   r;  r   r   r   r  )r   r   r  r0   rB   r
  r  r  r  r  r  s             @r   <test_transition_exited_to_starting_uncond_supervisor_runningzLSubprocessTests.test_transition_exited_to_starting_uncond_supervisor_runningg  s	   %%'"	D11:>3.w	9^L?4--(%,,(>(>?78!<*DQ*G''&*J*JK))=+?+?@1=3I3IJr   c                   
 ddl m} g 

fd}|j                  |j                  |       ddlm} t               }t        |ddd      }ddlm	} ||_
        | j                  |      }d|_        |j                  |_        d	|_        |j!                          | j#                  |j                  |j$                         | j#                  t'        
      d       
d   \  }}	| j#                  |j(                  |j*                         | j#                  |j,                  |j                         | j#                  |	|j$                         y )
Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  z`SubprocessTests.test_transition_exited_to_starting_condit_supervisor_running.<locals>.subscriber  r  r   r/   r  r  RestartWhenExitUnexpectedra   bogus)r   r   r   r   r2   r0   r	   r
   r  r$  r  r$   rC   r  r   r  r  r7   r;  r   r   r   r  )r   r   r  r0   rB   r
  r$  r  r  r  r  s             @r   <test_transition_exited_to_starting_condit_supervisor_runningzLSubprocessTests.test_transition_exited_to_starting_condit_supervisor_running~  s   %%'"	D11:>3.w	9^LB7--(%,,$(>(>?78!<*DQ*G''&*J*JK))=+?+?@1=3I3IJr   c                    ddl m} g }|j                  |j                  |j                         ddlm} t               }t        |ddd      }ddl	m
} ||_        | j                  |      }d|_        |j                  |_        d|_        |j#                          | j%                  |j                  |j                         | j%                  |g        y )Nr   r   r/   r  r  r#  ra   )r   r   r   r   r   r2   r0   r	   r
   r  r$  r  r$   rC   r  r   r  r  r7   )r   r   r	  r0   rB   r
  r$  r  s           r   @test_transition_exited_to_starting_condit_fls_supervisor_runningzPSubprocessTests.test_transition_exited_to_starting_condit_fls_supervisor_running  s    %11>3H3HI3.w	9^LB7--(%,,(<(<=,r   c                    ddl m} g |j                  |j                  fd       ddlm}m} t               }|j                  |_	        t        |ddd      }| j                  |      }d|_        d|_        d|_        |j                  |_        |j#                          | j%                  |j                   |j                         | j%                  g        y )Nr   r   c                 &    j                  |       S r   r   r   r	  s    r   r   zYSubprocessTests.test_transition_backoff_to_starting_supervisor_stopping.<locals>.<lambda>      ^=R=RST=U r   r  r  r  ra   )r   r   r   r   r2   r0   r  r	   r  r  r
   r$   rC   rF   rJ   r   r   r  r7   r   r   r0   r  rB   r
  r  r	  s          @r   7test_transition_backoff_to_starting_supervisor_stoppingzGSubprocessTests.test_transition_backoff_to_starting_supervisor_stopping  s    %113UVE.'00w	9^L--(%--(=(=>,r   c                   
 ddl m} g 

fd}|j                  |j                  |       ddlm}m} t               }|j                  |_	        t        |ddd      }| j                  |      }d|_        d|_        d|_        |j                  |_        |j#                          | j%                  |j                   |j&                         | j%                  t)        
      d       
d   \  }}	| j%                  |j*                  |j,                         | j%                  |j.                  |j                         | j%                  |	|j&                         y )Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  zZSubprocessTests.test_transition_backoff_to_starting_supervisor_running.<locals>.subscriber  r  r   r  r  r  ra   )r   r   r   r   r2   r0   r  r	   r   r  r
   r$   rC   rF   rJ   r   r   r  r7   r;  r   r   r   r  r  s             @r   6test_transition_backoff_to_starting_supervisor_runningzFSubprocessTests.test_transition_backoff_to_starting_supervisor_running  s   %%'"	D11:>E.'//w	9^L--(%--(>(>?78!<*DQ*G''&*J*JK))=+@+@A1=3I3IJr   c                    ddl m} g |j                  |j                  fd       ddlm}m} t               }|j                  |_	        t        |ddd      }| j                  |      }d|_        t        |_        d|_        |j                   |_        |j%                          | j'                  |j"                  |j                          | j'                  g        y )Nr   r   c                 &    j                  |       S r   r   r+  s    r   r   z_SubprocessTests.test_transition_backoff_to_starting_supervisor_running_notyet.<locals>.<lambda>  r,  r   r  r  r  ra   )r   r   r   r   r2   r0   r  r	   r   r  r
   r$   rC   r   rF   rJ   r   r   r  r7   r-  s          @r   =test_transition_backoff_to_starting_supervisor_running_notyetzMSubprocessTests.test_transition_backoff_to_starting_supervisor_running_notyet  s    %113UVE.'//w	9^L--(%--(=(=>,r   c                 h  	 ddl m} g 		fd}|j                  |j                  |       ddlm} t               }t        |ddd      }| j                  |      }d|_	        d|_
        d|_        d|_        d|_        d	|_        d
|_        |j                   |_        |j%                          | j'                  |j                  d       | j'                  |j                  d       | j)                  |j                         | j'                  |j*                  j,                  d   d       | j'                  t/        	      d       	d   \  }}| j'                  |j0                  |j2                         | j'                  |j4                  |j                          | j'                  ||j6                         y )Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  zGSubprocessTests.test_transition_starting_to_running.<locals>.subscriber  r  r   r/   r  r  ra   Fabcdefz_success: process entered RUNNING state, process has stayed up for > than 10 seconds (startsecs))r   r   r   r   r2   r0   r	   r
   r$   rJ   rF   r  rC   rD   stdout_bufferstderr_bufferr;  r   r  r7   rG   r   r   r   r   r  r  r   
r   r   r  r0   rB   r
  r  r  r  r  s
            @r   #test_transition_starting_to_runningz3SubprocessTests.test_transition_starting_to_running  sy   %%'"	D11:>3. w	9^L--(# % %%.. 	!,*,,-,,Q/G	H 	78!<*DQ*G''&*I*IJ))=+A+AB1=3H3HIr   c                    ddl m} g fd}|j                  |j                  |       ddlm} t        j                         dz   }t               }d}t        |ddd|	      }| j                  |      }d
|_
        d
|_        d|_        ||_        d
|_        d|_        d|_        |j"                  |_        |j'                          | j)                  |j$                  |j"                         | j+                  |j                  |k         t        j,                  |d
z          |j'                          | j)                  |j                  d       | j)                  |j                  d       | j/                  |j                         | j)                  |j$                  |j0                         | j)                  |j2                  j4                  d   dj7                  |             | j)                  t9              d
       d   \  }	}
| j)                  |	j:                  |j<                         | j)                  |	j>                  |j"                         | j)                  |
|j0                         y )Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  z[SubprocessTests.test_transition_starting_to_running_laststart_in_future.<locals>.subscriber  r  r   r/   r  r   r  r  )r  ra   Fr7  r8  z_success: process entered RUNNING state, process has stayed up for > than {} seconds (startsecs)) r   r   r   r   r2   r0   rd  r	   r
   r$   rJ   rF   r  rC   rD   r9  r:  r;  r   r  r7   rS   re  rG   r   r   r   formatr   r   r  r  )r   r   r  r0   r  rB   test_startsecsr
  r  r  r  r  s              @r   7test_transition_starting_to_running_laststart_in_futurezGSubprocessTests.test_transition_starting_to_running_laststart_in_future  s   %%'"	D11:>3iikD(. w	9^)79--(#' % %%.. 	 	(>(>? 	))K78 	

>A%& 	 	!,*,,-(=(=>,,Q/GGMvnG]	_ 	78!<*DQ*G''&*I*IJ))=+A+AB1=3H3HIr   c                 Z  
 ddl m} g 

fd}|j                  |j                  |       ddlm} t        j                         dz   }t               }t        |ddd      }| j                  |      }d|_
        ||_        d|_        |j                  |_        |j                          | j!                  |j                  |j                         | j#                  |j                  |k         |j                          | j!                  |j                  |j$                         | j!                  t'        
      d       
d   \  }}	| j!                  |j(                  |j*                         | j!                  |j,                  |j                         | j!                  |	|j$                         y )	Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  zWSubprocessTests.test_transition_backoff_to_starting_delay_in_future.<locals>.subscriberC  r  r   r/   r  r  r  ra   )r   r   r   r   r2   r0   rd  r	   r
   r$   rC   rF   rJ   r   r   r  r7   rS   r;  r   r   r   r  )r   r   r  r0   r  rB   r
  r  r  r  r  s             @r   3test_transition_backoff_to_starting_delay_in_futurezCSubprocessTests.test_transition_backoff_to_starting_delay_in_future@  s_   %%'"	D11:>3iikD(.w	9^L--(#%-- 	 	(=(=> 	34 	(>(>?78!<*DQ*G''&*J*JK))=+@+@A1=3I3IJr   c                 Z  	 ddl m} g 		fd}|j                  |j                  |       ddlm} t               }t        |ddd      }| j                  |      }d|_	        d|_
        d|_        d	|_        d
|_        d|_        |j                  |_        |j#                          | j%                  |j                  d       | j%                  |j                  d       | j'                  |j                         | j%                  |j(                  j*                  d   d       | j%                  t-        	      d       	d   \  }}| j%                  |j.                  |j0                         | j%                  |j2                  |j                         | j%                  ||j4                         y )Nr   r   c                 T    j                  | | j                  j                  f       y r   r  r  s    r   r  zDSubprocessTests.test_transition_backoff_to_fatal.<locals>.subscriberj  r  r   r/   r  r  ra   i'  Fr7  r8  zHgave up: process entered FATAL state, too many start retries too quickly)r   r   r   r   r2   r0   r	   r
   r$   rC   rJ   rF   r  r9  r:  r   r   r  r7   rS   r   r   r   r   r  r  r  r;  s
            @r    test_transition_backoff_to_fatalz0SubprocessTests.test_transition_backoff_to_fatalg  sn   %%'"	D11:>3. w	9^L--(# % %%-- 	!,*++,,,Q/0	1 	78!<*DQ*G''&*G*GH))=+@+@A1=3F3FGr   c                    ddl m} g }|j                  |j                  |j                         ddlm} t               }t        |ddd      }| j                  |      }t        |_        |j                  |_        |j                          | j                  |j                  |j                         | j                  |g        y )Nr   r   r/   r  r  )r   r   r   r   r   r2   r0   r	   r
   r$   r   rF   r  r   r  r7   r   r   r	  r0   rB   r
  r  s          r   'test_transition_stops_unkillable_notyetz7SubprocessTests.test_transition_stops_unkillable_notyet  s    %11>3H3HI3.w	9^L--(%..(>(>?,r   c                    ddl m} g }|j                  |j                  |j                         ddlm} t               }t        |ddd      }| j                  |      }d|_
        d|_        d|_        |j                  |_        |j                          | j!                  |j                         | j#                  |j                  d       | j%                  |j                  |j                         | j%                  |j&                  j(                  d   d       | j%                  |j*                  d   t,        j.                         | j%                  |g        y )	Nr   r   r/   r  r  ra   Fz"killing 'process' (1) with SIGKILL)r   r   r   r   r   r2   r0   r	   r
   r$   rF   rD   rI   r  r   r  rS   rk  r7   r   r   rw  r_  r  rI  s          r    test_transition_stops_unkillablez0SubprocessTests.test_transition_stops_unkillable  s	   %11>3H3HI3.w	9^L--(%..(GMM1-(>(>?,,Q/=	?q)6>>:,r   c                     t               }t        |dd      }| j                  |      }d|_        | j	                  |j                  d      d       y )NrZ   r[   r3  F)r	   r
   r$   r   r7   change_staterN   s       r   2test_change_state_doesnt_notify_if_no_state_changezBSubprocessTests.test_change_state_doesnt_notify_if_no_state_change  sG    .gvw7==(..r2E:r   c                    ddl m} t               }t        |dd      }| j	                  |      }d|_        |j                  |j                         | j                  |j                  d       | j                  |j                  dkD         y )Nr   r/   rZ   r[   r3  ra   )r2   r0   r	   r
   r$   r   rN  r   r7   rJ   rS   rF   )r   r0   rB   rA   rO   s        r   (test_change_state_sets_backoff_and_delayz8SubprocessTests.test_change_state_sets_backoff_and_delay  sn    3.gvw7==(m334))1-*+r   N)]r%  r&  r'  r   r$   r,   r:   rP   rW   rd   rh   rn   rt   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.  r1  r<  r>  rH  rL  rR  rU  rq  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  r  r   r&  r(  r.  r1  r4  r<  rA  rD  rG  rJ  rL  rO  rQ  r   r   r   r   r      s   2N2(GGF
E???=L;J61
9B
@L.L4L2L6L6L6A,1(A.A"7.1(1(	C%,A.A,999J"9):V<&< 
66" 6DI$+L&L&L6M2 "K  "B*	0G$.K2C>B@'BRCDBB#BJ/.5$>,-"K,-*K.K0-$-$K0-$"JH6Jp%KN!HF- -.;,r   r   c                   0   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej                  ed
 eej"                              d        Z ej                  ed eej&                              d        Z ej                  ed ed            d        Zy)FastCGISubprocessTestsc                     ddl m} |S )Nr   )FastCGISubprocess)r   rU  )r   rU  s     r   r   z&FastCGISubprocessTests._getTargetClass      8  r   c                 .     | j                         |i |S r   r    r!   s      r   r$   zFastCGISubprocessTests._makeOne  r%   r   c                     ddl m}  |        y r'   r)   r+   s     r   r,   zFastCGISubprocessTests.tearDown  r-   r   c                     t               }d|_        t        |ddd      }| j                  |      }| j	                  t
        |j                         y Nr   r   r   ra   r   )r	   r   r
   r$   rr   NotImplementedErrorr   rN   s       r   test_no_groupz$FastCGISubprocessTests.test_no_group  sD    .gv/?QG==(-x~~>r   c                     t               }d|_        t        |ddd      }| j                  |      }t	        t        |            |_        | j                  t        |j                         y rZ  )
r	   r   r
   r$   r   r   r-  rr   r[  r   rN   s       r   test_no_socket_managerz-FastCGISubprocessTests.test_no_socket_manager  sV    .gv/?QG==(*+<W+EF-x~~>r   c                    t               }d|_        t        |ddd      }| j                  |      }t	        d      }t        |ddd |      }t        |      |_        |j                         }| j                  |d        | j                  t        |j                        d	       | j                  |j                  d   d       | j                  |j                  |j                  d
      d       | j                  |j                  |j                  d      d       | j                  t        |j                        |j                  d	z
         y )Nr   r   r   ra   r   r6  whatever  r   child_stdoutchild_stderrr   )r	   r   r
   r$   r   r   r   r-  r   r7   r   r   rK   r   r   r   rB   rA   rO   sock_configgconfigr   s          r   test_prepare_child_fdsz-FastCGISubprocessTests.test_prepare_child_fds  s   .gv/?QG==('*&w
C'24.w7!&W]]+Q/q)1-x~~n'EFJx~~n'EFJW//0'..12DEr   c                    t               }d|_        t        |ddd      }d|_        | j	                  |      }t        d      }t        |dd	d |      }t        |      |_        |j                         }| j                  |d        | j                  t        |j                        d
       | j                  |j                  d   d       | j                  t        |j                        |j                  dz
         y )Nr   r   r   ra   r   T   r`  ra  r   r   )r	   r   r
   r0  r$   r   r   r   r-  r   r7   r   r   r   r   rd  s          r   (test_prepare_child_fds_stderr_redirectedz?FastCGISubprocessTests.test_prepare_child_fds_stderr_redirected  s    .gv/?QG!%==('+&w
C'24.w7!&W]]+Q/r*A.W//0'..12DEr   c                 @   t               }t        |ddd      }| j                  |      }t        d      }t	        |ddd |      }t        |      |_        | j                  |j                  d u        |j                          | j                  |j                  d u        y )Nr   r   ra   r   r6  r`  ra  )r	   r
   r$   r   r   r   r-  rS   	fcgi_sockbefore_spawnrG   )r   rB   rA   rO   re  rf  s         r   !test_before_spawn_gets_socket_refz8FastCGISubprocessTests.test_before_spawn_gets_socket_ref  s    .gv/?QG==('*&w
C'24.w7**d23++t34r   c                     t               }t        |ddd      }| j                  |      }d|_        |j	                          | j                  |j                  d u        y )Nr   r   ra   r   hello)r	   r
   r$   rl  after_finishrS   rN   s       r   $test_after_finish_removes_socket_refz;FastCGISubprocessTests.test_after_finish_removes_socket_ref
  sS    .gv/?QG==($**d23r   r  )return_valuec                    t               }t        |ddd      }| j                  |      }t               |_        |j                  t        j                  t        j                        }| j                  t        j                  |d       | j                  d|j                  j                  d       t        j
                  }| j                  d|j                  d       |j                  d   d   }|j                  d   d	   }| j                  t        j                  |d
       | j                  t        j                  |d       y )Nr   r   ra   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   rq  r  r   rD   rp  r7   finish_result
call_countr   	call_args)r   rB   rA   rO   r   finish_mockpid_argsts_args           r   test_finish_overridez+FastCGISubprocessTests.test_finish_override  s   .gv/?QG==( $x||<//M	OH11<<N	P ''K22A	C''*1-''*1-wH	JwH	Jr   r   c                    t               }t        |ddd      }| j                  |      }t               |_        |j                         }| j                  t        j                  |d       | j                  d|j                  j                  d       t        j
                  }| j                  d|j                  d       y )Nr   r   ra   r   z2FastCGISubprocess.spawn() did not pass thru result0FastCGISubprocess.before_spawn() not called oncez"Subprocess.spawn() not called once)r	   r
   r$   r   rm  r   r7   r   ppidrv  r   )r   rB   rA   rO   r   
spawn_mocks         r   test_spawn_override_successz2FastCGISubprocessTests.test_spawn_override_success)  s    .gv/?QG==( $!L	NH11<<N	P%%
J11@	Br   Nc                 R   t               }t        |ddd      }| j                  |      }t               |_        d|_        |j                         }| j                  d |d       | j                  d|j                  j                  d       | j                  d |j
                  d       y )	Nr   r   ra   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   rm  rl  r   r7   rv  r   s        r   test_spawn_errorz'FastCGISubprocessTests.test_spawn_error9  s    .gv/?QG==( $/!vL	NH11<<N	Px11L	Nr   )r%  r&  r'  r   r$   r,   r\  r^  rg  rj  rn  rr  r   objectr   r   r   ru  r{  r~  r  r  r   r   r   rS  rS    s    !2??F"F 
54 U\\*h(:P:P(QRJ SJ* U\\*gt'GHB IB U\\*gt'>?N @Nr   rS  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)ProcessGroupBaseTestsc                     ddl m} |S )Nr   )ProcessGroupBase)r   r  )r   r  s     r   r   z%ProcessGroupBaseTests._getTargetClassI  s    7r   c                 .     | j                         |i |S r   r    )r   r   r#   s      r   r$   zProcessGroupBaseTests._makeOneM  s    %t##%t2r22r   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        |j                         }| j                  ||g       y Nr   r/   process1/bin/process1r   pconfigs)r	   r2   r0   r
   r   r  r   r$   	processesget_unstopped_processesr7   )r   rB   r0   pconfig1r  rf  r-  	unstoppeds           r   test_get_unstopped_processesz2ProcessGroupBaseTests.test_get_unstopped_processesP  sv    .3ZP0F0FG#GxjAg&&2113	XJ/r   c                     t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        |j                          y r  )
r	   r2   r0   r
   r   r  r   r$   r  before_remover   rB   r0   r  r  rf  r-  s          r   test_before_removez(ProcessGroupBaseTests.test_before_remove[  sb    .3ZP0F0FG#GxjAg&&2r   c                    ddl m} t               }t        |ddd      }t	        ||j
                        }t        |ddd      }t	        ||j                        }t        |ddd	      }t	        ||j                        }t        |d
d
d      }	t	        |	|j                        }
d|
_	        d|
_
        t        |||||	g      }| j                  |      }||||
d|_        |j                          | j                  |j                   d       | j                  |j                   d       | j                  |j                   d       | j                  |
j                   d       | j                  |
j"                  |j$                         y )Nr   r/   r  r  r  process2/bin/process2process3z/bin/process3process4z/bin/process4  r3  r  )r  r  r  r  FT)r2   r0   r	   r
   r   r|  r   r;  r   rF   rJ   r   r$   r  stop_allr7   stop_calledr   r  )r   r0   rB   r  r  pconfig2r  pconfig3r  pconfig4r  rf  r-  s                r   test_stop_allz#ProcessGroupBaseTests.test_stop_alle  s^   3.ZP0E0EFZP0E0EFZP0F0FGZP0E0EF#(H=? g&'/X&.8E 	--u5--t4--t4--u5)<)<=r   c                 z   t               }ddlm} t        |ddd      }t	        ||j
                        }dd i|_        t        |ddd      }t	        ||j
                        }d	d i|_        t        |||g
      }| j                  |      }||d|_	        |j                         }	| j                  |	d d d       y )Nr   r/   r  r  r  r4  r  r  r5  r  )r  r  )r4  r5  )r	   r2   r0   r
   r   r  rL   r   r$   r  get_dispatchersr7   )
r   rB   r0   r  r  r  r  rf  r-  r   s
             r   test_get_dispatchersz*ProcessGroupBaseTests.test_get_dispatchers  s    .3ZP0F0FG !$xZP0F0FG !$x#Gx6JKg&(0hH%%'DD!12r   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        |j                          | j                  |j                  d       y Nr   r/   r  r  r  r  T)r	   r2   r0   r
   r   r  r   r$   r  rb   r7   rc   r  s          r   rd   z%ProcessGroupBaseTests.test_reopenlogs  sx    .3ZP0F0FG#GxjAg&%x0//6r   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        |j                          | j                  |j                  d       y r  )r	   r2   r0   r
   r   r  r   r$   r  rf   r7   logsremovedr  s          r   rh   z%ProcessGroupBaseTests.test_removelogs  sx    .3ZP0F0FG#GxjAg&%x0--t4r   c                    t               }t        |      }| j                  |      }t        |      }| j                  |      }t        |      }| j                  |      }d|j                  _        d|j                  _        d|j                  _        ||g}|j                          | j                  |||g       | j                  ||       | j                  ||       y )Nr5  ra   )r	   r   r$   rA   r  r  r7   rk  )	r   rB   gconfig1group1gconfig2group2config3group3r   s	            r   test_ordering_and_comparisonz2ProcessGroupBaseTests.test_ordering_and_comparison  s    .$W-x($W-x(#G,w'!"!"!"V	VV,-FF+(r   N)r%  r&  r'  r   r$   r  r  r  r  rd   rh   r  r   r   r   r  r  H  s/     3	0><3	7	5)r   r  c                       e Zd Zd Zd Zd Zy)ProcessGroupTestsc                     ddl m} |S )Nr   )ProcessGroup)r   r  )r   r  s     r   r   z!ProcessGroupTests._getTargetClass  s    3r   c                     t               }t        |      }| j                  |      }t        |      }| j	                  d|v        | j	                  |j                  d      |       y )Nzsupervisor.process.ProcessGroupnamed whatever>r	   r   r$   rR   rS   rU   )r   rB   rf  r-  rV   s        r   rW   zProcessGroupTests.test_repr  sT    .#G,g&K9Q>?

#45q9r   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        |j                          | j                  |j                  d       y r  )r	   r2   r0   r
   r   r  r   r$   r  r  r7   transitionedr  s          r   test_transitionz!ProcessGroupTests.test_transition  sx    .3ZP0F0FG#GxjAg&%x0..5r   N)r%  r&  r'  r   rW   r  r   r   r   r  r    s    :	6r   r  c                   $    e Zd Zd Zd Zd Zd Zy)FastCGIProcessGroupTestsc                     ddl m} |S )Nr   )FastCGIProcessGroup)r   r  )r   r  s     r   r   z(FastCGIProcessGroupTests._getTargetClass  s    :""r   c                 4    | j                         } ||fi |S r   r    )r   rA   kwargsclss       r   r$   z!FastCGIProcessGroupTests._makeOne  s     ""$6$V$$r   c                     t               }t        |      }d |_         G d dt              }| j	                  ||       y )Nc                       e Zd Zd Zd Zy)VFastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManagerc                      y r   r   r   rA   r   s      r   __init__z_FastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManager.__init__      r   c                      y r   r   r   s    r   
get_socketzaFastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManager.get_socket  r  r   N)r%  r&  r'  r  r  r   r   r   DummySocketManagerr    s    4&r   r  socketManager)r	   r   socket_configr  r$   r   rB   rf  r  s       r   !test___init__without_socket_errorz:FastCGIProcessGroupTests.test___init__without_socket_error  s:    .#G, $	' 	' 	g-?@r   c                     t               }t        |      }d |_         G d dt              }| j	                  t
        | j                  ||       y )Nc                       e Zd Zd Zd Zd Zy)SFastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManagerc                      y r   r   r  s      r   r  z\FastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.__init__  r  r   c                     t        d      )Nr5  )KeyErrorr  s    r   r  z^FastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.get_socket  s    qk!r   c                      y)NrA   r   r  s    r   rA   zZFastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.config  s    r   N)r%  r&  r'  r  r  rA   r   r   r   r  r    s    4" r   r  r  )r	   r   r  r  rr   
ValueErrorr$   r  s       r   test___init__with_socket_errorz7FastCGIProcessGroupTests.test___init__with_socket_error  sK    .#G, $	  	  	MM72D 	 	r   N)r%  r&  r'  r   r$   r  r  r   r   r   r  r    s    #%Ar   r  c                   ~    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)EventListenerPoolTestsc                     ddl m}  |        y r'   r)   r+   s     r   setUpzEventListenerPoolTests.setUp  r-   r   c                     ddl m}  |        y r'   r)   r+   s     r   r,   zEventListenerPoolTests.tearDown  r-   r   c                     ddl m} |S )Nr   )EventListenerPool)r   r  )r   r  s     r   r   z&EventListenerPoolTests._getTargetClass  rV  r   c                    t               }t        |      } G d d      }|f|_        | j                  |      }ddlm} | j                  t        |j                        d       | j                  |j                  d   ||j                  f       | j                  |j                  d   |j                  |j                  f       | j                  |j                  d       y )Nc                       e Zd Zy)3EventListenerPoolTests.test_ctor.<locals>.EventTypeNr%  r&  r'  r   r   r   	EventTyper        r   r  r   r   r   ra   r]  )r	   r   pool_eventsr$   r   r   r7   r   	callbacks_acceptEventr  handle_rejectedserialr   rB   rf  r  poolr   s         r   rP   z EventListenerPoolTests.test_ctor  s    .#G,	 	(l}}W%%V--.2))!,))*	,))!,&&(<(<=	?b)r   c                 4   t               }t        |      } G d d      }|f|_        | j                  |      }ddlm} | j                  t        |j                        d       |j                          | j                  t        |j                        d       y )Nc                       e Zd Zy)UEventListenerPoolTests.test_before_remove_unsubscribes_from_events.<locals>.EventTypeNr  r   r   r   r  r    r  r   r  r   r   r   )
r	   r   r  r$   r   r   r7   r   r  r  r  s         r   +test_before_remove_unsubscribes_from_eventszBEventListenerPoolTests.test_before_remove_unsubscribes_from_events  sz    .#G,	 	(l}}W%%V--.2V--.2r   c                 \   t               }d|_        t        |      }d|_        | j	                  |      }ddlm} |j                  |j                  j                  ddd      }|j                  dd	      \  }}|j                         }| j                  |d   d
       | j                  |d	   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d       y )Nthesupervisornamethepoolnamer   r   P      zpayload

ra   zver:3.0zserver:thesupervisornamer   z	serial:80r   zpool:thepoolnamer4  zpoolserial:20r5  z&eventname:PROCESS_COMMUNICATION_STDOUTr   zlen:8)r	   
identifierr   r   r$   r   r   _eventEnvelope
EventTypesPROCESS_COMMUNICATION_STDOUTr   r7   )	r   rB   rf  r  r   r   headerpayloadheaderss	            r   test__eventEnvelopez*EventListenerPoolTests.test__eventEnvelope   s   .0#G,$}}W%%$$::BKQ ,,tQ/,,.Y/%?@[1%78_5%MNW-+.r   c                    t               }t        |      }t        |ddd      }t        |      t        ||g      }| j	                  |      }di|_        d d g|_         G d d       G fdd      } |       }d|_        |j                  |       | j                  |j                  |j                  d d g       y )	Nr  r  r  c                       e Zd ZdZy)LEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent1r7  N)r%  r&  r'  r  r   r   r   DummyEvent1r  =  s    Fr   r  c                   $    e Zd ZW Z W         Zy)LEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent2N)r%  r&  r'  r  r  )r  r  s   r   DummyEvent2r	  ?  s    GMEr   r
  ra   )r	   r   r
   r   r$   r  event_bufferr  r  r7   r  )	r   rB   rf  r  r  r
  
dummyeventr  r  s	          @@r    test_handle_rejected_no_overflowz7EventListenerPoolTests.test_handle_rejected_no_overflow4  s    .#G,ZP)#GxjA}}W%$h/!4L	 		" 	" !]

Z(**Z-=-=tT,JKr   c                 X   t               }t        |      }t        |ddd      }t        |      t        ||g      }d|_        | j                  |      }di|_         G d d       G fdd      } d	      } d
      } d      } |d      }	|||g|_        |j                  |	       |j                  D 
cg c]  }
|
j                   }}
| j                  |g d       | j                  |j                  j                  j                  j                  d   d       y c c}
w )Nr  r  r  r   c                       e Zd Zd Zy)WEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyEventc                     || _         y r   r  )r   r  s     r   r  z`EventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyEvent.__init__Q  s	    $r   Nr%  r&  r'  r  r   r   r   r   r  P  s    %r   r   c                       e Zd Z fdZy)_EventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEventc                 .    | _          |      | _        y r   )r  r  )r   r  r   r  s     r   r  zhEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEvent.__init__T  s    ''/
r   Nr  )r   r  s   r   DummyRejectedEventr  S  s    0r   r  rA  bcrejected)r  r  r  r   z9pool whatever event buffer overflowed, discarding event a)r	   r   r
   r   buffer_sizer$   r  r  r  r  r7   rA   rB   r   r   )r   rB   rf  r  r  r  event_aevent_bevent_c	rej_eventr   serialsr   r  s               @@r   ,test_handle_rejected_event_buffer_overflowedzCEventListenerPoolTests.test_handle_rejected_event_buffer_overflowedG  s   .#G,ZP)#GxjA}}W%$h/	% 	%	0 	0 S/S/S/&z2	$gw7Y'&*&7&79AHH99"89,,3388;G	I :s    D'c                    t               }t        |      }t        |ddd      }ddlm} t        ||g      }| j                  |      }|j                  d   }t        t        j                  t        j                  t        j                              |_        |j                  |_        t               }|j!                  |       |j#                          | j%                  |j                  |j                         | j%                  |j&                  |g       | j%                  |j(                  j*                  d   d       | j%                  |j(                  j*                  d   d       y )	Nr  r  r   EventListenerStatesr  zUepipe occurred while sending event abc to listener process1, listener state unchangedra   z<rebuffering event abc for pool whatever (buf size=0, max=10))r	   r   r
   r2   r$  r$   r  r   r   rP  r   r   write_exceptionREADYlistener_stater   r  dispatchr7   r  r   r   )r   rB   rf  r  r$  r  r  r  s           r   test_dispatch_pipe_errorz/EventListenerPoolTests.test_dispatch_pipe_errorc  s   .#G,ZP9#GxjA}}W%>>*-#*5;;+-;;u{{+C$E "5";";% 002E2K2KL**UG4,,Q/1	2 	,,Q/J	Lr   c                    ddl m} t               }t        |      }t	        |ddd      }t        ||g      }| j                  |      }|j                  d   }ddlm} |j                  |_
        t        d       }|j                  |       | j                  |j                  |j                         | j                  |j                  d   |j                         y )Nr   )GlobalSerialr  r  r  r#  r`  )r   r+  r	   r   r
   r$   r  r2   r$  r&  r'  r   r  r7   r  pool_serials)	r   r+  rB   rf  r  r  r  r$  r  s	            r   1test__acceptEvent_attaches_pool_serial_and_serialzHEventListenerPoolTests.test__acceptEvent_attaches_pool_serial_and_serialy  s    3.#G,ZP#GxjA}}W%>>*-9"5";";4 % |':':;++J7Er   c                     t               }t        |      }| j                  |      }t        |      }| j	                  d|v        | j	                  |j                  d             y )Nz$supervisor.process.EventListenerPoolr  r  )r   rB   rf  r  rV   s        r   rW   z EventListenerPoolTests.test_repr  sR    .#G,}}W%J>!CD

#456r   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        t               }d|_
        ddlm} |j                  |_        |j                  |       |j                          | j!                  |j"                  d	       | j!                  |j$                  |g       y )
Nr   r/   r  r  r  r  rA  r#  T)r	   r2   r0   r
   r   r;  r   r$   r  r   r  r$  BUSYr'  r  r  r7   r  r  	r   rB   r0   r  r  rf  r  r  r$  s	            r   test_transition_nobody_readyz3EventListenerPoolTests.test_transition_nobody_ready  s    .3ZP0F0FG#GxjA}}W%$h/9"5":":% ..5**UG4r   c                 F   t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        t               }ddlm
} d|_        |j                  |_        |j                  |       |j                          | j!                  |j"                  d	       | j!                  |j$                  |g       | j!                  |j&                  d
       | j!                  |j                  |j                         y )Nr   r/   r  r  r  r  r#  ra   Tr   )r	   r2   r0   r
   r   r;  r   r$   r  r   r$  r  r&  r'  r  r  r7   r  r  stdin_bufferr1  s	            r   &test_transition_event_proc_not_runningz=EventListenerPoolTests.test_transition_event_proc_not_running  s    .3ZP0F0FG#GxjA}}W%$h/9"5";";% ..5**UG4..4002E2K2KLr   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      | j                        }d|i|_        t               }ddlm
} |j                  |_         G fdd	      }||_        |j                  |       |j                          | j!                  |j"                  d
       | j!                  |j$                  g        |j&                  j)                  dd      \  }	}
| j!                  |
d|
       | j!                  |j                  |j*                         | j!                  |j,                  |       y )Nr   r/   r  r  r  r  r#  c                       e Zd ZW  Zy)MEventListenerPoolTests.test_transition_event_proc_running.<locals>.DummyGroupNr%  r&  r'  rA   rf  s   r   
DummyGroupr8        Fr   r;  T   
ra      dummy event)r	   r2   r0   r
   r   r   r   r$   r  r   r$  r&  r'  r-  r  r  r7   r  r  r4  r   r0  r  r   rB   r0   r  r  r  r  r$  r;  r   r  rf  s              @r   "test_transition_event_proc_runningz9EventListenerPoolTests.test_transition_event_proc_running  s#   .3ZP0E0EF#GxjA}}W%$h/9"5";";	 	#% ..5**B/"//55eQ?.':002E2J2JK/r   c                   	 t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      	| j                  	      }d|_        t        j                         |_
        d|i|_        t               }ddlm} |j                  |_         G 	fd	d
      }||_        |j#                  |       |j%                          | j'                  |j(                  d       | j'                  |j*                  |g       y )Nr   r/   r  r  r  r  r5  r#  c                       e Zd ZW  Zy)kEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_notyet.<locals>.DummyGroupNr9  r:  s   r   r;  rC    r<  r   r;  T)r	   r2   r0   r
   r   r   r   r$   dispatch_throttlerd  last_dispatchr  r   r$  r&  r'  r-  r  r  r7   r  r  )
r   rB   r0   r  r  r  r  r$  r;  rf  s
            @r   @test_transition_event_proc_running_with_dispatch_throttle_notyetzWEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_notyet  s    .3ZP0E0EF#GxjA}}W%!"!YY[$h/9"5";";	 	#% ..5**UG4r   c                    t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      | j                        }d|_        t        j                         dz
  |_
        d|i|_        t               }dd	lm} |j                  |_         G fd
d      }||_        |j#                  |       |j%                          | j'                  |j(                  d       | j'                  |j*                  g        |j,                  j/                  dd      \  }	}
| j'                  |
d|
       | j'                  |j                  |j0                         | j'                  |j2                  |       y )Nr   r/   r  r  r  r  r5  r  r#  c                       e Zd ZW  Zy)jEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_ready.<locals>.DummyGroupNr9  r:  s   r   r;  rI    r<  r   r;  Tr=  ra   r>  )r	   r2   r0   r
   r   r   r   r$   rD  rd  rE  r  r   r$  r&  r'  r-  r  r  r7   r  r  r4  r   r0  r  r?  s              @r   ?test_transition_event_proc_running_with_dispatch_throttle_readyzVEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_ready  s>   .3ZP0E0EF#GxjA}}W%!"!YY[4/$h/9"5";";	 	#% ..5**B/"//55eQ?.':002E2J2JK/r   c                 b  
 t        j                          dz   }t               }ddlm} t	        |ddd      }t        ||j                        }t        ||g      
| j                  
      }d|_	        ||_
        d|i|_        t               }dd	lm} |j                  |_         G 
fd
d      }	|	|_        |j#                  |       |j%                          | j'                  |j(                  d       | j'                  |j*                  |g       | j-                  |j                  |k         y )Nr  r   r/   r  r  r  r  r5  r#  c                       e Zd ZW  Zy)|EventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_future.<locals>.DummyGroupNr9  r:  s   r   r;  rM  	  r<  r   r;  T)rd  r	   r2   r0   r
   r   r   r   r$   rD  rE  r  r   r$  r&  r'  r-  r  r  r7   r  r  rS   )r   r  rB   r0   r  r  r  r  r$  r;  rf  s             @r   Qtest_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_futurezhEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_future  s    iikD(.3ZP0E0EF#GxjA}}W%!"($h/9"5";";	 	#% ..5**UG4 	**[89r   c                 6   t               }ddlm} t        |ddd      }t	        ||j
                        }t        ||g      }| j                  |      }d|i|_        t               }|j                  |       | j                  |j                  |      d       y )Nr   r/   r  r  r  r  F)r	   r2   r0   r
   r   r|  r   r$   r  r   r  r7   _dispatchEvent)r   rB   r0   r  r  rf  r  r  s           r   test__dispatchEvent_notreadyz3EventListenerPoolTests.test__dispatchEvent_notready	  s    .3ZP0E0EF#GxjA}}W%$h/% ,,U3U;r   c                   
 t               }ddlm} t        |ddd      }t	        ||j
                        }d }||_        t        ||g      
| j                  
      }d|i|_	        t               }ddlm} |j                  |_         G 
fd	d
      }	|	|_        |j                  |       | j!                  t"        |j$                  |       y )Nr   r/   r  r  r  c                 4    t        t        j                        r   )r   r   r   r   s    r   raise_epipezcEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSError.<locals>.raise_epipe$	  r   r   r  r#  c                       e Zd ZW  Zy)bEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSError.<locals>.DummyGroupNr9  r:  s   r   r;  rV  -	  r<  r   r;  )r	   r2   r0   r
   r   r   rC  r   r$   r  r   r$  r&  r'  r-  r  rr   r   rP  )r   rB   r0   r  r  rT  r  r  r$  r;  rf  s             @r   7test__dispatchEvent_proc_write_raises_non_EPIPE_OSErrorzNEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSError	  s    .3ZP0E0EF	($#GxjA}}W%$h/9"5";";	 	#% '4#6#6>r   N)r%  r&  r'  r  r,   r   rP   r  r  r  r!  r)  r-  rW   r2  r5  r@  rF  rJ  rN  rQ  rW  r   r   r   r  r    sf    !*
3/(L&I8L,F75"M&0.5*02:4
<?r   r  c                       e Zd Zd Zd Zd Zy)test_new_serialc                     ddl m}  ||      S )Nr   )
new_serial)r   r[  )r   instr[  s      r   _callFUTztest_new_serial._callFUT4	  s    1$r   c                     ddl m  G fddt              } |       }| j                  |      }| j	                  |j
                  d       | j	                  |d       y )Nr   r   c                       e Zd Z fdZy)8test_new_serial.test_inst_serial_is_maxint.<locals>.Instc                     | _         y r   r  )r   r   s    r   r  zAtest_new_serial.test_inst_serial_is_maxint.<locals>.Inst.__init__;	  s
    $r   Nr  r   s   r   Instr`  :	  s    %r   rb  )supervisor.compatr   r  r]  r7   r  )r   rb  r\  r   r   s       @r   test_inst_serial_is_maxintz*test_new_serial.test_inst_serial_is_maxint8	  sM    ,	%6 	% vt$a(#r   c                      G d dt               } |       }| j                  |      }| j                  |j                  d       | j                  |d       y )Nc                       e Zd Zd Zy)<test_new_serial.test_inst_serial_is_not_maxint.<locals>.Instc                     d| _         y )Nra   r  r  s    r   r  zEtest_new_serial.test_inst_serial_is_not_maxint.<locals>.Inst.__init__D	  s	    r   Nr  r   r   r   rb  rg  C	  s     r   rb  r   )r  r]  r7   r  )r   rb  r\  r   s       r   test_inst_serial_is_not_maxintz.test_new_serial.test_inst_serial_is_not_maxintB	  sI    	 6 	  vt$a(#r   N)r%  r&  r'  r]  rd  ri  r   r   r   rY  rY  3	  s     $$r   rY  )#r   r   r_  r   rd  unittestrc  r   r   r^  r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   supervisor.optionsr   TestCaser   rS  r  r  r  r  rY  r   r   r   <module>rm     s     	     & $ 7 7 . . . 3 1 , 6 3 3 7 ) )f,h'' f,P5DNX.. DNLt)H-- t)l6- 60 x00  Dy?2 y?v	$h'' $r   