o
    þâf{B ã                   @   s  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m	Z	 d dl
mZ G dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ Zedkrejdd dS dS )é    N©Úxmlrpc)ÚStringIO)Ú	xmlrpclib)ÚLSBInitExitStatusesÚLSBStatusExitStatuses)ÚDummyRPCServerc                   @   sL   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S )Úfgthread_Testsc                 C   ó   ddl m} |S )Nr   )Úfgthread)Úsupervisor.supervisorctlr   )Úselfr   © r   úV/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/test_supervisorctl.pyÚ_getTargetClass
   ó   zfgthread_Tests._getTargetClassc                 C   s   |   ¡ ||ƒS ©N©r   )r   ÚprogramÚctlr   r   r   Ú_makeOne   ó   zfgthread_Tests._makeOnec                 C   s,   t ƒ }t|ƒ}|  d |¡}|  |jd¡ d S ©NF)ÚDummyClientOptionsÚDummyControllerr   ÚassertEqualÚkilled)r   Úoptionsr   Úinstr   r   r   Ú	test_ctor   s   zfgthread_Tests.test_ctorc                 C   s:   t ƒ }t|ƒ}|  d |¡}| d dd ¡}|  ||j¡ d S )NÚcall)r   r   r   Úglobaltracer   Ú
localtrace©r   r   r   r   Úresultr   r   r   Útest_globaltrace_call   s
   z$fgthread_Tests.test_globaltrace_callc                 C   s8   t ƒ }t|ƒ}|  d |¡}| d d d ¡}|  |d ¡ d S r   )r   r   r   r!   r   r#   r   r   r   Útest_globaltrace_noncall   s
   z'fgthread_Tests.test_globaltrace_noncallc              
   C   sv   t ƒ }t|ƒ}|  d |¡}d|_z	| d dd ¡ W n ty3 } z|  |jd ¡ W Y d }~d S d }~ww |  d¡ d S )NTÚlinez(No exception thrown. Excepted SystemExit)	r   r   r   r   r"   Ú
SystemExitr   ÚcodeÚfail)r   r   r   r   Úer   r   r   Útest_localtrace_killed_whyline%   s   €ÿz-fgthread_Tests.test_localtrace_killed_whylinec                 C   s@   t ƒ }t|ƒ}|  d |¡}d|_| d d d ¡}|  ||j¡ d S ©NT)r   r   r   r   r"   r   r#   r   r   r   Ú"test_localtrace_killed_not_whyline1   s   z1fgthread_Tests.test_localtrace_killed_not_whylinec                 C   st   t ƒ }t|ƒ}|  d |¡}d|_G dd„ dtƒ}|ƒ |_|ƒ |_| ¡  |  |j¡ |  |jj	¡ |  |jj	¡ d S )NTc                   @   ó   e Zd Zdd„ ZdS )z0fgthread_Tests.test_kill.<locals>.DummyCloseablec                 S   ó
   d| _ d S r-   ©Úclosed©r   r   r   r   Úclose?   ó   
z6fgthread_Tests.test_kill.<locals>.DummyCloseable.closeN)Ú__name__Ú
__module__Ú__qualname__r4   r   r   r   r   ÚDummyCloseable>   ó    r9   )
r   r   r   r   ÚobjectÚoutput_handlerÚerror_handlerÚkillÚ
assertTruer2   )r   r   r   r   r9   r   r   r   Ú	test_kill9   s   zfgthread_Tests.test_killN)r6   r7   r8   r   r   r   r%   r&   r,   r.   r@   r   r   r   r   r	   	   s    r	   c                   @   s4  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'dKS )LÚControllerTestsc                 C   r
   )Nr   )Ú
Controller)r   rB   )r   rB   r   r   r   r   I   r   zControllerTests._getTargetClassc                 C   s   |   ¡ |ƒS r   r   ©r   r   r   r   r   r   M   s   zControllerTests._makeOnec                 C   s(   t ƒ }|  |¡}|  |j|jd ¡ d S )Nz> )r   r   r   Úprompt©r   r   Ú
controllerr   r   r   r   Q   s   
zControllerTests.test_ctorc                 C   s(   t ƒ }|  |¡}| ¡ }|  |d¡ d S r-   )r   r   Úupcheckr   ©r   r   rF   r$   r   r   r   Útest__upcheckV   s   
zControllerTests.test__upcheckc                 C   sP   t ƒ }dd„ |jj_|  |¡}tƒ |_| ¡ }|  |d¡ |  |j 	¡ d¡ d S )Nc                  W   ó   dS )Nz1.0r   ©Úxr   r   r   Ú<lambda>^   ó    zDControllerTests.test__upcheck_wrong_server_version.<locals>.<lambda>FzvSorry, this version of supervisorctl expects to talk to a server with API version 3.0, but the remote version is 1.0.
)
r   Ú_serverÚ
supervisorÚ
getVersionr   r   ÚstdoutrG   r   ÚgetvaluerH   r   r   r   Ú"test__upcheck_wrong_server_version\   s   
ÿz2ControllerTests.test__upcheck_wrong_server_versionc                    sd   t ƒ }ddlm‰  ‡ fdd„}||jj_|  |¡}tƒ |_| 	¡ }|  
|d¡ |  
|j ¡ d¡ d S )Nr   ©ÚFaultsc                      ó   t  ˆ jd¡‚)NÚduh)r   ÚFaultÚUNKNOWN_METHODr   rU   r   r   rQ   k   r   z@ControllerTests.test__upcheck_unknown_method.<locals>.getVersionFzíSorry, supervisord responded but did not recognize the supervisor namespace commands that supervisorctl uses to control it.  Please check that the [rpcinterface:supervisor] section is enabled in the configuration file (see sample.conf).
)r   Úsupervisor.xmlrpcrV   rO   rP   rQ   r   r   rR   rG   r   rS   )r   r   rQ   rF   r$   r   rU   r   Útest__upcheck_unknown_methodh   s   

ÿz,ControllerTests.test__upcheck_unknown_methodc                    s^   t ƒ }ddlm‰  ‡ fdd„}||jj_|  |¡}tƒ |_|  	t
j|j¡ |  |jtj¡ d S )Nr   rU   c                     rW   ©NÚ )r   rY   ÚFAILED©ÚargÚkwrU   r   r   Úf}   r   zEControllerTests.test__upcheck_reraises_other_xmlrpc_faults.<locals>.f)r   r[   rV   rO   rP   rQ   r   r   rR   ÚassertRaisesr   rY   rG   r   Ú
exitstatusr   ÚGENERIC©r   r   rc   rF   r   rU   r   Ú*test__upcheck_reraises_other_xmlrpc_faultsz   s   

z:ControllerTests.test__upcheck_reraises_other_xmlrpc_faultsc                    ó€   t ƒ }dd l‰dd l‰ ‡ ‡fdd„}||jj_|  |¡}tƒ |_| 	¡ }|  
|d¡ |j ¡ }|  d|v ¡ |  
|jtj¡ d S )Nr   c                     ó   ˆ  ˆ jd¡‚©Nznobody home©ÚerrorÚECONNREFUSEDr`   ©ÚerrnoÚsocketr   r   Úraise_fault‰   r   zTControllerTests.test__upcheck_catches_socket_error_ECONNREFUSED.<locals>.raise_faultFzrefused connection)r   rq   rp   rO   rP   rQ   r   r   rR   rG   r   rS   r?   re   r   ÚINSUFFICIENT_PRIVILEGES©r   r   rr   rF   r$   Úoutputr   ro   r   Ú/test__upcheck_catches_socket_error_ECONNREFUSED…   ó   


z?ControllerTests.test__upcheck_catches_socket_error_ECONNREFUSEDc                    ri   )Nr   c                     rj   rk   ©rm   ÚENOENTr`   ro   r   r   rr   ›   r   zNControllerTests.test__upcheck_catches_socket_error_ENOENT.<locals>.raise_faultFzno such file)r   rq   rp   rO   rP   rQ   r   r   rR   rG   r   rS   r?   re   r   ÚNOT_RUNNINGrt   r   ro   r   Ú)test__upcheck_catches_socket_error_ENOENT—   rw   z9ControllerTests.test__upcheck_catches_socket_error_ENOENTc                    sT   t ƒ }dd l‰dd l‰ ‡ ‡fdd„}||jj_|  |¡}tƒ |_|  	ˆj
|j¡ d S )Nr   c                     rj   r]   )rm   ÚEBADFr`   ro   r   r   rc   ­   r   zEControllerTests.test__upcheck_reraises_other_socket_faults.<locals>.f)r   rq   rp   rO   rP   rQ   r   r   rR   rd   rm   rG   rg   r   ro   r   Ú*test__upcheck_reraises_other_socket_faults©   s   

z:ControllerTests.test__upcheck_reraises_other_socket_faultsc                 C   sP   t ƒ }|  |¡}tƒ |_tƒ }|f|j_| d¡}|  |d ¡ |  |j	d¡ d S )NÚhelpT)
r   r   r   rR   ÚDummyPluginr   ÚpluginsÚonecmdr   Úhelped)r   r   rF   Úpluginr$   r   r   r   Útest_onecmd´   s   


zControllerTests.test_onecmdc                 C   sd   t ƒ }|  |¡}tƒ |_tƒ }|f|j_d|_| d¡ |  	|j¡ d|_| d¡ |  
|j¡ d S )NFr~   r^   )r   r   r   rR   r   r   r€   r‚   r   r?   ÚassertFalse)r   r   rF   rƒ   r   r   r   Ú.test_onecmd_empty_does_not_repeat_previous_cmd¾   s   



z>ControllerTests.test_onecmd_empty_does_not_repeat_previous_cmdc                 C   s:   t ƒ }|  |¡}tƒ |_i |_| d¡ |  |jd ¡ d S )Nr~   )r   r   r   rR   Ú_complete_infor   r   rE   r   r   r   Ú#test_onecmd_clears_completion_cacheË   s   

z3ControllerTests.test_onecmd_clears_completion_cachec                 C   sH   t ƒ }|  |¡}tƒ |_| d¡ |  |j ¡ d¡ |  |jtj	¡ d S )NÚbadcmdz*** Unknown syntax: badcmd
)
r   r   r   rR   r   r   rS   re   r   rf   rE   r   r   r   Útest_onecmd_bad_command_errorÓ   s   

ÿz-ControllerTests.test_onecmd_bad_command_errorc                 C   ó\   t ƒ }|  |¡}tƒ |_dg|_|jdddd}|  |d¡ |jdddd}|  |d ¡ d S )Nr~   r^   r   ©r'   úhelp é   ©r   r   r   rR   ÚvocabÚcompleter   rH   r   r   r   Útest_complete_action_emptyÜ   ó   
z*ControllerTests.test_complete_action_emptyc                 C   r‹   )Nr~   Úhr   rŒ   r   rŽ   r   rH   r   r   r   Útest_complete_action_partialæ   r“   z,ControllerTests.test_complete_action_partialc                 C   s@   t ƒ }|  |¡}tƒ |_dg|_|jdddd}|  |d¡ d S )Nr~   r   rŒ   r   r   rH   r   r   r   Útest_complete_action_wholeð   s   
z*ControllerTests.test_complete_action_wholec                 C   s8   t ƒ }|  |¡}tƒ |_|jdddd}|  |d ¡ d S )NÚbadr   rŒ   )r   r   r   rR   r‘   r   rH   r   r   r   Ú*test_complete_unknown_action_uncompletableø   s
   
z:ControllerTests.test_complete_unknown_action_uncompletablec                 C   óB   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d ¡ d S )Nr~   Úaddr^   rŽ   zbad rŒ   r   rH   r   r   r   Ú.test_complete_unknown_action_arg_uncompletableÿ   ó   

z>ControllerTests.test_complete_unknown_action_arg_uncompletablec                 C   sz   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d¡ |jdddd}|  |d¡ |jdd	dd}|  |d ¡ d S )
Nr~   Ústartr^   r   r   rŒ   rŽ   ústart é   r   rH   r   r   r   Útest_complete_help_empty  ó   

z(ControllerTests.test_complete_help_emptyc                 C   ó^   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d¡ |jdddd}|  |d ¡ d S )	Nr~   r   Úher   zhelp herŒ   r   rŽ   r   rH   r   r   r   Útest_complete_help_action  ó   

z)ControllerTests.test_complete_help_actionc                 C   s²   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d¡ |jdddd}|  |d	¡ |jdd
dd}|  |d¡ |jdddd}|  |d¡ |jdddd}|  |d ¡ d S )Nr~   r   r^   r   rž   rŒ   úfoo rŽ   úbar rŸ   zbaz:baz_01 é   zbaz:* é   r   rH   r   r   r   Útest_complete_start_empty  s   

z)ControllerTests.test_complete_start_emptyc                 C   r¢   )	Nr~   r   rc   r   zstart frŒ   r¦   rŽ   r   rH   r   r   r   Útest_complete_start_no_colon-  r¥   z,ControllerTests.test_complete_start_no_colonc                 C   sz   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d¡ |jdddd}|  |d	¡ |jdd
dd}|  |d ¡ d S )Nr~   r   úfoo:r   z
start foo:rŒ   zfoo:foo rŽ   zfoo:* rŸ   r   rH   r   r   r   Útest_complete_start_with_colon7  r¡   z.ControllerTests.test_complete_start_with_colonc                 C   r™   )Nr~   r   r—   r   z	start badrŒ   r   rH   r   r   r   Ú!test_complete_start_uncompletableC  rœ   z1ControllerTests.test_complete_start_uncompletablec                 C   sf   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d ¡ dd„ }||jjj	_
|jdd	dd d S )
Nr~   r   r^   r   rž   rŒ   c                  _   s   t dƒ‚)Nz(should not have called getAllProcessInfo)Ú	Exceptionr`   r   r   r   rc   R  s   z<ControllerTests.test_complete_caches_process_info.<locals>.frŽ   )r   r   r   rR   r   r‘   ÚassertNotEqualr   rO   rP   ÚgetAllProcessInfo)r   r   rF   r$   rc   r   r   r   Ú!test_complete_caches_process_infoK  s   

