o
    þâfÄ‡  ã                   @   s  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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 zd dlZW n eyc   dZY nw G dd„ de jƒZG dd„ de jƒZdd„ Zedkr†e jdd dS dS )é    N)ÚProcessStates)ÚSupervisorStates)ÚDummyOptions)ÚDummyPConfig)ÚDummyPGroupConfig)ÚDummyProcess)ÚDummyProcessGroup)ÚDummyDispatcher)ÚStringIOc                   @   s0   e Zd Zdd„ Zerdd„ Zdd„ Zdd„ Zd	S )
ÚEntryPointTestsc           	   	   C   sÊ   ddl m} tj tj tj t¡¡dd¡}tƒ }dd„ |_	t
j}z,t ¡ }tj |d¡}tj |d¡}|t
_|d	|d
|d|dgdd W |t
_t |¡ n	|t
_t |¡ w | ¡ }|  d|v |¡ d S )Nr   ©ÚmainÚfixturesúdonothing.confc                   S   ó   dS ©Né   © r   r   r   úT/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/test_supervisord.pyÚ<lambda>#   ó    z5EntryPointTests.test_main_noprofile.<locals>.<lambda>ÚlogÚpidú-cú-lú-jú-nT©ÚargsÚtestzsupervisord started©Úsupervisor.supervisordr   ÚosÚpathÚjoinÚabspathÚdirnameÚ__file__r
   ÚfilenoÚsysÚstdoutÚtempfileÚmkdtempÚshutilÚrmtreeÚgetvalueÚ
