Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
supervisor / tests / __pycache__ / test_options.cpython-38.pyc
Size: Mime:
U

B]5 ã@sÞdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZddl
mZmZmZddlmZddl
mZddl
mZdd	l
mZdd
l
mZddl
mZddl
mZdd
l
mZddl
mZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZ Gdd„dejƒZ!Gdd„dejƒZ"Gdd„dejƒZ#Gdd „d ejƒZ$Gd!d"„d"ejƒZ%Gd#d$„d$ejƒZ&Gd%d&„d&ejƒZ'd'd(„Z(e)d)krÚej*d(d*dS)+z!Test suite for supervisor.optionséN)ÚStringIO)Úas_bytes)ÚMockÚsentinelÚpatch)ÚLevelsByName)ÚDummySupervisor)ÚDummyLogger)ÚDummyOptions)ÚDummyPoller)ÚDummyPConfig)ÚDummyProcess)ÚDummySocketConfig)Úlstripc@s¶eZdZdd„Zd-dd„Zdd„Zdd	„Zd
d„Zdd
„Zdd„Z	dd„Z
dd„Zdd„Zdd„Z
dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,S).ÚOptionTestscCsddlm}|S)Nr©ÚOptions)Úsupervisor.optionsr)Úselfr©rú,./build/lib/supervisor/tests/test_options.pyÚ_getTargetClassszOptionTests._getTargetClassFcsf| ¡‰ddlm}G‡‡fdd„dˆƒ}|ƒ}tƒ|_|jdddddd	|jd
d
ddd
|d|S)Nr)Úintegercs,eZdZddiZ”f‡fdd„	Zdd„ZdS)z+OptionTests._makeOptions.<locals>.MyOptionsÚotheré)cs,||_ˆ |¡Gdd„dtƒ}|ƒ|_dS)Nc@seZdZdS)zAOptionTests._makeOptions.<locals>.MyOptions.__init__.<locals>.FooN©Ú__name__Ú
__module__Ú__qualname__rrrrÚFoo-sr)Ú
read_errorÚ__init__ÚobjectÚ
configroot)rr rrrrr!*s
z4OptionTests._makeOptions.<locals>.MyOptions.__init__cSs4|jrt|jƒ‚|jj |j¡|jj |j¡dS©N)r Ú
ValueErrorr#Ú__dict__ÚupdateZdefault_mapÚmaster)rÚfprrrÚread_config0s
z7OptionTests._makeOptions.<locals>.MyOptions.read_configN)rrrr(r!r*r©rr rrÚ	MyOptions's
ÿr,ÚanoptionÚoZoptionÚdefault)ÚnameÚconfnameÚshortÚlongr/rÚOTHERzp:zother=)r0r1Úenvr2r3Úhandler)rÚsupervisor.datatypesrrÚ
configfileÚadd)rr rr,Úoptionsrr+rÚ_makeOptions#s ÿ
ÿzOptionTests._makeOptionscCs&| ¡}|ƒ}|jt|jddddS)NT)Úflagr6©rÚassertRaisesr%r9©rÚclsÚinstrrrÚ'test_add_flag_not_None_handler_not_None?sz3OptionTests.test_add_flag_not_None_handler_not_NonecCs(| ¡}|ƒ}|jt|jdddddS)NTF©r<r3r2r=r?rrrÚ-test_add_flag_not_None_long_false_short_falseDsûz9OptionTests.test_add_flag_not_None_long_false_short_falsecCs(| ¡}|ƒ}|jt|jdddddS)NTFú:rCr=r?rrrÚ+test_add_flag_not_None_short_endswith_colonOsûz7OptionTests.test_add_flag_not_None_short_endswith_coloncCs(| ¡}|ƒ}|jt|jdddddS)NTú=FrCr=r?rrrÚ*test_add_flag_not_None_long_endswith_equalZsûz6OptionTests.test_add_flag_not_None_long_endswith_equalcCs&| ¡}|ƒ}|jt|jddddS)NrGÚabc©r3r2r=r?rrrÚ(test_add_inconsistent_short_long_optionsesüz4OptionTests.test_add_inconsistent_short_long_optionscCs&| ¡}|ƒ}|jt|jddddS)NFú-abcrJr=r?rrrÚ%test_add_short_option_startswith_dashosüz1OptionTests.test_add_short_option_startswith_dashcCs&| ¡}|ƒ}|jt|jddddS)NFrIrJr=r?rrrÚtest_add_short_option_too_longysüz*OptionTests.test_add_short_option_too_longcCs0| ¡}|ƒ}ddi|_|jt|jddddS)Nz-aTFÚarJ©rZoptions_mapr>r%r9r?rrrÚ#test_add_duplicate_short_option_keyƒs
üz/OptionTests.test_add_duplicate_short_option_keycCs&| ¡}|ƒ}|jt|jddddS)NrLFrJr=r?rrrÚ$test_add_long_option_startswith_dashŽsüz0OptionTests.test_add_long_option_startswith_dashcCs0| ¡}|ƒ}ddi|_|jt|jddddS)Nz--abcTrIFrJrPr?rrrÚ"test_add_duplicate_long_option_key˜s
üz.OptionTests.test_add_duplicate_long_option_keycCs<| ¡}| t|jƒd¡| |jdd…ddddg¡dS)Nééüÿÿÿúsupervisord.confzetc/supervisord.confz/etc/supervisord.confz /etc/supervisor/supervisord.conf)r;ÚassertEqualÚlenÚsearchpaths©rr:rrrÚtest_searchpaths£süzOptionTests.test_searchpathscCsˆ| ¡}| g¡| |jd¡| |jd¡| ¡}dtjd<| g¡| |jd¡| ¡}| ddg¡| |jd¡tjd=dS)	Nr/rZ42r4é*ú-pZ43é+)r;ÚrealizerWr-rÚosÚenvironrZrrrÚtest_options_and_args_order­s


z'OptionTests.test_options_and_args_ordercCsD| ¡}| g¡| |jd¡d|jd<| ¡| |jd¡dS)Nrr\r)r;r_rWrr(Úprocess_configrZrrrÚtest_config_reloadÀs

zOptionTests.test_config_reloadcCs |jdd}| t|jd¡dS)NÚerror©r F)r;r>r%rcrZrrrÚ!test_config_reload_do_usage_falseÈs
ÿz-OptionTests.test_config_reload_do_usage_falsecsZ|jdd}g‰‡fdd„|_tƒ|_|_d|j_d|j_|jdd| 	ˆdg¡dS)	Nrerfcs
ˆ |¡Sr$©Úappend©Úx©Ú	exitcodesrrÚ<lambda>Ðóz>OptionTests.test_config_reload_do_usage_true.<locals>.<lambda>éT©Zdo_usageé)
r;ÚexitrÚstderrÚstdoutr#r-rrcrWrZrrlrÚ test_config_reload_do_usage_trueÍsz,OptionTests.test_config_reload_do_usage_truecCs¼ddlm}|ƒ}| ddd¡| |jd¡| |jdd¡| ddd¡| |jd¡| |jdd¡| ddd¡| |jd¡| |jdd¡| ddd¡| |jd¡dS)NrrÚfooÚbarÚbazrpZgazonk)rrZ_setrWrwZattr_priorities)rrr:rrrÚ	test__set×szOptionTests.test__setcs\| ¡}g|_g‰‡fdd„|_tƒ|_| ¡| ˆdg¡d}| |j ¡ 	|¡¡dS)Ncs
ˆ |¡Sr$rhrjrlrrrnêroz9OptionTests.test_missing_default_config.<locals>.<lambda>rrz,Error: No config file found at default paths)
r;rYrsrrtÚdefault_configfilerWÚ
assertTrueÚgetvalueÚ
startswith©rr:ÚmsgrrlrÚtest_missing_default_configæsz'OptionTests.test_missing_default_configc	Cs@| ¡}t ¡&}|jg|_| ¡}| ||j¡W5QRXdSr$)r;ÚtempfileÚNamedTemporaryFiler0rYr{rW)rr:ÚfÚconfigrrrÚtest_default_configñs


zOptionTests.test_default_configcs`| ¡}g‰‡fdd„|_tƒ|_d|_d|_| d¡| ˆdg¡d}| |j ¡|¡dS)Ncs
ˆ |¡Sr$rhrjrlrrrnûroz'OptionTests.test_help.<locals>.<lambda>Ú	test_helpzA sample docstring for %sÚrz!A sample docstring for test_help
)	r;rsrruZprognameÚdocÚhelprWr}rrrlrr‡øs
zOptionTests.test_helpN)F)rrrrr;rBrDrFrHrKrMrNrQrRrSr[rbrdrgrvrzrr†r‡rrrrrs*






rc@s|eZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
dd„Zdd„Zdd„Z
dd„Zdd„Zdd„ZdS)ÚClientOptionsTestscCsddlm}|S)Nr)Ú
ClientOptions)rrŒ)rrŒrrrrsz"ClientOptionsTests._getTargetClasscCs
| ¡ƒSr$©r©rrrrÚ_makeOne	szClientOptionsTests._makeOnecs€| ¡}g|_g‰‡fdd„|_|jddddddgd	| ˆg¡| |jd
¡| |jd¡| |jd¡| |jd¡dS)z(Making sure config file is not required.cs
ˆ |¡Sr$rhrjrlrrrnroz8ClientOptionsTests.test_no_config_file.<locals>.<lambda>z-súhttp://localhost:9001z-uÚchrisr]Ú123©ÚargsrpN)	rrYrsr_rWÚinteractiveÚ	serverurlÚusernameÚpassword©rÚinstancerrlrÚtest_no_config_filesÿz&ClientOptionsTests.test_no_config_filecCs²t ¡}td|ƒ}t|ƒ}| ¡}||_|jgd| |jd¡t	j
 |d¡}| |j|¡|j
j}| |jd¡| |jd¡| |jd¡| |jd¡| |j|¡dS)	Nz«[supervisorctl]
        serverurl=http://localhost:9001
        username=chris
        password=123
        prompt=mysupervisor
        history_file=%s/sc_history
        r“TÚ
sc_historyZmysupervisorrr‘r’)r‚Ú
gettempdirrrrr8r_rWr•r`ÚpathÚjoinÚhistory_filer#Ú
supervisorctlÚpromptr–r—r˜)rÚtempdirÚsr)ršr r:rrrÚtest_optionss"úzClientOptionsTests.test_optionscCs@tdƒ}| ¡}t|ƒ|_|jgd|jj}| |jd¡dS)Nzx
        [supervisorctl]
        serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
        r“úhttp://127.0.0.1:9001©	rrrr8r_r#r¡rWr–©rÚtextršr:rrrÚ3test_options_ignores_space_prefixed_inline_comments4s
zFClientOptionsTests.test_options_ignores_space_prefixed_inline_commentscCs@tdƒ}| ¡}t|ƒ|_|jgd|jj}| |jd¡dS)Nzw
        [supervisorctl]
        serverurl=http://127.0.0.1:9001	;use an http:// url to specify an inet socket
        r“r¦r§r¨rrrÚ1test_options_ignores_tab_prefixed_inline_comments?s
zDClientOptionsTests.test_options_ignores_tab_prefixed_inline_commentscCs*tdƒ}| ¡}t|ƒ|_|jgddS)Nz 
        [supervisorctl]
        serverurl=http://localhost:9001 ;duplicate

        [supervisorctl]
        serverurl=http://localhost:9001 ;duplicate
        r“©rrrr8r_©rr©ršrrrÚ3test_options_parses_as_nonstrict_for_py2_py3_compatJs
zFClientOptionsTests.test_options_parses_as_nonstrict_for_py2_py3_compatcCs¤tdƒ}t|ƒ}| ¡}t ¡dddddddœ|_||_|jgd	| |j	d
¡|j
j}| |jd¡| |j
d¡| |jd¡| |jd¡| |jd¡dS)
Na
[supervisorctl]
        serverurl=http://localhost:%(ENV_SERVER_PORT)s
        username=%(ENV_CLIENT_USER)s
        password=%(ENV_CLIENT_PASS)s
        prompt=%(ENV_CLIENT_PROMPT)s
        history_file=/path/to/histdir/.supervisorctl%(ENV_CLIENT_HIST_EXT)s
        ÚjohndoeÚ9210ÚsomeuserÚpasswordhereZxsupervisorz.hist)ÚENV_HOMEÚENV_USERÚENV_SERVER_PORTZENV_CLIENT_USERZENV_CLIENT_PASSZENV_CLIENT_PROMPTZENV_CLIENT_HIST_EXTr“Tzhttp://localhost:9210z$/path/to/histdir/.supervisorctl.hist)rrrr‚rÚenviron_expansionsr8r_rWr•r#r¡r¢r–r—r˜r )rr¤r)ršr:rrrÚ(test_options_with_environment_expansionsWs(úz;ClientOptionsTests.test_options_with_environment_expansionsc
Cs®| ¡}tdƒ}t ¡}tj |d¡}t|dƒ}| |¡W5QRXz||_|jgdW5t	j
|ddX|j
j}| |jtj |d¡¡| |jdtj |d	¡¡dS)
Nz}
        [supervisorctl]
        history_file=%(here)s/sc_history
        serverurl=unix://%(here)s/supervisord.sock
        rVÚwT©Ú