z1ControllerTests.test_complete_caches_process_infoc                 C   s–   t ƒ }|  |¡}tƒ |_ddg|_|jdddd}|  |d¡ |jdddd}|  |d	¡ |jdd
dd}|  |d¡ |jdddd}|  |d ¡ d S )Nr~   rš   r^   r   zadd rŒ   r¦   rŽ   r§   rŸ   zbaz r¨   r   rH   r   r   r   Útest_complete_add_emptyW  s   

z'ControllerTests.test_complete_add_emptyc                 C   r™   )Nr~   rš   r—   r   zadd badrŒ   r   rH   r   r   r   Útest_complete_add_uncompletablee  rœ   z/ControllerTests.test_complete_add_uncompletablec                 C   r¢   )	Nr~   rš   rc   r   zadd frŒ   r¦   rŽ   r   rH   r   r   r   Útest_complete_add_groupm  r¥   z'ControllerTests.test_complete_add_groupc                 C   r™   )Nr~   Úreloadr^   rŽ   zreload rŒ   r   rH   r   r   r   Ú&test_complete_reload_arg_uncompletablew  rœ   z6ControllerTests.test_complete_reload_arg_uncompletablec                 C   s"   t ƒ }|  |¡}|  |jd¡ d S )Nz*** No help on %s)r   r   r   ÚnohelprE   r   r   r   Útest_nohelp  s   
zControllerTests.test_nohelpc                 C   sH   t ƒ }|  |¡}tƒ |_| d¡}|j ¡ }|  |d ¡ |  |d¡ d S )Nr^   ú
foo helped)r   r   r   rR   Údo_helprS   r   ©r   r   rF   ÚresultsÚhelpvalr   r   r   Útest_do_help„  s   


zControllerTests.test_do_helpc                 C   sJ   t ƒ }|  |¡}tƒ |_| d¡}|  |d ¡ |j ¡ }|  d|v ¡ d S )Nr~   zhelp		Print a list)r   r   r   rR   r»   r   rS   r?   r¼   r   r   r   Útest_do_help_for_help  s   


z%ControllerTests.test_do_help_for_helpc                 C   s2   t ƒ }|  |¡}| ¡ }| ¡ j}|  ||¡ d S r   )r   r   Úget_supervisorÚgetServerProxyrP   r   ©r   r   rF   ÚproxyÚexpectedr   r   r   Ú<test_get_supervisor_returns_serverproxy_supervisor_namespace–  s
   

zLControllerTests.test_get_supervisor_returns_serverproxy_supervisor_namespacec                 C   s0   t ƒ }|  |¡}| ¡ }| ¡ }|  ||¡ d S r   )r   r   Úget_server_proxyrÂ   r   rÃ   r   r   r   Ú6test_get_server_proxy_with_no_args_returns_serverproxyž  s
   
zFControllerTests.test_get_server_proxy_with_no_args_returns_serverproxyc                 C   s4   t ƒ }|  |¡}| d¡}| ¡ j}|  ||¡ d S )NÚsystem)r   r   rÇ   rÂ   rÉ   r   rÃ   r   r   r   Ú;test_get_server_proxy_with_namespace_returns_that_namespace¦  s
   


zKControllerTests.test_get_server_proxy_with_namespace_returns_that_namespacec                 C   sL   ddl m} g }|ƒ }|  t|jƒdk¡ g |_|j|td |  |¡ d S )Nr   )ÚClientOptions)Údoc)Úsupervisor.optionsrË   r?   ÚlenÚsearchpathsÚrealizeÚ__doc__r   )r   rË   Úargsr   r   r   r   Ú#test_real_controller_initialization®  s   z3ControllerTests.test_real_controller_initializationN)(r6   r7   r8   r   r   r   rI   rT   r\   rh   rv   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   rA   H   sL    
	




		rA   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestControllerPluginBasec                 C   r
   )Nr   )ÚControllerPluginBase)r   rÕ   )r   rÕ   r   r   r   r   ¼  r   z(TestControllerPluginBase._getTargetClassc                 O   ó0   |   ¡ }tƒ }t|ƒ}||g|¢R i |¤Ž}|S r   ©r   r   r   ©r   ra   rb   Úklassr   r   rƒ   r   r   r   r   À  ó
   z!TestControllerPluginBase._makeOnec                 C   s–   |   ¡ }| d ¡}|  |d ¡ |  |jj ¡ d¡ |  t|jjƒd¡ |jjd }|  |d d¡ |  |d g ¡ |  |d d¡ |  |d d¡ d S )	NÚ
rŽ   r   z%unnamed commands (type help <topic>):rŸ   é   r¨   éP   ©r   r»   r   r   rR   rS   rÎ   Útopics_printed)r   rƒ   r$   Útopicsr   r   r   Útest_do_help_noargÇ  s   
z+TestControllerPluginBase.test_do_help_noargc                 C   sJ   |   ¡ }| d¡}|  |d ¡ |  |jj ¡ d¡ |  t|jjƒd¡ d S )NÚfoozno help on foo
r   rÞ   ©r   rƒ   r$   r   r   r   Útest_do_help_withargÓ  s
   