assertTrue©	Úselfr   ÚconfÚ
new_stdoutÚ
old_stdoutÚtempdirr   r   Úoutputr   r   r   Útest_main_noprofile   s,   þ
ÿÿz#EntryPointTests.test_main_noprofilec           	   	   C   sÌ   ddl m} tj tj tj t¡¡dd¡}tƒ }dd„ |_	t
j}z-t ¡ }tj |d¡}tj |d¡}|t
_|d	|d
|d|ddgdd W |t
_t |¡ n	|t
_t |¡ w | ¡ }|  d|v |¡ d S )Nr   r   r   r   c                   S   r   r   r   r   r   r   r   r   9   r   z3EntryPointTests.test_main_profile.<locals>.<lambda>r   r   r   r   r   r   z"--profile_options=cumulative,callsTr   zcumulative time, call countr    r1   r   r   r   Útest_main_profile3   s0   þ
ÿÿÿz!EntryPointTests.test_main_profilec           	   	   C   sÊ   ddl m} tj tj tj t¡¡dd¡}tƒ }dd„ |_	t
j}z,t ¡ }tj |d¡}tj |d¡}|t
_|d	|d
|d|dgdd W |t
_t |¡ n	|t
_t |¡ w | ¡ }|  t|ƒd¡ d S )Nr   r   r   r   c                   S   r   r   r   r   r   r   r   r   N   r   z1EntryPointTests.test_silent_off.<locals>.<lambda>r   r   r   r   r   r   Tr   )r!   r   r"   r#   r$   r%   r&   r'   r
   r(   r)   r*   r+   r,   r-   r.   r/   ÚassertGreaterÚlenr1   r   r   r   Útest_silent_offH   s(   þ
ÿzEntryPointTests.test_silent_offc           	   	   C   sÌ   ddl m} tj tj tj t¡¡dd¡}tƒ }dd„ |_	t
j}z-t ¡ }tj |d¡}tj |d¡}|t
_|d	|d
|d|ddgdd W |t
_t |¡ n	|t
_t |¡ w | ¡ }|  t|ƒd¡ d S )Nr   r   r   r   c                   S   r   r   r   r   r   r   r   r   c   r   z0EntryPointTests.test_silent_on.<locals>.<lambda>r   r   r   r   r   r   z-sTr   )r!   r   r"   r#   r$   r%   r&   r'   r
   r(   r)   r*   r+   r,   r-   r.   r/   ÚassertEqualr;   r1   r   r   r   Útest_silent_on]   s(   þ
ÿzEntryPointTests.test_silent_onN)Ú__name__Ú
__module__Ú__qualname__r8   Úpstatsr9   r<   r>   r   r   r   r   r      s    r   c                   @   sD  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOS )PÚSupervisordTestsc                 C   s   ddl m} |ƒ  d S )Nr   )Úclear)Úsupervisor.eventsrD   )r2   rD   r   r   r   ÚtearDowns   s   
zSupervisordTests.tearDownc                 C   s   ddl m} |S )Nr   )Ú
Supervisor)r!   rG   )r2   rG   r   r   r   Ú_getTargetClassw   s   z SupervisordTests._getTargetClassc                 C   s   |   ¡ |ƒS ©N)rH   )r2   Úoptionsr   r   r   Ú_makeOne{   s   zSupervisordTests._makeOnec                 C   s  t ƒ }t|dddƒ}t|d|gdg}||_d|_d|_|  |¡}| ¡  |  |j	d¡ |  |j
d¡ |  |jdg¡ |  |jg ¡ |  |jdg¡ |  |jd¡ |  t|jƒd	¡ |  |jd jj|¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ d S )
NÚfooú/bin/fooú/tmp©ÚpconfigsTFÚsetuid_calledÚrlimits_setr   )r   r   r   Úprocess_group_configsr   ÚfirstrK   r   r=   Úfds_cleaned_uprR   Úparse_criticalsÚparse_warningsÚparse_infosÚautochildlogdir_clearedr;   Úprocess_groupsÚconfigrJ   Úhttpservers_openedÚsignals_setÚ
daemonizedÚpidfile_writtenÚ
cleaned_up©r2   rJ   ÚpconfigÚgconfigsÚsupervisordr   r   r   Útest_main_first~   s.   
ÿz SupervisordTests.test_main_firstc                 C   s  t ƒ }t|dddƒ}t|d|gdg}||_d|_d|_|  |¡}| ¡  |  |j	d¡ |  
t|dƒ¡ |  |jdg¡ |  |jg ¡ |  |jg ¡ |  |jd¡ |  t|jƒd	¡ |  |jd jj|¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ d S )
NrL   rM   rN   rO   TFrR   rQ   r   )r   r   r   rS   r   rT   rK   r   r=   rU   ÚassertFalseÚhasattrrV   rW   rX   rY   r;   rZ   r[   rJ   r\   r]   r^   r_   r`   ra   r   r   r   Útest_main_notfirst–   s.   
ÿz#SupervisordTests.test_main_notfirstc                 C   sl   t ƒ }d|_t|dddƒ}t|ƒ}d|_d|_d |_d|_d|i|_|  	|¡}|j
dd	 |  |jd¡ d S )
N©r   r   ÚprocessrM   rN   FT©NNr   ©Úonce©r   Úwaitpid_returnr   r   ÚdrainedÚkillingÚlaststopÚ
waitstatusÚ
pidhistoryrK   Úreapr=   Úfinished©r2   rJ   rb   rj   rd   r   r   r   Ú	test_reap®   ó   

zSupervisordTests.test_reapc                 C   s.   t ƒ }|  |¡}|jddd}|  |d ¡ d S )NTéd   )rm   Úrecursionguard)r   rK   ru   r=   )r2   rJ   rd   Úresultr   r   r   Útest_reap_recursionguard½   s   
z)SupervisordTests.test_reap_recursionguardc                 C   sl   t ƒ }d|_t|dddƒ}t|ƒ}d|_d|_d |_d|_d|i|_|  	|¡}|j
d	d
 |  |jd¡ d S )Nri   rj   rM   rN   FTrk   r   éc   )r{   rn   rw   r   r   r   Útest_reap_more_than_onceÃ   ry   z)SupervisordTests.test_reap_more_than_oncec                 C   s€   t ƒ }d|_t|dddƒ}t|ƒ}d|_d|_d |_d|_d|i|_|  	|¡}|j
dd	 |  |jd ¡ |  |jjd
 d¡ d S )N)é   r   rj   rM   rN   FTrk   r   rl   r   z$reaped unknown pid 2 (exit status 0))r   ro   r   r   rp   rq   rr   rs   rt   rK   ru   r=   rv   ÚloggerÚdatarw   r   r   r   Útest_reap_unknown_pidÒ   s   

ÿz&SupervisordTests.test_reap_unknown_pidc                 C   óJ   t ƒ }tj|_|  |¡}| ¡  |  |jjt	j
¡ |  |jjd d¡ d S )Nr   z(received SIGTERM indicating exit request)r   ÚsignalÚSIGTERMÚ_signalrK   Úhandle_signalr=   rJ   Úmoodr   ÚSHUTDOWNr   r‚   ©r2   rJ   rd   r   r   r   Útest_handle_sigtermã   ó   

ÿÿz$SupervisordTests.test_handle_sigtermc                 C   r„   )Nr   z'received SIGINT indicating exit request)r   r…   ÚSIGINTr‡   rK   rˆ   r=   rJ   r‰   r   rŠ   r   r‚   r‹   r   r   r   Útest_handle_sigintí   r   z#SupervisordTests.test_handle_sigintc                 C   r„   )Nr   z(received SIGQUIT indicating exit request)r   r…   ÚSIGQUITr‡   rK   rˆ   r=   rJ   r‰   r   rŠ   r   r‚   r‹   r   r   r   Útest_handle_sigquit÷   r   z$SupervisordTests.test_handle_sigquitc                 C   s\   t ƒ }tj|_|  |¡}|  |jjtj	¡ | 
¡  |  |jjtj¡ |  |jjd d¡ d S )Nr   z*received SIGHUP indicating restart request)r   r…   ÚSIGHUPr‡   rK   r=   rJ   r‰   r   ÚRUNNINGrˆ   Ú
RESTARTINGr   r‚   r‹   r   r   r   Ú#test_handle_sighup_in_running_state  s   

ÿ
ÿÿz4SupervisordTests.test_handle_sighup_in_running_statec                 C   sf   t ƒ }tj|_|  |¡}tj|j_|  	|jjtj¡ | 
¡  |  	|jjtj¡ |  	|jjd d¡ d S )Nr   z@ignored SIGHUP indicating restart request (shutdown in progress))r   r…   r’   r‡   rK   r   rŠ   rJ   r‰   r=   rˆ   r   r‚   r‹   r   r   r   Ú$test_handle_sighup_in_shutdown_state  s   


ÿ
ÿÿz5SupervisordTests.test_handle_sighup_in_shutdown_statec                 C   sP   t ƒ }tj|_|  |¡}| ¡  |  |jjt	j
¡ d}|  |jjd |v ¡ d S )N)z(received SIGCHLD indicating a child quitz'received SIGCLD indicating a child quitr   )r   r…   ÚSIGCHLDr‡   rK   rˆ   r=   rJ   r‰   r   r“   r0   r   r‚   )r2   rJ   rd   Úmsgsr   r   r   Útest_handle_sigchld  s   

ÿz$SupervisordTests.test_handle_sigchldc                 C   sÂ   t ƒ }tj|_t|dddƒ}t|tjd}t ¡ d |_	|  
|¡}t|dddƒg}t|d|d|_t|ƒ}d |i|_| ¡  |  |jjtj¡ |  |jd¡ |  |jjd	 d
¡ |  |jd¡ d S )NÚprocess1rM   rN   )Ústater   rL   rO   Tr   z.received SIGUSR2 indicating log reopen request)r   r…   ÚSIGUSR2r‡   r   r   r   ÚSTOPPINGÚtimeÚdelayrK   r   rS   r   rZ   rˆ   r=   rJ   r‰   r   r“   Úlogs_reopenedr   r‚   )r2   rJ   Úpconfig1rš   rd   rP   Údummypgroupr   r   r   Útest_handle_sigusr2(  s,   
þ

ÿÿz$SupervisordTests.test_handle_sigusr2c                 C   r„   )Nr   z#received SIGUSR1 indicating nothing)r   r…   ÚSIGUSR1r‡   rK   rˆ   r=   rJ   r‰   r   r“   r   r‚   r‹   r   r   r   Útest_handle_unknown_signal=  r   z+SupervisordTests.test_handle_unknown_signalc                 C   s&   t ƒ }|  |¡}|  | ¡ tj¡ d S rI   )r   rK   r=   Ú	get_stater   r“   r‹   r   r   r   Útest_get_stateG  s   
zSupervisordTests.test_get_statec                 C   sp   t ƒ }|  |¡}t|dddƒ}t|d|gd}|g|j_| ¡ \}}}|  ||g¡ |  |g ¡ |  |g ¡ d S )Nrš   rM   rN   Úgroup1rO   )r   rK   r   r   rJ   rS   Údiff_to_activer=   )r2   rJ   rd   rb   r¨   ÚaddedÚchangedÚremovedr   r   r   Ú&test_diff_to_active_finds_groups_addedL  s   

z7SupervisordTests.test_diff_to_active_finds_groups_addedc           	      C   s®   t ƒ }|  |¡}t|dddƒ}t|d|gd}t|dddƒ}t|d|gd}||g|j_| |¡ | |¡ |g|j_| ¡ \}}}|  |g ¡ |  |g ¡ |  ||g¡ d S )	Nrš   z/bin/process1rN   r¨   rO   Úprocess2z/bin/process2Úgroup2)	r   rK   r   r   rJ   rS   Úadd_process_groupr©   r=   )	r2   rJ   rd   rb   r¨   r¯   rª   r«   r¬   r   r   r   Ú(test_diff_to_active_finds_groups_removed[  s   



z9SupervisordTests.test_diff_to_active_finds_groups_removedc                    s~  ddl m‰ m‰ tƒ ‰|  ˆ¡}‡ ‡fdd„}‡‡fdd„}|dddd	}|d
|gƒ}|ddƒ}|d|gƒ}||g}|dddd	}|d
|gƒ}|ddƒ}|d|gƒ}	| |¡ | |	¡ ||j_| ¡ \}
}}|  	|
g ¡ |  	|g ¡ |  	||g¡ tƒ ‰|  ˆ¡}|ddƒ}|ddƒ}|d
||gƒ}|g}| |d
|gƒ¡ ||j_| ¡ \}
}}|  	|
g ¡ |  	|g ¡ |  	||g¡ d S )Nr   )ÚProcessConfigÚProcessGroupConfigc                    ó¤   i d| “d|“dd “dd “dd“dd“d	d“d
d“dd“dd “dd “dd“dd“dd“dd“dd“dd “ddddddd ddddd d dœ¥}|  |¡ ˆ ˆfi |¤ŽS ©NÚnameÚcommandÚ	directoryÚumaskÚpriorityiç  Ú	autostartTÚautorestartÚ	startsecsé
   ÚstartretriesÚuidÚstdout_logfileÚstdout_capture_maxbytesr   Ústdout_events_enabledFÚstdout_logfile_backupsÚstdout_logfile_maxbytesÚstdout_syslogÚstderr_logfile)r   )Ústderr_capture_maxbytesÚstderr_events_enabledÚstderr_logfile_backupsÚstderr_logfile_maxbytesÚstderr_syslogÚredirect_stderrÚ
stopsignalÚstopwaitsecsÚstopasgroupÚkillasgroupÚ	exitcodesÚenvironmentÚ	serverurl©Úupdate©r¶   r·   Úparamsr|   )r²   rJ   r   r   Úmake_pconfigw  ó^   ÿÿþþþþýýýüüüûúúùøð
zBSupervisordTests.test_diff_to_active_changed.<locals>.make_pconfigc                    s   ˆ ˆ| d|ƒS )Né   r   )r¶   rP   )r³   rJ   r   r   Úmake_gconfig  ó   zBSupervisordTests.test_diff_to_active_changed.<locals>.make_gconfigrš   Únew)rÀ   r¨   r®   r¯   Úold)
Úsupervisor.optionsr²   r³   r   rK   r°   rJ   rS   r©   r=   )r2   rd   rÙ   rÜ   rb   r¨   r¯   rÞ   Úgroup3Úgroup4rª   r«   r¬   r¡   Úpconfig2r   )r²   r³   rJ   r   Útest_diff_to_active_changedq  sB   







z,SupervisordTests.test_diff_to_active_changedc                    s  ddl m‰ ddlm‰ m‰ tƒ ‰|  ˆ¡}‡ ‡fdd„}‡fdd„}d‡‡fd	d
„	}|ddƒ}|dƒ}|d|g|ƒ}|ddƒ}|dƒ}|d|g|ƒ}||g}	|ddƒ}|dƒ}|d|g|ƒ}
|ddƒ}|dƒ}|d|g|ƒ}| |
¡ | |¡ |	|j_	| 
¡ \}}}|  |g ¡ |  |g ¡ |  ||g¡ tƒ ‰|  ˆ¡}|ddƒ}|dƒ}|d|g|ƒ}|ddƒ}|dƒ}|d|g|ƒ}||g}	|ddƒ}|dƒ}|d|g|ƒ}
|ddƒ}|dƒ}|d|g|ƒ}| |
¡ | |¡ |	|j_	| 
¡ \}}}|  |g ¡ |  |g ¡ |  ||g¡ tƒ ‰|  ˆ¡}|ddƒ}|dƒ}|d|g|dƒ}|ddƒ}|dƒ}|d|g|ƒ}||g}	|ddƒ}|dƒ}|d|g|dƒ}
|ddƒ}|dƒ}|d|g|ƒ}| |
¡ | |¡ |	|j_	| 
¡ \}}}|  |g ¡ |  |g ¡ |  ||g¡ d S )Nr   ©Ú
EventTypes)ÚEventListenerConfigÚEventListenerPoolConfigc                    r´   rµ   rÕ   r×   )rç   rJ   r   r   rÙ   ¼  rÚ   zPSupervisordTests.test_diff_to_active_changed_eventlistener.<locals>.make_pconfigc                     s$   g }| D ]}|  tˆ |d ƒ¡ q|S rI   )ÚappendÚgetattr)Úpool_event_namesr|   Úpool_event_namerå   r   r   Úmake_econfigÒ  s   zPSupervisordTests.test_diff_to_active_changed_eventlistener.<locals>.make_econfigú&supervisor.dispatchers:default_handlerc                    s   ˆ ˆ| d|d||ƒS )NrÛ   r¾   r   )r¶   rP   Úpool_eventsÚresult_handler)rè   rJ   r   r   rÜ   Ø  s   zPSupervisordTests.test_diff_to_active_changed_eventlistener.<locals>.make_gconfigrš   zprocess1-newÚTICK_60r¨   r®   Ú	TICK_3600r¯   zprocess1-oldÚTICK_5znew-result-handlerzold-result-handler)rî   )rE   ræ   rà   rç   rè   r   rK   r°   rJ   rS   r©   r=   )r2   rd   rÙ   rí   rÜ   rb   Úeconfigr¨   r¯   rÞ   rá   râ   rª   r«   r¬   r   )rç   rè   ræ   rJ   r   Ú)test_diff_to_active_changed_eventlistenerµ  sŽ   




















z:SupervisordTests.test_diff_to_active_changed_eventlistenerc                 C   s¦   t ƒ }t|dddƒ}t|d|gd}|g|_|  |¡}|  |ji ¡ | |¡}|  t|j 	¡ ƒdg¡ |  
|¡ |jd }| |¡}|  ||jd ¡ |  
| ¡ d S )NrL   rM   rN   rO   )r   r   r   rS   rK   r=   rZ   r°   ÚlistÚkeysr0   )r2   rJ   rb   Úgconfigrd   r|   Úgroupr   r   r   Útest_add_process_group/  s   




z'SupervisordTests.test_add_process_groupc                    sŠ   ddl m} g ‰ ‡ fdd„}| |j|¡ tƒ }t|dddƒ}t|d|gd}|g|_|  |¡}| 	|¡ d	|_
| ¡  |  ˆ d
g¡ d S )Nr   ©Úeventsc                    ó   ˆ   d¡ d S r   ©ré   ©Úevent©ÚLr   r   ÚcallbackD  rÝ   zESupervisordTests.test_add_process_group_emits_event.<locals>.callbackrL   rM   rN   rO   Tr   )Ú
supervisorrü   Ú	subscribeÚProcessGroupAddedEventr   r   r   rS   rK   r°   r   Ú
runforeverr=   ©r2   rü   r  rJ   rb   rø   rd   r   r  r   Ú"test_add_process_group_emits_eventA  s   

z3SupervisordTests.test_add_process_group_emits_eventc                 C   sÎ   t ƒ }t|dddƒ}t|d|gd}|  |¡}|  t|jd¡ | |¡ |jd }| d¡}|  	|j
¡ |  |ji ¡ |  	|¡ | |¡ td ƒg|jd _| d¡}|  t|j ¡ ƒdg¡ |  	| ¡ d S )NrL   rM   rN   rO   Úasdf)r   r   r   rK   ÚassertRaisesÚKeyErrorÚremove_process_groupr°   rZ   r0   Úbefore_remove_calledr=   r   Úunstopped_processesrö   r÷   )r2   rJ   rb   rø   rd   rù   r|   r   r   r   Útest_remove_process_groupS  s    






z*SupervisordTests.test_remove_process_groupc                    s¦   ddl m} g ‰ ‡ fdd„}| |j|¡ tƒ }t|dddƒ}t|d|gd}|g|_|  |¡}| 	|¡ t
d ƒg|jd _| d¡ d	|_| ¡  |  ˆ d
g¡ d S )Nr   rû   c                    rý   r   rþ   rÿ   r  r   r   r  k  rÝ   zBSupervisordTests.test_remove_process_group_event.<locals>.callbackrL   rM   rN   rO   Tr   )r  rü   r  ÚProcessGroupRemovedEventr   r   r   rS   rK   r°   r   rZ   Ústopped_processesr  r   r  r=   r  r   r  r   Útest_remove_process_group_eventh  s   


z0SupervisordTests.test_remove_process_group_eventc                    sZ   ddl m} g ‰ ‡ fdd„}| |j|¡ tƒ }|  |¡}d|_| ¡  |  ˆ dg¡ d S )Nr   rû   c                    rý   r   rþ   rÿ   r  r   r   r    rÝ   zNSupervisordTests.test_runforever_emits_generic_startup_event.<locals>.callbackTr   )	r  rü   r  ÚSupervisorStateChangeEventr   rK   r   r  r=   ©r2   rü   r  rJ   rd   r   r  r   Ú+test_runforever_emits_generic_startup_event|  s   
z<SupervisordTests.test_runforever_emits_generic_startup_eventc                    sZ   ddl m} g ‰ ‡ fdd„}| |j|¡ tƒ }d|_|  |¡}| ¡  |  ˆ dg¡ d S )Nr   rû   c                    rý   )Nr€   rþ   rÿ   r  r   r   r  ‹  rÝ   zOSupervisordTests.test_runforever_emits_generic_specific_event.<locals>.callbackTr€   )	r  rü   r  ÚSupervisorRunningEventr   r   rK   r  r=   r  r   r  r   Ú,test_runforever_emits_generic_specific_eventˆ  s   
z=SupervisordTests.test_runforever_emits_generic_specific_eventc                 C   sF   t ƒ }d|_|  |¡}|  t|jƒd¡ | ¡  |  t|jƒd¡ d S )NTr   é   )r   r   rK   r=   r;   Úticksr  r‹   r   r   r   Útest_runforever_calls_tick”  s   
z+SupervisordTests.test_runforever_calls_tickc           	      C   sÆ   t ƒ }dgddgf|j_|  |¡}t|ddƒ}t||gd}t|ƒ}tdd}tdd	}tdtd
}|||dœ|_	d|i|_
d|_| ¡  |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ d S )Né   é   é   rL   rM   rO   T)Úreadable)Úwritable)r   Úerror)r  r  r  )r   Úpollerr|   rK   r   r   r   r	   ÚOSErrorÚdispatchersrZ   r   r  r=   ÚtransitionedÚread_event_handledÚwrite_event_handledÚerror_handled)	r2   rJ   rd   rb   rø   Úpgroupr  r   r!  r   r   r   Ú test_runforever_poll_dispatchersœ  s"   



z1SupervisordTests.test_runforever_poll_dispatchersc                 C   sˆ   t ƒ }dgg f|j_|  |¡}t|ddƒ}t||gd}t|ƒ}ddlm} t	d|j
d}d|i|_d|i|_d|_|  |j
|j¡ d S ©	Nr  rL   rM   rO   r   ©Úasyncore_25T©r  r!  ©r   r"  r|   rK   r   r   r   Úsupervisor.medusar-  r	   ÚExitNowr$  rZ   r   r  r  ©r2   rJ   rd   rb   rø   r)  ÚasyncoreÚexitnowr   r   r   Ú2test_runforever_select_dispatcher_exitnow_via_read¯  ó   


zCSupervisordTests.test_runforever_select_dispatcher_exitnow_via_readc                 C   sˆ   t ƒ }g dgf|j_|  |¡}t|ddƒ}t||gd}t|ƒ}ddlm} t	d|j
d}d|i|_d|i|_d|_|  |j
|j¡ d S r+  r/  r2  r   r   r   Ú3test_runforever_select_dispatcher_exitnow_via_write½  r6  zDSupervisordTests.test_runforever_select_dispatcher_exitnow_via_writec                 C   s€   t ƒ }dgg f|j_|  |¡}t|ddƒ}t||gd}t|ƒ}tdtd}d|i|_	d|i|_
d|_| ¡  |  |jd¡ d S ©Nr  rL   rM   rO   Tr.  ©r   r"  r|   rK   r   r   r   r	   ÚNotImplementedErrorr$  rZ   r   r  r=   r(  ©r2   rJ   rd   rb   rø   r)  Únotimplr   r   r   Ú7test_runforever_select_dispatcher_handle_error_via_readË  ó   


zHSupervisordTests.test_runforever_select_dispatcher_handle_error_via_readc                 C   s€   t ƒ }g dgf|j_|  |¡}t|ddƒ}t||gd}t|ƒ}tdtd}d|i|_	d|i|_
d|_| ¡  |  |jd¡ d S r8  r9  r;  r   r   r   Ú8test_runforever_select_dispatcher_handle_error_via_writeÙ  r>  zISupervisordTests.test_runforever_select_dispatcher_handle_error_via_writec                    sè   t ƒ }|  |¡}t|ƒ}t|ƒ}d|i|_tj|j_g ‰ ‡ fdd„}ddl	m
} | |j|¡ ddlm} d|_|  |j|j¡ |  |j¡ |  tˆ d |jƒ¡ |  tˆ d |jƒ¡ |  tˆ d |jƒ¡ |  tˆ d |jƒ¡ d S )	NrL   c                    ó   ˆ   | ¡ d S rI   rþ   rÿ   r  r   r   r  ï  rÝ   zHSupervisordTests.test_runforever_stopping_emits_events.<locals>.callbackr   rû   r,  Tr   )r   rK   r   r   rZ   r   rŠ   rJ   r‰   r  rü   r  r  r0  r-  r   r  r1  r  r0   Úall_stoppedÚ
isinstancer  ÚSupervisorStoppingEvent)r2   rJ   rd   rø   r)  r  rü   r3  r   r  r   Ú%test_runforever_stopping_emits_eventsç  s$   


z6SupervisordTests.test_runforever_stopping_emits_eventsc                    sŒ   t ƒ }|  |¡}t|ddƒ}t||gd}t|ƒ}g ‰ ‡ fdd„}d|i|_tj|j_	d|j_
ddlm} |  |j|j¡ |  |jd¡ d S )	NrL   rM   rO   c                      rý   r   rþ   r   r  r   r   r    rÝ   z,SupervisordTests.test_exit.<locals>.callbackTr   r,  )r   rK   r   r   r   rZ   r   r”   rJ   r‰   r   r0  r-  r  r1  r  r=   rA  )r2   rJ   rd   rb   rø   r)  r  r3  r   r  r   Ú	test_exitü  s   


zSupervisordTests.test_exitc                    sˆ   t ƒ }|  |¡}t|ddƒ}t|ƒ}t||gd}t|ƒ}|g|_g ‰ ‡ fdd„}d|i|_tj	|j
_d|j
_| ¡  |  |jd¡ d S )NrL   rM   rO   c                      rý   r   rþ   r   r  r   r   r    rÝ   z4SupervisordTests.test_exit_delayed.<locals>.callbackTr   )r   rK   r   r   r   r   r  rZ   r   r”   rJ   r‰   r   r  ÚassertNotEqualÚlastshutdownreport)r2   rJ   rd   rb   rj   rø   r)  r  r   r  r   Útest_exit_delayed  s   


z"SupervisordTests.test_exit_delayedc                 C   s&   ddl m} |tjƒ}|  |d¡ d S )Nr   )ÚgetSupervisorStateDescriptionr“   )Úsupervisor.statesrI  r   r“   r=   )r2   rI  r|   r   r   r   Ú"test_getSupervisorStateDescription  s   
z3SupervisordTests.test_getSupervisorStateDescriptionc                    sÂ  ddl m} g ‰ ‡ fdd„}| |j|¡ tƒ }|  |¡}|jdd |  |jd d¡ |  |jd d¡ |  |jd d¡ |  t	ˆ ƒd¡ |jd	d |  |jd d¡ |  |jd d¡ |  |jd d¡ |  t	ˆ ƒd
¡ |  ˆ d j
|j¡ |jdd |  |jd d¡ |  |jd d¡ |  |jd d¡ |  t	ˆ ƒd¡ |  ˆ d j
|j¡ |jdd |  |jd d¡ |  |jd d¡ |  |jd d¡ |  t	ˆ ƒd	¡ |  ˆ d j
|j¡ d S )Nr   rû   c                    r@  rI   rþ   rÿ   r  r   r   r  %  rÝ   z,SupervisordTests.test_tick.<locals>.callback)Únowé   é<   i  r  r   éÿÿÿÿé=   r  i  )r  rü   r  Ú	TickEventr   rK   Útickr=   r  r;   Ú	__class__Ú
Tick5EventÚTick60EventÚTick3600Eventr  r   r  r   Ú	test_tick"  s:   
zSupervisordTests.test_tickN)*r?   r@   rA   rF   rH   rK   re   rh   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*  r5  r7  r=  r?  rD  rE  rH  rK  rW  r   r   r   r   rC   r   sP    



DzrC   c                   C   s   t  tjt ¡S rI   )ÚunittestÚfindTestCasesr)   Úmodulesr?   r   r   r   r   Ú
test_suiteF  s   r[  Ú__main__)ÚdefaultTest)rX  rž   r…   r)   r"   r+   r-   rJ  r   r   Úsupervisor.tests.baser   r   r   r   r   r	   Úsupervisor.compatr
   rB   ÚImportErrorÚTestCaser   rC   r[  r?   r   r   r   r   r   Ú<module>   s@    ýV     Yÿ