
    vg                       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j                  Z G d dej                  Z G d dej                  Z G d de          Z G d dej                  Z  G d de          Z! G d dej                  Z"dS )    N)as_bytesmaxint)Mockpatchsentinel)DummyOptions)DummyPConfig)DummyProcess)DummyPGroupConfig)DummyDispatcher)
DummyEvent)DummyFCGIGroupConfig)DummySocketConfig)DummyProcessGroup)DummyFCGIProcessGroup
Subprocess)
BadCommandc                   *   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\d[S )\SubprocessTestsc                     ddl m} |S )Nr   r   )supervisor.processr   )selfr   s     Z/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/supervisor/tests/test_process.py_getTargetClasszSubprocessTests._getTargetClass   s    111111    c                 6     |                                  |i |S Nr   r   argkws      r   _makeOnezSubprocessTests._makeOne   #    %t##%%s1b111r   c                 &    ddl m}  |             d S Nr   )clearsupervisor.eventsr(   r   r(   s     r   tearDownzSubprocessTests.tearDown"   #    ++++++r   c                     ddl m} ddlm} |j                                        D ]9\  }}t          |t                    r|                      ||          |           :d S )Nr   ProcessStates)getProcessStateDescription)	supervisor.statesr0   r   r1   __dict__items
isinstanceintassertEqual)r   r0   r1   	statenamecodes        r   test_getProcessStateDescriptionz/SubprocessTests.test_getProcessStateDescription&   s    333333AAAAAA,5;;== 	N 	NOIt$$$ N  !;!;D!A!A9MMM	N 	Nr   c                 8   t                      }t          |dddd          }|                     |          }|                     |j        |           |                     |j        j        |           |                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     |j	        d           | 
                    |j                   | 
                    |j                   |                     |j        d           |                     |j        i            |                     |j        i            |                     |j        d            d S )Ncatbin/catz/tmp/temp123.logz/tmp/temp456.logstdout_logfilestderr_logfiler   )r	   r
   r$   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-   s   ..gui-?-?A A A ==((&1110':::+Q///q)))+Q///*A...+++5666)***)1---,,,-r222*D11111r   c                 ,   t                      }t          |dd          }|                     |          }t          |          }|                     |                    d                     |                     |                    d                     d S )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   s|    ..gui88==((NN%566777

#DEEFFFFFr   c                 z   t                      }t          |dd          }|                     |          }t          d          t          d          d|_        |                                 |                     |j        d         j        d           |                     |j        d         j        d	           d S 
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7==(("14"@"@"@"14"@"@"@ B  B-a0>EEE-a0>FFFFFr   c                 z   t                      }t          |dd          }|                     |          }t          d          t          d          d|_        |                                 |                     |j        d         j        d           |                     |j        d         j        d	           d S rY   )r	   r
   r$   r   rL   
removelogsr7   logs_removedrN   s       r   test_removelogszSubprocessTests.test_removelogsS   s    ..gvw77==(("14"@"@"@"14"@"@"@ B  B-a0=tDDD-a0=uEEEEEr   c                 |   t                      }t          |dddd          }|                     |          }t          d          t          d          d	|_        |                                 |                     |j        d
         j                   |                     |j        d         j                   d S )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 9 9 ==(("14"@"@"@"14"@"@"@ B  B,Q/BCCC,Q/CDDDDDr   c                     t                      }t          |dd          }|                     |          }|                     t          |j                   d S )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   sL    ..g|]CC==((*h&=>>>>>r   c                     t                      }t          |dd          }|                     |          }|                     t          |j                   d S )Nempty rq   rN   s       r   %test_get_execv_args_bad_command_emptyz5SubprocessTests.test_get_execv_args_bad_command_emptyo   sL    ..gw33==((*h&=>>>>>r   c                     t                      }t          |dd          }|                     |          }|                     t          |j                   d S )Nwhitespaceonlyz 	 rq   rN   s       r   .test_get_execv_args_bad_command_whitespaceonlyz>SubprocessTests.test_get_execv_args_bad_command_whitespaceonlyu   sM    ..g'7@@==((*h&=>>>>>r   c                     t                      }t          |dd          }|                     |          }|                                }|                     |ddgf           d S )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{   sa    ..gz;??==((&&((k];<<<<<r   c                     t                      }t          |dd          }|                     |          }|                                }|                     |dddgf           d S )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   se    ..gz3LMM==((&&((k=-IJKKKKKr   c                     t                      }t          |dd          }|                     |          }|                                }|                     |ddgf           d S )Nr}   r   r   s        r   test_get_execv_args_rel_missingz/SubprocessTests.test_get_execv_args_rel_missing   sa    ..gz:>>==((&&((
ZL9:::::r   c                     t                      }t          |dd          }|                     |          }|                                }|                     |dddgf           d S )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   se    ..gz3KLL==((&&((
Z,GHIIIIIr   c                 T   d}t                      }t          |d|          }|                     |          }|                                }|                     t          |          d           |                     |d         d           |                     |d         ddg           d S )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   s    "
..gtZ88==((&&((TA&&&a),,,a9e"455555r   c                 T   d}t                      }t          |d|          }|                     |          }|                                }|                     t          |          d           |                     |d         d           |                     |d         ddg           d S )Nzsh foor   r   r   r   ra   r   r   r   s         r   test_get_execv_args_relz'SubprocessTests.test_get_execv_args_rel   s    
..gtZ88==((&&((TA&&&a),,,a4-00000r   c                    t          j                    5 }t          j                            |j                  \  }d|z  }t                      }t          |d|          }fd|_        | 	                    |          }|
                                }|                     |d         |j                   |                     |d         |dg           d d d            d S # 1 swxY w Y   d S )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 "af 5 5GX!H,J"nnG!'4<<F1111FO}}V,,H**,,DT!Waf---T!Wx&7888		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9s   B>C  C$'C$c                    t                      }t          |dd          }|                     |          }|                    d           |                     |j        d           |                     |j        j        d         d           d S )NrZ   r[   r   r   zspawnerr: foo)r	   r
   r$   record_spawnerrr7   rM   loggerdatarN   s       r   test_record_spawnerrz$SubprocessTests.test_record_spawnerr   s    ..gvw77==((  '''*E222,Q/AAAAAr   c                    t                      }t          |dd          }|                     |          }d|_        ddlm} |j        |_        |                                }| 	                    |d            | 	                    |j
        j        d         d           | 	                    |j        |j                   d S )Nr   r   Tr   r/   zprocess 'sh' already running)r	   r
   r$   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7==((333333&.!!&&&,Q/1OPPP)>?????r   c                 P  	 t                      }t          |dd          }|                     |          }ddlm} |j        |_        ddlm} g 	|	                    |j
        	fd           |                                }|                     |d            |                     |j        d           |                     |j        j        d         d           |                     |j                   |                     |j                   ddlm} |                     |j        |j                   |                     t'          	          d	           	d         }	d
         }|                     |j        |j                   |                     |j        |j                   d S )Nbadz/bad/filenamer   r/   eventsc                 .                         |           S r   appendx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   s   ..guo>>==((333333&.%%%%%%13H3H3H3HIII!!&&&*N;;;,Q/1IJJJ'''()))333333)>???Q###11)6+KLLL)6+JKKKKKr   c                   	 t                      }t          t          j        t	          j        t          j                            |_        t          |dd          }|                     |          }ddl	m
} |j        |_        ddlm} g 	|                    |j        	fd           |                                }|                     |d            |                     |j        d           |                     |j        j        d         d           |                     |j                   |                     |j                   ddl	m
} |                     |j        |j                   |                     t3          	          d	           	\  }}|                     |j        |j                   |                     |j        |j                   d S )
Ngood/good/filenamer   r/   r   c                 .                         |           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   s   ..'.u|/1{5</H/H(J (J$gv/?@@==((333333&.%%%%%%13H3H3H3HIII!!&&&*>	@ 	@ 	@,Q/H	J 	J 	J'''()))333333)>???Q###)6+KLLL)6+JKKKKKr   c                   
 t                      }t          t          j        t	          j        t          j                            |_        t          |dd          }|                     |          }ddl	m
} |j        |_        ddlm} g 
|                    |j        
fd           |                                }|                     |d            d}|                     |j        |           |                     |j        j        d         d|z             |                     |j                   |                     |j                   ddl	m
} |                     |j        |j                   |                     t3          
          d	           