z-TestControllerPluginBase.test_do_help_withargN)r6   r7   r8   r   r   rá   rä   r   r   r   r   rÔ   »  s
    rÔ   c                   @   sx  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkdl„ Z8dmdn„ Z9dodp„ Z:dqdr„ Z;dsdt„ Z<dudv„ Z=dwdx„ Z>dydz„ Z?d{d|„ Z@d}d~„ ZAdd€„ ZBdd‚„ ZCdƒd„„ ZDd…d†„ ZEd‡dˆ„ ZFd‰dŠ„ ZGd‹dŒ„ ZHddŽ„ ZIdd„ ZJd‘d’„ ZKd“d”„ ZLd•d–„ ZMd—d˜„ ZNd™dš„ ZOd›dœ„ ZPddž„ ZQdŸd „ ZRd¡d¢„ ZSd£d¤„ ZTd¥d¦„ ZUd§d¨„ ZVd©dª„ ZWd«d¬„ ZXd­d®„ ZYd¯d°„ ZZd±d²„ Z[d³d´„ Z\dµd¶„ Z]d·d¸„ Z^d¹dº„ Z_d»d¼„ Z`d½d¾„ Zad¿dÀ„ ZbdÁdÂ„ ZcdÃdÄ„ ZddÅdÆ„ ZedÇdÈ„ ZfdÉdÊ„ ZgdËdÌ„ ZhdÍdÎ„ ZidÏdÐ„ ZjdÑdÒ„ ZkdÓdÔ„ ZldÕdÖ„ Zmd×dØ„ ZndÙdÚ„ ZodÛdÜ„ ZpdÝdÞ„ Zqdßdà„ Zrdádâ„ Zsdãdä„ Ztdådæ„ Zudçdè„ Zvdédê„ Zwdëdì„ Zxdídî„ Zydïdð„ Zzdñdò„ Z{dódô„ Z|dõdö„ Z}d÷dø„ Z~dùdú„ Zdûdü„ Z€dýdþ„ Zdÿ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šd1d2„ Z›d3d4„ Zœd5d6„ Zd7d8„ Zžd9d:„ ZŸd;d<„ Z d=S (>  ÚTestDefaultControllerPluginc                 C   r
   )Nr   )ÚDefaultControllerPlugin)r   ræ   )r   ræ   r   r   r   r   Ü  r   z+TestDefaultControllerPlugin._getTargetClassc                 O   rÖ   r   r×   rØ   r   r   r   r   à  rÚ   z$TestDefaultControllerPlugin._makeOnec                 C   óV   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  |d d¡ |  |jjtj	¡ d S )Nr^   rÛ   r   zError: too few arguments©
r   Údo_tailr   r   rR   rS   Úsplitre   r   rf   ©r   rƒ   r$   Úlinesr   r   r   Útest_tail_toofewargsç  ó   
z0TestDefaultControllerPlugin.test_tail_toofewargsc                 C   rç   )Nzone two three fourrÛ   r   zError: too many argumentsrè   rë   r   r   r   Útest_tail_toomanyargsï  rî   z1TestDefaultControllerPlugin.test_tail_toomanyargsc                 C   rç   )Nú-frÛ   r   z!Error: tail requires process namerè   rë   r   r   r   Útest_tail_f_noprocname÷  rî   z2TestDefaultControllerPlugin.test_tail_f_noprocnamec                 C   rç   )Nz-z foorÛ   r   úError: bad argument -zrè   rë   r   r   r   Útest_tail_bad_modifierÿ  rî   z2TestDefaultControllerPlugin.test_tail_bad_modifierc                 C   óT   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  t|ƒd¡ |  |d d¡ d S )Nrâ   rÛ   é   r   ústdout line©r   ré   r   r   rR   rS   rê   rÎ   rë   r   r   r   Útest_tail_defaults  ó   
z.TestDefaultControllerPlugin.test_tail_defaultsc                 C   óf   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  t|ƒd¡ |  |d d¡ |  |jjt	j
¡ d S )NÚNO_FILErÛ   rŸ   r   zNO_FILE: ERROR (no log file)©r   ré   r   r   rR   rS   rê   rÎ   re   r   rf   rë   r   r   r   Útest_tail_no_file  ó   
z-TestDefaultControllerPlugin.test_tail_no_filec                 C   rú   )Nr_   rÛ   rŸ   r   z)FAILED: ERROR (unknown error reading log)rü   rë   r   r   r   Útest_tail_failed  rþ   z,TestDefaultControllerPlugin.test_tail_failedc                 C   rú   )NÚBAD_NAMErÛ   rŸ   r   z&BAD_NAME: ERROR (no such process name)rü   rë   r   r   r   Útest_tail_bad_name!  rþ   z.TestDefaultControllerPlugin.test_tail_bad_namec                 C   rô   )Nz-10 foorÛ   r¨   r   z	dout liner÷   rë   r   r   r   Útest_tail_bytesmodifier*  rù   z3TestDefaultControllerPlugin.test_tail_bytesmodifierc                 C   rô   )Nz
foo stdoutrÛ   rõ   r   rö   r÷   rë   r   r   r   Ú,test_tail_explicit_channel_stdout_nomodifier2  rù   zHTestDefaultControllerPlugin.test_tail_explicit_channel_stdout_nomodifierc                 C   rô   )Nz
foo stderrrÛ   rõ   r   zstderr liner÷   rë   r   r   r   Ú,test_tail_explicit_channel_stderr_nomodifier:  rù   zHTestDefaultControllerPlugin.test_tail_explicit_channel_stderr_nomodifierc                 C   óP   |   ¡ }| d¡}|  |d ¡ |jj ¡  ¡ }|  |d¡ |  |jjtj	¡ d S )Nz	foo fudgezError: bad channel 'fudge')
r   ré   r   r   rR   rS   Ústripre   r   rf   ©r   rƒ   r$   Úvaluer   r   r   Ú'test_tail_explicit_channel_unrecognizedB  ó   
zCTestDefaultControllerPlugin.test_tail_explicit_channel_unrecognizedc                    óL   |   ¡ }dd„ |j_g ‰ ‡ fdd„}||jjjj_| d¡ |  ˆ g ¡ d S )Nc                   S   rJ   r   r   r   r   r   r   rM   L  rN   zFTestDefaultControllerPlugin.test_tail_upcheck_failed.<locals>.<lambda>c                     ó   ˆ   d¡ d S r-   ©Úappendr`   ©Úcalledr   r   rc   N  r   z?TestDefaultControllerPlugin.test_tail_upcheck_failed.<locals>.frâ   )	r   r   rG   r   rO   rP   ÚreadProcessStdoutLogré   r   ©r   rƒ   rc   r   r  r   Útest_tail_upcheck_failedJ  ó   
z4TestDefaultControllerPlugin.test_tail_upcheck_failedc                 C   ó.   |   ¡ }| ¡  |jj ¡ }|  d|v ¡ d S )Nzstatus <name>)r   Úhelp_statusr   rR   rS   r?   ©r   rƒ   Úoutr   r   r   Útest_status_helpT  ó   z,TestDefaultControllerPlugin.test_status_helpc                    r  )Nc                   S   rJ   r   r   r   r   r   r   rM   \  rN   zHTestDefaultControllerPlugin.test_status_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   ^  r   zATestDefaultControllerPlugin.test_status_upcheck_failed.<locals>.fr^   )	r   r   rG   r   rO   rP   r±   Ú	do_statusr   r  r   r  r   Útest_status_upcheck_failedZ  r  z6TestDefaultControllerPlugin.test_status_upcheck_failedc                 C   sJ   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  |d  d¡d¡ d S )Nr^   rÛ   r   ÚRUNNINGé!   )r   r  r   r   rR   rS   rê   Úindexrë   r   r   r   Ú*test_status_table_process_column_min_widthd  s
   