ignore_errorsr“rœúunix://úsupervisord.sock)rrr‚Úmkdtempr`ržrŸÚopenÚwriteÚshutilÚrmtreer8r_r#r¡rWr r–)rršr©ÚhereÚsupervisord_confr„r:rrrÚ/test_options_supervisorctl_section_expands_herets"ÿÿzBClientOptionsTests.test_options_supervisorctl_section_expands_herec
Csrtj tj t¡d¡}| ¡}z| |¡| d¡Wn6tk
rl}z| 	d|j
dk¡W5d}~XYnXdS©NÚnonexistentúnothing raisedzcould not find config filer©r`ržrŸÚdirnameÚ__file__rr*Úfailr%r|r”©rrÆršÚexcrrrÚtest_read_config_not_foundŠs
z-ClientOptionsTests.test_read_config_not_foundc
Csj| ¡}dd„}||_z| t¡| d¡Wn6tk
rd}z| d|jdk¡W5d}~XYnXdS)NcSsttjd|ƒ‚dS©NzPermission denied: %s©ÚIOErrorÚerrnoZEACCES©ÚfnÚmoderrrÚ
dummy_open•szBClientOptionsTests.test_read_config_unreadable.<locals>.dummy_openzexpected exceptionúcould not read config filer©rr¾r*rÊrËr%r|r”©rršrÖrÍrrrÚtest_read_config_unreadable“s
z.ClientOptionsTests.test_read_config_unreadablec
Cs\| ¡}z| tƒ¡| d¡Wn4tk
rV}z| |jdd¡W5d}~XYnXdS)NrÇrz0.ini file does not include supervisorctl section©rr*rrËr%rWr”©rršrÍrrrÚ9test_read_config_no_supervisord_section_raises_valueerrorŸsÿzLClientOptionsTests.test_read_config_no_supervisord_section_raises_valueerrorcCs8tdƒ}| ¡}||_|jddgd| |jd¡dS)Nz[supervisorctl]z--serverurlúunix:///dev/nullr“)rrr8r_rWr–)rr)ršrrrÚtest_options_unixsocket_cli¨s
z.ClientOptionsTests.test_options_unixsocket_clicCs<tdƒ}t|ƒ}| ¡}||_|jgd| |jd¡dS)Nz;[supervisorctl]
        serverurl=unix:///dev/null
        r“rÞ)rrrr8r_rWr–)rr¤r)ršrrrÚ"test_options_unixsocket_configfile¯sz5ClientOptionsTests.test_options_unixsocket_configfileN)rrrrrr›r¥rªr«r®r·rÄrÎrÚrÝrßràrrrrr‹s
		r‹c@s¢eZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
dd„Zdd„Zdd„Z
dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;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<e=due>e?dvƒdwdx„ƒZ@dydz„ZAd{d|„ZBd}d~„ZCdd€„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º„Zad»d¼„Zbd½d¾„Zcd¿dZddÁ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ö„Zd÷dø„Z€dùdú„Zdûdü„Z‚dýdþ„Zƒe=dÿe>ddddgdƒe=de>ddƒdd„ƒƒZ„e=dÿe>ddddgdƒe=de>ddƒd	d
„ƒƒZ…dd„Z†dS(
ÚServerOptionsTestscCsddlm}|S)Nr)Ú
ServerOptions)rrâ)rrârrrrºsz"ServerOptionsTests._getTargetClasscCs
| ¡ƒSr$rrŽrrrr¾szServerOptionsTests._makeOnecCsFddlm}| ¡}tƒ|_| t|jd¡| |j 	¡|d¡dS)Nr)ÚVERSIONÚ
)
rrãrrrur>Ú
SystemExitÚversionrWr})rrãr:rrrÚtest_versionÁs
zServerOptionsTests.test_versioncCs6	tddt ¡iƒ}ddlm}t|ƒ}| ¡}||_|jgd|j	j
}| |jt ¡¡| |j
d¡| |jd¡| |jd¡| |jd	¡| |jd
¡| |jd¡| |jd¡| |jd
¡| |jt ¡¡| t|jƒd¡| |jddtj¡| |jddd¡| |jddd¡| |jddd¡| |jddd¡| |jd¡| |jd¡| |jd¡| |jd¡| t|jƒd	¡| |jtdd¡|jd}| |j d¡| |j!d¡| t|j"ƒd¡|j"d}| |j d¡| |j#d¡| |j!d¡| |j$d¡| |j%|j&¡| |j'd	¡| |j(d¡| |j)d¡| |j*d¡| |j+t,j-¡| |j.d	¡| |j/d ¡| |j0d ¡| |j1| 2d!¡¡| |j3d¡| |j4dg¡| |jd"¡| |j
d#¡| |jtdd¡|jd}| |j d$¡| |j!d#¡| t|j"ƒd¡|j"d}	| |	j d$¡| |	j#d¡| |	j!d#¡| |	j$d¡| |	j%d ¡| |	j)d¡| |	j*d%¡| |	j+t,j5¡| |	j/d ¡| |	j0d ¡| |	j1d&¡| |	j3d#¡| |	j4dg¡| |	jd¡|jd#}
| |
j d'¡| |
j!d(¡| t|
j"ƒd¡|
j"d}| |j d)¡| |j#d¡| |j!d(¡| |j$d¡| |j%|j6¡| |j)d¡| |j*|j7¡| |j1| 2d!¡¡| |j3d¡| |j4ddd*g¡| |j+t,j5¡| |j/d¡| |j0d¡|jd(}| |j d+¡| |j!d,¡| t|j"ƒd#¡|j"d}
| |
j d-¡| |
j#d¡| |
j!d,¡| |
j$d¡| |
j%|j&¡| |
j)d¡| |
j*|j7¡| |
j1| 2d!¡¡| |
j3d¡| |
j4dg¡| |
j+t,j5¡| |
j/d ¡| |
j0d ¡| |
jd¡|j"d}| |j d.¡| |j#d¡| |j!d,¡| |j$d¡| |j%|j&¡| |j)d¡| |j*|j7¡| |j1| 2d!¡¡| |j3d¡| |j4dg¡| |j+t,j5¡| |j/d ¡| |j0d ¡| |jd¡|jd,}| |j d/¡| |j!d	¡| t|j"ƒd#¡|j"d}| |j d0¡| |jd1¡|j"d}| |j d2¡| |jd3¡t8j9 :t8 ;¡¡}| |j)d¡| |j<d¡| |jt ¡¡| |j
d¡| |jt8j9 =|d¡¡| |jd¡| |jd	¡| |jd
¡| |jt8j9 =|d¡¡| |jd¡| |j>d¡| |jd
¡| |jt ¡¡| t|jƒd¡| |jddtj¡| |jddd¡| |jddd¡| |jddd¡| |jddd¡| |jd¡| |jd¡| |jd¡dS)4Nag[inet_http_server]
        port=127.0.0.1:8999
        username=chrism
        password=foo

        [supervisord]
        directory=%(tempdir)s
        backofflimit=10
        user=root
        umask=022
        logfile=supervisord.log
        logfile_maxbytes=1000MB
        logfile_backups=5
        loglevel=error
        pidfile=supervisord.pid
        nodaemon=true
        identifier=fleeb
        childlogdir=%(tempdir)s
        nocleanup=true
        minfds=2048
        minprocs=300
        environment=FAKE_ENV_VAR=/some/path

        [program:cat1]
        command=/bin/cat
        priority=1
        autostart=true
        user=root
        stdout_logfile=/tmp/cat.log
        stopsignal=KILL
        stopwaitsecs=5
        startsecs=5
        startretries=10
        directory=/tmp
        umask=002

        [program:cat2]
        priority=2
        command=/bin/cat
        autostart=true
        autorestart=false
        stdout_logfile_maxbytes = 1024
        stdout_logfile_backups = 2
        stdout_logfile = /tmp/cat2.log

        [program:cat3]
        priority=3
        process_name = replaced
        command=/bin/cat
        autorestart=true
        exitcodes=0,1,127
        stopasgroup=true
        killasgroup=true

        [program:cat4]
        priority=4
        process_name = fleeb_%%(process_num)s
        numprocs = 2
        command = /bin/cat
        autorestart=unexpected

        [program:cat5]
        priority=5
        process_name = foo_%%(process_num)02d
        numprocs = 2
        numprocs_start = 1
        command = /bin/cat
        directory = /some/path/foo_%%(process_num)02d
        r£r©Ú	datatypesr“éúsupervisord.logi€>éé(úsupervisord.pidTZfleebrpÚfamilyÚhostz	127.0.0.1Úporti'#r—Zchrismr˜rwii,ú
/some/path©ZFAKE_ENV_VARÚcat1ú/bin/caté
ú/tmp/cat.logFZ50MBú/tmprrÚcat2z
/tmp/cat2.logéÚcat3éZreplacedéÚcat4éZfleeb_0Zfleeb_1Úcat5Zfoo_01z/some/path/foo_01Zfoo_02z/some/path/foo_02)?rr‚rÚ
supervisorrérrr8r_r#ÚsupervisordrWÚ	directoryÚumaskÚlogfileÚlogfile_maxbytesÚlogfile_backupsÚloglevelÚpidfileÚnodaemonÚ
identifierÚchildlogdirrXÚserver_configsÚsocketÚAF_INETÚ	nocleanupÚminfdsÚminprocsÚprocess_group_configsÚenvironmentÚdictr0ÚpriorityÚprocess_configsÚcommandÚ	autostartÚautorestartÚRestartWhenExitUnexpectedÚ	startsecsÚstartretriesÚuidÚstdout_logfileÚ
stopsignalÚsignalÚSIGKILLÚstopwaitsecsÚstopasgroupÚkillasgroupÚstdout_logfile_maxbytesÚ	byte_sizeÚstdout_logfile_backupsrmÚSIGTERMZRestartUnconditionallyÚ	Automaticr`ržÚabspathÚgetcwdÚgidrŸZ
passwdfile)rr¤rér)ršr:rôÚproc1rùZproc2rûZproc3rþZproc4_aZproc4_brZproc5_aZproc5_brÂrrrr¥ÈsVD
¼F

ÿ



ÿ

ÿÿ
ÿÿ


zServerOptionsTests.test_optionscCsNtdƒ}| ¡}t|ƒ|_|jgd|jj}| |jd¡| |j	d¡dS)Nzº
        [supervisord]
        logfile=/tmp/supervisord.log ;(main log file;default $CWD/supervisord.log)
        minfds=123 ; (min. avail startup file descriptors;default 1024)
        r“z/tmp/supervisord.logé{)
rrrr8r_r#rrWrrr¨rrrrªÂs
zFServerOptionsTests.test_options_ignores_space_prefixed_inline_commentscCs@tdƒ}| ¡}t|ƒ|_|jgd|jj}| |jd¡dS)Nzº
        [supervisord]
        logfile=/tmp/supervisord.log	;(main log file;default $CWD/supervisord.log)
        minfds=123	; (min. avail startup file descriptors;default 1024)
        r“r/)	rrrr8r_r#rrWrr¨rrrr«Ïs
zDServerOptionsTests.test_options_ignores_tab_prefixed_inline_commentscCs*tdƒ}| ¡}t|ƒ|_|jgddS)Nz‹
        [supervisord]

        [program:duplicate]
        command=/bin/cat

        [program:duplicate]
        command=/bin/cat
        r“r¬r­rrrr®Ûs	
zFServerOptionsTests.test_options_parses_as_nonstrict_for_py2_py3_compatcCs\tdƒ}| ¡}t|ƒ|_|jgd|jj}| t|j	ƒd¡|j	d}| t|j
ƒd¡|j	d}| t|j
ƒd¡| |j	|j	k¡tdƒ}t|ƒ|_|jdd|jj}| t|j	ƒd¡|j	d}| t|j
ƒd¡|j
d}| |j
d	¡| |jd
¡| |j	|j	k¡|j	d}| t|j
ƒd¡|j
d}| |j
d¡| |jd¡dS)
Nzþ        [supervisord]
        user=root

        [program:one]
        command = /bin/cat

        [program:two]
        command = /bin/dog

        [program:four]
        command = /bin/sheep

        [group:thegroup]
        programs = one,two
        r“rrrrpzÉ        [supervisord]
        user=root

        [program:one]
        command = /bin/cat

        [program:three]
        command = /bin/pig

        [group:thegroup]
        programs = three
        FrqZonerõZthreez/bin/pig)rrrr8r_r#rrWrXrrr|rcr0r)rr©ršÚsectionÚcatÚprocrrrÚtest_reloadês>


ÿ


ÿ

zServerOptionsTests.test_reloadcCsv| ¡}d}|g|_|g|_|g|_tdƒ}t|ƒ|_|jgd| ||jk¡| ||jk¡| ||jk¡dS)Nz Message from a prior config readúb        [supervisord]
        user=root

        [program:cat]
        command = /bin/cat
        r“)	rZparse_criticalsÚparse_warningsÚparse_infosrrr8r_ÚassertFalse)rršZold_msgr©rrrÚ!test_reload_clears_parse_messages.s