\  }}	|                     |j        |j                   |                     |	j        |j                   d S )
Nr   r   r   r/   r   c                 .                         |           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   s   ..'.u{/1{5;/G/G(I (I$gv/?@@==((333333&.%%%%%%13H3H3H3HIII!!&&&B*C000,Q/#1EFFF'''()))333333)>???Q###)6+KLLL)6+JKKKKKr   c                 \   t                      }t          |ddd          }d }||_        |                     |          }ddlm} |j        |_        ddlm	} g |
                    |j        fd	           |                                }|                     |d            d
}|                     |j        |           |                     |j        j        d         d|z             |                     |j                   |                     |j                   ddlm} |                     |j        |j                   |                     t)                    d           \  }	}
|                     |	j        |j                   |                     |
j        |j                   d S )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                 .                         |           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  s   ..gE:-;= = =	( 	( 	(".==((333333&.%%%%%%13H3H3H3HIII!!&&&B*C000,Q/#1EFFF'''()))333333)>???Q###)6+KLLL)6+JKKKKKr   c                 Z  
 t                      }t          t          j        t	          j        t          j                            |_        t          |dd          }|                     |          }ddl	m
} |j        |_        ddlm} g 
|                    |j        
fd           |                                }|                     |d            d}|                     |j        |           |                     |j        j        d         d|z             |                     t-          |j                  d	           |                     t-          |j                  d	           |                     |j                   |                     |j                   ddl	m
} |                     |j        |j                   |                     t-          
          d
           
\  }}	|                     |j        |j                   |                     |	j        |j                   d S )Nr   r   r   r/   r   c                 .                         |           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)B"D "Dgv/?@@==((333333&.%%%%%%13H3H3H3HIII!!&&&C*C000,Q/#1EFFFW8991===W788!<<<'''()))333333)>???Q###)6+KLLL)6+JKKKKKr   c                 Z  
 t                      }t          t          j        t	          j        t          j                            |_        t          |dd          }|                     |          }ddl	m
} |j        |_        ddlm} g 
|                    |j        
fd           |                                }|                     |d            d}|                     |j        |           |                     |j        j        d         d|z             |                     t-          |j                  d	           |                     t-          |j                  d	           |                     |j                   |                     |j                   ddl	m
} |                     |j        |j                   |                     t-          
          d
           
\  }}	|                     |j        |j                   |                     |	j        |j                   d S )Nr   r   r   r/   r   c                 .                         |           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)A"C "Cgv/?@@==((333333&.%%%%%%13H3H3H3HIII!!&&&;*C000,Q/#1EFFFW8991===W788!<<<'''()))333333)>???Q###)6+KLLL)6+JKKKKKr   c                    t                      }d|_        t          |ddd          }|                     |          }|                                }|                     |d            |                     |j        d            |                     |j        d            |                     |j        d           |                     t          |j
                  d           |                     t          |j                  |j        dz
             |                     |j        d           |                     |j        ddgf           |                     |j        d           |                     |j        dd	i           d S )
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  s   ..gv/?QGGG==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEE-q111+*-=,>?	B 	B 	B.555 	>?	A 	A 	A 	A 	Ar   c                    t                      }d|_        d|_        t          |ddd          }|                     |          }|                                }|                     |d            |                     |j        d            |                     |j        d            |                     |j	        d           |                     t          |j                  d           |                     t          |j                  |j        dz
             |                     |j        d	d
i           |                     |j        d            |                     |j        d           |                     |j        d           d S )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|  sz   ..-gv/?QGGG==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEE ? @	A 	A 	A 	-t444.666*C00000r   c                    t                      }d|_        t          |ddd          }|                     |          }|                                }|                     |d            |                     |j        d            |                     |j        d            |                     |j        d           |                     t          |j
                  d           |                     t          |j                  |j        dz
             |                     |j        ddgf           |                     |j        d           |                     |j        d           |                     |j        dd	i           d S )
Nr   r   r   /tmp	directoryTr   r   r   )r	   r   r
   r$   r   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 0 0==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEE+*-=,>?	B 	B 	B2D999.555 	>?	A 	A 	A 	A 	Ar   c                    t                      }d|_        t          |ddd          }|                     |          }|                                }|                     |d            |                     |j        ddgf           |                     |j        d           |                     |j        d           |                     |j	        ddi           d S )Nr   r   r   r   )umaskTr   )
r	   r   r
   r$   r   r7   r   umasksetr   r   r   s        r   test_spawn_as_child_sets_umaskz.SubprocessTests.test_spawn_as_child_sets_umask  s    ..gv/?qIII==((!!&&&+*-=,>?	B 	B 	B)1---.555 	>?	A 	A 	A 	A 	Ar   c                    t                      }d|_        t          t          j        t          j        t          j                            |_        t          |ddd          }| 	                    |          }|
                                }|                     |d            |                     |j        d            |                     |j        d            |                     |j        d           |                     t          |j                  d           |                     t          |j                  |j        dz
             |                     |j        d            dd	i}|                     |j        |           |                     |j        d
           |                     |j        d           |                     |j        d           d S )Nr   r   r   r  r  Tr   r   zUsupervisor: couldn't chdir to /tmp: ENOENT
supervisor: child process was not spawned
r   F)r	   r   r   r   ENOENTr   r   chdir_exceptionr
   r$   r   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  s   ..")%,*,+el*C*C#E #Egv/?(.0 0 0==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEE+T222 @ A#...*C0002E:::.66666r   c                 B   t                      }d|_        t          t          j        t          j        t          j                            |_        t          |dd          }| 	                    |          }|
                                }|                     |d            |                     |j        d            |                     |j        d            |                     |j        d           |                     t          |j                  d           |                     t          |j                  |j        dz
             ddi}|                     |j        |           |                     |j        d            |                     |j        d           d S )	Nr   r   r   Tr   r   zZsupervisor: couldn't exec /good/filename: EPERM
supervisor: child process was not spawned
r   )r	   r   r   r   r   r   r   execv_exceptionr
   r$   r   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  su   ..")%+*,+ek*B*B#D #Dgv/?@@==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEE @ A#...-t444*C00000r   c                 f   t                      }d|_        t          t          j                  |_        t          |dd          }|                     |          }|                                }| 	                    |d            | 	                    |j
        d            | 	                    |j        d            | 	                    |j        d           | 	                    t          |j                  d           | 	                    t          |j                  |j        dz
             |j        d         }d}|                     |                    |                     |                     d|v            | 	                    |j        d            | 	                    |j        d	           d S )
Nr   r   r   Tr   r   z)supervisor: couldn't exec /good/filename:RuntimeErrorr   )r	   r   r  r   r  r  r
   r$   r   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/?@@==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEEoa :t,,---#-...-t444*C00000r   c                 V   t                      }d|_        t          |ddddi          }|                     |          }|                                }|                     |d            |                     |j        ddgf           |                     |j        d         d           d S )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II28<cBBBBBr   c                 t   t                      }d|_        t          |dd          }|                     |          } G d d          } |            |_         |            |j        _        |                                }|                     |d            |                     |j        ddgf           |                     |j	        d         d           |                     |j	        d         d           |                     |j	        d	         d
           |                     |j	        d         d           d S )Nr   r<   r   c                       e Zd ZdZdS )QSubprocessTests.test_spawn_as_child_environment_supervisor_envvars.<locals>.DummydummyN)__name__