zFTestDefaultControllerPlugin.test_status_table_process_column_min_widthc                 C   sv   |   ¡ }|jj}dd„ }||jj_|  | d¡d ¡ |jj 	¡  
d¡}|  |d  d¡d¡ |  |d  d¡d¡ d S )	Nc                  _   sD   ddl m} ddd|jddddddd	œ
d
d
d|jddddddd	œ
gS )Nr   ©ÚProcessStatesÚ–foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoorâ   é   r  r^   úfoo description©
ÚnameÚgroupÚpidÚstateÚ	statenamer   ÚstopÚspawnerrÚnowÚdescriptionÚbarrõ   úbar description)Úsupervisor.statesr"  r  ÚFATAL©ra   rb   r"  r   r   r   rc   n  s0   ÷öözOTestDefaultControllerPlugin.test_status_table_process_column_expands.<locals>.fr^   rÛ   r   r  é   rŽ   )r   r   r   rO   rP   r±   r   r  rR   rS   rê   r  )r   rƒ   r   rc   rì   r   r   r   Ú(test_status_table_process_column_expandsk  s   
zDTestDefaultControllerPlugin.test_status_table_process_column_expandsc                 C   óš   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  |d  d d¡g d¢¡ |  |d  d d¡g d¢¡ |  |d  d d¡g d¢¡ |  |jjtj	¡ d S )	Nr^   rÛ   r   rŸ   ©râ   r  r%  rŽ   ©r0  r3  r1  ©z
baz:baz_01ÚSTOPPEDzbaz description©
r   r  r   r   rR   rS   rê   re   r   rz   r  r   r   r   Ú test_status_all_processes_no_argŒ  ó   
ÿÿÿz<TestDefaultControllerPlugin.test_status_all_processes_no_argc                 C   sb   |   ¡ }| d¡}|  |d ¡ |  |jjtj¡ |jj ¡  	d¡}|  |d  	d d¡g d¢¡ d S )Nrâ   rÛ   r   rŸ   r8  )
r   r  r   r   re   r   ÚSUCCESSrR   rS   rê   r  r   r   r   Útest_status_successš  s   
ÿz/TestDefaultControllerPlugin.test_status_successc                 C   sL   |   ¡ }| d¡}|  |d ¡ |jj ¡ }|  d|¡ |  |jjtj¡ d S )NÚunknownprogramz(unknownprogram: ERROR (no such process)
)	r   r  r   r   rR   rS   re   r   ÚUNKNOWNr  r   r   r   Útest_status_unknown_process£  ó   
z7TestDefaultControllerPlugin.test_status_unknown_processc                 C   r7  )	NÚallrÛ   r   rŸ   r8  rŽ   r9  r:  r<  r  r   r   r   Ú!test_status_all_processes_all_arg«  r>  z=TestDefaultControllerPlugin.test_status_all_processes_all_argc                 C   s\   |   ¡ }| d¡}|  |d ¡ |jj ¡  ¡ }|  | d d¡g d¢¡ |  |jjt	j
¡ d S )Nrâ   rŸ   r8  )r   r  r   r   rR   rS   r  rê   re   r   r?  r  r   r   r   Útest_status_process_name¸  s   
ÿz4TestDefaultControllerPlugin.test_status_process_namec                 C   sb   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  |d  d d¡g d¢¡ |  |jjtj	¡ d S )Nzbaz:*rÛ   r   rŸ   r:  r<  r  r   r   r   Útest_status_group_nameÁ  s   
ÿz2TestDefaultControllerPlugin.test_status_group_namec                 C   s~   |   ¡ }| d¡}|  |d ¡ |jj ¡  d¡}|  |d  d d¡g d¢¡ |  |d  d d¡g d¢¡ |  |jjtj	¡ d S )Nz	foo baz:*rÛ   r   rŸ   r8  rŽ   r:  r<  r  r   r   r   Útest_status_mixed_namesÊ  s   
ÿÿz3TestDefaultControllerPlugin.test_status_mixed_namesc                 C   rç   )Nz
badgroup:*rÛ   r   zbadgroup: ERROR (no such group)©
r   r  r   r   rR   rS   rê   re   r   rB  r  r   r   r   Útest_status_bad_group_nameÕ  rî   z6TestDefaultControllerPlugin.test_status_bad_group_namec                 C   rç   )NÚ
badprocessrÛ   r   z#badprocess: ERROR (no such process)rJ  r  r   r   r   Útest_status_bad_process_nameÝ  rî   z8TestDefaultControllerPlugin.test_status_bad_process_namec                 C   rç   )Nzbadgroup:badprocessrÛ   r   z,badgroup:badprocess: ERROR (no such process)rJ  r  r   r   r   Ú'test_status_bad_process_name_with_groupå  s   
zCTestDefaultControllerPlugin.test_status_bad_process_name_with_groupc                 C   r  )Nzstart <name>)r   Ú
help_startr   rR   rS   r?   r  r   r   r   Útest_start_helpî  r  z+TestDefaultControllerPlugin.test_start_helpc                 C   óV   |   ¡ }| d¡}|  |d ¡ d}|  |jj ¡  d¡d |¡ |  |jjtj	¡ d S )Nr^   z$Error: start requires a process namerÛ   r   )
r   Údo_startr   r   rR   rS   rê   re   r   ÚINVALID_ARGS©r   rƒ   r$   rÅ   r   r   r   Útest_start_failô  ó   
z+TestDefaultControllerPlugin.test_start_failc                 C   óH   |   ¡ }| d¡}|  |d ¡ |  |jj ¡ d¡ |  |jjtj¡ d S ©Nr   ú"BAD_NAME: ERROR (no such process)
©	r   rR  r   r   rR   rS   re   r   rf   rã   r   r   r   Útest_start_badnameü  ó   
ÿz.TestDefaultControllerPlugin.test_start_badnamec                 C   rW  )Nrû   zNO_FILE: ERROR (no such file)
rZ  rã   r   r   r   Útest_start_no_file  r\  z.TestDefaultControllerPlugin.test_start_no_filec                 C   rW  )NÚNOT_EXECUTABLEz/NOT_EXECUTABLE: ERROR (file is not executable)
rZ  rã   r   r   r   Útest_start_not_executable  r\  z5TestDefaultControllerPlugin.test_start_not_executablec                 C   rW  )NÚALREADY_STARTEDz)ALREADY_STARTED: ERROR (already started)
©	r   rR  r   r   rR   rS   re   r   r?  rã   r   r   r   Útest_start_alreadystarted  r\  z5TestDefaultControllerPlugin.test_start_alreadystartedc                 C   rW  )NÚSPAWN_ERRORz!SPAWN_ERROR: ERROR (spawn error)
©	r   rR  r   r   rR   rS   re   r   rz   rã   r   r   r   Útest_start_spawnerror  r\  z1TestDefaultControllerPlugin.test_start_spawnerrorc                 C   sL   |   ¡ }| d¡}|  |d ¡ d}|  |jj ¡ |¡ |  |jjtj¡ d S )NÚABNORMAL_TERMINATIONz3ABNORMAL_TERMINATION: ERROR (abnormal termination)
rd  rT  r   r   r   Útest_start_abnormaltermination$  s   
z:TestDefaultControllerPlugin.test_start_abnormalterminationc                 C   ó6   |   ¡ }| d¡}|  |d ¡ |  |jj ¡ d¡ d S )Nrâ   úfoo: started
)r   rR  r   r   rR   rS   rã   r   r   r   Útest_start_one_success,  s   
ÿz2TestDefaultControllerPlugin.test_start_one_successc                 C   rW  )Núfoo:foori  ra  rã   r   r   r   Ú&test_start_one_with_group_name_success3  r\  zBTestDefaultControllerPlugin.test_start_one_with_group_name_successc                 C   rW  )Núfoo barzfoo: started
bar: started
ra  rã   r   r   r   Útest_start_many;  r\  z+TestDefaultControllerPlugin.test_start_manyc                 C   rW  )Nr¬   z(foo:foo_00: started
foo:foo_01: started
ra  rã   r   r   r   Útest_start_groupC  ó   
ÿz,TestDefaultControllerPlugin.test_start_groupc                 C   rW  ©Nz	BAD_NAME:ú BAD_NAME: ERROR (no such group)
)	r   rR  r   r   rR   rS   re   r   rS  rã   r   r   r   Útest_start_group_bad_nameM  r\  z5TestDefaultControllerPlugin.test_start_group_bad_namec                 C   rW  )NrE  zDfoo: started
foo2: started
failed_group:failed: ERROR (spawn error)
rd  rã   r   r   r   Útest_start_allU  ó   
ÿz*TestDefaultControllerPlugin.test_start_allc                    óV   |   ¡ }dd„ |j_g ‰ ‡ fdd„}|jjjj}||_||_| d¡ |  	ˆ g ¡ d S )Nc                   S   rJ   r   r   r   r   r   r   rM   b  rN   zGTestDefaultControllerPlugin.test_start_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   d  r   z@TestDefaultControllerPlugin.test_start_upcheck_failed.<locals>.frâ   )
r   r   rG   r   rO   rP   ÚstartAllProcessesÚstartProcessGrouprR  r   ©r   rƒ   rc   rP   r   r  r   Útest_start_upcheck_failed`  ó   
z5TestDefaultControllerPlugin.test_start_upcheck_failedc                 C   r  )Nzstop <name>)r   Ú	help_stopr   rR   rS   r?   r  r   r   r   Útest_stop_helpl  r  z*TestDefaultControllerPlugin.test_stop_helpc                 C   óR   |   ¡ }| d¡}|  |d ¡ |  |jj ¡  d¡d d¡ |  |jjtj	¡ d S )Nr^   rÛ   r   z#Error: stop requires a process name)
r   Údo_stopr   r   rR   rS   rê   re   r   rf   rã   r   r   r   Útest_stop_failr  ó   
ÿz*TestDefaultControllerPlugin.test_stop_failc                 C   rW  rX  ©	r   r  r   r   rR   rS   re   r   rf   rã   r   r   r   Útest_stop_badnamez  r\  z-TestDefaultControllerPlugin.test_stop_badnamec                 C   rW  )Nrz   ú!NOT_RUNNING: ERROR (not running)
©	r   r  r   r   rR   rS   re   r   r?  rã   r   r   r   Útest_stop_notrunning‚  r\  z0TestDefaultControllerPlugin.test_stop_notrunningc                 C   rW  )Nr_   úFAILED
r‚  rã   r   r   r   Útest_stop_failedŠ  ó
   
z,TestDefaultControllerPlugin.test_stop_failedc                 C   rW  )Nrâ   úfoo: stopped
r…  rã   r   r   r   Útest_stop_one_success‘  r\  z1TestDefaultControllerPlugin.test_stop_one_successc                 C   rW  )Nrk  rŠ  r…  rã   r   r   r   Ú%test_stop_one_with_group_name_success™  r\  zATestDefaultControllerPlugin.test_stop_one_with_group_name_successc                 C   rW  )Nrm  zfoo: stopped
bar: stopped
r…  rã   r   r   r   Útest_stop_many¡  rp  z*TestDefaultControllerPlugin.test_stop_manyc                 C   rW  )Nr¬   z(foo:foo_00: stopped
foo:foo_01: stopped
r…  rã   r   r   r   Útest_stop_groupª  rp  z+TestDefaultControllerPlugin.test_stop_groupc                 C   rW  rq  r‚  rã   r   r   r   Útest_stop_group_bad_name³  r\  z4TestDefaultControllerPlugin.test_stop_group_bad_namec                 C   rW  )NrE  zHfoo: stopped
foo2: stopped
failed_group:failed: ERROR (no such process)
r‚  rã   r   r   r   Útest_stop_all»  ó   
ÿz)TestDefaultControllerPlugin.test_stop_allc                    rv  )Nc                   S   rJ   r   r   r   r   r   r   rM   Ç  rN   zFTestDefaultControllerPlugin.test_stop_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   É  r   z?TestDefaultControllerPlugin.test_stop_upcheck_failed.<locals>.frâ   )
r   r   rG   r   rO   rP   ÚstopAllProcessesÚstopProcessGroupr  r   ry  r   r  r   Útest_stop_upcheck_failedÅ  r{  z4TestDefaultControllerPlugin.test_stop_upcheck_failedc                 C   r  )Nzsignal <signal name> <name>)r   Úhelp_signalr   rR   rS   r?   r  r   r   r   Útest_signal_helpÑ  r  z,TestDefaultControllerPlugin.test_signal_helpc                 C   rQ  )Nr^   ú7Error: signal requires a signal name and a process namerÛ   r   ©
r   Ú	do_signalr   r   rR   rS   rê   re   r   rf   ©r   rƒ   r$   Úmsgr   r   r   Útest_signal_fail_no_arg×  rV  z3TestDefaultControllerPlugin.test_signal_fail_no_argc                 C   rQ  )NÚhupr—  rÛ   r   r˜  rš  r   r   r   Útest_signal_fail_one_argß  rV  z4TestDefaultControllerPlugin.test_signal_fail_one_argc                 C   rW  )NzBAD_SIGNAL foozfoo: ERROR (bad signal name)
©	r   r™  r   r   rR   rS   re   r   rf   rã   r   r   r   Útest_signal_bad_signalç  r\  z2TestDefaultControllerPlugin.test_signal_bad_signalc                 C   rW  )NzHUP BAD_NAMErY  rŸ  rã   r   r   r   Útest_signal_bad_nameï  r\  z0TestDefaultControllerPlugin.test_signal_bad_namec                 C   rW  )NzHUP BAD_NAME:rr  rŸ  rã   r   r   r   Útest_signal_bad_group÷  r\  z1TestDefaultControllerPlugin.test_signal_bad_groupc                 C   rW  )NzHUP NOT_RUNNINGr„  )	r   r™  r   r   rR   rS   re   r   rz   rã   r   r   r   Útest_signal_not_runningÿ  r\  z3TestDefaultControllerPlugin.test_signal_not_runningc                 C   sF   |   ¡ }| d¡}|  |d ¡ |  |jj ¡ d¡ |  |jjd¡ d S )Nz
HUP FAILEDr‡  rŽ   )r   r™  r   r   rR   rS   re   rã   r   r   r   Útest_signal_failed  s
   
z.TestDefaultControllerPlugin.test_signal_failedc                 C   rW  )NzHUP foozfoo: signalled
©	r   r™  r   r   rR   rS   re   r   r?  rã   r   r   r   Útest_signal_one_success  r‰  z3TestDefaultControllerPlugin.test_signal_one_successc                 C   rW  )NzHUP foo barzfoo: signalled
bar: signalled
r¥  rã   r   r   r   Útest_signal_many  rp  z,TestDefaultControllerPlugin.test_signal_manyc                 C   rW  )NzHUP foo:z,foo:foo_00: signalled
foo:foo_01: signalled
r¥  rã   r   r   r   Útest_signal_group  rp  z-TestDefaultControllerPlugin.test_signal_groupc                 C   rW  )NzHUP allzLfoo: signalled
foo2: signalled
failed_group:failed: ERROR (no such process)
rŸ  rã   r   r   r   Útest_signal_all'  r‘  z+TestDefaultControllerPlugin.test_signal_allc                    rv  )Nc                   S   rJ   r   r   r   r   r   r   rM   3  rN   zHTestDefaultControllerPlugin.test_signal_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   5  r   zATestDefaultControllerPlugin.test_signal_upcheck_failed.<locals>.fzterm foo)
r   r   rG   r   rO   rP   ÚsignalAllProcessesÚsignalProcessGroupr™  r   ry  r   r  r   Útest_signal_upcheck_failed1  r{  z6TestDefaultControllerPlugin.test_signal_upcheck_failedc                 C   r  )Nzrestart <name>)r   Úhelp_restartr   rR   rS   r?   r  r   r   r   Útest_restart_help=  r  z-TestDefaultControllerPlugin.test_restart_helpc                 C   r~  )Nr^   rÛ   r   z&Error: restart requires a process name)
r   Ú
do_restartr   r   rR   rS   rê   re   r   rf   rã   r   r   r   Útest_restart_failC  r  z-TestDefaultControllerPlugin.test_restart_failc                 C   rW  )Nrâ   zfoo: stopped
foo: started
)	r   r¯  r   r   rR   rS   re   r   r?  rã   r   r   r   Útest_restart_oneK  r\  z,TestDefaultControllerPlugin.test_restart_onec                 C   rW  )NrE  zŒfoo: stopped
foo2: stopped
failed_group:failed: ERROR (no such process)
foo: started
foo2: started
failed_group:failed: ERROR (spawn error)
)	r   r¯  r   r   rR   rS   re   r   rz   rã   r   r   r   Útest_restart_allS  s   
ÿz,TestDefaultControllerPlugin.test_restart_allc                    rv  )Nc                   S   rJ   r   r   r   r   r   r   rM   `  rN   zITestDefaultControllerPlugin.test_restart_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   b  r   zBTestDefaultControllerPlugin.test_restart_upcheck_failed.<locals>.frâ   )
r   r   rG   r   rO   rP   r’  r“  r¯  r   ry  r   r  r   Útest_restart_upcheck_failed^  r{  z7TestDefaultControllerPlugin.test_restart_upcheck_failedc                 C   r  )Nzclear <name>)r   Ú
help_clearr   rR   rS   r?   r  r   r   r   Útest_clear_helpj  r  z+TestDefaultControllerPlugin.test_clear_helpc                 C   r~  )Nr^   rÛ   r   z$Error: clear requires a process name)
r   Údo_clearr   r   rR   rS   rê   re   r   rf   rã   r   r   r   Útest_clear_failp  r  z+TestDefaultControllerPlugin.test_clear_failc                 C   rW  rX  ©	r   r¶  r   r   rR   rS   re   r   rf   rã   r   r   r   Útest_clear_badnamex  r\  z.TestDefaultControllerPlugin.test_clear_badnamec                 C   rW  )Nrâ   úfoo: cleared
©	r   r¶  r   r   rR   rS   re   r   r?  rã   r   r   r   Útest_clear_one_success€  r\  z2TestDefaultControllerPlugin.test_clear_one_successc                 C   rW  )Nrk  rº  r»  rã   r   r   r   Ú!test_clear_one_with_group_successˆ  r\  z=TestDefaultControllerPlugin.test_clear_one_with_group_successc                 C   rW  )Nrm  zfoo: cleared
bar: cleared
r»  rã   r   r   r   Útest_clear_many  r\  z+TestDefaultControllerPlugin.test_clear_manyc                 C   rW  )NrE  z?foo: cleared
foo2: cleared
failed_group:failed: ERROR (failed)
r¸  rã   r   r   r   Útest_clear_all˜  ru  z*TestDefaultControllerPlugin.test_clear_allc                    rv  )Nc                   S   rJ   r   r   r   r   r   r   rM   ¥  rN   zGTestDefaultControllerPlugin.test_clear_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   §  r   z@TestDefaultControllerPlugin.test_clear_upcheck_failed.<locals>.frâ   )
r   r   rG   r   rO   rP   ÚclearAllProcessLogsÚclearProcessLogsr¶  r   ry  r   r  r   Útest_clear_upcheck_failed£  r{  z5TestDefaultControllerPlugin.test_clear_upcheck_failedc                 C   r  )Nz
open <url>)r   Ú	help_openr   rR   rS   r?   r  r   r   r   Útest_open_help¯  r  z*TestDefaultControllerPlugin.test_open_helpc                 C   rW  )NÚbadnamez&ERROR: url must be http:// or unix://
)	r   Údo_openr   r   rR   rS   re   r   rf   rã   r   r   r   Útest_open_failµ  r\  z*TestDefaultControllerPlugin.test_open_failc                 C   r7  )	Nzhttp://localhost:9002rÛ   r   rŸ   r8  rŽ   r9  r:  )
r   rÆ  r   r   rR   rS   rê   re   r   r?  r  r   r   r   Útest_open_succeed½  r>  z-TestDefaultControllerPlugin.test_open_succeedc                 C   r  )Nz*Show the version of the remote supervisord)r   Úhelp_versionr   rR   rS   r?   r  r   r   r   Útest_version_helpÊ  r  z-TestDefaultControllerPlugin.test_version_helpc                 C   s*   |   ¡ }| d ¡ |  |jj ¡ d¡ d S )Nz3000
)r   Ú
do_versionr   r   rR   rS   ©r   rƒ   r   r   r   Útest_versionÐ  s   
z(TestDefaultControllerPlugin.test_versionc                 C   óR   |   ¡ }| d¡}|  |d ¡ |jj ¡ }|  | d¡|¡ |  |jjt	j
¡ d S )Nr—   z#Error: version accepts no arguments)r   rË  r   r   rR   rS   r?   Ú
startswithre   r   rf   ©r   rƒ   r$   Úvalr   r   r   Útest_version_argÕ  ó   
z,TestDefaultControllerPlugin.test_version_argc                    r  )Nc                   S   rJ   r   r   r   r   r   r   rM   ß  rN   zITestDefaultControllerPlugin.test_version_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   á  r   zBTestDefaultControllerPlugin.test_version_upcheck_failed.<locals>.fr^   )	r   r   rG   r   rO   rP   ÚgetSupervisorVersionrË  r   r  r   r  r   Útest_version_upcheck_failedÝ  r  z7TestDefaultControllerPlugin.test_version_upcheck_failedc                 C   r  )NzRestart the remote supervisord)r   Úhelp_reloadr   rR   rS   r?   r  r   r   r   Útest_reload_helpç  r  z,TestDefaultControllerPlugin.test_reload_helpc                 C   sF   |   ¡ }|jj}d|jj_| d¡}|  |d ¡ |  |jjjd¡ d S )NFr^   )	r   r   r   rO   rP   Ú_restartableÚ	do_reloadr   Ú
_restarted©r   rƒ   r   r$   r   r   r   Útest_reload_failí  s   