z4ServerOptionsTests.test_reload_clears_parse_messagescCsF| ¡}d}|g|_tdƒ}t|ƒ|_|jgd| ||jk¡dS)NzInfo from a prior config readr4r“)rZinfosrrr8r_r7r6)rršZold_infor©rrrÚtest_reload_clears_parse_infosBs
z1ServerOptionsTests.test_reload_clears_parse_infosc
Csrtj tj t¡d¡}| ¡}z| |¡| d¡Wn6tk
rl}z| 	d|j
dk¡W5d}~XYnXdSrÅrÈrÌrrrrÎRs
z-ServerOptionsTests.test_read_config_not_foundc
Csj| ¡}dd„}||_z| t¡| d¡Wn6tk
rd}z| d|jdk¡W5d}~XYnXdS)NcSsttjd|ƒ‚dSrÏrÐrÓrrrrÖ]szBServerOptionsTests.test_read_config_unreadable.<locals>.dummy_openrÇr×rrØrÙrrrrÚ[s
z.ServerOptionsTests.test_read_config_unreadablecCsž| ¡}tjdd€}z,| d¡| ¡| |j¡| d¡WnLtk
rŽ}z.| 	d|j
dk¡| 	|j|j
dk¡W5d}~XYnXW5QRXdS)Núw+©rÕz[supervisord]
junkrÇúcontains parsing errors:r)rr‚rƒr¿Úflushr*r0rËr%r|r”)rršr„rÍrrrÚ8test_read_config_malformed_config_file_raises_valueerrorgs
zKServerOptionsTests.test_read_config_malformed_config_file_raises_valueerrorc
Cs\| ¡}z| tƒ¡| d¡Wn4tk
rV}z| |jdd¡W5d}~XYnXdS)NrÇrz..ini file does not include supervisord sectionrÛrÜrrrrÝtsÿzLServerOptionsTests.test_read_config_no_supervisord_section_raises_valueerrorc
Csf| ¡}tdƒ}z| t|ƒ¡| d¡Wn4tk
r`}z| |jdd¡W5d}~XYnXdS)NzD        [supervisord]

        [include]
        ;no files=
        rÇrz5.ini file has [include] section, but no files setting)rrr*rrËr%rWr”©rršr©rÍrrrÚ8test_read_config_include_with_no_files_raises_valueerror}sÿzKServerOptionsTests.test_read_config_include_with_no_files_raises_valueerrorcCs2| ¡}tdƒ}| t|ƒ¡| |jdg¡dS)NzM        [supervisord]

        [include]
        files=nonexistent/*
        z-No file matches via include "./nonexistent/*")rrr*rrWr5)rršr©rrrÚ<test_read_config_include_with_no_matching_files_logs_warningŒsÿzOServerOptionsTests.test_read_config_include_with_no_matching_files_logs_warningc
Cs0t ¡}tj |d¡}t |¡tj |d¡}td||fƒ}t|dƒ}| |¡W5QRXtj |d¡}t|dƒ}| d¡W5QRXtj |d¡}t|dƒ}| d¡W5QRX| 	¡}z| |¡W5t
j|d	d
X|j
j}	| t|	jƒd¡d|}
| |
|jk¡d|}
| |
|jk¡dS)
Núconf.drVz`        [supervisord]

        [include]
        files=%s/conf.d/*.conf %s/conf.d/*.ini
        r¸úa.confú[inet_http_server]
port=8000
za.iniz"[unix_http_server]
file=/tmp/file
Tr¹rrú'Included extra file "%s" during parsing)r‚r½r`ržrŸÚmkdirrr¾r¿rrÀrÁr*r#rrWrXr
r|r6)rrÉÚconf_drÃr©r„Ú	conf_fileZini_fileršr:r€rrrÚ*test_read_config_include_reads_extra_files˜s2
ûz=ServerOptionsTests.test_read_config_include_reads_extra_filesc
Cs&t ¡}tj |d¡}t |¡tj |d¡}td|ƒ}t|dƒ}| |¡W5QRXddl	m
}|dd…}t|ƒD]>}tj |d|¡}	t|	dƒ}| d	||f¡W5QRXqz| ¡}
z|
 |¡W5t
j|d
dXg}t|ƒD]$}tj |d|¡}	| d|	¡qî| |
j|¡dS)
NrBrVúP        [supervisord]

        [include]
        files=%s/conf.d/*.conf
        r¸r)Úletterséú%s.confz[program:%s]
command=/bin/%s
Tr¹rE)r‚r½r`ržrŸrFrr¾r¿Úsupervisor.compatrKÚreversedrrÀrÁr*ÚsortedrirWr6)rrÉrGrÃr©r„rKZa_zZletterÚfilenameršZ
expected_msgsrrrÚ4test_read_config_include_reads_files_in_sorted_order»s8
ûÿÿzGServerOptionsTests.test_read_config_include_reads_files_in_sorted_orderc

Cs(t ¡}tj |d¡}t |¡tj |d¡}td|ƒ}t|dƒ}| |¡W5QRXtj |d¡}t|dƒ}| d¡W5QRX| 	¡}z‚z| |¡| 
d	¡Wndtk
r}zD| d
|jdk¡| ||jdk¡d|}	| |	|jk¡W5d}~XYnXW5t
j|ddXdS)
NrBrVrJr¸rCz[inet_http_server]
junk
Tr¹rÇr<rrE)r‚r½r`ržrŸrFrr¾r¿rrÀrÁr*rËr%r|r”r6)
rrÉrGrÃr©r„Zmalformed_fileršrÍr€rrrÚ-test_read_config_include_extra_file_malformedÞs,
û
&z@ServerOptionsTests.test_read_config_include_extra_file_malformedc

Csòt ¡}tj |d¡}t |¡tj |d¡}td|dfƒ}t|dƒ}| |¡W5QRXtj |dt	 
¡¡}t|dƒ}| d¡W5QRX| ¡}z| |¡W5tj
|dd	X|jj}| t|jƒd
¡d|}	| |	|jk¡dS)NrBrVzQ        [supervisord]

        [include]
        files=%s/conf.d/%s.conf
        z%(host_node_name)sr¸rMrDTr¹rprE)r‚r½r`ržrŸrFrr¾r¿ÚplatformÚnoderrÀrÁr*r#rrWrXr
r|r6)
rrÉrGrÃr©r„rHršr:r€rrrÚ/test_read_config_include_expands_host_node_nameýs(
ûzBServerOptionsTests.test_read_config_include_expands_host_node_namecCsztj tj tj t¡¡dd¡}tj |¡}tj |d¡}| ¡}||_| d¡|j	j
}| |j|¡| |j
|¡dS)NZfixtureszinclude.confZexampleT)r`ržrŸr+rÉrÊrr8Zprocess_config_filer#rrWrr)rZconfZ	root_hereZinclude_hereÚparserr0rrrÚ%test_read_config_include_expands_heresþ
z8ServerOptionsTests.test_read_config_include_expands_herec
Cs^ddlm}z|dddƒWn4tk
rP}z| |jdd¡W5d}~XYn
Xtdƒ‚dS)Nr)ÚreadFilez	/notthereröZFAILEDzDidn't raise)rrYr%rWr”ÚAssertionError)rrYrArrrÚtest_readFile_failed's$z'ServerOptionsTests.test_readFile_failedcCs | ¡}| t ¡| ¡¡dSr$)rrWr`ÚgetpidZget_pidr™rrrÚtest_get_pid0szServerOptionsTests.test_get_pidcCs`| ¡}|j tjd¡|j tjd¡| | ¡tj¡| | ¡tj¡| | ¡d¡dSr$)rZsignal_receiverÚreceiver!r)ÚSIGCHLDrWÚ
get_signalr™rrrÚ,test_get_signal_delegates_to_signal_receiver4sz?ServerOptionsTests.test_get_signal_delegates_to_signal_receivercCs,| ¡}ddlm}| ||jddd¡dS)Nr)ÚNotFoundz
/not/there)rrrbr>Úcheck_execv_args)rršrbrrrÚ'test_check_execv_args_cant_find_command<s
ÿz:ServerOptionsTests.test_check_execv_args_cant_find_commandc	Cs4| ¡}ddlm}| ||jddgt d¡¡dS)Nr©Ú
NotExecutablez/etc/passwdz
etc/passwd©rrrfr>rcr`Ústat©rršrfrrrÚ#test_check_execv_args_notexecutableBsþz6ServerOptionsTests.test_check_execv_args_notexecutablec	Cs4| ¡}ddlm}| ||jddgt d¡¡dS)Nrreú/rgrirrrÚtest_check_execv_args_isdirIsþz.ServerOptionsTests.test_check_execv_args_isdircsd| ¡}g‰‡fdd„}||_tdƒ|_ddg}|j|d| tˆƒd¡| ˆdd	|¡dS)
Ncsˆ |¡dSr$rh©Úmessage©ZrecorderrrÚrecord_usageTszSServerOptionsTests.test_realize_positional_args_not_supported.<locals>.record_usageú
[supervisord]rwrxr“rprz*positional arguments are not supported: %s©rÚusagerr8r_rWrX)rršrpr”rrorÚ*test_realize_positional_args_not_supportedPs

ÿz=ServerOptionsTests.test_realize_positional_args_not_supportedcsZ| ¡}g‰‡fdd„}||_tdƒ|_|jdgd| tˆƒd¡| ˆdd¡dS)	Ncsˆ |¡dSr$rhrmrorrrpcszBServerOptionsTests.test_realize_getopt_error.<locals>.record_usagerqz--bad=1r“rprzoption --bad not recognizedrr)rršrprrorÚtest_realize_getopt_error_s
z,ServerOptionsTests.test_realize_getopt_errorcCs¶| ¡}tdƒ}ddlm}|ƒ}| |¡t|ƒ|_| t|ƒ¡|jgd|j	j
}| |jddt
j¡| |jddd¡| |jddd	¡| |jdd
d¡dS)NzŸ        [unix_http_server]
        file=/tmp/supvtest.sock
        username=johndoe
        password=passwordhere

        [supervisord]
        ; ...
        r©ÚUnhosedConfigParserr“rïÚfileú/tmp/supvtest.sockÚchmodéÀÚchown)éÿÿÿÿr}©rrrrwÚread_stringrr8r*r_r#rrWr
rÚAF_UNIX©rršr©rwr…r:rrrÚtest_options_afunixls	

z&ServerOptionsTests.test_options_afunixcCs | ¡}tdƒ}ddlm}|ƒ}| |¡t|ƒ|_| t|ƒ¡|jgd|j	j
}| |jddt
j¡| |jddd¡| |jddd	¡dS)
Nz²        [unix_http_server]
        file=/tmp/supvtest.sock
        username=johndoe
        password=passwordhere
        chmod=0755

        [supervisord]
        ; ...
        rrvr“rïrxryrziír~rrrrÚ&test_options_afunix_chxxx_values_valid„s


z9ServerOptionsTests.test_options_afunix_chxxx_values_validc
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)Nzc        [supervisord]

        [unix_http_server]
        file=/tmp/file
        chmod=NaN
        rÇrzInvalid chmod value NaN©	rrrr8r*rËr%rWr”r?rrrÚtest_options_afunix_chmod_badœs
ÿz0ServerOptionsTests.test_options_afunix_chmod_badc
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)Nzs        [supervisord]

        [unix_http_server]
        file=/tmp/file
        chown=thisisnotavaliduser
        rÇrz+Invalid sockchown value thisisnotavaliduserr„r?rrrÚtest_options_afunix_chown_bad­s
ÿz0ServerOptionsTests.test_options_afunix_chown_badc
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)NzL        [supervisord]

        [unix_http_server]
        ;no file=
        rÇrz,section [unix_http_server] has no file valuer„r?rrrÚtest_options_afunix_no_file¾s
ÿz.ServerOptionsTests.test_options_afunix_no_filec
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)Nz¡        [supervisord]

        [unix_http_server]
        file=/tmp/supvtest.sock
        username=usernamehere
        ;no password=
        chmod=0755
        rÇrú™Section [unix_http_server] contains incomplete authentication: If a username or a password is specified, both the username and password must be specifiedr„r?rrrÚ-test_options_afunix_username_without_passwordÎs	
ÿz@ServerOptionsTests.test_options_afunix_username_without_passwordc
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)Nz¡        [supervisord]

        [unix_http_server]
        file=/tmp/supvtest.sock
        ;no username=
        password=passwordhere
        chmod=0755
        rÇrrˆr„r?rrrÚ-test_options_afunix_password_without_usernameäs	
ÿz@ServerOptionsTests.test_options_afunix_password_without_usernamec
Cs°| ¡}tdƒ}t ¡}tj |d¡}t|dƒ}| |¡W5QRXz||_|jgdW5t	j
|ddX|j
j}|jd}| |dtj¡| |d	tj |d
¡¡dS)Nza        [supervisord]

        [unix_http_server]
        file=%(here)s/supervisord.sock
        rVr¸Tr¹r“rrïrxr¼)rrr‚r½r`ržrŸr¾r¿rÀrÁr8r_r#rr
rWrr€)rršr©rÂrÃr„r:Z
serverconfrrrÚ%test_options_afunix_file_expands_hereús 

ÿz8ServerOptionsTests.test_options_afunix_file_expands_herec
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)Nz¡        [supervisord]

        [inet_http_server]
        file=/tmp/supvtest.sock
        username=usernamehere
        ;no password=
        chmod=0755
        rÇrú™Section [inet_http_server] contains incomplete authentication: If a username or a password is specified, both the username and password must be specifiedr„r?rrrÚ-test_options_afinet_username_without_passwords	
ÿz@ServerOptionsTests.test_options_afinet_username_without_passwordc
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)Nzn        [supervisord]

        [inet_http_server]
        password=passwordhere
        ;no username=
        rÇrrŒr„r?rrrÚ-test_options_afinet_password_without_username(s
ÿz@ServerOptionsTests.test_options_afinet_password_without_usernamec
Csp| ¡}tdƒ}t|ƒ|_z| t|ƒ¡| d¡Wn4tk
rj}z| |jdd¡W5d}~XYnXdS)NzL        [supervisord]

        [inet_http_server]
        ;no port=
        rÇrz,section [inet_http_server] has no port valuer„r?rrrÚtest_options_afinet_no_port<s
ÿz.ServerOptionsTests.test_options_afinet_no_portc	Cs~t ¡}t|dƒ}| d¡W5QRX| ¡}d|_Gdd„dƒ}tj|dœ|ƒfg|_d|_	| 
¡| tj
 |¡¡dS)Nr¸rwTc@seZdZdS)z=ServerOptionsTests.test_cleanup_afunix_unlink.<locals>.ServerNrrrrrÚServerRsr©rïrxrˆ)r‚Úmktempr¾r¿rÚunlink_socketfilesrr€Úhttpserversr	Úcleanupr7r`ržÚexists©rrÔr„ršrrrrÚtest_cleanup_afunix_unlinkLs
ÿz-ServerOptionsTests.test_cleanup_afunix_unlinkcCsªt ¡}zvt|dƒ}| d¡W5QRX| ¡}Gdd„dƒ}tj	|dœ|ƒfg|_
d|_d|_| 
¡| tj |¡¡W5zt |¡Wntk
r¢YnXXdS)Nr¸rwc@seZdZdS)z?ServerOptionsTests.test_cleanup_afunix_nounlink.<locals>.ServerNrrrrrr`srr‘rˆF)r‚r’r`ÚunlinkÚOSErrorr¾r¿rrr€r”r	r“r•r|ržr–r—rrrÚtest_cleanup_afunix_nounlinkZs"
ÿz/ServerOptionsTests.test_cleanup_afunix_nounlinkcCsÐtj tj t¡d¡}t ¡}z†t	|dƒ}| 
d¡W5QRX| ¡}d|_Gdd„dƒ}t
j|dœ|ƒft
j|dœ|ƒfg|_d|_| ¡| tj |¡¡W5zt |¡Wntk
rÈYnXXdS)	NÚnotfoundr¸rwTc@seZdZdS)zMServerOptionsTests.test_cleanup_afunix_ignores_oserror_enoent.<locals>.ServerNrrrrrrvsrr‘rˆ)r`ržrŸrÉrÊr‚r’r™ršr¾r¿rr“rr€r”r	r•r7r–)rrœZ
socketnamer„ršrrrrÚ*test_cleanup_afunix_ignores_oserror_enoentns$þz=ServerOptionsTests.test_cleanup_afunix_ignores_oserror_enoentcCsœt ¡}zht|dƒ}| d¡W5QRX| ¡}||_t	ƒ|_
| ¡| |j
¡| ¡| tj |¡¡W5zt |¡Wntk
r”YnXXdS©Nr¸Ú2)r‚r’r`r™ršr¾r¿rr	r	ÚloggerÚ
write_pidfiler|Úunlink_pidfiler•r7ržr–©rr	r„ršrrrÚtest_cleanup_removes_pidfile…sz/ServerOptionsTests.test_cleanup_removes_pidfilecCs0tj tj t¡d¡}| ¡}||_| ¡dS)Nrœ)r`ržrŸrÉrÊrr	r•)rrœršrrrÚ+test_cleanup_pidfile_ignores_oserror_enoent—sz>ServerOptionsTests.test_cleanup_pidfile_ignores_oserror_enoentcCsŒt ¡}t|dƒ}| d¡W5QRXz8| ¡}||_| 	|j
¡| ¡| tj
 |¡¡W5zt |¡Wntk
r„YnXXdS)Nr¸Z1234)r‚r’r¾r¿r`r™ršrr	r7r¢r•r|ržr–r£rrrÚ=test_cleanup_does_not_remove_pidfile_from_another_supervisordszPServerOptionsTests.test_cleanup_does_not_remove_pidfile_from_another_supervisordcCs”t ¡}z`t|dƒ}| d¡W5QRX| ¡}||_t	iƒ}||_
| |j¡| 
¡| |j¡W5zt |¡Wntk
rŒYnXXdSrž)r‚r’r`r™ršr¾r¿rr	rÚpollerr7Úclosedr•r|)rr	r„ršr§rrrÚtest_cleanup_closes_poller²sz-ServerOptionsTests.test_cleanup_closes_pollercsR| ¡‰dˆ_g‰‡fdd„}td|ƒ‡fdd„ƒ}|ƒ| ˆddd	d
g¡dS)Nröcs|dkrt‚ˆ |¡dS)Né)ršri©Úfd©r¨rrÚcloseÊszWServerOptionsTests.test_cleanup_fds_closes_5_upto_minfds_ignores_oserror.<locals>.closeúos.closecsˆ ¡dSr$)Zcleanup_fdsr)ršrrr„ÏszSServerOptionsTests.test_cleanup_fds_closes_5_upto_minfds_ignores_oserror.<locals>.frìrTéé	)rrrrW)rr®r„r)r¨ršrÚ5test_cleanup_fds_closes_5_upto_minfds_ignores_oserrorÅszHServerOptionsTests.test_cleanup_fds_closes_5_upto_minfds_ignores_oserrorcCsB| ¡}Gdd„dƒ}|ƒ}i|fg|_| ¡| |jd¡dS)Nc@seZdZdZdd„ZdS)z9ServerOptionsTests.test_close_httpservers.<locals>.ServerFcSs
d|_dS©NTr­rŽrrrr®Ùsz?ServerOptionsTests.test_close_httpservers.<locals>.Server.closeN)rrrr¨r®rrrrr×srT)rr”Zclose_httpserversrWr¨)rršrZserverrrrÚtest_close_httpserversÕsz)ServerOptionsTests.test_close_httpserverscCs.| ¡}tƒ}||_| ¡| |jd¡dSr³)rr	r Zclose_loggerrWr¨©rršr rrrÚtest_close_loggeràs
z$ServerOptionsTests.test_close_loggercsT| ¡}g‰‡fdd„}||_ddddddd	œ}| |¡| tˆƒdddg¡dS)
Ncsˆ |¡dSr$rhr«r­rrÚclose_fdêsz<ServerOptionsTests.test_close_parent_pipes.<locals>.close_fdrrprrrürÿrì©ÚstdinrurtÚchild_stdinZchild_stdoutZchild_stderr©rr·Úclose_parent_pipesrWrP©rršr·Úpipesrr­rÚtest_close_parent_pipesçsÿ
z*ServerOptionsTests.test_close_parent_pipescs@| ¡}g‰‡fdd„}||_ddi}| |¡| ˆg¡dS)Ncsˆ |¡dSr$rhr«r­rrr·õszOServerOptionsTests.test_close_parent_pipes_ignores_fd_of_none.<locals>.close_fdr¹)rr·r¼rWr½rr­rÚ*test_close_parent_pipes_ignores_fd_of_noneòs
z=ServerOptionsTests.test_close_parent_pipes_ignores_fd_of_nonecsT| ¡}g‰‡fdd„}||_ddddddd	œ}| |¡| tˆƒdddg¡dS)
Ncsˆ |¡dSr$rhr«r­rrr·ÿsz;ServerOptionsTests.test_close_child_pipes.<locals>.close_fdrrprrrürÿrìr¸)rr·Zclose_child_pipesrWrPr½rr­rÚtest_close_child_pipesüsÿ
z)ServerOptionsTests.test_close_child_pipescsD| ¡}g‰‡fdd„}||_ddi}| |¡| tˆƒg¡dS)Ncsˆ |¡dSr$rhr«r­rrr·
szNServerOptionsTests.test_close_child_pipes_ignores_fd_of_none.<locals>.close_fdrºr»r½rr­rÚ)test_close_child_pipes_ignores_fd_of_nones
z<ServerOptionsTests.test_close_child_pipes_ignores_fd_of_nonecCsP| ¡}tƒ}tƒg|_||_| ¡| |jdjd¡| |jdd¡dS)NrTzsupervisord logreopen)rr	Zhandlersr Z
reopenlogsrWZreopenedÚdatarµrrrÚtest_reopenlogss
z"ServerOptionsTests.test_reopenlogscCsÆt ¡}z’| ¡}tƒ|_||_| 	¡| 
tj |¡¡t
|dƒ}t| ¡ ¡ƒ}W5QRX| |t ¡¡|jjd}| 
| d¡¡| 
|j¡W5zt |¡Wntk
r¾YnXXdS)NÚrrzsupervisord started with pid)r‚r’r`r™ršrr	r r	r¡r|ržr–r¾ÚintÚreadÚstriprWr\rÃr~r¢)rrÔršr„Úpidr€rrrÚtest_write_pidfile_oks"z(ServerOptionsTests.test_write_pidfile_okcCsNd}| ¡}tƒ|_||_| ¡|jjd}| | d¡¡| |j	¡dS)Nz/cannot/possibly/existrzcould not write pidfile)
rr	r r	r¡rÃr|r~r7r¢)rrÔršr€rrrÚtest_write_pidfile_fail.sz*ServerOptionsTests.test_write_pidfile_failcCsp| ¡}t ¡\}}t |d¡t |tdƒ¡| |¡| ttj|d¡| |¡| ttj|tdƒ¡dS)Nrrw)	rr`ÚpiperÇr¿rr·r>rš)rršZinnieZoutierrrÚ
test_close_fd8s

z ServerOptionsTests.test_close_fdr¯)Zside_effectcCs| ¡}| d¡dS)Nr)rr·r™rrrÚtest_close_fd_ignores_oserrorBsz0ServerOptionsTests.test_close_fd_ignores_oserrorcCs`| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}| t|ƒd¡|d}| |jd¡| |j	d¡| |j
d	¡| |jd	¡| |jd
¡| |j
d
¡| |jd¡| |jd¡| |jd¡| |jd¡| |jd¡| |jtj¡| |jd	¡| |jd¡| |jd
¡| |jd
dg¡| |jd	¡| |jddddœ¡dS)Na~        [program:foo]
        command = /bin/cat
        priority = 1
        autostart = false
        autorestart = false
        startsecs = 100
        startretries = 100
        user = root
        stdout_logfile = NONE
        stdout_logfile_backups = 1
        stdout_logfile_maxbytes = 100MB
        stdout_events_enabled = true
        stopsignal = KILL
        stopwaitsecs = 100
        killasgroup = true
        exitcodes = 1,4
        redirect_stderr = false
        environment = KEY1=val1,KEY2=val2,KEY3=%(process_num)s
        numprocs = 2
        process_name = %(group_name)s_%(program_name)s_%(process_num)02d
        rrvúprogram:foorxrrZ
bar_foo_00rõFédi@TrprÿZval1Zval2Ú0)ZKEY1ZKEY2ZKEY3)rrrrwrÚprocesses_from_sectionrWrXr0rrrrrrrÚstdout_capture_maxbytesr&Ústdout_events_enabledr r!r"r$r%r#rmÚredirect_stderrr©rršr©rwr…ÚpconfigsZpconfigrrrÚtest_processes_from_sectionGs8

ÿz.ServerOptionsTests.test_processes_from_sectioncCs\| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}dt ¡}| |dj	|¡dS)NzS        [program:foo]
        command = /bin/foo --host=%(host_node_name)s
        rrvrÏrxz/bin/foo --host=)
rrrrwrrÒrTrUrWr©rršr©rwr…r×ÚexpectedrrrÚ4test_processes_from_section_host_node_name_expansionys
zGServerOptionsTests.test_processes_from_section_host_node_name_expansioncCsà| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}| t|ƒd¡dD]Œ}| ||jd|¡| ||j	d	|¡| ||j
d
|¡| ||jd|¡| ||jd|¡| ||j
d
d|i¡qNdS)NaX        [program:foo]
        command = /bin/foo --num=%(process_num)d
        directory = /tmp/foo_%(process_num)d
        stderr_logfile = /tmp/foo_%(process_num)d_stderr
        stdout_logfile = /tmp/foo_%(process_num)d_stdout
        environment = NUM=%(process_num)d
        process_name = foo_%(process_num)d
        numprocs = 2
        rrvrÏrxrr)rrpzfoo_%dz/bin/foo --num=%dz/tmp/foo_%dz/tmp/foo_%d_stderrz/tmp/foo_%d_stdoutZNUMz%d)rrrrwrrÒrWrXr0rrÚstderr_logfilerr)rršr©rwr…r×ZnumrrrÚ1test_processes_from_section_process_num_expansion†s$

ÿÿzDServerOptionsTests.test_processes_from_section_process_num_expansioncCsZ| ¡}tdƒ}ddlm}|ƒ}ddi|_| |¡| |dd¡}| |djd¡dS)Nz^        [program:foo]
        command = /bin/cat
        directory = /tmp/%(ENV_FOO)s
        rrvÚENV_FOOrxrÏz/tmp/bar)	rrrrwÚ
expansionsrrÒrWr©rršr©rwr…r×rrrÚ-test_processes_from_section_expands_directory¡s

z@ServerOptionsTests.test_processes_from_section_expands_directorycCs^| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}dtjd}| |dj	|¡dS)NzO        [program:foo]
        command = /bin/foo --path='%(ENV_PATH)s'
        rrvrÏrxz/bin/foo --path='%s'ÚPATH)
rrrrwrrÒr`rarWrrÙrrrÚ;test_processes_from_section_environment_variables_expansion¯s
zNServerOptionsTests.test_processes_from_section_environment_variables_expansioncCsb| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}dtjd}| |dj	d|¡dS)Nzl        [program:foo]
        command = /bin/foo
        environment = PATH='/foo/bar:%(ENV_PATH)s'
        rrvrÏrxz/foo/bar:%srâ)
rrrrwrrÒr`rarWrrÙrrrÚ6test_processes_from_section_expands_env_in_environment¼s
zIServerOptionsTests.test_processes_from_section_expands_env_in_environmentcCsb| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}| |jdd¡| |djd¡dS)Nz~        [program:foo]
        command = /bin/foo
        redirect_stderr = true
        stderr_logfile = /tmp/logfile
        rrvrÏrxzyFor [program:foo], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored©	rrrrwrrÒrWr5rÜràrrrÚ9test_processes_from_section_redirect_stderr_with_filenameÊs
ÿzLServerOptionsTests.test_processes_from_section_redirect_stderr_with_filenamecCs^| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}| |jg¡| |djd¡dS)Nzv        [program:foo]
        command = /bin/foo
        redirect_stderr = true
        stderr_logfile = auto
        rrvrÏrxråràrrrÚ5test_processes_from_section_redirect_stderr_with_autoÛs
zHServerOptionsTests.test_processes_from_section_redirect_stderr_with_autoc	Cs0tdƒ}ddlm}ddlm}| ¡}t ¡ddddd	d
ddd
dddddddddddddddd
dddœ|_|ƒ}|j|_	| 
|¡t|ƒ|_| 
t|ƒ¡|jgd| |jd|j	¡| |jd|j	¡| |jd¡| |jd ¡| |jtj¡| |jd!¡| |jd"¡| |jd#¡| |jd$¡| |j|j	d%¡| |jd!¡|jj}| |jdd&t j!¡| |jdd'd(¡| |jdd)d*¡| |jdd+d¡| |jdd,d¡|j"d}| |j#d-¡| |j$d.¡| t%|j&ƒd/¡|j&d}| |j#d-¡| |j'd0¡| |j$d.¡| |j(d$¡| |j)|j*¡| |j+d1¡| |j,d ¡| |j-d¡| |j.d¡| |j/t0j1¡| |j2d1¡| |j3d!¡| |j4d!¡| |j5| 6d¡¡| |j7d2¡| |j8dg¡| |j9d¡| |j:d2¡| |j;t<d3d4¡dS)5Na^        [inet_http_server]
        port=*:%(ENV_HTSRV_PORT)s
        username=%(ENV_HTSRV_USER)s
        password=%(ENV_HTSRV_PASS)s

        [supervisord]
        logfile = %(ENV_HOME)s/supervisord.log
        logfile_maxbytes = %(ENV_SUPD_LOGFILE_MAXBYTES)s
        logfile_backups = %(ENV_SUPD_LOGFILE_BACKUPS)s
        loglevel = %(ENV_SUPD_LOGLEVEL)s
        nodaemon = %(ENV_SUPD_NODAEMON)s
        minfds = %(ENV_SUPD_MINFDS)s
        minprocs = %(ENV_SUPD_MINPROCS)s
        umask = %(ENV_SUPD_UMASK)s
        identifier = supervisor_%(ENV_USER)s
        nocleanup = %(ENV_SUPD_NOCLEANUP)s
        childlogdir = %(ENV_HOME)s
        strip_ansi = %(ENV_SUPD_STRIP_ANSI)s
        environment = FAKE_ENV_VAR=/some/path

        [program:cat1]
        command=%(ENV_CAT1_COMMAND)s --logdir=%(ENV_CAT1_COMMAND_LOGDIR)s
        priority=%(ENV_CAT1_PRIORITY)s
        autostart=%(ENV_CAT1_AUTOSTART)s
        user=%(ENV_CAT1_USER)s
        stdout_logfile=%(ENV_CAT1_STDOUT_LOGFILE)s
        stdout_logfile_maxbytes = %(ENV_CAT1_STDOUT_LOGFILE_MAXBYTES)s
        stdout_logfile_backups = %(ENV_CAT1_STDOUT_LOGFILE_BACKUPS)s
        stopsignal=%(ENV_CAT1_STOPSIGNAL)s
        stopwaitsecs=%(ENV_CAT1_STOPWAIT)s
        startsecs=%(ENV_CAT1_STARTWAIT)s
        startretries=%(ENV_CAT1_STARTRETRIES)s
        directory=%(ENV_CAT1_DIR)s
        umask=%(ENV_CAT1_UMASK)s
        rrèrvr¯r°r±r²Z51MBZ10ÚinfoZfalseZ1024Z200Z002Útruez/bin/customcatz
/path/to/logsÚ3Úrootr÷Z78KBrŸZKILLÚ5rø)r³r´ZENV_HTSRV_PORTZENV_HTSRV_USERZENV_HTSRV_PASSZENV_SUPD_LOGFILE_MAXBYTESZENV_SUPD_LOGFILE_BACKUPSZENV_SUPD_LOGLEVELZENV_SUPD_NODAEMONZENV_SUPD_MINFDSZENV_SUPD_MINPROCSZENV_SUPD_UMASKZENV_SUPD_NOCLEANUPZENV_SUPD_STRIP_ANSIZENV_CAT1_COMMANDZENV_CAT1_COMMAND_LOGDIRZENV_CAT1_PRIORITYZENV_CAT1_AUTOSTARTZ
ENV_CAT1_USERZENV_CAT1_STDOUT_LOGFILEZ ENV_CAT1_STDOUT_LOGFILE_MAXBYTESZENV_CAT1_STDOUT_LOGFILE_BACKUPSZENV_CAT1_STOPSIGNALZENV_CAT1_STOPWAITZENV_CAT1_STARTWAITZENV_CAT1_STARTRETRIESZENV_CAT1_DIRZENV_CAT1_UMASKr“z%(ENV_HOME)s/supervisord.logzsupervisor_%(ENV_USER)si0röFrúéÈTr³rïrðrˆrñiú#r—r˜rôrürpz%/bin/customcat --logdir=/path/to/logsrìrrròró)=rrrérrwrr‚rr¶rßrrr8r*r_rWrrrrrrÚINFOr
rrrrZ
strip_ansir#rr
rrrr0rrXrrrrrrrrrr r!r"r#r$r%r&r'r(rmrrrr)	rr©rérwršr…r:rôr.rrrr·ês°$ä

ÿÿ

ÿÿz;ServerOptionsTests.test_options_with_environment_expansionsc
CsÎ| ¡}tdƒ}t ¡}tj |d¡}t|dƒ}| |¡W5QRXz||_|jgdW5t	j
|ddX| 
|jtj |¡¡| 
|jtj |¡¡| 
|jtj |d¡¡| 
|jtj |d¡¡dS)	Nz¨        [supervisord]
        childlogdir=%(here)s
        directory=%(here)s
        logfile=%(here)s/supervisord.log
        pidfile=%(here)s/supervisord.pid
        rVr¸Tr¹r“rërî)rrr‚r½r`ržrŸr¾r¿rÀrÁr8r_rWrrrr	)rršr©rÂrÃr„rrrÚ-test_options_supervisord_section_expands_heregs,
ÿ
ÿÿÿz@ServerOptionsTests.test_options_supervisord_section_expands_herec	
Cs4| ¡}tdƒ}t ¡}tj |d¡}t|dƒ}| |¡W5QRXz||_|jgdW5t	j
|ddX|j
j}|jd}| |jd¡|jd}| |jtj |d	¡¡| |jtj |d
¡¡| |jdtj |d¡i¡| |jd
tj |d¡¡| |jtj |d¡¡| |jtj |d¡¡dS)Na-
        [supervisord]

        [program:cat]
        command=%(here)s/bin/cat
        directory=%(here)s/thedirectory
        environment=FOO=%(here)s/foo
        serverurl=unix://%(here)s/supervisord.sock
        stdout_logfile=%(here)s/stdout.log
        stderr_logfile=%(here)s/stderr.log
        rVr¸Tr¹r“rr1Úthedirectoryúbin/catÚFOOrwr»r¼ú
stdout.logú
stderr.log©rrr‚r½r`ržrŸr¾r¿rÀrÁr8r_r#rrrWr0rrrrr–rrÜ©	rršr©rÂrÃr„r:Úgroupr2rrrÚ)test_options_program_section_expands_here‚s@

ÿÿÿÿÿÿz<ServerOptionsTests.test_options_program_section_expands_herec	
Cs4| ¡}tdƒ}t ¡}tj |d¡}t|dƒ}| |¡W5QRXz||_|jgdW5t	j
|ddX|j
j}|jd}| |jd¡|jd}| |jtj |d	¡¡| |jtj |d
¡¡| |jdtj |d¡i¡| |jd
tj |d¡¡| |jtj |d¡¡| |jtj |d¡¡dS)NaP
        [supervisord]

        [eventlistener:memmon]
        events=TICK_60
        command=%(here)s/bin/memmon
        directory=%(here)s/thedirectory
        environment=FOO=%(here)s/foo
        serverurl=unix://%(here)s/supervisord.sock
        stdout_logfile=%(here)s/stdout.log
        stderr_logfile=%(here)s/stderr.log
        rVr¸Tr¹r“rZmemmonrðz
bin/memmonròrwr»r¼rórôrõrörrrÚ/test_options_eventlistener_section_expands_here©s@

ÿÿÿÿÿÿzBServerOptionsTests.test_options_eventlistener_section_expands_herec

Csâ| ¡}tdƒ}|d7}t ¡}tj |d¡}t|dƒ}| |¡W5QRXz"ddd	œ|_||_|j
gd
W5t	j
|ddX|jj}| |jtj |d¡¡|jd}|jd}d
tj |d¡t ¡f}	| |j|	¡dS)Nze
        [supervisord]
        logfile = %(here)s/%(ENV_LOGNAME)s.log

        [program:cat]
        z\command = %(here)s/bin/cat --foo=%(ENV_FOO)s --num=%(process_num)d --node=%(host_node_name)srVr¸Tr¹Zmainlogrx)ZENV_LOGNAMErÞr“zmainlog.logrz%s --foo=bar --num=0 --node=%srñ)rrr‚r½r`ržrŸr¾r¿rÀrÁr¶r8r_r#rrWrrrrTrUr)
rršr©rÂrÃr„r0Z	cat_groupZcat_0rÚrrrÚ(test_options_expands_combined_expansionsÑs2þÿ

þz;ServerOptionsTests.test_options_expands_combined_expansionsc
Cs¾t ¡}tj |d¡}tdƒ}t|dƒ}| |¡W5QRX| ¡}zb||_z|jdd| 
d¡Wn<tk
r¤}z| t|jd	ƒd
|¡W5d}~XYnXW5t	j
|ddXdS)NrVzq
        [supervisord]

        [program:cat]
        command = /bin/cat
        stopsignal = NOTASIGNAL
        r¸Tr¹FrqrÇrúQvalue 'NOTASIGNAL' is not a valid signal name in section 'program:cat' (file: %r))r‚r½r`ržrŸrr¾r¿rrÀrÁr8rcrËr%rWÚstrr”)rrÉrÃr©r„ršÚerrrÚ.test_options_error_handler_shows_main_filenameös$ÿÿzAServerOptionsTests.test_options_error_handler_shows_main_filenamec	
Cst ¡}tj |d¡}td|ƒ}t|dƒ}| |¡W5QRXtj |d¡}t |¡tj |d¡}tdƒ}t|dƒ}| |¡W5QRX| 	¡}zb||_z|j
d	d
| d¡Wn<tk
rö}z| t|jdƒd
|¡W5d}~XYnXW5t
j|ddXdS)NrVrJr¸rBz
included.confzY        [program:cat]
        command = /bin/cat
        stopsignal = NOTASIGNAL
        Tr¹FrqrÇrrû)r‚r½r`ržrŸrr¾r¿rFrrÀrÁr8rcrËr%rWrür”)	rrÉrÃr©r„rGZ
included_confršrýrrrÚ2test_options_error_handler_shows_included_filenames4û
ÿÿzEServerOptionsTests.test_options_error_handler_shows_included_filenamecCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)Nz)        [program:spaces are bad]
        rrvzprogram:spaces are bad©rrrrwrr>r%rÒ©rršr©rwr…rrrÚ3test_processes_from_section_bad_program_name_spaces4s

ÿzFServerOptionsTests.test_processes_from_section_bad_program_name_spacescCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)Nz)        [program:colons:are:bad]
        rrvzprogram:colons:are:badrrrrrÚ3test_processes_from_section_bad_program_name_colons?s

ÿzFServerOptionsTests.test_processes_from_section_bad_program_name_colonscCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)NzN        [program:foo]
        command = /bin/cat
        numprocs = 2
        rrvrÏrrrrrÚ5test_processes_from_section_no_procnum_in_processnameJs

ÿzHServerOptionsTests.test_processes_from_section_no_procnum_in_processnamec
Cs†| ¡}tdƒ}ddlm}|ƒ}| |¡z| |dd¡| d¡Wn8tk
r€}z| |j	d 
d¡¡W5d}~XYnXdS)Nz        [program:foo]
        rrvrÏrÇz6program section program:foo does not specify a command)rrrrwrrÒrËr%r|r”r~)rršr©rwr…rÍrrrÚ&test_processes_from_section_no_commandWs
ÿz9ServerOptionsTests.test_processes_from_section_no_commandcCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)Nz^        [program:foo]
        command = /bin/cat
        process_name = %(not_there)s
        rrvrÏrrrrrÚ?test_processes_from_section_missing_replacement_in_process_namefs

ÿzRServerOptionsTests.test_processes_from_section_missing_replacement_in_process_namecCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)Nz`        [program:foo]
        command = /bin/cat
        process_name = %(program_name)
        rrvrÏrrrrrÚ:test_processes_from_section_bad_expression_in_process_namess

ÿzMServerOptionsTests.test_processes_from_section_bad_expression_in_process_namecCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)Nz_        [program:foo]
        command = /bin/cat
        process_name = colons:are:bad
        rrvrÏrrrrrÚ5test_processes_from_section_bad_chars_in_process_name€s

ÿzHServerOptionsTests.test_processes_from_section_bad_chars_in_process_namecCsr| ¡}tdƒ}ddlm}|ƒ}| |¡| |dd¡}| t|ƒd¡|d}| |jd¡| |j	d¡dS)Nz|        [program:foo]
        command = /bin/cat
        process_name = %(program_name)s
        stopasgroup = true
        rrvrÏrxrpT)
rrrrwrrÒrWrXr$r%rÖrrrÚ;test_processes_from_section_stopasgroup_implies_killasgroups
zNServerOptionsTests.test_processes_from_section_stopasgroup_implies_killasgroupcCsD| ¡}tdƒ}ddlm}|ƒ}| |¡| t|j|dd¡dS)Nz˜        [program:foo]
        command = /bin/cat
        process_name = %(program_name)s
        stopasgroup = true
        killasgroup = false
        rrvrÏrrrrrÚ>test_processes_from_section_killasgroup_mismatch_w_stopasgroupžs

ÿzQServerOptionsTests.test_processes_from_section_killasgroup_mismatch_w_stopasgroupc
Cs‚| ¡}tdƒ}ddlm}|ƒ}| |¡z| |dd¡Wn4tk
rr}z| dt|ƒk¡W5d}~XYnX| 	d¡dS)Nzh        [program:foo]
        command = /bin/cat
        environment = KEY1=val1,KEY2=val2,KEY3
        rrvrÏz^Unexpected end of key/value pairs in value 'KEY1=val1,KEY2=val2,KEY3' in section 'program:foo'z9instance.processes_from_section should raise a ValueError)
rrrrwrrÒr%r|rürË)rršr©rwr…rýrrrÚ=test_processes_from_section_unexpected_end_of_key_value_pairs­s
þÿzPServerOptionsTests.test_processes_from_section_unexpected_end_of_key_value_pairscCs´| ¡}tdƒ}tjddŽ}zB| |¡| ¡ddlm}|ƒ}| |j	¡| 
|dd¡Wn:tk
rš}z| |j
dd|j	¡W5d}~XYnX| d¡W5QRXdS)	Nz2        [program:foo]
        ;no command
        r:r;rrvrÏzZprogram section program:foo does not specify a command in section 'program:foo' (file: %r)rÇ)rrr‚rƒr¿r=rrwrÇr0rÒr%rWr”rË)rršr©r„rwr…rýrrrÚ=test_processes_from_section_shows_conf_filename_on_valueerrorÂs"
ÿÿzPServerOptionsTests.test_processes_from_section_shows_conf_filename_on_valueerrorcCsj| ¡}tdƒ}ddlm}|ƒ}tƒ|_| |¡| |dd¡| |j	dd¡| |j	dd¡dS)Nz½        [program:foo]
        command = /bin/foo
        stdout_logfile = AUTO
        stdout_logfile_maxbytes = 0
        stderr_logfile = AUTO
        stderr_logfile_maxbytes = 0
        rrvrÏz‰For [program:foo], AUTO logging used for stdout_logfile without rollover, set maxbytes > 0 to avoid filling up filesystem unintentionallyrpz‰For [program:foo], AUTO logging used for stderr_logfile without rollover, set maxbytes > 0 to avoid filling up filesystem unintentionally)
rrrrwr	r rrÒrWr5rrrrÚ4test_processes_from_section_autolog_without_rollover×s
ÿÿzGServerOptionsTests.test_processes_from_section_autolog_without_rollovercCs€tdƒ}ddlm}|ƒ}| |¡| ¡}| |¡}| t|ƒd¡|d}| |jd¡| |j	d¡| t|j
ƒd¡dS)Nzœ        [program:many]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 2
        priority = 1
        rrvrpÚmanyrr©rrrwrrÚprocess_groups_from_parserrWrXr0rr©rr©rwr…ršÚgconfigsÚgconfigrrrÚ+test_homogeneous_process_groups_from_parserïs

z>ServerOptionsTests.test_homogeneous_process_groups_from_parsercCstdƒ}ddlm}ddlm}|ƒ}| |¡| ¡}| |¡}| t	|ƒd¡|d}| |j
d¡| |j|¡| t	|jƒd¡|d}| |j
d	¡| |j
d
¡| |j|¡| t	|jƒd¡|d}| |j
d¡| |j
d¡| |j|¡| t	|jƒd¡dS)Na        [eventlistener:dog]
        events=PROCESS_COMMUNICATION
        process_name = %(program_name)s_%(process_num)s
        command = /bin/dog
        numprocs = 2
        priority = 1

        [eventlistener:cat]
        events=PROCESS_COMMUNICATION
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 3

        [eventlistener:biz]
        events=PROCESS_COMMUNICATION
        process_name = %(program_name)s_%(process_num)s
        command = /bin/biz
        numprocs = 2
        rrv©Údefault_handlerrüZbizrrrpr1r}Údog)rrrwÚsupervisor.dispatchersrrrrrWrXr0Úresult_handlerrr)rr©rwrr…ršrÚgconfig1rrrÚ%test_event_listener_pools_from_parser	s,

z8ServerOptionsTests.test_event_listener_pools_from_parsercCsftdƒ}ddlm}ddlm}| ¡}t ¡ddddd	d
œ|_|ƒ}|j|_	| 
|¡| |¡}| t
|ƒd¡|d}| |jd¡| |jd
¡| |j|¡| t
|jƒd¡|d}| |jd¡| |jd¡| |j|¡| t
|jƒd¡|jd}	| |	jd¡| |	jd¡| |	jd¡|jd}
| |
jd¡| |
jd¡| |
jd¡dS)Na·        [eventlistener:dog]
        events=PROCESS_COMMUNICATION
        process_name = %(ENV_EL1_PROCNAME)s_%(program_name)s_%(process_num)s
        command = %(ENV_EL1_COMMAND)s
        numprocs = %(ENV_EL1_NUMPROCS)s
        priority = %(ENV_EL1_PRIORITY)s

        [eventlistener:cat]
        events=PROCESS_COMMUNICATION
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 3

        rrvrr¯Zmyeventlistenerz/bin/dogrŸÚ1)r³r´ZENV_EL1_PROCNAMEZENV_EL1_COMMANDZENV_EL1_NUMPROCSZENV_EL1_PRIORITYrrr1r}rürprZmyeventlistener_dog_0Zmyeventlistener_dog_1)rrrwrrrr‚rr¶rßrrrWrXr0rrrr)rr©rwrršr…rZgconfig0rZdog0Zdog1rrrÚAtest_event_listener_pools_from_parser_with_environment_expansions0	sDû



zTServerOptionsTests.test_event_listener_pools_from_parser_with_environment_expansionsc
Cs~tdƒ}ddlm}|ƒ}| |¡| ¡}z| |¡| d¡Wn4tk
rx}z| |j	dd¡W5d}~XYnXdS)Nzl        [eventlistener:dog]
        events=EVENT
        command = /bin/dog
        buffer_size = 0
        rrvrÇz8[eventlistener:dog] section sets invalid buffer_size (0)©
rrrwrrrrËr%rWr”©rr©rwr…ršrÍrrrÚ3test_event_listener_pool_disallows_buffer_size_zerod	s

zFServerOptionsTests.test_event_listener_pool_disallows_buffer_size_zeroc
Cs~tdƒ}ddlm}|ƒ}| |¡| ¡}z| |¡| d¡Wn4tk
rx}z| |j	dd¡W5d}~XYnXdS)Nzƒ        [eventlistener:dog]
        events=PROCESS_COMMUNICATION
        command = /bin/dog
        redirect_stderr = True
        rrvrÇz‡[eventlistener:dog] section sets redirect_stderr=true but this is not allowed because it will interfere with the eventlistener protocolrrrrrÚ2test_event_listener_pool_disallows_redirect_stderrv	s

zEServerOptionsTests.test_event_listener_pool_disallows_redirect_stderrcCsltdƒ}ddlm}ddlm}|ƒ}| |¡| ¡}| |¡}| t	|ƒd¡|d}| |j
|¡dS)Nz¡        [eventlistener:dog]
        events=PROCESS_COMMUNICATION
        command = /bin/dog
        result_handler = supervisor.tests.base:dummy_handler
        rrv)Ú
dummy_handlerrp)rrrwÚsupervisor.tests.baser"rrrrWrXr)rr©rwr"r…ršrrrrrÚ2test_event_listener_pool_with_event_result_handler‰	s

zEServerOptionsTests.test_event_listener_pool_with_event_result_handlerc
Cs~tdƒ}ddlm}|ƒ}| |¡| ¡}z| |¡| d¡Wn4tk
rx}z| |j	dd¡W5d}~XYnXdS)NzŸ        [eventlistener:cat]
        events=PROCESS_COMMUNICATION
        command = /bin/cat
        result_handler = supervisor.tests.base:nonexistent
        rrvrÇzOsupervisor.tests.base:nonexistent cannot be resolved within [eventlistener:cat]rrrrrÚ4test_event_listener_pool_result_handler_unimportable›	s

ÿzGServerOptionsTests.test_event_listener_pool_result_handler_unimportablecCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz¡        [eventlistener:dog]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/dog
        numprocs = 2
        priority = 1
        rrv©rrrwrrr>r%r©rr©rwr…ršrrrÚ%test_event_listener_pool_noeventsline®	s
z8ServerOptionsTests.test_event_listener_pool_noeventslinecCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nzã        [eventlistener:dog]
        events=PROCESS_COMMUNICATION,THIS_EVENT_TYPE_DOESNT_EXIST
        process_name = %(program_name)s_%(process_num)s
        command = /bin/dog
        numprocs = 2
        priority = 1
        rrvr&r'rrrÚ*test_event_listener_pool_unknown_eventtype¼	s
z=ServerOptionsTests.test_event_listener_pool_unknown_eventtypecCs`ddlm}ddlm}tdƒ}ddlm}|ƒ}| |¡| ¡}tƒ}ddtj	tj
f|_tƒ}ddtj
f|_td|ƒtd|ƒtd|ƒd	d
„ƒƒƒ}	|	||ƒ}
tj	tj
f}| 
t|
ƒd¡|
d}| 
|j|¡| 
|jd¡| 
|jd
¡| 
|jjd¡| 
||j ¡¡| 
d|j ¡¡| 
d|j ¡¡| 
t|jƒd¡|jd}
| 
|
j|¡|
d
}| 
|jd¡| 
|jd¡| 
|jjd¡| 
||j ¡¡| 
d|j ¡¡| 
t|jƒd¡|
d}| 
|jd¡| 
|jjd¡| 
t|jƒd
¡|
d}| 
|jd¡| 
|jjd¡| 
d|j ¡¡| 
d|j ¡¡| 
t|jƒd
¡dS)Nr©ÚFastCGIGroupConfig©ÚFastCGIProcessConfigaÏ        [fcgi-program:foo]
        socket = unix:///tmp/%(program_name)s.sock
        socket_owner = testuser:testgroup
        socket_mode = 0666
        socket_backlog = 32676
        process_name = %(program_name)s_%(process_num)s
        command = /bin/foo
        numprocs = 2
        priority = 1

        [fcgi-program:bar]
        socket = unix:///tmp/%(program_name)s.sock
        process_name = %(program_name)s_%(process_num)s
        command = /bin/bar
        user = testuser
        numprocs = 3

        [fcgi-program:flub]
        socket = unix:///tmp/%(program_name)s.sock
        command = /bin/flub

        [fcgi-program:cub]
        socket = tcp://localhost:6000
        command = /bin/cub
        rvúpwd.getpwuidúpwd.getpwnamúgrp.getgrnamcSs
| |¡Sr$©r©ršr…rrrÚget_process_groupsô	szMServerOptionsTests.test_fcgi_programs_from_parser.<locals>.get_process_groupsrÿrwrpzunix:///tmp/foo.socké¶é¤rrrxéçzunix:///tmp/bar.sockr{rüZcubztcp://localhost:6000Zflubzunix:///tmp/flub.sock)rr+r-rrwrrrrrr-Úreturn_valuerrWrXÚ	__class__r0rÚ
socket_configÚurlÚ	get_ownerÚget_modeÚget_backlogr)rr+r-r©rwr…ršÚpwd_mockÚgrp_mockr3rÚ	exp_ownerÚ	gconf_fooÚpconfig_fooZ	gconf_barZ	gconf_cubZ
gconf_flubrrrÚtest_fcgi_programs_from_parserË	sl


ÿ

ÿ
ÿ
ÿz1ServerOptionsTests.test_fcgi_programs_from_parsercCs”ddlm}ddlm}tdƒ}ddlm}| ¡}dddd	d
ddd
dddœ
|_|ƒ}|j|_| |¡t	ƒ}ddt
jt
jf|_
t	ƒ}ddt
jf|_
td|ƒtd|ƒtd|ƒdd„ƒƒƒ}	|	||ƒ}
t
jt
jf}| t|
ƒd¡|
d}| |j|¡| |jd¡| |jd¡| |jjd¡| ||j ¡¡| d|j ¡¡| d|j ¡¡| t|jƒd¡|jd}
| |
j|¡| |
jd¡dS)Nrr*r,aà        [fcgi-program:foo]
        socket = unix:///tmp/%(program_name)s%(ENV_FOO_SOCKET_EXT)s
        socket_owner = %(ENV_FOO_SOCKET_USER)s:testgroup
        socket_mode = %(ENV_FOO_SOCKET_MODE)s
        socket_backlog = %(ENV_FOO_SOCKET_BACKLOG)s
        process_name = %(ENV_FOO_PROCESS_PREFIX)s_%(program_name)s_%(process_num)s
        command = /bin/foo --arg1=%(ENV_FOO_COMMAND_ARG1)s
        numprocs = %(ENV_FOO_NUMPROCS)s
        priority = %(ENV_FOO_PRIORITY)s
        rvrør°z.usockZtestuserZ0666Z32676zfcgi-rxrŸr)
r³rµZENV_FOO_SOCKET_EXTZENV_FOO_SOCKET_USERZENV_FOO_SOCKET_MODEZENV_FOO_SOCKET_BACKLOGZENV_FOO_PROCESS_PREFIXZENV_FOO_COMMAND_ARG1ZENV_FOO_NUMPROCSZENV_FOO_PRIORITYr.r/r0cSs
| |¡Sr$r1r2rrrr3J
sziServerOptionsTests.test_fcgi_programs_from_parser_with_environment_expansions.<locals>.get_process_groupsrprwzunix:///tmp/foo.usockr4r5rrz/bin/foo --arg1=bar)rr+r-rrwrr¶rßrrrrr-r7rrWrXr8r0rr9r:r;r<r=rr)rr+r-r©rwršr…r>r?r3rr@rArBrrrÚ:test_fcgi_programs_from_parser_with_environment_expansions$
sX÷


ÿ
zMServerOptionsTests.test_fcgi_programs_from_parser_with_environment_expansionscCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz         [fcgi-program:foo]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/foo
        numprocs = 2
        priority = 1
        rrvr&r'rrrÚtest_fcgi_program_no_socketd
s
z.ServerOptionsTests.test_fcgi_program_no_socketcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz»        [fcgi-program:foo]
        socket=junk://blah
        process_name = %(program_name)s_%(process_num)s
        command = /bin/foo
        numprocs = 2
        priority = 1
        rrvr&r'rrrÚ)test_fcgi_program_unknown_socket_protocolr
s
z<ServerOptionsTests.test_fcgi_program_unknown_socket_protocolcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)NzÄ        [fcgi-program:foo]
        socket=unix://relative/path
        process_name = %(program_name)s_%(process_num)s
        command = /bin/foo
        numprocs = 2
        priority = 1
        rrvr&r'rrrÚ$test_fcgi_program_rel_unix_sock_path
s
z7ServerOptionsTests.test_fcgi_program_rel_unix_sock_pathcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)NzÁ        [fcgi-program:foo]
        socket=tcp://missingport
        process_name = %(program_name)s_%(process_num)s
        command = /bin/foo
        numprocs = 2
        priority = 1
        rrvr&r'rrrÚ%test_fcgi_program_bad_tcp_sock_format
s
z8ServerOptionsTests.test_fcgi_program_bad_tcp_sock_formatcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)NzÐ        [fcgi-program:foo]
        socket=unix:///tmp/%(process_num)s.sock
        process_name = %(program_name)s_%(process_num)s
        command = /bin/foo
        numprocs = 2
        priority = 1
        rrvr&r'rrrÚ(test_fcgi_program_bad_expansion_proc_numŸ
s
z;ServerOptionsTests.test_fcgi_program_bad_expansion_proc_numcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz…        [fcgi-program:foo]
        socket=tcp://localhost:8000
        socket_owner=nobody:nobody
        command = /bin/foo
        rrvr&r'rrrÚ*test_fcgi_program_socket_owner_set_for_tcp®
s
z=ServerOptionsTests.test_fcgi_program_socket_owner_set_for_tcpcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz        [fcgi-program:foo]
        socket = tcp://localhost:8000
        socket_mode = 0777
        command = /bin/foo
        rrvr&r'rrrÚ)test_fcgi_program_socket_mode_set_for_tcp»
s
z<ServerOptionsTests.test_fcgi_program_socket_mode_set_for_tcpcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz         [fcgi-program:foo]
        socket = unix:///tmp/foo.sock
        socket_owner = sometotaljunkuserthatshouldnobethere
        command = /bin/foo
        rrvr&r'rrrÚ"test_fcgi_program_bad_socket_ownerÈ
s
z5ServerOptionsTests.test_fcgi_program_bad_socket_ownercCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz        [fcgi-program:foo]
        socket = unix:///tmp/foo.sock
        socket_mode = junk
        command = /bin/foo
        rrvr&r'rrrÚ!test_fcgi_program_bad_socket_modeÕ
s
z4ServerOptionsTests.test_fcgi_program_bad_socket_modecCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz€        [fcgi-program:foo]
        socket = unix:///tmp/foo.sock
        socket_backlog = -1
        command = /bin/foo
        rrvr&r'rrrÚ$test_fcgi_program_bad_socket_backlogâ
s
z7ServerOptionsTests.test_fcgi_program_bad_socket_backlogcCs€tdƒ}ddlm}|ƒ}| |¡| ¡}| |¡}| t|ƒd¡|d}| |jd¡| |j	d¡| t|j
ƒd¡dS)Nzµ        [program:one]
        command = /bin/cat

        [program:two]
        command = /bin/cat

        [group:thegroup]
        programs = one,two
        priority = 5
        rrvrpÚthegrouprìrrrrrrrÚ-test_heterogeneous_process_groups_from_parserï
s

z@ServerOptionsTests.test_heterogeneous_process_groups_from_parsercCs¶tdƒ}ddlm}|ƒ}| |¡| ¡}| |¡}| t|ƒd¡|d}| |jd¡| |j	d¡| t|j
ƒd¡|d}| |jd¡| |j	d¡| t|j
ƒd¡dS)	NaJ        [program:one]
        command = /bin/cat

        [program:two]
        command = /bin/cat

        [program:many]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 2
        priority = 1

        [group:thegroup]
        programs = one,two
        priority = 5
        rrvrrrrprOrìr)rr©rwr…ršrZ
manyconfigrrrrÚ&test_mixed_process_groups_from_parser1s

z9ServerOptionsTests.test_mixed_process_groups_from_parser1cCs€tdƒ}ddlm}|ƒ}| |¡| ¡}| |¡}| t|ƒd¡|d}| |jd¡| |j	d¡| t|j
ƒd¡dS)NaP        [program:one]
        command = /bin/cat

        [program:two]
        command = /bin/cat

        [program:many]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 2
        priority = 1

        [group:thegroup]
        programs = one,two, many
        priority = 5
        rrvrprOrìrÿrrrrrÚ&test_mixed_process_groups_from_parser2)s

z9ServerOptionsTests.test_mixed_process_groups_from_parser2cCs€tdƒ}ddlm}|ƒ}| |¡| ¡}| |¡}| t|ƒd¡|d}| |jd¡| |j	d¡| t|j
ƒd¡dS)Naó        [program:one]
        command = /bin/cat

        [fcgi-program:two]
        command = /bin/cat

        [program:many]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 2
        priority = 1

        [fcgi-program:more]
        process_name = %(program_name)s_%(process_num)s
        command = /bin/cat
        numprocs = 2
        priority = 1

        [group:thegroup]
        programs = one,two,many,more
        priority = 5
        rrvrprOrìrTrrrrrÚ&test_mixed_process_groups_from_parser3Gs

z9ServerOptionsTests.test_mixed_process_groups_from_parser3cCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nz˜        [program:one]
        command = /bin/cat

        [fcgi-program:one]
        command = /bin/cat

        [group:thegroup]
        programs = onerrvr&r'rrrÚ-test_ambiguous_process_in_heterogeneous_groupks	

ÿz@ServerOptionsTests.test_ambiguous_process_in_heterogeneous_groupcCs@tdƒ}ddlm}|ƒ}| |¡| ¡}| t|j|¡dS)Nzj        [program:one]
        command = /bin/cat

        [group:foo]
        programs = notthere
        rrvr&r'rrrÚ+test_unknown_program_in_heterogeneous_group|s

ÿz>ServerOptionsTests.test_unknown_program_in_heterogeneous_groupcCs–tdtƒ}ddlm}|ƒ}| |¡| ¡}| |dd¡}| t|ƒd¡|d}| |dd¡| |dt	j
t¡| |dd	d
dœ¡dS)Nzv        [rpcinterface:dummy]
        supervisor.rpcinterface_factory = %s
        foo = bar
        baz = qux
        rrvúsupervisor.rpcinterface_factoryú
rpcinterface:rpÚdummyrrrxZqux)rwry)rrrrwrrÚget_pluginsrWrXÚsysÚmodules)rr©rwr…ršÚ	factoriesÚfactoryrrrÚtest_rpcinterfaces_from_parser‹s û
þz1ServerOptionsTests.test_rpcinterfaces_from_parsercCsœtdƒ}ddlm}| ¡}|ƒ}tddœ|_| |¡| |dd¡}| t	|ƒd¡|d}| |dd	¡| |dt
jt¡| |d
ddi¡dS)Nzq        [rpcinterface:dummy]
        supervisor.rpcinterface_factory = %(factory)s
        foo = %(pet)s
        rrvr1)r]ÚpetrVrWrprXrrrw)rrrwrrrßrrYrWrXrZr[)rr©rwršr…r\r]rrrÚ1test_rpcinterfaces_from_parser_factory_expansionsŸs
þzDServerOptionsTests.test_rpcinterfaces_from_parser_factory_expansionsc
Cs‚tdƒ}ddlm}|ƒ}| |¡| ¡}z| |dd¡| d¡Wn4tk
r|}z| |j	dd¡W5d}~XYnXdS)Nz]        [rpcinterface:dummy]
        # note: no supervisor.rpcinterface_factory here
        rrvrVrWrÇzOsection [rpcinterface:dummy] does not specify a supervisor.rpcinterface_factory©
rrrwrrrYrËr%rWr”rrrrÚ.test_rpcinterfaces_from_parser_factory_missing³s
þzAServerOptionsTests.test_rpcinterfaces_from_parser_factory_missingc
Cs‚tdƒ}ddlm}|ƒ}| |¡| ¡}z| |dd¡| d¡Wn4tk
r|}z| |j	dd¡W5d}~XYnXdS)Nz[        [rpcinterface:dummy]
        supervisor.rpcinterface_factory = nonexistent
        rrvrVrWrÇz:nonexistent cannot be resolved within [rpcinterface:dummy]rarrrrÚ5test_rpcinterfaces_from_parser_factory_not_importableÅs
þzHServerOptionsTests.test_rpcinterfaces_from_parser_factory_not_importablec	
Csºt ¡}zœ| ¡}||_d}||_| d|d¡}|d}|d}t|dƒ}t|dƒ}| 	¡| 
tj 
|¡¡| 
tj 
|¡¡| 
tj 
|¡¡| ¡| ¡W5tj|ddXdS)	NTr¹rrwruz.1z.2r¸)r‚r½rÀrÁrrrZget_autochildlog_namer¾Úclear_autochildlogdirr7r`ržr–r®)	rZdnršZsidZlogfnÚfirstÚsecondÚf1Úf2rrrÚtest_clear_autochildlogdir×s$

z-ServerOptionsTests.test_clear_autochildlogdircCs4| ¡}d|_tƒ|_| ¡| |jjdg¡dS)Nz!/tmp/this/cant/possibly/existjjjjzCould not clear childlog dir)rrr	r rdrWrÃr™rrrÚ*test_clear_autochildlogdir_listdir_oserrorìs
z=ServerOptionsTests.test_clear_autochildlogdir_listdir_oserrorc	Cs†t ¡}| ¡}||_|j}tj |d|¡}t|dƒ}| 	d¡W5QRXdd„}||_
tƒ|_| 
¡| |jjd|g¡dS)Nzcat-stdout---%s-ayWAp9.logr¸ÚlogcWsttjƒ‚dSr$)ršrÒZENOENTr“rrrÚ
raise_oserrorûszSServerOptionsTests.test_clear_autochildlogdir_unlink_oserror.<locals>.raise_oserrorzFailed to clean up '%s')r‚r½rrrr`ržrŸr¾r¿Úremover	r rdrWrÃ)rrÉršZidentrQr„rlrrrÚ)test_clear_autochildlogdir_unlink_oserrorós
ÿz<ServerOptionsTests.test_clear_autochildlogdir_unlink_oserrorcshtƒ}| ¡}dd„}||_g‰‡fdd„}||_| |¡| tˆƒd¡d}| ˆd |¡¡dS)NcSst tj¡‚dSr$)rrerÒZ
EADDRINUSE©rrrrÚraise_eaddrinuseszhServerOptionsTests.test_openhttpservers_reports_friendly_usage_when_eaddrinuse.<locals>.raise_eaddrinusecsˆ |¡dSr$rhrmrorrrpszdServerOptionsTests.test_openhttpservers_reports_friendly_usage_when_eaddrinuse.<locals>.record_usagerpz$Another program is already listeningr)	rrÚmake_http_serversrsÚopenhttpserversrWrXr|r~)rrršrprprÚrrorÚ;test_openhttpservers_reports_friendly_usage_when_eaddrinuses
zNServerOptionsTests.test_openhttpservers_reports_friendly_usage_when_eaddrinusecsjtƒ}| ¡}dd„}||_g‰‡fdd„}||_| |¡| tˆƒd¡dtj}| ˆd|¡dS)NcSst tj¡‚dSr$)rrerÒÚEPERMrorrrrqszbServerOptionsTests.test_openhttpservers_reports_socket_error_with_errno.<locals>.make_http_serverscsˆ |¡dSr$rhrmrorrrpsz]ServerOptionsTests.test_openhttpservers_reports_socket_error_with_errno.<locals>.record_usagerpzBCannot open an HTTP server: socket.error reported errno.EPERM (%d)r)	rrrqrsrrrWrXrÒrt©rrršrqrprÚrrorÚ4test_openhttpservers_reports_socket_error_with_errnos
ÿzGServerOptionsTests.test_openhttpservers_reports_socket_error_with_errnocsdtƒ}| ¡}dd„}||_g‰‡fdd„}||_| |¡| tˆƒd¡d}| ˆd|¡dS)NcSst d¡‚dS)Nzuh oh)rrerorrrrq,sz^ServerOptionsTests.test_openhttpservers_reports_other_socket_errors.<locals>.make_http_serverscsˆ |¡dSr$rhrmrorrrp1szYServerOptionsTests.test_openhttpservers_reports_other_socket_errors.<locals>.record_usagerpz7Cannot open an HTTP server: socket.error reported uh ohr©rrrqrsrrrWrXrurrorÚ0test_openhttpservers_reports_other_socket_errors(s
zCServerOptionsTests.test_openhttpservers_reports_other_socket_errorscsdtƒ}| ¡}dd„}||_g‰‡fdd„}||_| |¡| tˆƒd¡d}| ˆd|¡dS)NcSstdƒ‚dS)Núnot prefixed with help)r%rorrrrq?szWServerOptionsTests.test_openhttpservers_reports_value_errors.<locals>.make_http_serverscsˆ |¡dSr$rhrmrorrrpDszRServerOptionsTests.test_openhttpservers_reports_value_errors.<locals>.record_usagerpryrrwrurrorÚ)test_openhttpservers_reports_value_errors;s
z<ServerOptionsTests.test_openhttpservers_reports_value_errorscCs0tƒ}| ¡}dd„}||_| t|j|¡dS)NcSst‚dSr$)Ú
OverflowErrorrorrrrqQszgServerOptionsTests.test_openhttpservers_does_not_catch_other_exception_types.<locals>.make_http_servers)rrrqr>r{rr)rrršrqrrrÚ9test_openhttpservers_does_not_catch_other_exception_typesMsÿzLServerOptionsTests.test_openhttpservers_does_not_catch_other_exception_typescCs"| ¡}| d¡}| |d¡dS)NzNo user specified to setuid to!©rÚdrop_privilegesrW©rršr€rrrÚtest_drop_privileges_user_noneZs
z1ServerOptionsTests.test_drop_privileges_user_noner.rwNéé")r7z	os.getuidcCs&| ¡}| t ¡¡}| |d¡dSr$)rr~r`ÚgetuidrWrrrrÚ&test_drop_privileges_nonroot_same_user_sz9ServerOptionsTests.test_drop_privileges_nonroot_same_useré7cCs"| ¡}| d¡}| |d¡dS)Nr\z$Can't drop privilege as nonroot userr}rrrrÚ+test_drop_privileges_nonroot_different_userfs
z>ServerOptionsTests.test_drop_privileges_nonroot_different_usercCs>| ¡}dd„|_tƒ|_| ¡|jj ¡|jj ¡dS)NcSsdSr$rrrrrrnorozYServerOptionsTests.test_daemonize_notifies_poller_before_and_after_fork.<locals>.<lambda>)rZ
_daemonizerr§Z	daemonizeZbefore_daemonizeZassert_called_once_withZafter_daemonizer™rrrÚ4test_daemonize_notifies_poller_before_and_after_forkms
zGServerOptionsTests.test_daemonize_notifies_poller_before_and_after_fork)‡rrrrrrçr¥rªr«r®r3r8r9rÎrÚr>rÝr@rArIrRrSrVrXr[r]rardrjrlrtrur‚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ÍrrršrÎrØrÛrÝrárãrärærçr·rïrørùrúrþrÿrrrrrrrr	r
rrr
rrrr r!r$r%r(r)rCrDrErFrGrHrIrJrKrLrMrNrPrQrRrSrTrUr^r`rbrcrirjrnrsrvrxrzr|r€r„r†r‡rrrrrá¹s{
D	
	##
	


	


2

}'(%$



.4Y@




#$
  rác@s\eZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
dd„Zdd„ZdS)ÚProcessConfigTestscCsddlm}|S)Nr)Ú
ProcessConfig)rr‰)rr‰rrrrvsz"ProcessConfigTests._getTargetClasscOs@i}dD]}|||<qdD]}d||<q| |¡| ¡||ŽS©N)r0rrrrrrrrrrrÓrÔZ
stdout_syslogrÜZstderr_capture_maxbytesZstderr_events_enabledZ
stderr_syslogr r#r$r%rmrÕr)r(r&Zstderr_logfile_backupsZstderr_logfile_maxbytesrö©r'r©rÚargÚkwÚdefaultsr0rrrrzs



zProcessConfigTests._makeOnecCs,tƒ}|j|dd}| | ¡| ¡¡dS)N©r©r
rrWÚget_path©rr:ršrrrÚ.test_get_path_env_is_None_delegates_to_optionsszAProcessConfigTests.test_get_path_env_is_None_delegates_to_optionscCs0tƒ}|j|ddid}| | ¡| ¡¡dS)Nròrrr‘r“rrrÚ8test_get_path_env_dict_with_no_PATH_delegates_to_options’szKProcessConfigTests.test_get_path_env_dict_with_no_PATH_delegates_to_optionscCsFtƒ}|j|ddid}| | ¡| ¡¡| | ¡dddg¡dS)Nrâz/a:/b:/crz/az/bz/c)r
rZassertNotEqualr’rWr“rrrÚ(test_get_path_env_dict_with_PATH_uses_it—sz;ProcessConfigTests.test_get_path_env_dict_with_PATH_uses_itcCsTtƒ}| |¡}ddlm}||_||_| ¡| |j|j¡| |j|j¡dS)Nr)r*)	r
rr7r*rrÜZcreate_autochildlogsrWZ
tempfile_name)rr:ršr*rrrÚtest_create_autochildlogss
z,ProcessConfigTests.test_create_autochildlogscCsDtƒ}| |¡}| ¡}ddlm}| |j|¡| |jd¡dS)Nr©Ú
Subprocess©r
rÚmake_processÚsupervisor.processr™rWr8r÷©rr:ršÚprocessr™rrrÚtest_make_process§s
z$ProcessConfigTests.test_make_processcCsFtƒ}| |¡}| d¡}ddlm}| |j|¡| |jd¡dS)NrIrr˜ršrrrrÚtest_make_process_with_group¯s

z/ProcessConfigTests.test_make_process_with_groupc

Csètƒ}| |¡}t ¡Æ}t ¡²}|j|_|j|_d|_t|ƒ}| 	|¡\}}| 
|djd¡ddlm
}| 
|dj|¡| 
|dd¡| 
|djd¡ddlm}	| 
|dj|	¡| 
|dd¡W5QRXW5QRXdS)	NFrìrur©ÚProcessCommunicationStdoutEventrªrt©ÚProcessCommunicationStderrEvent)r
rr‚rƒr0rrÜrÕr
Úmake_dispatchersrWÚchannelÚsupervisor.eventsr¢Ú
event_typer¤©
rr:ršrrÜÚprocess1Údispatchersr¾r¢r¤rrrÚ+test_make_dispatchers_stderr_not_redirected·s*


ÿÿz>ProcessConfigTests.test_make_dispatchers_stderr_not_redirectedc	Csxtƒ}| |¡}t ¡V}|j|_t|ƒ}| |¡\}}| |dj	d¡| |dd¡| |dd¡W5QRXdS)Nrìrurt)
r
rr‚rƒr0rr
r¥rWr¦)rr:ršrrªr«r¾rrrÚ'test_make_dispatchers_stderr_redirectedÌs

z:ProcessConfigTests.test_make_dispatchers_stderr_redirectedN)
rrrrrr”r•r–r—rŸr r¬r­rrrrrˆus
rˆc@s$eZdZdd„Zdd„Zdd„ZdS)ÚEventListenerConfigTestscCsddlm}|S)Nr)ÚEventListenerConfig)rr¯)rr¯rrrrØsz(EventListenerConfigTests._getTargetClasscOs@i}dD]}|||<qdD]}d||<q| |¡| ¡||ŽSrŠr‹rŒrrrrÜs



z!EventListenerConfigTests._makeOnec

Cstƒ}| |¡}t ¡î}t ¡Ú}|j|_|j|_d|_t|ƒ}| 	|¡\}}| 
|djd¡| 
|djd¡| 
|djd¡ddl
m}| 
|djj|j¡| 
|dd¡| 
|djd	¡dd
lm}	| 
|dj|	¡| 
|d	d¡W5QRXW5QRXdS)NFrÿr¹rìrur)ÚEventListenerStatesrªrtr£)r
rr‚rƒr0rrÜrÕr
r¥rWr¦r¨Zsupervisor.statesr°ržZlistener_stateZACKNOWLEDGEDr§r¤r¨)
rr:ršrrÜrªr«r¾r°r¤rrrÚtest_make_dispatchersïs.


ÿÿz.EventListenerConfigTests.test_make_dispatchersN)rrrrrr±rrrrr®×sr®c@s4eZdZdd„Zdd„Zdd„Zdd„Zd	d
„ZdS)ÚFastCGIProcessConfigTestscCsddlm}|S)Nrr,)rr-)rr-rrrr
sz)FastCGIProcessConfigTests._getTargetClasscOs@i}dD]}|||<qdD]}d||<q| |¡| ¡||ŽSrŠr‹rŒrrrr
s



z"FastCGIProcessConfigTests._makeOnecCs"tƒ}| |¡}| t|j¡dSr$)r
rr>ÚNotImplementedErrorr›r“rrrrŸ
s
z+FastCGIProcessConfigTests.test_make_processcCsFtƒ}| |¡}| d¡}ddlm}| |j|¡| |jd¡dS)NrIr)ÚFastCGISubprocess)r
rr›rœr´rWr8r÷)rr:ršržr´rrrr $
s

z6FastCGIProcessConfigTests.test_make_process_with_groupc

Cstƒ}| |¡}t ¡ê}t ¡Ö}|j|_|j|_d|_t|ƒ}| 	|¡\}}| 
|djd¡| 
|djd¡| 
|djd¡ddl
m}| 
|dj|¡| 
|dd¡| 
|d	jd
¡ddl
m}	| 
|d	j|	¡| 
|d
d	¡W5QRXW5QRXdS)NFrÿr¹Trìrurr¡rªrtr£)r
rr‚rƒr0rrÜrÕr
r¥rWr¦r¨r§r¢r¨r¤r©rrrr±,
s.


ÿÿz/FastCGIProcessConfigTests.test_make_dispatchersN)rrrrrrŸr r±rrrrr²
s
r²c@s4eZdZdd„Zdd„Zdd„Zdd„Zd	d
„ZdS)ÚProcessGroupConfigTestscCsddlm}|S)Nr)ÚProcessGroupConfig)rr¶)rr¶rrrrD
sz'ProcessGroupConfigTests._getTargetClasscCs| ¡||||ƒSr$r)rr:r0rr×rrrrH
sz ProcessGroupConfigTests._makeOnecCsRtƒ}| |ddg¡}| |j|¡| |jd¡| |jd¡| |jg¡dS)NÚwhateverr6)r
rrWr:r0rrr“rrrÚ	test_ctorK
sz!ProcessGroupConfigTests.test_ctorcCsBtƒ}t|ddƒg}| |dd|¡}| ¡| |djd¡dS)Nrªú
/bin/process1r·r6rT©r
rrZafter_setuidrWZautochildlogs_created©rr:r×ršrrrÚtest_after_setuidS
s
z)ProcessGroupConfigTests.test_after_setuidcCsJtƒ}t|ddƒg}| |dd|¡}| ¡}ddlm}| |j|¡dS)Nrªr¹r·r6r)ÚProcessGroup)r
rrÚ
make_grouprœr½rWr8)rr:r×ršr÷r½rrrÚtest_make_groupZ
sz'ProcessGroupConfigTests.test_make_groupN)rrrrrr¸r¼r¿rrrrrµC
s
rµc@s,eZdZdd„Zdd„Zdd„Zdd„Zd	S)
ÚEventListenerPoolConfigTestscCsddlm}|S)Nr)ÚEventListenerPoolConfig)rrÁ)rrÁrrrrc
sz,EventListenerPoolConfigTests._getTargetClasscCs| ¡|||||||ƒSr$r)rr:r0rrZbuffer_sizeZpool_eventsrrrrrg
sþz%EventListenerPoolConfigTests._makeOnec	CsHtƒ}t|ddƒg}| |dd|dgd¡}| ¡| |djd¡dS)Nrªr¹r0r6rprTrºr»rrrr¼m
s
z.EventListenerPoolConfigTests.test_after_setuidc	CsPtƒ}t|ddƒg}| |dd|dgd¡}| ¡}ddlm}| |j|¡dS)Nrªr¹r0r6rpr)ÚEventListenerPool)r
rrr¾rœrÂrWr8)rr:r×ršr÷rÂrrrr¿t
sz,EventListenerPoolConfigTests.test_make_groupN)rrrrrr¼r¿rrrrrÀb
srÀc@s<eZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
S)ÚFastCGIGroupConfigTestscCsddlm}|S)Nrr*)rr+)rr+rrrr}
sz'FastCGIGroupConfigTests._getTargetClasscOs| ¡||ŽSr$r©rr”rŽrrrr
sz FastCGIGroupConfigTests._makeOnecCsjtƒ}tdƒ}| |ddg|¡}| |j|¡| |jd¡| |jd¡| |jg¡| |j|¡dS©NrTr·r6)	r
rrrWr:r0rrr9)rr:Úsock_configršrrrr¸„
sz!FastCGIGroupConfigTests.test_ctorcCsZtƒ}tdƒ}| |ddg|¡}tdƒ}| |ddg|¡}| ||k¡| ||k¡dSrÅ©r
rrr|r7©rr:Zsock_config1Z	instance1Zsock_config2Z	instance2rrrÚtest_same_sockets_are_equalŽ
sz3FastCGIGroupConfigTests.test_same_sockets_are_equalcCsZtƒ}tdƒ}| |ddg|¡}tdƒ}| |ddg|¡}| ||k¡| ||k¡dS)NrTr·r6rªrÇrÈrrrÚtest_diff_sockets_are_not_equal™
sz7FastCGIGroupConfigTests.test_diff_sockets_are_not_equalcCsFtƒ}tdƒ}| |ddg|¡}| ¡}ddlm}| |j|¡dS)NrTr0r6r)ÚFastCGIProcessGroup)r
rrr¾rœrËrWr8)rr:rÆršr÷rËrrrr¿¤
sz'FastCGIGroupConfigTests.test_make_groupN)	rrrrrr¸rÉrÊr¿rrrrrÃ|
s
rÃc@s,eZdZdd„Zdd„Zdd„Zdd„Zd	S)
ÚSignalReceiverTestscCs&ddlm}|ƒ}| | ¡d¡dS)Nr©ÚSignalReceiver)rrÎrWr`©rrÎÚsrrrrÚtest_returns_None_initially­
sz/SignalReceiverTests.test_returns_None_initiallycCsfddlm}|ƒ}| tjd¡| tjd¡| | ¡tj¡| | ¡tj¡| | ¡d¡dS©NrrÍÚframe)rrÎr^r!r)r_rWr`rÏrrrÚ&test_returns_signals_in_order_received²
sz:SignalReceiverTests.test_returns_signals_in_order_receivedcCsTddlm}|ƒ}| tjd¡| tjd¡| | ¡tj¡| | ¡d¡dSrÒ)rrÎr^r!r)rWr`rÏrrrÚ%test_does_not_queue_duplicate_signals»
sz9SignalReceiverTests.test_does_not_queue_duplicate_signalscCsvddlm}|ƒ}| tjd¡| | ¡tj¡| | ¡d¡| tjd¡| | ¡tj¡| | ¡d¡dSrÒ)rrÎr^r!r)rWr`r_rÏrrrÚ%test_queues_again_after_being_emptiedÃ
sz9SignalReceiverTests.test_queues_again_after_being_emptiedN)rrrrÑrÔrÕrÖrrrrr̬
s	rÌc@sŒeZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
dd„Zdd„Zdd„Z
dd„Zdd„Zdd„Zdd„Zdd „Zd!S)"ÚUnhosedConfigParserTestscCsddlm}|S)Nrrv)rrw)rrwrrrrÎ
sz(UnhosedConfigParserTests._getTargetClasscOs| ¡||ŽSr$rrÄrrrrÒ
sz!UnhosedConfigParserTests._makeOnecCs6| ¡}| d¡ddlm}| |j|jdd¡dS)Nú[supervisord]
r)ÚConfigParserrÚmissing)rrrNrÙr>Z
NoOptionErrorÚsaneget)rrWrÙrrrÚtest_saneget_no_defaultÕ
s
ÿz0UnhosedConfigParserTests.test_saneget_no_defaultcCs2| ¡}| d¡|jdddd}| |d¡dS)NrØrrÚrI©r/©rrrÛrW©rrWÚresultrrrÚtest_saneget_with_defaultÜ
s
z2UnhosedConfigParserTests.test_saneget_with_defaultcCs<| ¡}ddi|_| d¡|jdddd}| |d¡dS)Nr_rrØrrwú%(pet)srÝ©rrßrrÛrWrßrrrÚ$test_saneget_with_default_and_expandâ
s


z=UnhosedConfigParserTests.test_saneget_with_default_and_expandcCs>| ¡}ddi|_| d¡|jddddd}| |d¡dS)	Nr_rrØrrwrâF)r/Ú	do_expandrãrßrrrÚ#test_saneget_with_default_no_expandé
s

ÿz<UnhosedConfigParserTests.test_saneget_with_default_no_expandcCs2| ¡}| d¡|jdddd}| |d¡dS)Nú[supervisord]
foo=%(pet)s
rrwF)rårârÞrßrrrÚ!test_saneget_no_default_no_expandñ
s
z:UnhosedConfigParserTests.test_saneget_no_default_no_expandcCs8| ¡}ddi|_| d¡| dd¡}| |d¡dS)Nr_rrçrrwrãrßrrrÚ(test_saneget_expands_instance_expansions÷
s


zAUnhosedConfigParserTests.test_saneget_expands_instance_expansionscCs@| ¡}ddi|_| d¡|jddddid}| |d¡dS)Nr_rrçrrwr1)rßrãrßrrrÚ#test_saneget_expands_arg_expansionsþ
s

ÿz<UnhosedConfigParserTests.test_saneget_expands_arg_expansionscCs.| ¡}| d|j¡| | d¡d¡dS)Nz
[%s]
foo=bar
rwrx)rrZ	mysectionrWZ
getdefault©rrWrrrÚ+test_getdefault_does_saneget_with_mysectionszDUnhosedConfigParserTests.test_getdefault_does_saneget_with_mysectionc	CsR| ¡}tjdd$}| d¡| ¡| |j¡}W5QRX| ||jg¡dS©Nr:r;ú[foo]
©rr‚rƒr¿r=rÇr0rW©rrWr„Úok_filenamesrrrÚtest_read_filenames_as_strings
z6UnhosedConfigParserTests.test_read_filenames_as_stringc	CsT| ¡}tjdd&}| d¡| ¡| |jg¡}W5QRX| ||jg¡dSrírïrðrrrÚtest_read_filenames_as_lists
z4UnhosedConfigParserTests.test_read_filenames_as_listc	Csltj tj t¡d¡}| ¡}tjdd(}| d¡| 	¡| 
||jg¡}W5QRX| ||jg¡dS)NrÆr:r;rî)
r`ržrŸrÉrÊrr‚rƒr¿r=rÇr0rW)rrÆrWr„rñrrrÚ3test_read_returns_ok_filenames_like_rawconfigparsers
zLUnhosedConfigParserTests.test_read_returns_ok_filenames_like_rawconfigparsercCs| ¡}| |ji¡dSr$)rrWÚsection_to_filerërrrÚ)test_read_section_to_file_initially_empty$szBUnhosedConfigParserTests.test_read_section_to_file_initially_emptyc	CsX| ¡}tjdd&}| d¡| ¡| |jg¡W5QRX| |jd|j¡dS)Nr:r;rîrw©	rr‚rƒr¿r=rÇr0rWrõ)rrWr„rrrÚ'test_read_section_to_file_read_one_file(s
z@UnhosedConfigParserTests.test_read_section_to_file_read_one_filec
Csš| ¡}tjddT}tjdd<}| d¡| ¡| d¡| ¡| |j|jg¡W5QRXW5QRX| |jd|j¡| |jd|j¡dS)Nr:r;rîz[bar]
rwrxr÷)rrWrgrhrrrÚ-test_read_section_to_file_read_multiple_files0s

&zFUnhosedConfigParserTests.test_read_section_to_file_read_multiple_filesN)rrrrrrÜrárärærèrérêrìròrórôrörørùrrrrr×Í
s 	r×c@seZdZdd„Zdd„ZdS)ÚUtilFunctionsTestscCs4ddlm}| |ddƒd¡| |ddƒd¡dS)Nr)Ú
make_namespecr÷ržz
group:process)rrûrW)rrûrrrÚtest_make_namespec=sz%UtilFunctionsTests.test_make_namespeccCsTddlm}|}| |dƒd¡| |dƒd¡| |dƒd¡| |d	ƒd¡dS)
Nr)Úsplit_namespecz
process:group)ržr÷rž)ržržzgroup:)r÷Nzgroup:*)rrýrW)rrýr¤rrrÚtest_split_namespecBsz&UtilFunctionsTests.test_split_namespecN)rrrrürþrrrrrú<srúcCst tjt¡Sr$)ÚunittestZ
findTestCasesrZr[rrrrrÚ
test_suiteJsrÚ__main__)ZdefaultTest)+Ú__doc__r`rZr‚rrÿr!rÀrÒrTrNrrr#rrrZsupervisor.loggersrrr	r
rrr
rrZTestCaserr‹rárˆr®r²rµrÀrÃrÌr×rúrrÚmainrrrrÚ<module>svh6Qb0<0!o