__module____qualname__r   r   r   r   Dummyr#    s        DDDr   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  sj   ..guj99==((	 	 	 	 	 	 	 	 %!!&&&+j:,-GIII%&:;S	B 	B 	B%&?@%	I 	I 	I%&=>	I 	I 	I%&=>#	% 	% 	% 	% 	%r   c                    t                      }d|_        t          |ddd          }d|_        |                     |          }|                                }|                     |d            |                     |j        d            |                     |j        d            |                     |j	        d           |                     t          |j                  d           |                     t          |j                  |j        dz
             |                     |j        d           |                     |j        ddgf           |                     |j        d           |                     |j        dd	i           d S )
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  s   ..gv/?QGGG!%==((!!&&&4d;;;3T:::)4000W]++Q///W/00'.12DEEE-q111+*-=,>?	B 	B 	B.555 	>?	A 	A 	A 	A 	Ar   c                 v   t                      }d|_        t          |dd          }|                     |          }|                                }|                     |d           |                     |j        d         j        t                     |                     |j        d         j        t                     |                     |j        d         j        t                     |                     |j	        d         d           |                     |j	        d         d           |                     |j	        d	         d           |                     |j
        d            |                     t          |j                  d
           |                     |j        j        d         d           |                     |j        d            |                     |j                   |                     |j        j        j        d         |           ddlm} |                     |j        |j                   d S )N
   r   r            stdinstdoutstderrr   r   zspawned: 'good' with pid 10r/   )r	   r   r
   r$   r   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LL-a0:OLLL-a0:OLLL0!44411555115554d;;;W788!<<<,Q/1NOOO*D111'''0;B?JJJ333333)?@@@@@r   c                 F   t                      }d|_        t          |ddd          }|                     |          }|                                }|                     |d           |                     |j        d         j        t                     |                     |j        d         j        t                     |                     |j	        d         d           |                     |j	        d	         d           |                     |j	        d
         d            d S )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 4 4==((!!$$$-a0:OLLL-a0:OLLL0!444115551488888r   c                    d}t                      }t          |d|          }|                     |          }ddz  }|                     t          |j        |           d|_        |                                 |                    |           |j        d         }| 	                    ||j
        |         j                   d|_        |                     t          |j        |           d S )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88t>'*x3H=JKKK'8>488888r   c                    d}t                      }t          |d|          }|                     |          }ddz  }|                     t          |j        |           d|_        |                                 |j        d         }|j	        |         
                                 |                     t          |j        |           d S 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88>'*X&,,...'8>488888r   c                 2   d}t                      }t          |d|          }|                     |          }d|_        |                                 |j        d         }|j        |                                          d |j        d<   	 |                    d           | 	                    d           d S # t          $ rW}|                     |j        d         t          j                   |                     |j        d         d           Y d }~d S 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 	J 	JSXa[%+666SXa[*HIIIIIIIII	Js   	*B5 5
D?ADDc                    d}t                      }t          |d|          }|                     |          }ddz  }|                     t          |j        |           d|_        |                                 |j        d         }t	          t          j
        t          j        t          j
                            |j        |         _        |                     t          |j        |           d S 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88>'*9@46K4L4L:N :NX&6'8>488888r   c           	         ddl m} 	 g fd}t          j        t          j        |            |            }t	                      }t          |d|          }|                     |          }|                                }|j        j	        d         }| 
                    |                    d                     |                     t          |j                  d           | 
                    |j                   |                     |j        |           |j        }		 	 t!          j        d                                          }
n4# t&          $ r&}|j        d         t*          j        k    r Y d }~nd }~ww xY w\t/          j        d	           | 
                    |
                    t5          t7          |	                              d
k               |                    t          j                  }t/          j        d	           |                     |d            t!          j        d
t           j                  \  }}t!          j        d                                          }
|                     |
                    t5          t7          |	                              d
           |                      g            	 t!          j!        |           n#  Y nxY wt          j        t          j        t          j"                   d S # 	 t!          j!        |           n#  Y nxY wt          j        t          j        t          j"                   w xY w)Nr   )makeSpewc                  2                         d           d S )NTr   )r   sigchldss    r   
sighandlerz=SubprocessTests._dont_test_spawn_and_kill.<locals>.sighandler  s    %%%%%r   spewzspawned: 'spew' with pidr   ra   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  s   222222&	:H& & & & &M&.*555!J"nnG!'6:>>F}}V,,H^^%%F.%a(COOCNN+EFFGGGS00!444OOHL)))X\6222lG8D>>..00D   x{ek11 21111	 JsOOOOODIIhtG}}&=&=>>"DFFF--//CJsOOOS$'''z"bj11HC8D>>&&((DTYYxW'>'>??DDD"---	*%%%%M&.&.99999		*%%%%M&.&.9999s[   DL !&E L 
E8E3.L 3E88EL K KM
LML#!/Mc                    t                      }t          |dd          }|                     |          }d|_        t	          d          }d|i|_        ddlm} |j        |_	        t          j
                    |_        |                                 |                     |j                   |                     |j        d           |                     |j                   |                     |j        j        d         d	           |                     |j                   |                     |j        d         t*          j                   d S )
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7==(($d333
 %j1333333&."&)++45550!444''',Q/ 2* 	+ 	+ 	+()))r*FN;;;;;r   c                    t                      }t          |dd          }|                     |          }d|_        t	          d          }d|i|_        ddlm} |j        |_	        	 |
                                 |                     d	           d S # t          $ r,}|                     |j        d         d
           Y d }~d S 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7==(($d333
 %j1333333&.	<MMOOOII&''''' 	< 	< 	<SXa[ +; < < < < < < < < <	<s   ()B 
C	!CC	c                 T   t                      }t          |dd          }|                     |          }d|_        t	          d          }d|i|_        ddlm} |j        |_	        |
                                 |                     t          |j        j                  d           d S )	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7==(($d333
 %j1333333&.W^011155555r   c                    t                      }t          |dd          }|                     |          }d|_        t	          d          }d|i|_        ddlm} |j        |_	        | 
                    |j        d           |                                 | 
                    t          |j        j                  d	           | 
                    |j        j        d         d
           |                     |j        d           |                                 | 
                    t          |j        j                  d	           d S )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  s0   ..gvw77==(($d333
 %j1333333&/0!444W^0111555,Q/1KLLLH3Q777W^011155555r   c                 x   t          j                     dz   }t                      }t          |dd          }|                     |          }d|_        t          d          }d|i|_        dd	lm} |j	        |_
        ||_        |                                 |                     t          |j        j                  d           |                     |j        |k                t          j        d
           |                                 |                     t          |j        j                  d           |                     |j        j        d         d           |                     |j        d           |                                 |                     t          |j        j                  d           d S )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  s   ikkD(..gvw77==(($d333
 %j1333333&/"- 	 	W^0111555 	/+=>>> 	
1 	W^0111555,Q/1KLLLH3Q777W^011155555r   c                 z   t                      }t          |dd          }|                     |          }g ddlm} ddlm} |                    |j        fd           |j	        |_
        |                                 |                     |j                   |                     |j                   |                     |j                   |                     |j
        |j                   |                     t'                    d           d         }|                     |j        |j                   d S )NrZ   r[   r   r/   r   c                 .                         |           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  s9   ..gvw77==((333333%%%%%%13H3H3H3HIII&.,---((()***)<===Q###!&*GHHHHHr   c                 ,   t                      }t          |dd          }|                     |          }|                    t          j                   |                     |j        j        d         d           | 	                    |j
                   d S )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-  s    ..gvw77==((fn%%%,Q/N	P 	P 	P)*****r   c                    t                      }t          |dd          }|                     |          }d|_        g ddlm} ddlm} |                    |j	        fd           |j
        |_        |                    t          j                   |                     |j        j        d         d           |                     |j                   |                     |j        d         t          j                   |                     t+                    d	           d         }|                     |j        |j                   d S )
NrZ   r[   rs  r   r/   r   c                 .                         |           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  sB   ..gvw77==((333333%%%%%%13H3H3H3HIII&/fn%%%,Q/ 2* 	+ 	+ 	+()))r*FN;;;Q###!&*JKKKKKr   c                    t                      }t          |dd          }|                     |          }d|_        g ddlm} ddlm} |                    |j	        fd           |j
        |_        |                    t          j                   |                     |j        j        d         d           |                     |j                   |                     |j        d         t          j                   |                     t+                    d	           d         }|                     |j        |j                   d S )
NrZ   r[   rs  r   r/   r   c                 .                         |           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  sB   ..gvw77==((333333%%%%%%13H3H3H3HIII&.fn%%%,Q/ 2* 	+ 	+ 	+()))r*FN;;;Q###!&*JKKKKKr   c                 <   t                      }t          |dd          }t          t          j        t          j        t          j                            |_        |                     |          }g ddl	m
} ddlm} |                    |j        fd           d|_        |j        |_        |                    t&          j                   |                     |j        j        d         d           |                     |j        j        d	                             d
                     |                     d|j        j        d	         v            |                     |j                   |                     |j        d           |                     |j        |j                   |                     t;                    d           d         }d	         }|                     |j        |j                   |                     |j        |j                    d S )NrZ   r[   r   r/   r   c                 .                         |           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7!()+U[)A)A"C "C==((333333%%%%%%13H3H3H3HIII&.fn%%%,Q/ 2* 	+ 	+ 	++A.99*, , 	- 	- 	-w~':1'==>>>)***r***)>???Q###11)6+KLLL)6+JKKKKKr   c                    t                      }t          |dd          }t          t          j        t          j        t          j                            |_        |                     |          }g ddl	m
} ddlm} |                    |j        fd           d|_        |j        |_        |                    t&          j                   |                     |j        j        d         d           |                     |j        j        d	         d
t1          |j                  z             |                     |j                   |                     |j        d           |                     |j        |j                   |                     t9                    d	           d         }|                     |j        |j                   d S )NrZ   r[   r   r/   r   c                 .                         |           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  s   ..gvw77!()+U[)A)A"C "C==((333333%%%%%%13H3H3H3HIII&.fn%%%,Q/ 2 	 	 	,Q/ 25&''2( 	) 	) 	) 	()))r***)?@@@Q###1)6+KLLLLLr   c                 .   t                      }t          |dd          }|                     |          }d|_        g ddlm} ddlm} |                    |j	        fd           |j
        |_        |                    t          j                   |                     |j        j        d         d           |                     |j                   |                     |j        d         t          j                   |                     g            d S )	NrZ   r[   rs  r   r/   r   c                 .                         |           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7==((333333%%%%%%13H3H3H3HIII&/fn%%%,Q/ 2* 	+ 	+ 	+()))r*FN;;;Br   c                    t                      }t          |dd          }|                     |          }g ddlm} ddlm} |                    |j        fd           |j	        |_
        |                    t          j                   |                     |j        j        d         d           |                     |j                   d         }|                     |j        |j                   d S )NrZ   r[   r   r/   r   c                 .                         |           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7==((333333%%%%%%13H3H3H3HIII&.fn%%%,Q/M	O 	O 	O)***!&*IJJJJJr   c                 2   t                      }t          |ddd          }|                     |          }d|_        g ddlm} ddlm} |                    |j	        fd	           |j
        |_        |                    t          j                   |                     |j        j        d         d
           |                     |j                   |                     |j        d         t          j                   |                     g            d S )NrZ   r[   T)killasgrouprs  r   r/   r   c                 .                         |           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II==((333333%%%%%%13H3H3H3HIII&/fn%%%,Q/ 2= 	> 	> 	>()))s+V^<<<Br   c                    t                      }t          |ddd          }|                     |          }d|_        g ddlm} ddlm} |                    |j	        fd	           |j
        |_        |                    t          j                   |                     |j        j        d         d
           |                     |j                   |                     |j        d         t          j                   |                     t+                    d           d         }|                     |j        |j                   |                     |j        dg           |                     |j        |j
                   d S )NrZ   r[   T)stopasgrouprs  r   r/   r   c                 .                         |           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II==((333333%%%%%%13H3H3H3HIII&.fn%%%,Q/ 2= 	> 	> 	>()))s+V^<<<Q###!&*JKKK+k];;;)=+@AAAAAr   c                 l   t                      }t          |dd          }|                     |          }ddlm} |j        |_        |                    t          j                   | 	                    |j
        j        d         d           | 	                    t          |j                  d           d S )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7==((333333&.(((,Q/ 2I 	J 	J 	JW]++Q/////r   c                    t                      }t          |dd          }|                     |          }d|_        ddlm} |j        |_        |                    t          j	                   | 
                    |j        j        d         d           | 
                    t          |j                  d           |                     |j        |j        v            | 
                    |j        |j                 t          j	                   d S )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7==((333333&.(((,Q/1UVVVW]++Q///5666x|4foFFFFFr   c                 T   t                      }t          |dd          }t          t          j        t          j        t          j                            |_        |                     |          }g ddl	m
} ddlm} |                    |j        fd           d|_        |j        |_        |                    t$          j                   |                     |j        j        d         d           |                     |j        j        d	         d
t/          |j                  z             |                     |j                   |                     |j        |j                   |                     |j        d           |                     t5                    d           d S )NrZ   r[   r   r/   r   c                 .                         |           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  s   ..gvw77!()+U[)A)A"C "C==((333333%%%%%%13H3H3H3HIII&.(((,Q/0	2 	2 	2,Q/ 29&''2( 	) 	) 	) 	)***)>???r***Q#####r   c                    t                      }t          |dd          }t          t          j        t          j        t          j                            |_        |                     |          }g ddl	m
} ddlm} |                    |j        fd           d|_        |j        |_        |                    t$          j                   |                     |j        j        d         d           |                     |j        j        d	                             d
                     |                     d|j        j        d	         v            |                     |j                   |                     |j        |j                   |                     |j        d           |                     t9                    d	           d         }|                     |j        |j                   d S )NrZ   r[   r   r/   r   c                 .                         |           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  s   ..gvw77!()+U[)A)A"C "C==((333333%%%%%%13H3H3H3HIII&.(((,Q/0	2 	2 	2+A.9935 5 	6 	6 	6w~':1'==>>>)***)>???r***Q###!&*IJJJJJr   c                    t                      }t          |ddd          }|                     |          }d|_        ||j        j        j        d<   d|_        ddd	}||_        d
dl	m
} d
dlm} |j        |_        g |                    |j        fd           d|_        |                    dd           |                     |j                   |                     |j        d
           |                     |j        |           |                     |j        i            |                     |j        i            |                     |j        j        d
         d           |                     |j        d           |                     t5                    d           d
         }|                     |j        |j                   |                     |j        dg           |                     |j        |j                   d S )Nr}   r~   rj   r?   ){   ra   r  Trw   r8  r9  r   r/   r   c                 .                         |           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 9 9==((&2:*3/b))333333%%%%%%&/13H3H3H3HIIIQ)***q)))4e<<<,,,-r222,Q/ 22 	3 	3 	3,b111Q###!&*IJJJ+l^<<<)=+ABBBBBr   c                 L   t                      }t          |ddd          }|                     |          }||j        j        j        d<   ddd}||_        dg|j        _        d	d
lm	} d	dl
m} |j        |_        g |                    |j        fd           d|_        |                    dd           |                     |j                   |                     |j        d	           |                     |j        |           |                     |j        i            |                     |j        i            |                     |j        j        d	         d           |                     |j        d           |                     t5                    d           d	         }|                     |j        |j                   |                     |j        d           |                     |j        ddg           |                     |j        |j                   d S )Nr}   r~   rj   r  r  rw   r  r]  r   r/   r   c                 .                         |           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>  s9   ..gz;-79 9 9==((2:*3/b))$&4!333333%%%%%%&.13H3H3H3HIIIQ)***q)))4e<<<,,,-r222,Q/L	N 	N 	N,b111Q###!7	9 	9 	9...+.@,-OPPP)=+@AAAAAr   c                    t                      }t          |ddd          }|                     |          }||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        fd           d|_        |                    dd           |                     |j                   |                     |j        d
           |                     |j        |           |                     |j        i            |                     |j        i            |                     |j        j        d
         d           |                     |j        j        d         d           |                     |j        d           |                     t9                    d           d
         }|                     |j        |j                   |                     |j        d           |                     |j         dg           |                     |j!        |j                   d         }|                     |j        |j"                   |                     |j        d           |                     |j         ddg           |                     |j!        |j#                   d S )Nr}   r~   rj   r  r  rw   r  r]  r  r   r/   r   c                 .                         |           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^  s   ..gz;-79 9 9==((2:*3/b))$&4!!Y[[4/333333%%%%%%&/13H3H3H3HIIIQ)***q)))4e<<<,,,-r222,Q/@	A 	A 	A 	,Q/L	N 	N 	N,b111Q###!&*IJJJ...+l^<<<)=+ABBB!&*HIII...+.@,-OPPP)=+@AAAAAr   c                    t                      }t          |dddd          }|                     |          }||j        j        j        d<   ddd}||_        d	g|j        _        t          j                    |_	        d
dl
m} d
dlm} |j        |_        g |                    |j        fd           d|_        |                    dd           |                     |j                   |                     |j        d
           |                     |j        |           |                     |j        i            |                     |j        i            |                     |j        j        d
         d           |                     |j        d            |                     t9                    d           d
         }|                     |j        |j                   |                     |j        |j                   d S )Nr}   r~   rj   r3  r?   	startsecsr  rw   r  r]  r   r/   r   c                 .                         |           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 G G==((2:*3/b))$&4!!Y[[333333%%%%%%&/13H3H3H3HIIIQ)***q)))4e<<<,,,-r222,Q/M	O 	O 	O,d333Q###!&*IJJJ)=+ABBBBBr   c                 ~   t                      }t          |dddd          }|                     |          }||j        j        j        d<   ddd}||_        d	g|j        _        t          j                    |_	        d
dl
m} d
dlm} |j        |_        g |                    |j        fd           d|_        |                    dd           |                     |j                   |                     |j        d
           |                     |j        |           |                     |j        i            |                     |j        i            |                     |j        j        d
         d           |                     |j        d	           |                     t9                    d           d
         }|                     |j        |j                   |                     |j        d           |                     |j         ddg           |                     |j!        |j                   d S )Nr}   r~   rj   r3  r  r  rw   r  r]  r   r/   r   c                 .                         |           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  sL   ..gz;-72G G G==((2:*3/b))$&4!!Y[[333333%%%%%%&.13H3H3H3HIIIQ)***q)))4e<<<,,,-r222,Q/L	N 	N 	N,b111Q###!7	9 	9 	9...+.@,-OPPP)=+@AAAAAr   c                    t                      }t          |ddd          }|                     |          }||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        fd           d|_        |                    dd           |                     |j                   |                     |j        d
           |                     |j        |           |                     |j        i            |                     |j        i            |                     |j        j        d
         d           |                     |j        j        d         d           |                     |j        d           |                     t9                    d           d
         }|                     |j        |j                   |                     |j        d           |                     |j         ddg           |                     |j!        |j                   d S )Nr}   r~   rj   r  r  rw   r  r]  r  r   r/   r   c                 .                         |           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 9 9==((2:*3/b))$&4!!Y[[4/333333%%%%%%&.13H3H3H3HIIIQ)***q)))4e<<<,,,-r222,Q/@	A 	A 	A 	,Q/L	N 	N 	N,b111Q###!7	9 	9 	9...+.@,-OPPP)=+@AAAAAr   c                   	 ddl m} g 	|                    |j        	fd           |                    |j        	fd           t                      }t          |dddd	          }|                     |          }dd
lm	} |j
        |_        t                      }||_        |                    dd           |                     t!          	          d           	\  }}|                     |j        |j                   |                     |j        |j                   |                     |j        |           |                     |j        |           |                     |j        d            d S )Nr   r   c                 .                         |           S r   r   r   s    r   r   zOSubprocessTests.test_finish_with_current_event_sends_rejected.<locals>.<lambda>  r   r   c                 .                         |           S r   r   r   s    r   r   zOSubprocessTests.test_finish_with_current_event_sends_rejected.<locals>.<lambda>  s    ahhqkk 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   %%%%%%13H3H3H3HIII24I4I4I4IJJJ..gz;-72G G G==((333333&.QQ###)7	9 	9 	9)6+DEEE222u---.....r   c                     t                      }t          |dd          }|                     |          }|                                 |                     |j        d            d S )NrZ   r[   r	   r
   r$   set_uidr7   r   rN   s       r   test_set_uid_no_uidz#SubprocessTests.test_set_uid_no_uid  s^    ..gvw77==((-t44444r   c                     t                      }t          |ddd          }|                     |          }|                                }|                     |j        d           |                     |d            d S )NrZ   r[   ra   r   r  )r   rB   rA   rO   r   s        r   test_set_uidzSubprocessTests.test_set_uid  sx    ..gvwA>>>==((  -q111d#####r   c                 |   t                      }t          |dddd          }|                     |          }t          |dddd          }|                     |          }t          |dddd	          }|                     |          }|||g}|                                 |                     ||||g           d S )
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                   ddlm}m} t                      }|j	        |_
        t          |ddd          }|                     |          }d|_        |j        |_        |                                 |                     |j        |j                   |                     |g            d S )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>3HIIIEEEEEEEE..'0 w	9^LL--((%-(=>>>,,,,,r   c                   
 ddl m} g 

fd}|                    |j        |           ddlm}m} t                      }|j        |_	        t          |ddd          }|                     |          }d|_        |j        |_        |                                 |                     |j        |j                   |                     t%          
          d           
d         \  }}	|                     |j        |j                   |                     |j        |j                   |                     |	|j                   d S )Nr   r   c                 J                         | | j        j        f           d S r   r   r  r   eemitted_events_with_statess    r   
subscriberzZSubprocessTests.test_transition_stopped_to_starting_supervisor_running.<locals>.subscriber?  &    &--q!)/.BCCCC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<  sf   %%%%%%%'"	D 	D 	D 	D 	D1:>>>EEEEEEEE..'/w	9^LL--((%-(>???788!<<<*DQ*G''&*JKKK)=+@AAA1=3IJJJJJr   c                    ddl m} g }|                    |j        |j                   ddlm}m} t                      }|j	        |_
        t          |ddd          }ddlm} ||_        |                     |          }d|_        d|_        |j        |_        |                                 |                     |j        |j                   |                     |j                   |                     |g            d S )	Nr   r   r  r  r  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>3HIIIEEEEEEEE..'0 w	9^LL??????4--(("%,(<===+,,,,,,,,r   c                   
 ddl m} g 

fd}|                    |j        |           ddlm} t                      }t          |ddd          }ddlm	} ||_
        |                     |          }d|_        |j        |_        |                                 |                     |j        |j                   |                     t%          
          d           
d         \  }}	|                     |j        |j                   |                     |j        |j                   |                     |	|j                   d S )	Nr   r   c                 J                         | | j        j        f           d S 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  sp   %%%%%%%'"	D 	D 	D 	D 	D1:>>>333333..w	9^LL??????4--((%,(>???788!<<<*DQ*G''&*JKKK)=+?@@@1=3IJJJJJr   c                   
 ddl m} g 

fd}|                    |j        |           ddlm} t                      }t          |ddd          }ddlm	} ||_
        |                     |          }d|_        |j        |_        d	|_        |                                 |                     |j        |j                   |                     t'          
          d           
d         \  }}	|                     |j        |j                   |                     |j        |j                   |                     |	|j                   d S )
Nr   r   c                 J                         | | j        j        f           d S 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~  sx   %%%%%%%'"	D 	D 	D 	D 	D1:>>>333333..w	9^LLBBBBBB7--((%,$(>???788!<<<*DQ*G''&*JKKK)=+?@@@1=3IJJJJJr   c                    ddl m} g }|                    |j        |j                   ddlm} t                      }t          |ddd          }ddl	m
} ||_        |                     |          }d|_        |j        |_        d|_        |                                 |                     |j        |j                   |                     |g            d S )Nr   r   r/   r  r  r#  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>3HIII333333..w	9^LLBBBBBB7--((%,(<===,,,,,r   c                    ddl m} g |                    |j        fd           ddlm}m} t                      }|j        |_	        t          |ddd          }|                     |          }d|_        d|_        d|_        |j        |_        |                                 |                     |j        |j                   |                     g            d S )Nr   r   c                 .                         |           S r   r   r   r	  s    r   r   zYSubprocessTests.test_transition_backoff_to_starting_supervisor_stopping.<locals>.<lambda>      ^=R=RST=U=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    %%%%%%13U3U3U3UVVVEEEEEEEE..'0w	9^LL--((%-(=>>>,,,,,r   c                   
 ddl m} g 

fd}|                    |j        |           ddlm}m} t                      }|j        |_	        t          |ddd          }|                     |          }d|_        d|_        d|_        |j        |_        |                                 |                     |j        |j                   |                     t)          
          d           
d         \  }}	|                     |j        |j                   |                     |j        |j                   |                     |	|j                   d S )Nr   r   c                 J                         | | j        j        f           d S 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  st   %%%%%%%'"	D 	D 	D 	D 	D1:>>>EEEEEEEE..'/w	9^LL--((%-(>???788!<<<*DQ*G''&*JKKK)=+@AAA1=3IJJJJJr   c                    ddl m} g |                    |j        fd           ddlm}m} t                      }|j        |_	        t          |ddd          }|                     |          }d|_        t          |_        d|_        |j        |_        |                                 |                     |j        |j                   |                     g            d S )Nr   r   c                 .                         |           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    %%%%%%13U3U3U3UVVVEEEEEEEE..'/w	9^LL--((%-(=>>>,,,,,r   c                 n  	 ddl m} g 		fd}|                    |j        |           ddlm} t                      }t          |ddd          }|                     |          }d|_	        d|_
        d|_        d|_        d|_        d	|_        d
|_        |j        |_        |                                 |                     |j	        d           |                     |j
        d           |                     |j                   |                     |j        j        d         d           |                     t/          	          d           	d         \  }}|                     |j        |j                   |                     |j        |j                   |                     ||j                   d S )Nr   r   c                 J                         | | j        j        f           d S 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  s   %%%%%%%'"	D 	D 	D 	D 	D1:>>>333333.. w	9^LL--((# % %%. 	!,,,***,---,Q/G	H 	H 	H 	788!<<<*DQ*G''&*IJJJ)=+ABBB1=3HIIIIIr   c                    ddl m} g fd}|                    |j        |           ddlm} t          j                    dz   }t                      }d}t          |ddd|	          }| 	                    |          }d
|_
        d
|_        d|_        ||_        d
|_        d|_        d|_        |j        |_        |                                 |                     |j        |j                   |                     |j        |k                t          j        |d
z              |                                 |                     |j
        d           |                     |j        d           |                     |j                   |                     |j        |j                   |                     |j        j        d         d                    |                     |                     t9                    d
           d         \  }	}
|                     |	j        |j                   |                     |	j        |j                   |                     |
|j                   d S )Nr   r   c                 J                         | | j        j        f           d S 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 	D 	D 	D 	D1:>>>333333ikkD(.. w	9^)79 9 9--((#' % %%. 	 	(>??? 	)K7888 	
>A%&&& 	 	!,,,***,---(=>>>,Q/GGMvnG]G]	_ 	_ 	_ 	788!<<<*DQ*G''&*IJJJ)=+ABBB1=3HIIIIIr   c                 Z  
 ddl m} g 

fd}|                    |j        |           ddlm} t          j                    dz   }t                      }t          |ddd          }| 	                    |          }d|_
        ||_        d|_        |j        |_        |                                 |                     |j        |j                   |                     |j        |k                |                                 |                     |j        |j                   |                     t'          
          d           
d         \  }}	|                     |j        |j                   |                     |j        |j                   |                     |	|j                   d S )	Nr   r   c                 J                         | | j        j        f           d S 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 	D 	D 	D 	D1:>>>333333ikkD(..w	9^LL--((#%- 	 	(=>>> 	3444 	(>???788!<<<*DQ*G''&*JKKK)=+@AAA1=3IJJJJJr   c                 `  	 ddl m} g 		fd}|                    |j        |           ddlm} t                      }t          |ddd          }|                     |          }d|_	        d|_
        d|_        d	|_        d
|_        d|_        |j        |_        |                                 |                     |j
        d           |                     |j        d           |                     |j                   |                     |j        j        d         d           |                     t-          	          d           	d         \  }}|                     |j        |j                   |                     |j        |j                   |                     ||j                   d S )Nr   r   c                 J                         | | j        j        f           d S 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  s   %%%%%%%'"	D 	D 	D 	D 	D1:>>>333333.. w	9^LL--((# % %%- 	!,,,***+,,,,Q/0	1 	1 	1 	788!<<<*DQ*G''&*GHHH)=+@AAA1=3FGGGGGr   c                    ddl m} g }|                    |j        |j                   ddlm} t                      }t          |ddd          }| 	                    |          }t          |_        |j        |_        |                                 |                     |j        |j                   |                     |g            d S )Nr   r   r/   r  r  )r   r   r   r   r   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>3HIII333333..w	9^LL--((%.(>???,,,,,r   c                    ddl m} g }|                    |j        |j                   ddlm} t                      }t          |ddd          }| 	                    |          }d|_
        d|_        d|_        |j        |_        |                                 |                     |j                   |                     |j
        d           |                     |j        |j                   |                     |j        j        d         d           |                     |j        d         t,          j                   |                     |g            d S )	Nr   r   r/   r  r  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  sN   %%%%%%1>3HIII333333..w	9^LL--((%.(((GM1---(>???,Q/=	? 	? 	?q)6>:::,,,,,r   c                     t                      }t          |dd          }|                     |          }d|_        |                     |                    d          d           d S )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  s^    ..gvw77==((..r22E:::::r   c                 .   ddl m} t                      }t          |dd          }|                     |          }d|_        |                    |j                   |                     |j	        d           | 
                    |j        dk               d S )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  s    333333..gvw77==((m344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 2 2  N N N2 2 2(G G GG G GF F F
E 
E 
E? ? ?? ? ?? ? ?= = =L L L; ; ;J J J6 6 61 1 1
9 
9 
9B B B
@ 
@ 
@L L L.L L L4L L L2L L L6L L L6L L L6A A A,1 1 1(A A A.A A A"7 7 7.1 1 1(1 1 1(	C 	C 	C% % %,A A A.A A A,9 9 99 9 99 9 9J J J"9 9 9): ): ):V< < <&< < < 
6 
6 
66 6 6" 6  6  6DI I I$+ + +L L L&L L L&L L L6M M M2     "K K K      "B B B*	0 	0 	0G G G$ $ $.K K K2C C C>B B B@'B 'B 'BRC C CDB B BB#B #B #BJ/ / /.5 5 5$ $ $> > >,- - -"K K K,- - -*K K K.K K K0- - -$- - -$K K K0- - -$"J "J "JH6J 6J 6Jp%K %K %KN!H !H !HF- - - - - -.; ; ;, , , , ,r   r   c                   6   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dS )FastCGISubprocessTestsc                     ddl m} |S )Nr   )FastCGISubprocess)r   rU  )r   rU  s     r   r   z&FastCGISubprocessTests._getTargetClass      888888  r   c                 6     |                                  |i |S r   r    r!   s      r   r$   zFastCGISubprocessTests._makeOne  r%   r   c                 &    ddl m}  |             d S r'   r)   r+   s     r   r,   zFastCGISubprocessTests.tearDown  r-   r   c                     t                      }d|_        t          |ddd          }|                     |          }|                     t
          |j                   d S Nr   r   r   ra   r   )r	   r   r
   r$   rr   NotImplementedErrorr   rN   s       r   test_no_groupz$FastCGISubprocessTests.test_no_group  sY    ..gv/?QGGG==((-x~>>>>>r   c                    t                      }d|_        t          |ddd          }|                     |          }t	          t          |                    |_        |                     t          |j	                   d S rZ  )
r	   r   r
   r$   r   r   r-  rr   r[  r   rN   s       r   test_no_socket_managerz-FastCGISubprocessTests.test_no_socket_manager  sq    ..gv/?QGGG==((*+<W+E+EFF-x~>>>>>r   c                    t                      }d|_        t          |ddd          }|                     |          }t	          d          }t          |ddd |          }t          |          |_        |                                }| 	                    |d            | 	                    t          |j                  d	           | 	                    |j        d         d           | 	                    |j        |j        d
                  d           | 	                    |j        |j        d                  d           | 	                    t          |j                  |j        d	z
             d S )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  sH   ..gv/?QGGG==(('**&w
C'24 4.w77!!&&&W]++Q///q)1---x~n'EFJJJx~n'EFJJJW/00'.12DEEEEEr   c                 @   t                      }d|_        t          |ddd          }d|_        |                     |          }t          d          }t          |dd	d |          }t          |          |_        |	                                }| 
                    |d            | 
                    t          |j                  d
           | 
                    |j        d         d           | 
                    t          |j                  |j        dz
             d S )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GG!%==(('++&w
C'24 4.w77!!&&&W]++Q///r*A...W/00'.12DEEEEEr   c                 v   t                      }t          |ddd          }|                     |          }t          d          }t	          |ddd |          }t          |          |_        |                     |j        d u            |	                                 | 
                    |j        d u            d S )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GG==(('**&w
C'24 4.w77*d2333+t344444r   c                     t                      }t          |ddd          }|                     |          }d|_        |                                 |                     |j        d u            d S )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
  sm    ..gv/?QGGG==(($*d233333r   r  )return_valuec                    t                      }t          |ddd          }|                     |          }t                      |_        |                    t          j        t          j                  }| 	                    t          j
        |d           | 	                    d|j        j        d           t          j        }| 	                    d|j        d           |j        d         d         }|j        d         d	         }| 	                    t          j        |d
           | 	                    t          j        |d           d S )Nr   r   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  sH   ..gv/?QGGG==(( $x|<</M	O 	O 	OH1<N	P 	P 	P 'K2A	C 	C 	C'*1-'*1-wH	J 	J 	JwH	J 	J 	J 	J 	Jr   r   c                    t                      }t          |ddd          }|                     |          }t                      |_        |                                }|                     t          j        |d           |                     d|j        j	        d           t          j        }|                     d|j	        d           d S )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GG==(( $!!L	N 	N 	NH1<N	P 	P 	P%
J1@	B 	B 	B 	B 	Br   Nc                 v   t                      }t          |ddd          }|                     |          }t                      |_        d|_        |                                }|                     d |d           |                     d|j        j        d           |                     d |j        d           d S )	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GG==(( $/!!vL	N 	N 	NH1<N	P 	P 	Px1L	N 	N 	N 	N 	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 2 2  ? ? ?? ? ?F F F"F F F 
5 
5 
54 4 4 U\*h(:P(Q(Q(QRRJ J SRJ* U\*gtt'G'G'GHHB B IHB U\*gtt'>'>'>??N N @?N N Nr   rS  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )ProcessGroupBaseTestsc                     ddl m} |S )Nr   )ProcessGroupBase)r   r  )r   r  s     r   r   z%ProcessGroupBaseTests._getTargetClassI  s    777777r   c                 6     |                                  |i |S r   r    )r   r   r#   s      r   r$   zProcessGroupBaseTests._makeOneM  s#    %t##%%t2r222r   c                 4   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        |	                                }| 
                    ||g           d S 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  s    ..333333ZPP0FGGG#GxjAAAg&&&21133	XJ/////r   c                    t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        |	                                 d S 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[  s    ..333333ZPP0FGGG#GxjAAAg&&&2r   c                 6   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          }|                     |          }||||
d|_        |                                 |                     |j        d           |                     |j        d           |                     |j        d           |                     |
j        d           |                     |
j        |j                   d S )Nr   r/   r  r  r  process2/bin/process2process3z/bin/process3process4z/bin/process4  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33333..ZPP0EFFFZPP0EFFFZPP0FGGGZPP0EFFF#(H=? ? ? g&&'/X&.8E E 	-u555-t444-t444-u555)<=====r   c                    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
          }|                     |          }||d|_	        |
                                }	|                     |	d d d           d S )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33333ZPP0FGGG !$xZPP0FGGG !$x#Gx6JKKKg&&(0hHH%%''DD!1!122222r   c                 <   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        |	                                 | 
                    |j        d           d S 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  s    ..333333ZPP0FGGG#GxjAAAg&&%x0/66666r   c                 <   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        |	                                 | 
                    |j        d           d S r  )r	   r2   r0   r
   r   r  r   r$   r  rf   r7   logsremovedr  s          r   rh   z%ProcessGroupBaseTests.test_removelogs  s    ..333333ZPP0FGGG#GxjAAAg&&%x0-t44444r   c                    t                      }t          |          }|                     |          }t          |          }|                     |          }t          |          }|                     |          }d|j        _        d|j        _        d|j        _        ||g}|                                 |                     |||g           |                     ||           |                     ||           d S )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 3 3	0 	0 	0  > > ><3 3 3	7 	7 	7	5 	5 	5) ) ) ) )r   r  c                        e Zd Zd Zd Zd ZdS )ProcessGroupTestsc                     ddl m} |S )Nr   )ProcessGroup)r   r  )r   r  s     r   r   z!ProcessGroupTests._getTargetClass  s    333333r   c                    t                      }t          |          }|                     |          }t          |          }|                     d|v            |                     |                    d          |           d S )Nzsupervisor.process.ProcessGroupnamed whatever>r	   r   r$   rR   rS   rU   )r   rB   rf  r-  rV   s        r   rW   zProcessGroupTests.test_repr  ss    ..#G,,g&&KK9Q>???

#455q99999r   c                 <   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        |	                                 | 
                    |j        d           d S r  )r	   r2   r0   r
   r   r  r   r$   r  r  r7   transitionedr  s          r   test_transitionz!ProcessGroupTests.test_transition  s    ..333333ZPP0FGGG#GxjAAAg&&%x0.55555r   N)r%  r&  r'  r   rW   r  r   r   r   r  r    sA          : : :	6 	6 	6 	6 	6r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )FastCGIProcessGroupTestsc                     ddl m} |S )Nr   )FastCGIProcessGroup)r   r  )r   r  s     r   r   z(FastCGIProcessGroupTests._getTargetClass  s    ::::::""r   c                 <    |                                  } ||fi |S r   r    )r   rA   kwargsclss       r   r$   z!FastCGIProcessGroupTests._makeOne  s+    ""$$s6$$V$$$r   c                     t                      }t          |          }d |_         G d dt                    }|                     ||           d S )Nc                       e Zd Zd Zd ZdS )VFastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManagerc                     d S r   r   r   rA   r   s      r   __init__z_FastCGIProcessGroupTests.test___init__without_socket_error.<locals>.DummySocketManager.__init__        r   c                     d S 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4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  si    ..#G,, $	' 	' 	' 	' 	' 	' 	' 	' 	g-?@@@@@r   c                     t                      }t          |          }d |_         G d dt                    }|                     t
          | j        ||           d S )Nc                        e Zd Zd Zd Zd ZdS )SFastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManagerc                     d S 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    qkk!r   c                     dS )NrA   r   r  s    r   rA   zZFastCGIProcessGroupTests.test___init__with_socket_error.<locals>.DummySocketManager.config  s    xr   N)r%  r&  r'  r  r  rA   r   r   r   r  r    s;        444" " "         r   r  r  )r	   r   r  r  rr   
ValueErrorr$   r  s       r   test___init__with_socket_errorz7FastCGIProcessGroupTests.test___init__with_socket_error  s    ..#G,, $	  	  	  	  	  	  	  	  	M72D 	 	 	 	 	 	r   N)r%  r&  r'  r   r$   r  r  r   r   r   r  r    sS        # # #% % %A A 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dS )EventListenerPoolTestsc                 &    ddl m}  |             d S r'   r)   r+   s     r   setUpzEventListenerPoolTests.setUp  r-   r   c                 &    ddl m}  |             d S 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|_        |                     |          }ddlm} |                     t          |j                  d           |                     |j        d         ||j	        f           |                     |j        d         |j
        |j        f           |                     |j        d           d S )Nc                       e Zd ZdS )3EventListenerPoolTests.test_ctor.<locals>.EventTypeNr%  r&  r'  r   r   r   	EventTyper            Dr   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22)!,)*	, 	, 	,)!,&(<=	? 	? 	?b)))))r   c                 h   t                      }t          |          } G d d          }|f|_        |                     |          }ddlm} |                     t          |j                  d           |	                                 |                     t          |j                  d           d S )Nc                       e Zd ZdS )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  s    ..#G,,	 	 	 	 	 	 	 	(l}}W%%%%%%%%V-..222V-..22222r   c                    t                      }d|_        t          |          }d|_        |                     |          }ddlm} |                    |j        j	        ddd          }|
                    dd	          \  }}|
                                }|                     |d         d
           |                     |d	         d           |                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d           |                     |d           d S )Nthesupervisornamethepoolnamer   r   P      zpayload

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   si   ..0#G,,$}}W%%%%%%%%$$:BKQ Q ,,tQ//,,..Y///%?@@@[111%7888_555%MNNNW---+.....r   c                    t                      }t          |          }t          |ddd          }t          |          t          ||g          }|                     |          }di|_        d d g|_         G d d           G fdd          } |            }d|_        |                    |           | 	                    |j        |j
        d d g           d S )	Nr  r  r  c                       e Zd ZdZdS )LEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent1r7  N)r%  r&  r'  r  r   r   r   DummyEvent1r  =  s        FFFr   r  c                   (    e Zd ZZ              ZdS )LEventListenerPoolTests.test_handle_rejected_no_overflow.<locals>.DummyEvent2N)r%  r&  r'  r  r  )r  r  s   r   DummyEvent2r	  ?  s        GKMMEEEr   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P))#GxjAAA}}W%%$h/!4L	 	 	 	 	 	 	 		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ![]]

Z(((*Z-=tT,JKKKKKr   c                 v   t                      }t          |          }t          |ddd          }t          |          t          ||g          }d|_        |                     |          }di|_         G d d           G fdd          } d	          } d
          } d          } |d          }	|||g|_        |                    |	           d |j        D             }
| 	                    |
g d           | 	                    |j
        j        j        j        d         d           d S )Nr  r  r  r   c                       e Zd Zd ZdS )WEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyEventc                     || _         d S 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dS )_EventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEventc                 6    | _          |          | _        d S r   )r  r  )r   r  r   r  s     r   r  zhEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.DummyRejectedEvent.__init__T  s    ''Z//


r   Nr  )r   r  s   r   DummyRejectedEventr  S  s3        0 0 0 0 0 0 0 0r   r  rA  bcrejectedc                     g | ]	}|j         
S r   r  ).0r   s     r   
<listcomp>zWEventListenerPoolTests.test_handle_rejected_event_buffer_overflowed.<locals>.<listcomp>]  s    999AH999r   )r  r  r  r   z9pool whatever event buffer overflowed, discarding event a)r	   r   r
   r   buffer_sizer$   r  r  r  r7   rA   rB   r   r   )r   rB   rf  r  r  r  event_aevent_bevent_c	rej_eventserialsr   r  s              @@r   ,test_handle_rejected_event_buffer_overflowedzCEventListenerPoolTests.test_handle_rejected_event_buffer_overflowedG  s   ..#G,,ZPP))#GxjAAA}}W%%$h/	% 	% 	% 	% 	% 	% 	% 	%	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 *S//*S//*S//&&z22	$gw7Y'''99d&7999"8"8"8999,38;G	I 	I 	I 	I 	Ir   c                    t                      }t          |          }t          |ddd          }ddlm} t          ||g          }|                     |          }|j        d         }t          t          j	        t          j        t          j	                            |_        |j        |_        t                      }|                    |           |                                 |                     |j        |j                   |                     |j        |g           |                     |j        j        d         d           |                     |j        j        d         d           d S )	Nr  r  r   EventListenerStatesr  zUepipe occurred while sending event abc to listener process1, listener state 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  sc   ..#G,,ZPP999999#GxjAAA}}W%%>*-#*5;+-;u{+C+C$E $E "5";%   02E2KLLL*UG444,Q/1	2 	2 	2 	,Q/J	L 	L 	L 	L 	Lr   c                    ddl m} t                      }t          |          }t	          |ddd          }t          ||g          }|                     |          }|j        d         }ddlm} |j	        |_
        t          d           }|                    |           |                     |j        |j                   |                     |j        d         |j                   d S )Nr   )GlobalSerialr  r  r  r&  r`  )r   r.  r	   r   r
   r$   r  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33333..#G,,ZPP#GxjAAA}}W%%>*-999999"5";4  %   |':;;;+J7EEEEEr   c                    t                      }t          |          }|                     |          }t          |          }|                     d|v            |                     |                    d                     d S )Nz$supervisor.process.EventListenerPoolr  r  )r   rB   rf  r  rV   s        r   rW   z EventListenerPoolTests.test_repr  sq    ..#G,,}}W%%JJ>!CDDD

#45566666r   c                    t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        t                      }d|_
        ddlm} |j        |_        |                    |           |                                 |                     |j        d	           |                     |j        |g           d S )
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33333ZPP0FGGG#GxjAAA}}W%%$h/999999"5":%   .555*UG44444r   c                 b   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        t                      }ddlm
} d|_        |j        |_        |                    |           |                                 |                     |j        d	           |                     |j        |g           |                     |j        d
           |                     |j        |j                   d S )Nr   r/   r  r  r  r  r&  ra   Tr   )r	   r2   r0   r
   r   r;  r   r$   r  r   r'  r  r)  r*  r  r  r7   r  r  stdin_bufferr4  s	            r   &test_transition_event_proc_not_runningz=EventListenerPoolTests.test_transition_event_proc_not_running  s7   ..333333ZPP0FGGG#GxjAAA}}W%%$h/999999"5";%   .555*UG444.44402E2KLLLLLr   c                    t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          |                               }d|i|_        t                      }ddlm
} |j        |_         G fdd	          }||_        |                    |           |                                 |                     |j        d
           |                     |j        g            |j                            dd          \  }	}
|                     |
d|
           |                     |j        |j                   |                     |j        |           d S )Nr   r/   r  r  r  r  r&  c                       e Zd Z ZdS )MEventListenerPoolTests.test_transition_event_proc_running.<locals>.DummyGroupNr%  r&  r'  rA   rf  s   r   
DummyGroupr;            FFFr   r>  T   
ra      dummy event)r	   r2   r0   r
   r   r   r   r$   r  r   r'  r)  r*  r-  r  r  r7   r  r  r7  r   r3  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33333ZPP0EFFF#GxjAAA}}W%%$h/999999"5";	 	 	 	 	 	 	 	 	 	#%   .555*B///"/55eQ??.':::02E2JKKK/////r   c                 J  	 t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          	|                     	          }d|_        t          j	                    |_
        d|i|_        t                      }ddlm} |j        |_         G 	fd	d
          }||_        |                    |           |                                 |                     |j        d           |                     |j        |g           d S )Nr   r/   r  r  r  r  r5  r&  c                       e Zd Z ZdS )kEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_notyet.<locals>.DummyGroupNr<  r=  s   r   r>  rF    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  sJ   ..333333ZPP0EFFF#GxjAAA}}W%%!"!Y[[$h/999999"5";	 	 	 	 	 	 	 	 	 	#%   .555*UG44444r   c                 .   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          |                               }d|_        t          j	                    dz
  |_
        d|i|_        t                      }dd	lm} |j        |_         G fd
d          }||_        |                    |           |                                 |                     |j        d           |                     |j        g            |j                            dd          \  }	}
|                     |
d|
           |                     |j        |j                   |                     |j        |           d S )Nr   r/   r  r  r  r  r5  r  r&  c                       e Zd Z ZdS )jEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_ready.<locals>.DummyGroupNr<  r=  s   r   r>  rL    r?  r   r>  Tr@  ra   rA  )r	   r2   r0   r
   r   r   r   r$   rG  rd  rH  r  r   r'  r)  r*  r-  r  r  r7   r  r  r7  r   r3  r  rB  s              @r   ?test_transition_event_proc_running_with_dispatch_throttle_readyzVEventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_ready  s   ..333333ZPP0EFFF#GxjAAA}}W%%!"!Y[[4/$h/999999"5";	 	 	 	 	 	 	 	 	 	#%   .555*B///"/55eQ??.':::02E2JKKK/////r   c                   
 t          j                     dz   }t                      }ddlm} t	          |ddd          }t          ||j                  }t          ||g          
|                     
          }d|_	        ||_
        d|i|_        t                      }dd	lm} |j        |_         G 
fd
d          }	|	|_        |                    |           |                                 |                     |j        d           |                     |j        |g           |                     |j
        |k                d S )Nr  r   r/   r  r  r  r  r5  r&  c                       e Zd Z ZdS )|EventListenerPoolTests.test_transition_event_proc_running_with_dispatch_throttle_last_dispatch_in_future.<locals>.DummyGroupNr<  r=  s   r   r>  rP  	  r?  r   r>  T)rd  r	   r2   r0   r
   r   r   r   r$   rG  rH  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  sp   ikkD(..333333ZPP0EFFF#GxjAAA}}W%%!"($h/999999"5";	 	 	 	 	 	 	 	 	 	#%   .555*UG444 	*[899999r   c                 v   t                      }ddlm} t          |ddd          }t	          ||j                  }t          ||g          }|                     |          }d|i|_        t                      }|
                    |           |                     |                    |          d           d S )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33333ZPP0EFFF#GxjAAA}}W%%$h/%   ,,U33U;;;;;r   c                   
 t                      }ddlm} t          |ddd          }t	          ||j                  }d }||_        t          ||g          
|                     
          }d|i|_	        t                      }ddlm} |j        |_         G 
fd	d
          }	|	|_        |                    |           |                     t"          |j        |           d S )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 ZdS )bEventListenerPoolTests.test__dispatchEvent_proc_write_raises_non_EPIPE_OSError.<locals>.DummyGroupNr<  r=  s   r   r>  rY  -	  r?  r   r>  )r	   r2   r0   r
   r   r   rC  r   r$   r  r   r'  r)  r*  r-  r  rr   r   rS  )r   rB   r0   r  r  rW  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33333ZPP0EFFF	( 	( 	($#GxjAAA}}W%%$h/999999"5";	 	 	 	 	 	 	 	 	 	#%   '4#6>>>>>r   N)r%  r&  r'  r  r,   r   rP   r  r  r  r$  r,  r0  rW   r5  r8  rC  rI  rM  rQ  rT  rZ  r   r   r   r  r    s@           ! ! !* * *
3 
3 
3/ / /(L L L&I I I8L L L,F F F7 7 75 5 5"M M M&0 0 0.5 5 5*0 0 02: : :4
< 
< 
<? ? ? ? ?r   r  c                        e Zd Zd Zd Zd ZdS )test_new_serialc                 $    ddl m}  ||          S )Nr   )
new_serial)r   r^  )r   instr^  s      r   _callFUTztest_new_serial._callFUT4	  s$    111111z$r   c                     ddl m  G fddt                    } |            }|                     |          }|                     |j        d           |                     |d           d S )Nr   r   c                       e Zd Z fdZdS )8test_new_serial.test_inst_serial_is_maxint.<locals>.Instc                     | _         d S r   r  )r   r   s    r   r  zAtest_new_serial.test_inst_serial_is_maxint.<locals>.Inst.__init__;	  s    $r   Nr  r   s   r   Instrc  :	  s.        % % % % % % %r   re  )supervisor.compatr   r  r`  r7   r  )r   re  r_  r   r   s       @r   test_inst_serial_is_maxintz*test_new_serial.test_inst_serial_is_maxint8	  s    ,,,,,,	% 	% 	% 	% 	% 	% 	%6 	% 	% 	% tvvt$$a(((#####r   c                      G d dt                     } |            }|                     |          }|                     |j        d           |                     |d           d S )Nc                       e Zd Zd ZdS )<test_new_serial.test_inst_serial_is_not_maxint.<locals>.Instc                     d| _         d S )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   re  rj  C	  s#                 r   re  r   )r  r`  r7   r  )r   re  r_  r   s       r   test_inst_serial_is_not_maxintz.test_new_serial.test_inst_serial_is_not_maxintB	  s~    	  	  	  	  	 6 	  	  	  tvvt$$a(((#####r   N)r%  r&  r'  r`  rg  rl  r   r   r   r\  r\  3	  sA             $ $ $$ $ $ $ $r   r\  )#r   r   r_  r   rd  unittestrf  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  r\  r   r   r   <module>rp     s    				     & & & & & & $ $ $ $ $ $ 7 7 7 7 7 7 7 7 7 7 . . . . . . . . . . . . . . . . . . 3 3 3 3 3 3 1 1 1 1 1 1 , , , , , , 6 6 6 6 6 6 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 ) ) ) ) ) ) ) ) ) ) ) )f, f, f, f, f,h' f, f, f,P5DN DN DN DN DNX. DN DN DNLt) t) t) t) t)H- t) t) t)l6 6 6 6 6- 6 6 60         x0      Dy? y? y? y? y?2 y? y? y?v	$ $ $ $ $h' $ $ $ $ $r   