z,TestDefaultControllerPlugin.test_reload_failc                 C   ó<   |   ¡ }|jj}| d¡}|  |d ¡ |  |jjjd¡ d S ©Nr^   T)r   r   r   rÙ  r   rO   rP   rÚ  rÛ  r   r   r   Útest_reloadõ  ó
   
z'TestDefaultControllerPlugin.test_reloadc                 C   rÎ  )Nr—   z"Error: reload accepts no arguments)r   rÙ  r   r   rR   rS   r?   rÏ  re   r   rf   rÐ  r   r   r   Útest_reload_argü  rÓ  z+TestDefaultControllerPlugin.test_reload_argc                 C   r  )Nz Shut the remote supervisord down)r   Úhelp_shutdownr   rR   rS   r?   r  r   r   r   Útest_shutdown_help  r  z.TestDefaultControllerPlugin.test_shutdown_helpc                 C   sl   |   ¡ }|jj}| d¡}|  |d ¡ |  |jjjd¡ |jj 	¡ }|  
| d¡|¡ |  |jjtj¡ d S )Nr—   Fz$Error: shutdown accepts no arguments)r   r   r   Údo_shutdownr   rO   rP   Ú	_shutdownrR   rS   r?   rÏ  re   r   rf   )r   rƒ   r   r$   rÑ  r   r   r   Ú"test_shutdown_with_arg_shows_error
  s   
z>TestDefaultControllerPlugin.test_shutdown_with_arg_shows_errorc                 C   rÝ  rÞ  )r   r   r   rä  r   rO   rP   rå  rÛ  r   r   r   Útest_shutdown  rà  z)TestDefaultControllerPlugin.test_shutdownc                    sn   |   ¡ }ddlm‰  ‡ fdd„}||jjjj_| d¡}|  |d ¡ |  |jj	 
¡ d¡ |  |jjtj¡ d S )Nr   r   c                     ó   t  ˆ jjd¡‚)NÚbye©r   rY   rV   ÚSHUTDOWN_STATEr`   r   r   r   rr     ó   zbTestDefaultControllerPlugin.test_shutdown_catches_xmlrpc_fault_shutdown_state.<locals>.raise_faultr^   zERROR: already shutting down
)r   rP   r   r   r   rO   Úshutdownrä  r   rR   rS   re   r   r?  )r   rƒ   rr   r$   r   r   r   Ú1test_shutdown_catches_xmlrpc_fault_shutdown_state  s   
ÿzMTestDefaultControllerPlugin.test_shutdown_catches_xmlrpc_fault_shutdown_statec                    óV   |   ¡ }ddlm‰  ‡ fdd„}||jjjj_|  tj	|j
d¡ |  |jjtj¡ d S )Nr   r   c                     rè  )NÚouch©r   rY   rV   ÚCANT_REREADr`   r   r   r   rr   -  rì  z[TestDefaultControllerPlugin.test_shutdown_reraises_other_xmlrpc_faults.<locals>.raise_faultr^   )r   rP   r   r   r   rO   rí  rd   r   rY   rä  r   re   r   rf   ©r   rƒ   rr   r   r   r   Ú*test_shutdown_reraises_other_xmlrpc_faults)  s   ÿzFTestDefaultControllerPlugin.test_shutdown_reraises_other_xmlrpc_faultsc                    óz   |   ¡ }dd l‰dd l‰ ‡ ‡fdd„}||jjjj_| d¡}|  	|d ¡ |jj
 ¡ }|  d|v ¡ |  	|jjtj¡ d S )Nr   c                     rj   rk   rl   r`   ro   r   r   rr   :  r   z`TestDefaultControllerPlugin.test_shutdown_catches_socket_error_ECONNREFUSED.<locals>.raise_faultr^   z'refused connection (already shut down?)©r   rq   rp   r   r   rO   rP   rí  rä  r   rR   rS   r?   re   r   rf   ©r   rƒ   rr   r$   ru   r   ro   r   Ú/test_shutdown_catches_socket_error_ECONNREFUSED5  ó   
zKTestDefaultControllerPlugin.test_shutdown_catches_socket_error_ECONNREFUSEDc                    rõ  )Nr   c                     rj   )Nzno filerx   r`   ro   r   r   rr   J  r   zZTestDefaultControllerPlugin.test_shutdown_catches_socket_error_ENOENT.<locals>.raise_faultr^   z!no such file (already shut down?)rö  r÷  r   ro   r   Ú)test_shutdown_catches_socket_error_ENOENTE  rù  zETestDefaultControllerPlugin.test_shutdown_catches_socket_error_ENOENTc                    s\   |   ¡ }dd l‰dd l‰ ‡ ‡fdd„}||jjjj_|  ˆj	|j
d¡ |  |jjtj¡ d S )Nr   c                     rj   )NÚdenied)rm   ÚEPERMr`   ro   r   r   rr   Z  r   z[TestDefaultControllerPlugin.test_shutdown_reraises_other_socket_errors.<locals>.raise_faultr^   )r   rq   rp   r   r   rO   rP   rí  rd   rm   rä  r   re   r   rf   ró  r   ro   r   Ú*test_shutdown_reraises_other_socket_errorsU  s   ÿzFTestDefaultControllerPlugin.test_shutdown_reraises_other_socket_errorsc                 C   s2   |   ¡ }| dgdgdgg¡ | g g g g¡ d S )NÚaddedÚchangedÚremoved)r   Ú_formatChangesrÌ  r   r   r   Útest__formatChangesb  s   z/TestDefaultControllerPlugin.test__formatChangesc                 C   ó@   |   ¡ }| ¡  |jj ¡ }|  d|v ¡ |  |jjtj	¡ d S )Nz'Reload the daemon's configuration files)
r   Úhelp_rereadr   rR   rS   r?   r   re   r   r?  r  r   r   r   Útest_reread_helph  ó
   z,TestDefaultControllerPlugin.test_reread_helpc                    sb   |   ¡ }g ‰ ‡ fdd„|_| d ¡}|  |d ¡ |  ˆ d dgdgdgg¡ |  |jjtj¡ d S )Nc                    s
   ˆ   | ¡S r   r  rK   ©Úcallsr   r   rM   r  s   
 z9TestDefaultControllerPlugin.test_reread.<locals>.<lambda>r   rþ  rÿ  r   )r   r  Ú	do_rereadr   r   re   r   r?  rã   r   r  r   Útest_rereado  s   
z'TestDefaultControllerPlugin.test_rereadc                 C   rÎ  )Nr—   z"Error: reread accepts no arguments)r   r	  r   r   rR   rS   r?   rÏ  re   r   rf   rÐ  r   r   r   Útest_reread_argx  rÓ  z+TestDefaultControllerPlugin.test_reread_argc                    ób   |   ¡ }ddlm‰  ‡ fdd„}||jjjj_| d ¡ |  |jj	 
¡ d¡ |  |jjtj¡ d S )Nr   r   c                     rè  )NÚcantrñ  r`   r   r   r   ÚreloadConfigƒ  rì  zITestDefaultControllerPlugin.test_reread_cant_reread.<locals>.reloadConfigzERROR: cant
©r   rP   r   r   r   rO   r  r	  r   rR   rS   re   r   rf   ©r   rƒ   r  r   r   r   Útest_reread_cant_reread€  ó   
ÿz3TestDefaultControllerPlugin.test_reread_cant_rereadc                    r  )Nr   r   c                     rè  r]   rê  r`   r   r   r   r  Ž  rì  zLTestDefaultControllerPlugin.test_reread_shutdown_state.<locals>.reloadConfigú ERROR: supervisor shutting down
r  r  r   r   r   Útest_reread_shutdown_state‹  r  z6TestDefaultControllerPlugin.test_reread_shutdown_statec                    rï  )Nr   r   c                     rè  r]   )r   rY   rV   r_   r`   r   r   r   r  ™  rì  zSTestDefaultControllerPlugin.test_reread_reraises_other_faults.<locals>.reloadConfigr^   )r   rP   r   r   r   rO   r  rd   r   rY   r	  r   re   r   rf   r  r   r   r   Ú!test_reread_reraises_other_faults–  s   z=TestDefaultControllerPlugin.test_reread_reraises_other_faultsc                 C   s`   dddddddœ}|   ¡ }| |¡}|  d|v ¡ dddddddœ}| |¡}|  d|v ¡ d S )	NÚgroup1Úprocess1Téç  ©r(  r'  ÚinuseÚ	autostartÚprocess_prioÚ
group_priozin useFÚavail)r   Ú_formatConfigInfor?   )r   Úinforƒ   r$   r   r   r   Útest__formatConfigInfoŸ  s&   û
û
z2TestDefaultControllerPlugin.test__formatConfigInfoc                 C   r  )NzDisplay all configured)r   Ú
help_availr   rR   rS   r?   r  r   r   r   Útest_avail_help²  r  z+TestDefaultControllerPlugin.test_avail_helpc                    sP   g }|   ¡ }G dd„ dtƒ‰ ‡ fdd„|j_|j|j_| d¡}|  |d ¡ d S )Nc                   @   r/   )z>TestDefaultControllerPlugin.test_avail.<locals>.FakeSupervisorc                 S   s   dddddddœgS )Nr  r  Fr  r  r   r3   r   r   r   ÚgetAllConfigInfo½  s   þzOTestDefaultControllerPlugin.test_avail.<locals>.FakeSupervisor.getAllConfigInfoN)r6   r7   r8   r$  r   r   r   r   ÚFakeSupervisor¼  r:   r%  c                      s   ˆ ƒ S r   r   r   ©r%  r   r   rM   Â  s    z8TestDefaultControllerPlugin.test_avail.<locals>.<lambda>r^   )r   r;   r   rÁ   r  ru   Údo_availr   )r   r  rƒ   r$   r   r&  r   Ú
test_avail¸  s   

z&TestDefaultControllerPlugin.test_availc                 C   rÎ  )Nr—   z!Error: avail accepts no arguments)r   r'  r   r   rR   rS   r?   rÏ  re   r   rf   rÐ  r   r   r   Útest_avail_argÇ  rÓ  z*TestDefaultControllerPlugin.test_avail_argc                 C   sb   |   ¡ }|jjjj}dd„ }||_| d¡}|  |d ¡ |  |jj 	¡ d¡ |  |jj
tj¡ d S )Nc                  S   ó   ddl m}  t | jjd¡‚©Nr   r   r^   ©rP   r   r   rY   rV   rë  r   r   r   r   r$  Ó  ó   zOTestDefaultControllerPlugin.test_avail_shutdown_state.<locals>.getAllConfigInfor^   r  )r   r   r   rO   rP   r$  r'  r   rR   rS   re   r   rf   )r   rƒ   rP   r$  r$   r   r   r   Útest_avail_shutdown_stateÏ  s   
ÿz5TestDefaultControllerPlugin.test_avail_shutdown_statec                 C   sJ   |   ¡ }|jjjj}dd„ }||_|  tj|j	d¡ |  
|jjtj¡ d S )Nc                  S   r*  r+  ©rP   r   r   rY   rV   r_   r   r   r   r   r$  â  r-  zVTestDefaultControllerPlugin.test_avail_reraises_other_faults.<locals>.getAllConfigInfor^   )r   r   r   rO   rP   r$  rd   r   rY   r'  r   re   r   rf   )r   rƒ   rP   r$  r   r   r   Ú test_avail_reraises_other_faultsÞ  s   z<TestDefaultControllerPlugin.test_avail_reraises_other_faultsc                 C   r  )Nz
add <name>)r   Úhelp_addr   rR   rS   r?   r  r   r   r   Útest_add_helpê  r  z)TestDefaultControllerPlugin.test_add_helpc                 C   sP   |   ¡ }| d¡}|  |d ¡ |jjjj}|  |jdg¡ |  |jjt	j
¡ d S ©Nrâ   )r   Údo_addr   r   r   rO   rP   Ú	processesre   r   r?  )r   rƒ   r$   rP   r   r   r   Útest_addð  s   
z$TestDefaultControllerPlugin.test_addc                 C   rW  )NÚALREADY_ADDEDz$ERROR: process group already active
)	r   r4  r   r   rR   rS   re   r   r?  rã   r   r   r   Útest_add_already_addedø  r\  z2TestDefaultControllerPlugin.test_add_already_addedc                 C   rW  )Nr   ú'ERROR: no such process/group: BAD_NAME
©	r   r4  r   r   rR   rS   re   r   rf   rã   r   r   r   Útest_add_bad_name   r\  z-TestDefaultControllerPlugin.test_add_bad_namec                 C   rW  )Nrë  zERROR: shutting down
r:  rã   r   r   r   Útest_add_shutdown_state  r\  z3TestDefaultControllerPlugin.test_add_shutdown_statec                 C   ó0   |   ¡ }|  tj|jd¡ |  |jjtj	¡ d S ©Nr_   )
r   rd   r   rY   r4  r   r   re   r   rf   rÌ  r   r   r   Útest_add_reraises_other_faults  ó   z:TestDefaultControllerPlugin.test_add_reraises_other_faultsc                 C   r  )Nzremove <name>)
r   Úhelp_remover   rR   rS   r?   r   re   r   r?  r  r   r   r   Útest_remove_help  r  z,TestDefaultControllerPlugin.test_remove_helpc                 C   sD   |   ¡ }|jjjj}dg|_| d¡}|  |d ¡ |  |jg ¡ d S r3  )r   r   r   rO   rP   r5  Ú	do_remover   ©r   rƒ   rP   r$   r   r   r   Útest_remove  s   
z'TestDefaultControllerPlugin.test_removec                 C   ó\   |   ¡ }|jjjj}dg|_| d¡}|  |d ¡ |  |jj 	¡ d¡ |  |jj
tj¡ d S )Nrâ   r   r9  ©r   r   r   rO   rP   r5  rC  r   rR   rS   re   r   rf   rD  r   r   r   Útest_remove_bad_name$  ó   
ÿz0TestDefaultControllerPlugin.test_remove_bad_namec                 C   rF  )Nrâ   ÚSTILL_RUNNINGz2ERROR: process/group still running: STILL_RUNNING
rG  rD  r   r   r   Útest_remove_still_running.  rI  z5TestDefaultControllerPlugin.test_remove_still_runningc                 C   r=  r>  )
r   rd   r   rY   rC  r   r   re   r   rf   rÌ  r   r   r   Ú!test_remove_reraises_other_faults8  r@  z=TestDefaultControllerPlugin.test_remove_reraises_other_faultsc                 C   r  )NzReload config and add/remove)r   Úhelp_updater   rR   rS   r?   r  r   r   r   Útest_update_help=  r  z,TestDefaultControllerPlugin.test_update_helpc                 C   sH   |   ¡ }|jjjj}dd„ }||_dg|_| d¡ |  |jdg¡ d S )Nc                  S   r*  )Nr   r   Úblahr,  r   r   r   r   r  F  r-  zMTestDefaultControllerPlugin.test_update_not_on_shutdown.<locals>.reloadConfigr   r^   )	r   r   r   rO   rP   r  r5  Ú	do_updater   ©r   rƒ   rP   r  r   r   r   Útest_update_not_on_shutdownC  s   
z7TestDefaultControllerPlugin.test_update_not_on_shutdownc                 C   sL   |   ¡ }|jjjj}dd„ }||_| d¡}|  |d ¡ |  |jdg¡ d S )Nc                   S   s   dgg g ggS )NÚnew_procr   r   r   r   r   r  R  r   zITestDefaultControllerPlugin.test_update_added_procs.<locals>.reloadConfigr^   rS  )	r   r   r   rO   rP   r  rP  r   r5  )r   rƒ   rP   r  r$   r   r   r   Útest_update_added_procsN  s   
z3TestDefaultControllerPlugin.test_update_added_procsc                 C   sø   |   ¡ }|jjjj}dd„ }||_ddg|_| d¡ |  t	|jƒt	ddgƒ¡ | d¡ |  t	|jƒt	g d¢ƒ¡ | d¡ |  t	|jƒt	g d¢ƒ¡ ddg|_| d¡ |  t	|jƒt	dd	gƒ¡ ddg|_| d
¡ |  t	|jƒt	g d¢ƒ¡ d S )Nc                   S   s   ddgdgdgggS )NÚadded1Úadded2rÿ  r   r   r   r   r   r   r  ^  ó   zHTestDefaultControllerPlugin.test_update_with_gname.<locals>.reloadConfigrÿ  r   zadded1 added2)rÿ  r   rU  rV  )rÿ  rU  rV  zremoved added1rU  rE  )
r   r   r   rO   rP   r  r5  rP  r   ÚsortedrQ  r   r   r   Útest_update_with_gnameZ  s6   


ÿ

ÿ

ÿ


ÿ


ÿz2TestDefaultControllerPlugin.test_update_with_gnamec                    sB  ddl m} |  ¡ }|jjjj }g ‰ dd„ }||_‡ fdd„|_| d¡ dd|j	j
d	d
œg‰‡ ‡fdd„}||_| d¡ |  ˆ dg¡ | d¡ g ˆ d d …< dd|j	jd	d
œdd|j	jd	d
œgˆd d …< | d¡ |  ˆ dg¡ | d¡ g ˆ d d …< dd|j	jd	d
œdd|j	j
d	d
œgˆd d …< | d¡ |  ˆ dg¡ d S )Nr   r   c                   S   s   g dgg ggS )NÚchanged_groupr   r   r   r   r   r    r   zKTestDefaultControllerPlugin.test_update_changed_procs.<locals>.reloadConfigc                    s   ˆ   d| f¡S )Nr   r  rK   r  r   r   rM   „  s    zGTestDefaultControllerPlugin.test_update_changed_procs.<locals>.<lambda>rZ  Úchanged_processrO  ©r'  r(  Ústatusr/  c                    s   ˆ   d| f¡ ˆS )Nr,  r  ©r'  ©r  r½   r   r   r“  ‹  s   zOTestDefaultControllerPlugin.test_update_changed_procs.<locals>.stopProcessGroupr^   )r,  rZ  Úchanged_process1Úchanged_process2)rP   r   r   r   r   rO   r  ÚstartProcessÚaddProcessGrouprV   r?  r“  rP  r   rz   r_   ©r   r   rƒ   rP   r  r“  r   r_  r   Útest_update_changed_procsz  s^   
ý

ýýü
	
ýýü
	z5TestDefaultControllerPlugin.test_update_changed_procsc                    sò   ddl m} |  ¡ }|jjjj }dd„ }||_dd|jjddœg‰ dg|_	‡ fd	d
„}||_
| d¡ |  |j	g ¡ dd|jjddœgˆ d d …< dg|_	| d¡ |  |j	g ¡ dd|jjddœgˆ d d …< dg|_	| d¡ |  |j	dg¡ d S )Nr   r   c                   S   s   g g dgggS )NÚremoved_groupr   r   r   r   r   r  µ  r   zKTestDefaultControllerPlugin.test_update_removed_procs.<locals>.reloadConfigÚremoved_processrf  rO  r\  c                    s   ˆ S r   r   r^  ©r½   r   r   r“  ¿  ó   zOTestDefaultControllerPlugin.test_update_removed_procs.<locals>.stopProcessGroupr^   )rP   r   r   r   r   rO   r  rV   r?  r5  r“  rP  r   rz   r_   rd  r   rh  r   Útest_update_removed_procs¯  s>   ý
ý
ý
z5TestDefaultControllerPlugin.test_update_removed_procsc                 C   sH   |   ¡ }|jjjj}dd„ }||_|  tj|j	d¡ |  
|jjd¡ d S )Nc                  S   r*  )Nr   r   r_   r/  r   r   r   r   r  Ü  r-  zSTestDefaultControllerPlugin.test_update_reraises_other_faults.<locals>.reloadConfigr^   rŽ   )r   r   r   rO   rP   r  rd   r   rY   rP  r   re   rQ  r   r   r   Ú!test_update_reraises_other_faultsØ  s   z=TestDefaultControllerPlugin.test_update_reraises_other_faultsc                 C   r  )Nz
pid <name>)r   Úhelp_pidr   rR   rS   r?   r  r   r   r   Útest_pid_helpä  r  z)TestDefaultControllerPlugin.test_pid_helpc                 C   sh   |   ¡ }| d¡}|  |d ¡ |jj}|jj ¡  d¡}|  t|ƒd¡ |  |d t	|j
j ¡ ƒ¡ d S )Nr^   rÛ   rŸ   r   )r   Údo_pidr   r   r   rR   rS   rê   rÎ   ÚstrrO   rP   ÚgetPID)r   rƒ   r$   r   rì   r   r   r   Útest_pid_supervisordê  s   
 z0TestDefaultControllerPlugin.test_pid_supervisordc                 C   sX   |   ¡ }| d¡}|  |d ¡ |jj ¡  ¡ }|  | ¡ g d¢¡ |  |jjt	j
¡ d S )NrE  )Ú11Ú12Ú13)r   rn  r   r   rR   rS   r  rê   re   r   r?  r  r   r   r   Útest_pid_allprocessesó  s   
z1TestDefaultControllerPlugin.test_pid_allprocessesc                 C   r  )Nr   zNo such process BAD_NAME)
r   rn  r   r   rR   rS   r  re   r   rf   r  r   r   r   Útest_pid_badnameû  r
  z,TestDefaultControllerPlugin.test_pid_badnamec                 C   sL   |   ¡ }| d¡}|  |d ¡ |  |jj ¡  ¡ d¡ |  |jjtj	¡ d S )Nrâ   rr  )
r   rn  r   r   rR   rS   r  re   r   r?  rã   r   r   r   Útest_pid_oneprocess  s
   
z/TestDefaultControllerPlugin.test_pid_oneprocessc                 C   sf   |   ¡ }|jj}dd„ }||jj_| d¡}|  |d ¡ |  |jj 	¡  
¡ d¡ |  |jjtj¡ d S )Nc                  _   s(   ddl m} ddd|jdddddddœ
S )Nr   r!  râ   r;  r^   r%  r&  )r2  r"  r;  r4  r   r   r   rc     s   ÷zFTestDefaultControllerPlugin.test_pid_oneprocess_not_running.<locals>.frâ   Ú0)r   r   r   rO   rP   ÚgetProcessInforn  r   rR   rS   r  re   r   rz   )r   rƒ   r   rc   r$   r   r   r   Útest_pid_oneprocess_not_running
  s   


ÿz;TestDefaultControllerPlugin.test_pid_oneprocess_not_runningc                    r  )Nc                   S   rJ   r   r   r   r   r   r   rM   #  rN   zETestDefaultControllerPlugin.test_pid_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   %  r   z>TestDefaultControllerPlugin.test_pid_upcheck_failed.<locals>.fr^   )	r   r   rG   r   rO   rP   rp  rn  r   r  r   r  r   Útest_pid_upcheck_failed!  r  z3TestDefaultControllerPlugin.test_pid_upcheck_failedc                 C   r  )Nz tail of supervisor main log file)r   Úhelp_maintailr   rR   rS   r?   r  r   r   r   Útest_maintail_help+  r  z.TestDefaultControllerPlugin.test_maintail_helpc                 C   rÎ  )Nrm  zError: too many©r   Údo_maintailr   r   rR   rS   r?   rÏ  re   r   rf   rÐ  r   r   r   Útest_maintail_toomanyargs1  rÓ  z5TestDefaultControllerPlugin.test_maintail_toomanyargsc                 C   rÎ  )Nz-wrongzError: bad argument -wrongr~  rÐ  r   r   r   Ú test_maintail_minus_string_fails9  rÓ  z<TestDefaultControllerPlugin.test_maintail_minus_string_failsc                 C   rÎ  )NÚwrongzError: bad argument wrongr~  rÐ  r   r   r   Útest_maintail_wrongA  rÓ  z/TestDefaultControllerPlugin.test_maintail_wrongc                 C   s|   |   ¡ }tƒ |_| d¡}|  |d ¡ |jj}|  t|ƒd¡ |d }|  |jjd¡ |  |d d¡ |  d|d v ¡ d S )Nrð   rŽ   r   z"http://localhost:65532/mainlogtailzCannot connect)	r   ÚDummyListenerÚlistenerr  r   ÚerrorsrÎ   r2   r?   )r   rƒ   r$   r†  rm   r   r   r   Ú_dont_test_maintail_dashfI  s   

ÿ
ÿz5TestDefaultControllerPlugin._dont_test_maintail_dashfc                 C   rç   )Nz-zrÛ   r   rò   )
r   r  r   r   rR   rS   rê   re   r   rf   rë   r   r   r   Útest_maintail_bad_modifierZ  rî   z6TestDefaultControllerPlugin.test_maintail_bad_modifierc                 C   rh  )Nr^   úmainlogdata
©r   r  r   r   rR   rS   rã   r   r   r   Útest_maintail_nobytesb  ó   
z1TestDefaultControllerPlugin.test_maintail_nobytesc                 C   rh  )Nú-100r‰  rŠ  rã   r   r   r   Útest_maintail_dashbytesh  rŒ  z3TestDefaultControllerPlugin.test_maintail_dashbytesc                 C   óh   |   ¡ }|j ¡ }ddlm} |jj|_| d¡}|  	|d ¡ |  	|jj
 ¡ d¡ |  	|jjtj¡ d S )Nr   r   r  z!supervisord: ERROR (no log file)
)r   r   rÁ   rP   r   rV   rû   Ú_readlog_errorr  r   rR   rS   re   r   rf   ©r   rƒ   Úsupervisor_rpcr   r$   r   r   r   Ú"test_maintail_readlog_error_nofilen  ó   


ÿz>TestDefaultControllerPlugin.test_maintail_readlog_error_nofilec                 C   r  )Nr   r   r  z/supervisord: ERROR (unknown error reading log)
)r   r   rÁ   rP   r   rV   r_   r  r  r   rR   rS   re   r   rf   r‘  r   r   r   Ú"test_maintail_readlog_error_failedy  r”  z>TestDefaultControllerPlugin.test_maintail_readlog_error_failedc                    r  )Nc                   S   rJ   r   r   r   r   r   r   rM   †  rN   zJTestDefaultControllerPlugin.test_maintail_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   ˆ  r   zCTestDefaultControllerPlugin.test_maintail_upcheck_failed.<locals>.fr^   )	r   r   rG   r   rO   rP   ÚreadLogr  r   r  r   r  r   Útest_maintail_upcheck_failed„  r  z8TestDefaultControllerPlugin.test_maintail_upcheck_failedc                 C   r  )Nzfg <process>)r   Úhelp_fgr   rR   rS   r?   r  r   r   r   Útest_fg_helpŽ  r  z(TestDefaultControllerPlugin.test_fg_helpc                 C   rç   )Nr^   rÛ   r   zERROR: no process name supplied©
r   Údo_fgr   r   rR   rS   rê   re   r   rf   rë   r   r   r   Útest_fg_too_few_args”  rî   z0TestDefaultControllerPlugin.test_fg_too_few_argsc                 C   óL   |   ¡ }| d¡}|  |d ¡ |jj ¡ }|  |d¡ |  |jjtj¡ d S )Nrm  z'ERROR: too many process names supplied
©	r   r›  r   r   rR   rS   re   r   rf   ©r   rƒ   r$   r'   r   r   r   Útest_fg_too_many_argsœ  rD  z1TestDefaultControllerPlugin.test_fg_too_many_argsc                 C   r  )Nr   z!ERROR: bad process name supplied
rž  rŸ  r   r   r   Útest_fg_badprocname¤  rD  z/TestDefaultControllerPlugin.test_fg_badprocnamec                 C   s„   |   ¡ }| d¡}|  |d ¡ |jj ¡ }|  |d¡ | d¡}|jj ¡  d¡}|  |d ¡ |  |d d¡ |  |jjtj	¡ d S )Nr0  zERROR: process not running
Úbaz_01rÛ   éþÿÿÿzERROR: process not runningrš  )r   rƒ   r$   r'   rì   r   r   r   Útest_fg_procnotrunning¬  s   

z2TestDefaultControllerPlugin.test_fg_procnotrunningc                    r  )Nc                   S   rJ   r   r   r   r   r   r   rM   º  rN   zDTestDefaultControllerPlugin.test_fg_upcheck_failed.<locals>.<lambda>c                     r  r-   r  r`   r  r   r   rc   ¼  r   z=TestDefaultControllerPlugin.test_fg_upcheck_failed.<locals>.frâ   )	r   r   rG   r   rO   rP   ry  r›  r   r  r   r  r   Útest_fg_upcheck_failed¸  r  z2TestDefaultControllerPlugin.test_fg_upcheck_failedc                 C   r  ©NzExit the supervisor shell)r   Ú	help_exitr   rR   rS   r?   r  r   r   r   Útest_exit_helpÂ  r  z*TestDefaultControllerPlugin.test_exit_helpc                 C   r  r¦  )r   Ú	help_quitr   rR   rS   r?   r  r   r   r   Útest_quit_helpÈ  r  z*TestDefaultControllerPlugin.test_quit_helpN)¡r6   r7   r8   r   r   rí   rï   rñ   ró   rø   rý   rÿ   r  r  r  r  r	  r  r  r  r   r6  r=  r@  rC  rF  rG  rH  rI  rK  rM  rN  rP  rU  r[  r]  r_  rb  re  rg  rj  rl  rn  ro  rs  rt  rz  r}  r€  rƒ  r†  rˆ  r‹  rŒ  r  rŽ  r  r  r”  r–  rœ  rž  r   r¡  r¢  r£  r¤  r¦  r§  r¨  r©  r¬  r®  r°  r±  r²  r³  rµ  r·  r¹  r¼  r½  r¾  r¿  rÂ  rÄ  rÇ  rÈ  rÊ  rÍ  rÒ  rÕ  r×  rÜ  rß  rá  rã  ræ  rç  rî  rô  rø  rú  rý  r  r  r
  r  r  r  r  r!  r#  r(  r)  r.  r0  r2  r6  r8  r;  r<  r?  rB  rE  rH  rK  rL  rN  rR  rT  rY  re  rj  rk  rm  rq  ru  rv  rw  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å   Ú  s>   			

!				
		
		


		


 5)	


rå   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r„  c                 C   s
   g | _ d S r   )r†  r3   r   r   r   Ú__init__Ï  r5   zDummyListener.__init__c                 C   s   | j  ||f¡ d S r   )r†  r  )r   Úurlr›  r   r   r   rm   Ñ  rW  zDummyListener.errorc                 C   ó
   || _ d S r   r1   )r   r¬  r   r   r   r4   Ó  r5   zDummyListener.closeN)r6   r7   r8   r«  rm   r4   r   r   r   r   r„  Î  s    r„  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚDummyPluginFactoryc                 K   r­  r   ©r   )r   r   rb   r   r   r   r«  ×  r5   zDummyPluginFactory.__init__c                 C   s   | j j d¡ d S )Nrº   )r   rR   Úwrite©r   ra   r   r   r   r»   Ú  s   zDummyPluginFactory.do_helpN©r6   r7   r8   r«  r»   r   r   r   r   r¯  Ö  s    r¯  c                   @   r®  )r   c                 C   sD   d| _ d| _d| _d| _d | _d| _tƒ | _d| _dt	i fg| _
d S )NrP   zhttp://localhost:65532ÚchrismÚ123r   FÚdummy)rD   Ú	serverurlÚusernameÚpasswordÚhistory_filer€   r   rO   Úinteractiver¯  Úplugin_factoriesr3   r   r   r   r«  Þ  s   zDummyClientOptions.__init__c                 C   s   | j S r   )rO   r3   r   r   r   rÂ   é  s   z!DummyClientOptions.getServerProxyN)r6   r7   r8   r«  rÂ   r   r   r   r   r   Ý  s    r   c                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Z	ddd„Z
dS )r   zno help on %sc                 C   s    || _ g | _tƒ | _tj| _d S r   )r   rß   r   rR   r   r?  re   rC   r   r   r   r«  î  s   zDummyController.__init__c                 C   rJ   r-   r   r3   r   r   r   rG   ô  ri  zDummyController.upcheckc                 C   s
   |   d¡S )NrP   )rÇ   r3   r   r   r   rÁ   ÷  r5   zDummyController.get_supervisorNc                 C   s    | j  ¡ }|d u r|S t||ƒS r   )r   rÂ   Úgetattr)r   Ú	namespacerÄ   r   r   r   rÇ   ú  s   

z DummyController.get_server_proxyc                 C   s   | j  |d ¡ d S )NrÛ   )rR   r±  )r   Údatar   r   r   ru     rW  zDummyController.outputc                 C   s   | j  ||||f¡ d S r   )rß   r  )r   Údoc_headersÚcmds_docÚrowsÚcolsr   r   r   Úprint_topics  s   zDummyController.print_topicsc                 C   s@   ddl m} ||tjjfv rd S ||v rtj| _d S tj| _d S )Nr   )ÚDEAD_PROGRAM_FAULTS)	r   rÅ  r   rV   r?  r   rz   re   rf   )r   Ú	faultcodeÚignored_faultcoderÅ  r   r   r   Ú set_exitstatus_from_xmlrpc_fault  s   z0DummyController.set_exitstatus_from_xmlrpc_faultr   )r6   r7   r8   r¸   r«  rG   rÁ   rÇ   ru   rÄ  rÈ  r   r   r   r   r   ì  s    
r   c                   @   s   e Zd Zddd„Zdd„ ZdS )r   Nc                 C   r­  r   r°  )r   rF   r   r   r   r«    r5   zDummyPlugin.__init__c                 C   r0   r-   )r‚   r²  r   r   r   r»     r5   zDummyPlugin.do_helpr   r³  r   r   r   r   r     s    
r   c                   C   s   t  tjt ¡S r   )ÚunittestÚfindTestCasesÚsysÚmodulesr6   r   r   r   r   Ú
test_suite  rì  rÍ  Ú__main__)ÚdefaultTest)rË  rÉ  rP   r   Úsupervisor.compatr   r   r   r   r   Úsupervisor.tests.baser   ÚTestCaser	   rA   rÔ   rå   r„  r¯  r   r   r   rÍ  r6   Úmainr   r   r   r   Ú<module>   sB    ?  u           $ÿ