PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  4h^c@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z mZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZdejfdYZdejfdYZdejfdYZdejfdYZdejfdYZdejfdYZ dejfdYZ!dejfdYZ"dejfdYZ#d ejfd!YZ$d"ejfd#YZ%d$ejfd%YZ&d&Z'e(d'krej)d(d)ndS(*s!Test suite for supervisor.optionsiN(tStringIO(tMocktpatchtsentinel(t LevelsByName(tDummySupervisor(t DummyLogger(t DummyOptions(t DummyPoller(t DummyPConfig(t DummyProcess(tDummySocketConfig(tlstript OptionTestscBseZdZedZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZRS(cCsddlm}|S(Ni(tOptions(tsupervisor.optionsR(tselfR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt_getTargetClasssc s|jddlm}dffdY}|}t|_|jdddddd d d d d |jdd dd ddddd dd||S(Ni(tintegert MyOptionscs0eZidd6ZfdZdZRS(i)tothercs<||_j|dtfdY}||_dS(NtFoocBseZRS((t__name__t __module__(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR+s(t read_errort__init__tobjectt configroot(RRR(R(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR(s  cSsK|jrt|jn|jjj|j|jjj|jdS(N(Rt ValueErrorRt__dict__tupdatet default_maptmaster(Rtfp((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt read_config.s (RRR RR"((RR(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR%s tnametanoptiontconfnametshorttotlongtoptiontdefaultRtenvtOTHERsp:sother=thandler(Rtsupervisor.datatypesRRt configfiletadd(RRRRtoptions((RRsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt _makeOptions!s   cCs8|j}|}|jt|jdtdtdS(NtflagR-(Rt assertRaisesRR0tTrue(Rtclstinst((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt'test_add_flag_not_None_handler_not_None=s  c Cs>|j}|}|jt|jdtdtdtdS(NR3R(R&(RR4RR0R5tFalse(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_add_flag_not_None_long_false_short_falseBs   c Cs>|j}|}|jt|jdtdtdddS(NR3R(R&t:(RR4RR0R5R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_add_flag_not_None_short_endswith_colonMs   c Cs>|j}|}|jt|jdtdddtdS(NR3R(t=R&(RR4RR0R5R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_add_flag_not_None_long_endswith_equalXs   cCs8|j}|}|jt|jdddddS(NR(R=R&tabc(RR4RR0(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_add_inconsistent_short_long_optionscs   cCs8|j}|}|jt|jdtdddS(NR(R&s-abc(RR4RR0R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_add_short_option_startswith_dashms   cCs8|j}|}|jt|jdtdddS(NR(R&R?(RR4RR0R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_add_short_option_too_longws   cCsH|j}|}itd6|_|jt|jdtdddS(Ns-aR(R&ta(RR5t options_mapR4RR0R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt#test_add_duplicate_short_option_keys   cCs8|j}|}|jt|jdddtdS(NR(s-abcR&(RR4RR0R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt$test_add_long_option_startswith_dashs   cCsH|j}|}itd6|_|jt|jdddtdS(Ns--abcR(R?R&(RR5RDR4RR0R9(RR6R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt"test_add_duplicate_long_option_keys   cCsL|j}|jt|jd|j|jdddddgdS(Niissupervisord.confsetc/supervisord.confs/etc/supervisord.confs /etc/supervisor/supervisord.conf(R2t assertEqualtlent searchpaths(RR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_searchpathss cCs|j}|jg|j|jd|j|jd|j}dtjd<|jg|j|jd|j}|jddg|j|jdtjd=dS( NR*i)t42R,i*s-pt43i+(R2trealizeRHR$Rtostenviron(RR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_and_args_orders      cCsZ|j}|jg|j|jdd|jd<|j|j|jddS(Ni)i*R(R2RNRHRR tprocess_config(RR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_config_reloads     cCs,|jdd}|jt|jtdS(NRterror(R2R4RRRR9(RR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt!test_config_reload_do_usage_falsescs|jdd}gfd}t|_|_||_d|j_d|j_|jt |j dgdS(NRRTcsj|dS(N(tappend(tnum(tL(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytexitsii( R2RtstderrtstdoutRYRR$RRRR5RH(RR1RY((RXsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_config_reload_do_usage_trues    cCsddlm}|}|jddd|j|jd|j|jdd|jddd|j|jd|j|jdd|jddd|j|jd|j|jdd|jddd|j|jddS( Ni(Rtfootbaritbazitgazonk(RRt_setRHR]tattr_priorities(RRR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test__sets (RRRR9R2R8R:R<R>R@RARBRERFRGRKRQRSRUR\Rc(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR s$       tClientOptionsTestscBsteZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z RS( cCsddlm}|S(Ni(t ClientOptions(RRe(RRe((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRscCs |jS(N(R(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt_makeOnescs|j}|jt|jdkg|_dtfdYdfd}||_|jddddd d d g|j|jd |j|j d|j|j d |j|j d d S(s(Making sure config file is not required.itDummyExceptioncBseZRS((RR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRgscs dS(N((Rt _exitcode(Rg(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt dummy_exitstargss-sshttp://localhost:9001s-utchriss-pt123iN( Rft assertTrueRIRJt ExceptionRYRNRHt interactivet serverurltusernametpassword(RtinstanceRi((RgsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_no_config_files    cCstj}td|}t|}|j}||_|jdg|j|jt t j j |d}|j|j ||jj}|j|jd|j|jd|j|jd|j|jd|j|j |dS(Ns[supervisorctl] serverurl=http://localhost:9001 username=chris password=123 prompt=mysupervisor history_file=%s/sc_history Rjt sc_historyt mysupervisorshttp://localhost:9001RkRl(ttempfilet gettempdirR RRfR/RNRHRoR5ROtpathtjoint history_fileRt supervisorctltpromptRpRqRr(RttempdirtsR!RsR{R1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_optionss       cCsZtd}|j}t||_|jdg|jj}|j|jddS(Nsm [supervisorctl] serverurl=http://localhost:9001 ;comment should not be in serverurl Rjshttp://localhost:9001( R RfRR/RNRR|RHRp(RttextRsR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt$test_options_ignores_inline_commentss   cCstd}t|}|j}itjd6dd6dd6dd6d d 6d d 6d d6|_||_|jdg|j|j t |j j }|j|j d |j|jd|j|jd|j|jd |j|jddS(Ns [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 tENV_HOMEtjohndoetENV_USERt9210tENV_SERVER_PORTtsomeusertENV_CLIENT_USERt passwordheretENV_CLIENT_PASSt xsupervisortENV_CLIENT_PROMPTs.histtENV_CLIENT_HIST_EXTRjshttp://localhost:9210s$/path/to/histdir/.supervisorctl.hist(R RRfRwRxtenviron_expansionsR/RNRHRoR5RR|R}RpRqRrR{(RRR!RsR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_options_with_environment_expansions's(      cCs|j}td}tj}tjj|d}t|d}|j||j z||_ |j dgWdt j |dtX|jj}|j|jtjj|d|j|jdtjj|ddS( Ns} [supervisorctl] history_file=%(here)s/sc_history serverurl=unix://%(here)s/supervisord.sock ssupervisord.conftwRjt ignore_errorsRusunix://ssupervisord.sock(RfR RwtmkdtempRORyRztopentwritetcloseR/RNtshutiltrmtreeR5RR|RHR{Rp(RRsRtheretsupervisord_conftfR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt/test_options_supervisorctl_section_expands_hereDs"         cCstjjtjjtd}|j}y|j||jdWn-tk rz}|j d|j dknXdS(Nt nonexistentsnothing raisedscould not find config filei( RORyRztdirnamet__file__RfR"tfailRRmRj(RRRstexc((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_read_config_not_found[s!  cCsp|j}d}||_y|jt|jdWn-tk rk}|jd|jdknXdS(NcSsttjd|dS(NsPermission denied: %s(tIOErrorterrnotEACCES(tfntmode((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt dummy_openfssexpected exceptionscould not read config filei(RfRR"RRRRmRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_read_config_unreadableds    cCs^|j}y!|jt|jdWn*tk rY}|j|jddnXdS(Nsnothing raisedis0.ini file does not include supervisorctl section(RfR"RRRRHRj(RRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt9test_read_config_no_supervisord_section_raises_valueerrorps cCsNtd}|j}||_|jdddg|j|jddS(Ns[supervisorctl]Rjs --serverurlsunix:///dev/null(RRfR/RNRHRp(RR!Rs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_unixsocket_cliys    cCsNtd}t|}|j}||_|j|j|jddS(Ns;[supervisorctl] serverurl=unix:///dev/null sunix:///dev/null(R RRfR/RNRHRp(RRR!Rs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt"test_options_unixsocket_configfiles     (RRRRfRtRRRRRRRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRds       tServerOptionsTestscBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8e9d7e:d8e;d9Z<d:Z=d;Z>d<Z?d=Z@d>ZAd?ZBd@ZCdAZDdBZEdCZFdDZGdEZHdFZIdGZJdHZKdIZLdJZMdKZNdLZOdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUZXdVZYdWZZdXZ[dYZ\dZZ]d[Z^d\Z_d]Z`d^Zad_Zbd`ZcdaZddbZedcZfddZgdeZhdfZidgZjdhZkdiZldjZmdkZndlZodmZpdnZqdoZrdpZsdqZtdrZudsZvdtZwduZxdvZydwZzdxZ{dyZ|dzZ}d{Z~d|Zd}Ze9d~e:dddddge9de:dddZe9d~e:dddddge9de:dddZdZRS(cCsddlm}|S(Ni(t ServerOptions(RR(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRscCs |jS(N(R(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRfscCs_ddlm}|j}t|_|jt|jd|j |jj |ddS(Ni(tVERSIONs ( RRRfRR[R4t SystemExittversiontNoneRHtgetvalue(RRR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_versions   cCs tditjd6}ddlm}t|}|j}||_|jdg|j j }|j |j tj|j |j tdd|j |jd|j |jd5|j |jd |j |jd |j |jd |j |jt|j |jd|j |jtj|j t|jd|j |jddtj|j |jddd|j |jddd|j |jddd|j |jddd|j |jt|j |jd|j |jd|j |jt|j t|jd |j |j t!dd|jd}|j |j"d|j |j#d|j t|j$d|j$d}|j |j"d|j |j%d|j |j#d|j |j&t|j |j'|j(|j |j)d |j |j*d |j |j+d|j |j,d!|j |j-t.j/|j |j0d |j |j1t2|j |j3t2|j |j4|j5d"|j |j6d |j |j7dd#g|j |j d$|j |j d#|j |j t!dd|jd}|j |j"d%|j |j#d#|j t|j$d|j$d} |j | j"d%|j | j%d|j | j#d#|j | j&t|j | j't2|j | j+d|j | j,d&|j | j-t.j9|j | j1t2|j | j3t2|j | j4d |j | j6d#|j | j7dd#g|j | j d|jd#} |j | j"d'|j | j#d(|j t| j$d| j$d} |j | j"d)|j | j%d|j | j#d(|j | j&t|j | j'|j:|j | j+d|j | j,|j;|j | j4|j5d"|j | j6d |j | j7ddd*g|j | j-t.j9|j | j1t|j | j3t|jd(} |j | j"d+|j | j#d,|j t| j$d#| j$d} |j | j"d-|j | j%d|j | j#d,|j | j&t|j | j'|j(|j | j+d|j | j,|j;|j | j4|j5d"|j | j6d |j | j7dd#g|j | j-t.j9|j | j1t2|j | j3t2|j | j d| j$d}|j |j"d.|j |j%d|j |j#d,|j |j&t|j |j'|j(|j |j+d|j |j,|j;|j |j4|j5d"|j |j6d |j |j7dd#g|j |j-t.j9|j |j1t2|j |j3t2|j |j d|jd,}|j |j"d/|j |j#d |j t|j$d#|j$d}|j |j"d0|j |j d1|j$d}|j |j"d2|j |j d3t<j=j>t<j?}|j |j+d|j |j@d|j |j tj|j |j tdd|j |jt<j=jA|d|j |jd7|j |jd |j |jd |j |jt<j=jA|d |j |jt|j |jBd|j |jd|j |jtj|j t|jd|j |jddtj|j |jddd|j |jddd|j |jddd|j |jddd|j |jt|j |jd|j |jddS(8Nsg[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~i(t datatypesRjt22issupervisord.logiiii(ssupervisord.pidtfleebiitfamilythosts 127.0.0.1tporti'#RqtchrismRrR]ii,t FAKE_ENV_VARs /some/pathtcat1s/bin/cati s /tmp/cat.logt50MBis/tmptcat2s /tmp/cat2.logtcat3itreplaceditcat4itfleeb_0tfleeb_1tcat5tfoo_01s/some/path/foo_01tfoo_02s/some/path/foo_02ii>ii>(CR RwRxt supervisorRRRfR/RNRt supervisordRHt directorytumasktinttlogfiletlogfile_maxbytestlogfile_backupstlogleveltpidfiletnodaemonR5t identifiert childlogdirRItserver_configstsockettAF_INETt nocleanuptminfdstminprocstprocess_group_configst environmenttdictR#tprioritytprocess_configstcommandt autostartt autorestarttRestartWhenExitUnexpectedt startsecst startretriestuidtstdout_logfilet stopsignaltsignaltSIGKILLt stopwaitsecst stopasgroupR9t killasgrouptstdout_logfile_maxbytest byte_sizetstdout_logfile_backupst exitcodesRtSIGTERMtRestartUnconditionallyt AutomaticRORytabspathtgetcwdtgidRzt passwdfile(RRRR!RsR1Rtproc1Rtproc2Rtproc3Rtproc4_atproc4_bRtproc5_atproc5_bR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRsHD                        ""cs|j}|jt|jdkg|_dtfdYdfd}||_t|_y|jWnBk r}ddl }|j |j dd|j |nX|j ddS( NiRgcBseZdZRS(cSs ||_dS(N(texitcode(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRs(RRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRgsics|dS(N((R(Rg(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRisisWrong exitcode for: %ssDid not get a DummyException.(RfRmRIRJRnRYRRZRNt tracebackRHRt format_excR(RRsRiteR((RgsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_no_config_file_exitss     cCsZtd}|j}t||_|jdg|jj}|j|jddS(Ns[ [supervisord] identifier=foo ;comment should not be in identifier RjR]( R RfRR/RNRRRHR(RRRsR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRs   cCstd}|j}t||_|jdg|jj}|jt|j d|j d}|jt|j d|j d}|jt|j d|j |j |j ktd}t||_|j dt |jj}|jt|j d|j d}|jt|j d|j d}|j|jd|j|jd |j |j |j k|j d}|jt|j d|j d}|j|jd |j|jd dS( Ns [supervisord] user=root [program:one] command = /bin/cat [program:two] command = /bin/dog [program:four] command = /bin/sheep [group:thegroup] programs = one,two Rjiiis [supervisord] user=root [program:one] command = /bin/cat [program:three] command = /bin/pig [group:thegroup] programs = three tdo_usagetones/bin/cattthrees/bin/pig(R RfRR/RNRRRHRIRRRmRRR9R#R(RRRstsectiontcattproc((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_reloads>               cCs|j}d}|g|_|g|_|g|_td}t||_|jdg|j||jk|j||jk|j||jkdS(Ns Message from a prior config readsb [supervisord] user=root [program:cat] command = /bin/cat Rj( Rftparse_criticalstparse_warningst parse_infosR RR/RNt assertFalse(RRstold_msgR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt!test_reload_clears_parse_messagess     cCsc|j}d}|g|_td}t||_|jdg|j||jkdS(NsInfo from a prior config readsb [supervisord] user=root [program:cat] command = /bin/cat Rj(RftinfosR RR/RNRR(RRstold_infoR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_reload_clears_parse_infoss   cCstjjtjjtd}|j}y|j||jdWn-tk rz}|j d|j dknXdS(NRsnothing raisedscould not find config filei( RORyRzRRRfR"RRRmRj(RRRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR"s!  cCsp|j}d}||_y|jt|jdWn-tk rk}|jd|jdknXdS(NcSsttjd|dS(NsPermission denied: %s(RRR(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR-ssnothing raisedscould not read config filei(RfRR"RRRRmRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR+s    cCs|j}tjdd}zvy8|jd|j|j|j|jdWn7tk r}|j |j dj d|jnXWd|j XdS(NRsw+s[supervisord] junksnothing raisedis File contains parsing errors: %s( RfRwtNamedTemporaryFileRtflushR"R#RRRmRjt startswithR(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt8test_read_config_malformed_config_file_raises_valueerror7s   cCs^|j}y!|jt|jdWn*tk rY}|j|jddnXdS(Nsnothing raisedis..ini file does not include supervisord section(RfR"RRRRHRj(RRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRFs c Cstj}tjj|d}tj|tjj|d}td|}t|d}|j||j ddl m }|d }x]t |D]O}tjj|d|} t| d}|jd ||f|j qW|j } zk| j|g} x>t|D]0}tjj|d|} | jd | q"W|j| j| Wdtj|XdS( Nsconf.dssupervisord.confsP [supervisord] [include] files=%s/conf.d/*.conf Ri(tlettersis%s.confs[program:%s] command=/bin/%s s'Included extra file "%s" during parsing(RwRRORyRztmkdirR RRRtstringRtreversedRfR"tsortedRVRHRRR( RRtconf_dRRRRta_ztlettertfilenameRst expected_msgs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_include_reads_files_in_sorted_orderOs6         c Cstj}tjj|d}tj|tjj|d}td||f}t|d}|j||j tjj|d}t|d}|jd|j tjj|d}t|d}|jd|j |j }zv|j ||j j } |jt| jd d |} |j| |jkd |} |j| |jkWdtj|XdS( Nsconf.dssupervisord.confs` [supervisord] [include] files=%s/conf.d/*.conf %s/conf.d/*.ini Rsa.confs[inet_http_server] port=8000 sa.inis"[unix_http_server] file=/tmp/file is'Included extra file "%s" during parsing(RwRRORyRzRR RRRRfR"RRRHRIRRmRRR( RRRRRRt conf_filetini_fileRsR1tmsg((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_read_config_include_reads_extra_filests6             c Csgtj}tjj|d}tj|tjj|d}td|}t|d}|j||j tjj|d}t|d}|jd|j |j }zy|j ||j dWngt k rJ}|jd|jd k|j||jd kd |} |j| |jknXWdtj|d tXdS( Nsconf.dssupervisord.confsO [supervisord] [include] files=%s/conf.d/*.conf Rsa.confs[inet_http_server] junk snothing raisedscontains parsing errors:is'Included extra file "%s" during parsingR(RwRRORyRzRR RRRRfR"RRRmRjRRRR5( RRRRRRtmalformed_fileRsRR&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_read_config_include_extra_file_malformeds0          cCsm|j}td}y$|jt||jdWn*tk rh}|j|jddnXdS(NsC [supervisord] [include] ;no files= snothing raisedis5.ini file has [include] section, but no files setting(RfR R"RRRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt8test_read_config_include_with_no_files_raises_valueerrors  cCsE|j}td}|jt||j|jdgdS(NsL [supervisord] [include] files=nonexistent/* s-No file matches via include "./nonexistent/*"(RfR R"RRHR (RRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt<test_read_config_include_with_no_matching_files_logs_warnings    cCsaddlm}y|dddWn*tk rP}|j|jddn XtddS(Ni(treadFiles /notthereii tFAILEDs Didn't raise(RR,RRHRjtAssertionError(RR,R7((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_readFile_faileds cCs,|j}|jtj|jdS(N(RfRHROtgetpidtget_pid(RRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_get_pids cCs|j}|jjtjd|jjtjd|j|jtj|j|jtj|j|jddS(N( Rftsignal_receivertreceiveRRRtSIGCHLDRHt get_signal(RRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt,test_get_signal_delegates_to_signal_receivers  cCs<|j}ddlm}|j||jddddS(Ni(tNotFounds /not/there(RfRR8R4tcheck_execv_argsR(RRsR8((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt'test_check_execv_args_cant_find_commands cCsH|j}ddlm}|j||jddgtjddS(Ni(t NotExecutables /etc/passwds etc/passwd(RfRR;R4R9ROtstat(RRsR;((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt#test_check_execv_args_notexecutables    cCsH|j}ddlm}|j||jddgtjddS(Ni(R;t/(RfRR;R4R9ROR<(RRsR;((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_check_execv_args_isdirs    cs|j}gfd}||_td|_ddg}|jd||jtd|jdd|dS( Ncsj|dS(N(RV(tmessage(trecorder(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt record_usagess [supervisord]R]R^Rjiis*positional arguments are not supported: %s(RftusageRR/RNRHRI(RRsRBRj((RAsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_realize_positional_args_not_supporteds    csz|j}gfd}||_td|_|jddg|jtd|jdddS(Ncsj|dS(N(RV(R@(RA(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRBss [supervisord]Rjs--bad=1iisoption --bad not recognized(RfRCRR/RNRHRI(RRsRB((RAsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_realize_getopt_error s  cCs|j}td}ddlm}|}|j|t||_|jt||jdg|j j }|j |j ddt j|j |j ddd|j |j dd d |j |j dd d dS( Ns [unix_http_server] file=/tmp/supvtest.sock username=johndoe password=passwordhere [supervisord] ; ... i(tUnhosedConfigParserRjiRtfiles/tmp/supvtest.socktchmoditchown(ii(RfR RRFt read_stringRR/R"RNRRRHRRtAF_UNIX(RRsRRFtconfigR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_afunixs     cCs|j}td}ddlm}|}|j|t||_|jt||jdg|j j }|j |j ddt j|j |j ddd|j |j dd d dS( Ns [unix_http_server] file=/tmp/supvtest.sock username=johndoe password=passwordhere chmod=0755 [supervisord] ; ... i(RFRjiRRGs/tmp/supvtest.sockRHi(RfR RRFRJRR/R"RNRRRHRRRK(RRsRRFRLR1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_options_afunix_chxxx_values_valid1s     cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(Nsc [supervisord] [unix_http_server] file=/tmp/file chmod=NaN snothing raisedisInvalid chmod value NaN( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_afunix_chmod_badIs  cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(Nss [supervisord] [unix_http_server] file=/tmp/file chown=thisisnotavaliduser snothing raisedis+Invalid sockchown value thisisnotavaliduser( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_afunix_chown_badZs  cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(NsL [supervisord] [unix_http_server] ;no file= snothing raisedis,section [unix_http_server] has no file value( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_afunix_no_fileks  cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(Ns [supervisord] [unix_http_server] file=/tmp/supvtest.sock username=usernamehere ;no password= chmod=0755 snothing raisedisSection [unix_http_server] contains incomplete authentication: If a username or a password is specified, both the username and password must be specified( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_options_afunix_username_without_password{s  cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(Ns [supervisord] [unix_http_server] file=/tmp/supvtest.sock ;no username= password=passwordhere chmod=0755 snothing raisedisSection [unix_http_server] contains incomplete authentication: If a username or a password is specified, both the username and password must be specified( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_options_afunix_password_without_usernames  cCs|j}td}tj}tjj|d}t|d}|j||j zp||_ |j dg|j j }|jd}|j|dtj|j|dtjj|dWdtj|d tXdS( Nsa [supervisord] [unix_http_server] file=%(here)s/supervisord.sock ssupervisord.confRRjiRRGssupervisord.sockR(RfR RwRRORyRzRRRR/RNRRRRHRRKRRR5(RRsRRRRR1t serverconf((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_options_afunix_file_expands_heres"         cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(Ns [supervisord] [inet_http_server] file=/tmp/supvtest.sock username=usernamehere ;no password= chmod=0755 snothing raisedisSection [inet_http_server] contains incomplete authentication: If a username or a password is specified, both the username and password must be specified( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_options_afinet_username_without_passwords  cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(Nsn [supervisord] [inet_http_server] password=passwordhere ;no username= snothing raisedisSection [inet_http_server] contains incomplete authentication: If a username or a password is specified, both the username and password must be specified( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_options_afinet_password_without_usernames  cCs||j}td}t||_y$|jt||jdWn*tk rw}|j|jddnXdS(NsL [supervisord] [inet_http_server] ;no port= snothing raisedis,section [inet_http_server] has no port value( RfR RR/R"RRRHRj(RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_options_afinet_no_ports  cCstj}t|d}|jd|j|j}t|_dddY}itj d6|d6|fg|_ d|_ |j |j tjj|dS( NRR]tServercBseZRS((RR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRYsRRGt((RwtmktempRRRRfR5tunlink_socketfilesRRKt httpserversRtcleanupRRORytexists(RRRRsRY((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_cleanup_afunix_unlinks       cCstj}zt|d}|jd|j|j}dddY}itjd6|d6|fg|_d|_ t |_ |j |j tjj|Wdytj|Wntk rnXXdS( NRR]RYcBseZRS((RR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRYsRRGRZ((RwR[RRRRfRRKR]RR9R\R^RmRORyR_tunlinktOSError(RRRRsRY((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_cleanup_afunix_nounlink s"        cCstjjtjjtd}tj}zt|d}|jd|j |j }t |_ dd dY}it jd6|d6|fit jd6|d6|fg|_d|_|j|jtjj|Wdytj|Wntk rnXXdS( NtnotfoundRR]RYcBseZRS((RR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRY'sRRGRZ((RORyRzRRRwR[RRRRfR5R\RRKR]RR^RR_RaRb(RRdt socketnameRRsRY((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_cleanup_afunix_ignores_oserror_enoents$!     &   cCstj}zt|d}|jd|j|j}||_t|_|j |j |j |j |j tjj|Wdytj|Wntk rnXXdS(NRt2(RwR[RRRRfRRtloggert write_pidfileRmtunlink_pidfileR^RRORyR_RaRb(RRRRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_cleanup_removes_pidfile6s          cCsDtjjtjjtd}|j}||_|jdS(NRd(RORyRzRRRfRR^(RRdRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_cleanup_pidfile_ignores_oserror_enoentIs!  cCstj}t|d}|jd|jzL|j}||_|j|j|j |j t j j |Wdyt j|Wntk rnXXdS(NRt1234(RwR[RRRRfRRRjR^RmRORyR_RaRb(RRRRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt=test_cleanup_does_not_remove_pidfile_from_another_supervisordOs       cCstj}z~t|d}|jd|j|j}||_ti}||_|j |j |j |j |j Wdyt j|Wntk rnXXdS(NRRg(RwR[RRRRfRRtpollerRtclosedR^RmRORaRb(RRRRsRo((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_cleanup_closes_polleres          cso|jd_gfd}td|fd}||jddddgdS( Ni cs&|dkrtnj|dS(Ni(RbRV(tfd(Rp(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR~s  sos.closecsjdS(N(t cleanup_fds((Rs(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRsiiii (RfRRRH(RRR((RpRssA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt5test_cleanup_fds_closes_5_upto_minfds_ignores_oserrorys  cCs[|j}dddY}|}i|fg|_|j|j|jtdS(NRYcBseZeZdZRS(cSs t|_dS(N(R5Rp(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRs(RRR9RpR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRYs((RfR]tclose_httpserversRHRpR5(RRsRYtserver((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_close_httpserverss    cCs?|j}t}||_|j|j|jtdS(N(RfRRht close_loggerRHRpR5(RRsRh((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_close_loggers     cs|j}gfd}||_idd6dd6dd6dd 6d d 6d d 6}|j||jtdddgdS(Ncsj|dS(N(RV(Rr(Rp(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytclose_fdsitstdiniR[iRZit child_stdinit child_stdoutit child_stderr(RfRztclose_parent_pipesRHR(RRsRztpipes((RpsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_close_parent_pipess   csX|j}gfd}||_idd6}|j||jgdS(Ncsj|dS(N(RV(Rr(Rp(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRzsR{(RfRzRRRH(RRsRzR((RpsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_close_parent_pipes_ignores_fd_of_nones    cs|j}gfd}||_idd6dd6dd6dd 6d d 6d d 6}|j||jtdd d gdS(Ncsj|dS(N(RV(Rr(Rp(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRzsiR{iR[iRZiR|iR}iR~(RfRztclose_child_pipesRHR(RRsRzR((RpsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_close_child_pipess   cs^|j}gfd}||_idd6}|j||jtgdS(Ncsj|dS(N(RV(Rr(Rp(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRzsR|(RfRzRRRHR(RRsRzR((RpsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_close_child_pipes_ignores_fd_of_nones    cCsl|j}t}tg|_||_|j|j|jdjt|j|jdddS(Nissupervisord logreopen( RfRthandlersRht reopenlogsRHtreopenedR5tdata(RRsRh((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_reopenlogss    cCstj}z|j}t|_||_|j|jtj j |t t |dj d }|j|tj|jjd}|j|jd|j|jWdytj|Wntk rnXXdS(Ntriissupervisord started with pid(RwR[RfRRhRRiRmRORyR_RRtreadRHR0RRRjRaRb(RRRstpidR&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_write_pidfile_oks       cCskd}|j}t|_||_|j|jjd}|j|jd|j|j dS(Ns/cannot/possibly/existiscould not write pidfile( RfRRhRRiRRmRRRj(RRRsR&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_write_pidfile_fails    cCs|j}tj\}}tj|dtj|d|j||jttj|d|j||jttj|ddS(NiR](RfROtpipeRRRzR4Rb(RRstinnietoutie((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_close_fds   sos.closet side_effectcCs|j}|jddS(Ni(RfRz(RRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_close_fd_ignores_oserrors cCs|j}td}ddlm}|}|j||j|dd}|jt|d|d}|j|jd|j|j d |j|j t |j|j t |j|j d |j|jd |j|jd|j|jd|j|jd|j|jd |j|jt|j|jtj|j|jt |j|jt|j|jd |j|jd d g|j|jt |j|jidd6dd6dd6dS(Ns~ [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 i(RFs program:fooR^iit bar_foo_00s/bin/catidi@iitval1tKEY1tval2tKEY2t0tKEY3(RfR RRFRJtprocesses_from_sectionRHRIR#RRR9RRRRRRtstdout_capture_maxbytesRtstdout_events_enabledR5RRRRRRRtredirect_stderrR(RRsRRFRLtpconfigstpconfig((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_processes_from_sections8      cCs~|j}td}ddlm}|}|j||j|dd}dtj}|j|dj |dS(NsS [program:foo] command = /bin/foo --host=%(host_node_name)s i(RFs program:fooR^s/bin/foo --host=i( RfR RRFRJRtplatformtnodeRHR(RRsRRFRLRtexpected((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt4test_processes_from_section_host_node_name_expansion,s    cCs'|j}td}ddlm}|}|j||j|dd}|jt|dxdD]}|j||jd ||j||j d ||j||j d ||j||j d ||j||j d ||j||j id|d6qpWdS(NsX [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 i(RFs program:fooR^iiisfoo_%ds/bin/foo --num=%ds /tmp/foo_%ds/tmp/foo_%d_stderrs/tmp/foo_%d_stdouts%dtNUM(ii(RfR RRFRJRRHRIR#RRtstderr_logfileRR(RRsRRFRLRRW((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt1test_processes_from_section_process_num_expansion9s"       cCs~|j}td}ddlm}|}idd6|_|j||j|dd}|j|djddS( Ns^ [program:foo] command = /bin/cat directory = /tmp/%(ENV_FOO)s i(RFR^tENV_FOOs program:foois/tmp/bar( RfR RRFt expansionsRJRRHR(RRsRRFRLR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_processes_from_section_expands_directoryTs    cCs|j}td}ddlm}|}|j||j|dd}dtjd}|j|dj |dS( NsO [program:foo] command = /bin/foo --path='%(ENV_PATH)s' i(RFs program:fooR^s/bin/foo --path='%s'tPATHi( RfR RRFRJRRORPRHR(RRsRRFRLRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt;test_processes_from_section_environment_variables_expansionbs    cCs|j}td}ddlm}|}|j||j|dd}dtjd}|j|dj d|dS( Nsl [program:foo] command = /bin/foo environment = PATH='/foo/bar:%(ENV_PATH)s' i(RFs program:fooR^s /foo/bar:%sRi( RfR RRFRJRRORPRHR(RRsRRFRLRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt6test_processes_from_section_expands_env_in_environmentos    cCs|j}td}ddlm}|}|j||j|dd}|j|jdd|j|djddS(Ns~ [program:foo] command = /bin/foo redirect_stderr = true stderr_logfile = /tmp/logfile i(RFs program:fooR^isyFor [program:foo], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored( RfR RRFRJRRHR RR(RRsRRFRLR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt9test_processes_from_section_redirect_stderr_with_filename}s    cCs|j}td}ddlm}|}|j||j|dd}|j|jg|j|djddS(Nsv [program:foo] command = /bin/foo redirect_stderr = true stderr_logfile = auto i(RFs program:fooR^i( RfR RRFRJRRHR RR(RRsRRFRLR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt5test_processes_from_section_redirect_stderr_with_autos    c CsAtj}tjj|d}tj|tjj|d}td|df}t|d}|j||j tjj|dt j }t|d}|jd|j |j }z|j |Wdtj|dtX|jj}|jt|jd d |} |j| |jkdS( Nsconf.dssupervisord.confsQ [supervisord] [include] files=%s/conf.d/%s.conf s%(host_node_name)sRs%s.confs[inet_http_server] port=8000 Ris'Included extra file "%s" during parsing(RwRRORyRzRR RRRRRRfR"RRR5RRRHRIRRmR( RRRRRRR$RsR1R&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt/test_read_config_include_expands_host_node_names*         c Cstd}ddlm}ddlm}|j}itjd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6dd%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d0d26dd36d4d56dd66|_|}|j|_ |j |t ||_ |j t ||jd7g|j|jd8|j |j|jd9|j |j|jd:|j|jd;|j|jtj|j|jt|j|jd<|j|jd=|j|jt|j|j|j d|j|jt|jj }|j|j!d>d?t"j#|j|j!d>d@dA|j|j!d>dBdC|j|j!d>dDd |j|j!d>dEd |j$d>}|j|j%dF|j|j&dG|jt'|j(dH|j(d>}|j|j%dF|j|j)dI|j|j&dG|j|j*t|j|j+|j,|j|j-dJ|j|j.d;|j|j/d>|j|j0d(|j|j1t2j3|j|j4dJ|j|j5t|j|j6t|j|j7|j8d*|j|j9dK|j|j:d>dKg|j|j;d4|j|j<dK|j|j=t>dLdMdS(NNs^ [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 i(R(RFRRRRtENV_HTSRV_PORTRtENV_HTSRV_USERRtENV_HTSRV_PASSt51MBtENV_SUPD_LOGFILE_MAXBYTESt10tENV_SUPD_LOGFILE_BACKUPStinfotENV_SUPD_LOGLEVELtfalsetENV_SUPD_NODAEMONt1024tENV_SUPD_MINFDSt200tENV_SUPD_MINPROCSt002tENV_SUPD_UMASKttruetENV_SUPD_NOCLEANUPtENV_SUPD_STRIP_ANSIs/bin/customcattENV_CAT1_COMMANDs /path/to/logstENV_CAT1_COMMAND_LOGDIRt3tENV_CAT1_PRIORITYtENV_CAT1_AUTOSTARTtroott ENV_CAT1_USERs /tmp/cat.logtENV_CAT1_STDOUT_LOGFILEt78KBt ENV_CAT1_STDOUT_LOGFILE_MAXBYTESRgtENV_CAT1_STDOUT_LOGFILE_BACKUPStKILLtENV_CAT1_STOPSIGNALt5tENV_CAT1_STOPWAITtENV_CAT1_STARTWAITtENV_CAT1_STARTRETRIESs/tmpt ENV_CAT1_DIRtENV_CAT1_UMASKRjs%(ENV_HOME)s/supervisord.logssupervisor_%(ENV_USER)si0i iiiRRRZRi#RqRrRiis%/bin/customcat --logdir=/path/to/logsiiRs /some/path(?R RRRRFRfRwRxRRRJRR/R"RNRHRRRRRRtINFORR9RRRR5Rt strip_ansiRRRRRRR#RRIRRRRRRRRRRRRRRRRRRRRRRR( RRRRFRsRLR1RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRs#              cCs|j}td}tj}tjj|d}t|d}|j||j z||_ |j dgWdt j |dtX|j|jtjj||j|jtjj||j|jtjj|d|j|jtjj|ddS(Ns [supervisord] childlogdir=%(here)s directory=%(here)s logfile=%(here)s/supervisord.log pidfile=%(here)s/supervisord.pid ssupervisord.confRRjRssupervisord.logssupervisord.pid(RfR RwRRORyRzRRRR/RNRRR5RHRRRR(RRsRRRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_options_supervisord_section_expands_here9s(          c Cs|j}td}tj}tjj|d}t|d}|j||j z||_ |j dgWdt j |dtX|jj}|jd}|j|jd|jd}|j|jtjj|d|j|jtjj|d |j|jitjj|d d 6|j|jd tjj|d |j|jtjj|d|j|jtjj|ddS(Ns- [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 ssupervisord.confRRjRiR t thedirectorysbin/catR]tFOOsunix://ssupervisord.socks stdout.logs stderr.log(RfR RwRRORyRzRRRR/RNRRR5RRRRHR#RRRRRpRR( RRsRRRRR1tgroupR ((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_options_program_section_expands_hereUs8               c Cs|j}td}tj}tjj|d}t|d}|j||j z||_ |j dgWdt j |dtX|jj}|jd}|j|jd|jd}|j|jtjj|d|j|jtjj|d |j|jitjj|d d 6|j|jd tjj|d |j|jtjj|d|j|jtjj|ddS(NsP [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 ssupervisord.confRRjRitmemmonRs bin/memmonR]Rsunix://ssupervisord.socks stdout.logs stderr.log(RfR RwRRORyRzRRRR/RNRRR5RRRRHR#RRRRRpRR( RRsRRRRR1RR ((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt/test_options_eventlistener_section_expands_here}s8               c Cs8|j}td}|d7}tj}tjj|d}t|d}|j||j z4idd6dd6|_ ||_ |j d gWdt j|d tX|jj}|j|jtjj|d |jd }|jd }d tjj|dtjf} |j|j| dS(Nse [supervisord] logfile = %(here)s/%(ENV_LOGNAME)s.log [program:cat] s\command = %(here)s/bin/cat --foo=%(ENV_FOO)s --num=%(process_num)d --node=%(host_node_name)sssupervisord.confRtmainlogt ENV_LOGNAMER^RRjRs mainlog.logis%s --foo=bar --num=0 --node=%ssbin/cat(RfR RwRRORyRzRRRRR/RNRRR5RRRHRRRRRR( RRsRRRRRt cat_grouptcat_0R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_options_expands_combined_expansionss2            cCstj}tjj|d}td}t|d}|j||j|j }ze||_ y!|j dt |j dWn4tk r}|jt|jdd|nXWdtj|dtXdS( Nssupervisord.confsq [supervisord] [program:cat] command = /bin/cat stopsignal = NOTASIGNAL RRsnothing raisedisQvalue 'NOTASIGNAL' is not a valid signal name in section 'program:cat' (file: %r)R(RwRRORyRzR RRRRfR/RRR9RRRHtstrRjRRR5(RRRRRRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt.test_options_error_handler_shows_main_filenames$      c CsLtj}tjj|d}td|}t|d}|j||jtjj|d}tj |tjj|d}td}t|d}|j||j|j }ze||_ y!|j dt |jdWn4tk r/}|jt|jd d |nXWdtj|d tXdS( Nssupervisord.confsP [supervisord] [include] files=%s/conf.d/*.conf Rsconf.ds included.confsY [program:cat] command = /bin/cat stopsignal = NOTASIGNAL Rsnothing raisedisQvalue 'NOTASIGNAL' is not a valid signal name in section 'program:cat' (file: %r)R(RwRRORyRzR RRRRRfR/RRR9RRRHRRjRRR5( RRRRRRt included_confRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt2test_options_error_handler_shows_included_filenames4          cCs^|j}td}ddlm}|}|j||jt|j|dddS(Ns) [program:spaces are bad] i(RFsprogram:spaces are bad( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt3test_processes_from_section_bad_program_name_spaces s    cCs^|j}td}ddlm}|}|j||jt|j|dddS(Ns) [program:colons:are:bad] i(RFsprogram:colons:are:bad( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt3test_processes_from_section_bad_program_name_colonss    cCs^|j}td}ddlm}|}|j||jt|j|dddS(NsN [program:foo] command = /bin/cat numprocs = 2 i(RFs program:foo( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt5test_processes_from_section_no_procnum_in_processname#s    cCs|j}td}ddlm}|}|j|y$|j|dd|jdWn0tk r}|j |j dj dnXdS(Ns [program:foo] i(RFs program:foosnothing raisedis6program section program:foo does not specify a command( RfR RRFRJRRRRRmRjR(RRsRRFRLR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_processes_from_section_no_command0s    cCs^|j}td}ddlm}|}|j||jt|j|dddS(Ns^ [program:foo] command = /bin/cat process_name = %(not_there)s i(RFs program:foo( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt?test_processes_from_section_missing_replacement_in_process_name?s    cCs^|j}td}ddlm}|}|j||jt|j|dddS(Ns` [program:foo] command = /bin/cat process_name = %(program_name) i(RFs program:foo( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt:test_processes_from_section_bad_expression_in_process_nameLs    cCs^|j}td}ddlm}|}|j||jt|j|dddS(Ns_ [program:foo] command = /bin/cat process_name = colons:are:bad i(RFs program:foo( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt5test_processes_from_section_bad_chars_in_process_nameYs    cCs|j}td}ddlm}|}|j||j|dd}|jt|d|d}|j|jt |j|j t dS(Ns| [program:foo] command = /bin/cat process_name = %(program_name)s stopasgroup = true i(RFs program:fooR^ii( RfR RRFRJRRHRIRR5R(RRsRRFRLRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt;test_processes_from_section_stopasgroup_implies_killasgroupfs     cCs^|j}td}ddlm}|}|j||jt|j|dddS(Ns [program:foo] command = /bin/cat process_name = %(program_name)s stopasgroup = true killasgroup = false i(RFs program:foo( RfR RRFRJR4RRR(RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt>test_processes_from_section_killasgroup_mismatch_w_stopasgroupws    cCs|j}td}ddlm}|}|j|y|j|ddWn,tk r}|jdt |knX|j ddS(Nsh [program:foo] command = /bin/cat environment = KEY1=val1,KEY2=val2,KEY3 i(RFs program:foos^Unexpected end of key/value pairs in value 'KEY1=val1,KEY2=val2,KEY3' in section 'program:foo's9instance.processes_from_section should raise a ValueError( RfR RRFRJRRRRmRR(RRsRRFRLR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt=test_processes_from_section_unexpected_end_of_key_value_pairss    cCs|j}td}tjdd}zyW|j||jddlm}|}|j|j |j |ddWn1t k r}|j |jdd|j nX|jd Wd|jXdS( Ns2 [program:foo] ;no command Rsw+i(RFs program:fooisZprogram section program:foo does not specify a command in section 'program:foo' (file: %r)snothing raised(RfR RwRRRRRFRR#RRRRHRjRR(RRsRRRFRLR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt=test_processes_from_section_shows_conf_filename_on_valueerrors$     cCs|j}td}ddlm}|}t|_|j||j|dd|j |j dd|j |j dddS( Ns [program:foo] command = /bin/foo stdout_logfile = AUTO stdout_logfile_maxbytes = 0 stderr_logfile = AUTO stderr_logfile_maxbytes = 0 i(RFs program:fooisFor [program:foo], AUTO logging used for stdout_logfile without rollover, set maxbytes > 0 to avoid filling up filesystem unintentionallyisFor [program:foo], AUTO logging used for stderr_logfile without rollover, set maxbytes > 0 to avoid filling up filesystem unintentionally( RfR RRFRRhRJRRRHR (RRsRRFRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt,test_processes_from_autolog_without_rollovers     cCstd}ddlm}|}|j||j}|j|}|jt|d|d}|j|jd|j|j d|jt|j ddS(Ns [program:many] process_name = %(program_name)s_%(process_num)s command = /bin/cat numprocs = 2 priority = 1 i(RFiitmanyi( R RRFRJRftprocess_groups_from_parserRHRIR#RR(RRRFRLRstgconfigstgconfig((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_homogeneous_process_groups_from_parsers     cCsxtd}ddlm}ddlm}|}|j||j}|j|}|jt |d|d}|j|j d|j|j ||jt |j d|d }|j|j d |j|j d|j|j ||jt |j d|d}|j|j d |j|j d |j|j ||jt |j ddS( Ns [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 i(RF(tdefault_handleriitbiziiR tdog(R RRFtsupervisor.dispatchersRRJRfRRHRIR#tresult_handlerRR(RRRFRRLRsRtgconfig1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_event_listener_pools_from_parsers.       c Cstd}ddlm}ddlm}|j}itjd6dd6dd 6d d 6d d 6dd6|_|}|j|_ |j ||j |}|j t |d|d}|j |jd|j |jd|j |j||j t |jd|d}|j |jd|j |jd|j |j||j t |jd|jd} |j | jd|j | jd |j | jd|jd} |j | jd|j | jd |j | jddS(Ns [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 i(RF(RRRRtmyeventlistenertENV_EL1_PROCNAMEs/bin/dogtENV_EL1_COMMANDRgtENV_EL1_NUMPROCSt1tENV_EL1_PRIORITYiiR iiRtmyeventlistener_dog_0tmyeventlistener_dog_1(R RRFRRRfRwRxRRRJRRHRIR#RRRR( RRRFRRsRLRtgconfig0Rtdog0tdog1((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytAtest_event_listener_pools_from_parser_with_environment_expansions sD          cCstd}ddlm}|}|j||j}y|j||jdWn*tk r}|j|j ddnXdS(Nsl [eventlistener:dog] events=EVENT command = /bin/dog buffer_size = 0 i(RFsnothing raisedis8[eventlistener:dog] section sets invalid buffer_size (0)( R RRFRJRfRRRRHRj(RRRFRLRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt3test_event_listener_pool_disallows_buffer_size_zero@ s     cCstd}ddlm}|}|j||j}y|j||jdWn*tk r}|j|j ddnXdS(Ns [eventlistener:dog] events=PROCESS_COMMUNICATION command = /bin/dog redirect_stderr = True i(RFsnothing raisedis[eventlistener:dog] section sets redirect_stderr=true but this is not allowed because it will interfere with the eventlistener protocol( R RRFRJRfRRRRHRj(RRRFRLRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt2test_event_listener_pool_disallows_redirect_stderrR s     cCstd}ddlm}ddlm}|}|j||j}|j|}|jt |d|d}|j|j |dS(Ns [eventlistener:dog] events=PROCESS_COMMUNICATION command = /bin/dog result_handler = supervisor.tests.base:dummy_handler i(RF(t dummy_handlerii( R RRFtsupervisor.tests.baseRRJRfRRHRIR(RRRFRRLRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt2test_event_listener_pool_with_event_result_handlere s     cCstd}ddlm}|}|j||j}y|j||jdWn*tk r}|j|j ddnXdS(Ns [eventlistener:cat] events=PROCESS_COMMUNICATION command = /bin/cat result_handler = supervisor.tests.base:nonexistant i(RFsnothing raisedisOsupervisor.tests.base:nonexistant cannot be resolved within [eventlistener:cat]( R RRFRJRfRRRRHRj(RRRFRLRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt4test_event_listener_pool_result_handler_unimportablew s     cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [eventlistener:dog] process_name = %(program_name)s_%(process_num)s command = /bin/dog numprocs = 2 priority = 1 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_event_listener_pool_noeventsline s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [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 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_event_listener_pool_unknown_eventtype s    cCsdddlm}ddlm}td}ddlm}|}|j||j}t}ddt j t j f|_ t}ddt j f|_ t d|t d|t d|d } | ||} t j t j f} |jt| d | d } |j| j||j| jd |j| jd |j| jjd|j| | jj|jtdd| jj|jd| jj|jt| jd| jd } |j| j|| d }|j|jd|j|jd|j|jjd|j| |jj|jtdd|jj|jt|jd| d}|j|jd|j|jjd|jt|jd | d}|j|jd|j|jjd|jd|jj|jtdd|jj|jt|jd dS(Ni(tFastCGIGroupConfig(tFastCGIProcessConfigs [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 (RFs pwd.getpwuids pwd.getpwnams grp.getgrnamcSs |j|S(N(R(RsRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytget_process_groups siiR]isunix:///tmp/foo.sockt666iiiR^isunix:///tmp/bar.sockt700itcubstcp://localhost:6000tflubsunix:///tmp/flub.sock(RRRR RFRJRfRRRRRt return_valueRRHRIt __class__R#Rt socket_configturlt get_ownerRtget_modet get_backlogR(RRRRRFRLRstpwd_mocktgrp_mockRRt exp_ownert gconf_foot pconfig_foot gconf_bart gconf_cubt gconf_flub((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_fcgi_programs_from_parser sd         "  "  "cCseddlm}ddlm}td}ddlm}|j}i dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6|_|}|j|_|j|t }ddt j t j f|_t }ddt j f|_td|td|td|d} | ||} t j t j f} |jt| d| d} |j| j||j| jd |j| jd|j| jjd!|j| | jj|jtd"d#| jj|jd$| jj|jt| jd%| jd} |j| j||j| jd&dS('Ni(R(Rs [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 (RFs/tmpRRRs.usocktENV_FOO_SOCKET_EXTttestusertENV_FOO_SOCKET_USERt0666tENV_FOO_SOCKET_MODEt32676tENV_FOO_SOCKET_BACKLOGsfcgi-tENV_FOO_PROCESS_PREFIXR^tENV_FOO_COMMAND_ARG1RgtENV_FOO_NUMPROCSR tENV_FOO_PRIORITYs pwd.getpwuids pwd.getpwnams grp.getgrnamcSs |j|S(N(R(RsRL((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR& siiR]sunix:///tmp/foo.usockRiiis/bin/foo --arg1=bar(RRRR RFRfRRRJRRRRRR RRHRIR!R#RR"R#R$RR%R&RR(RRRRRFRsRLR'R(RRR)R*R+((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt:test_fcgi_programs_from_parser_with_environment_expansions sT            " cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] process_name = %(program_name)s_%(process_num)s command = /bin/foo numprocs = 2 priority = 1 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_fcgi_program_no_socket@ s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket=junk://blah process_name = %(program_name)s_%(process_num)s command = /bin/foo numprocs = 2 priority = 1 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_fcgi_program_unknown_socket_protocolN s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket=unix://relative/path process_name = %(program_name)s_%(process_num)s command = /bin/foo numprocs = 2 priority = 1 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt$test_fcgi_program_rel_unix_sock_path] s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket=tcp://missingport process_name = %(program_name)s_%(process_num)s command = /bin/foo numprocs = 2 priority = 1 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_fcgi_program_bad_tcp_sock_formatl s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [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 i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_fcgi_program_bad_expansion_proc_num{ s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket=tcp://localhost:8000 socket_owner=nobody:nobody command = /bin/foo i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_fcgi_program_socket_owner_set_for_tcp s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket = tcp://localhost:8000 socket_mode = 0777 command = /bin/foo i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_fcgi_program_socket_mode_set_for_tcp s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket = unix:///tmp/foo.sock socket_owner = sometotaljunkuserthatshouldnobethere command = /bin/foo i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt"test_fcgi_program_bad_socket_owner s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket = unix:///tmp/foo.sock socket_mode = junk command = /bin/foo i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt!test_fcgi_program_bad_socket_mode s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [fcgi-program:foo] socket = unix:///tmp/foo.sock socket_backlog = -1 command = /bin/foo i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt$test_fcgi_program_bad_socket_backlog s    cCstd}ddlm}|}|j||j}|j|}|jt|d|d}|j|jd|j|j d|jt|j ddS( Ns [program:one] command = /bin/cat [program:two] command = /bin/cat [group:thegroup] programs = one,two priority = 5 i(RFiitthegroupii( R RRFRJRfRRHRIR#RR(RRRFRLRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_heterogeneous_process_groups_from_parser s     cCstd}ddlm}|}|j||j}|j|}|jt|d|d}|j|jd|j|j d|jt|j d|d}|j|jd|j|j d |jt|j ddS( NsJ [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 i(RFiiRiRFi( R RRFRJRfRRHRIR#RR(RRRFRLRsRt manyconfigR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_mixed_process_groups_from_parser1 s       cCstd}ddlm}|}|j||j}|j|}|jt|d|d}|j|jd|j|j d|jt|j ddS( NsP [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 i(RFiiRFii( R RRFRJRfRRHRIR#RR(RRRFRLRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_mixed_process_groups_from_parser2 s     cCstd}ddlm}|}|j||j}|j|}|jt|d|d}|j|jd|j|j d|jt|j ddS( Ns [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 i(RFiiRFii( R RRFRJRfRRHRIR#RR(RRRFRLRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_mixed_process_groups_from_parser3# s     cCsXtd}ddlm}|}|j||j}|jt|j|dS(Ns [program:one] command = /bin/cat [fcgi-program:one] command = /bin/cat [group:thegroup] programs = onei(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_ambiguous_process_in_heterogeneous_groupG s    cCsXtd}ddlm}|}|j||j}|jt|j|dS(Nsj [program:one] command = /bin/cat [group:foo] programs = notthere i(RF(R RRFRJRfR4RR(RRRFRLRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_unknown_program_in_heterogeneous_groupX s    cCstdt}ddlm}|}|j||j}|j|dd}|jt|d|d}|j|dd|j|dt j t|j|d id d 6d d 6dS(Nsv [rpcinterface:dummy] supervisor.rpcinterface_factory = %s foo = bar baz = qux i(RFssupervisor.rpcinterface_factorys rpcinterface:iitdummyiR^R]tquxR_( R RRRFRJRft get_pluginsRHRItsystmodules(RRRFRLRst factoriestfactory((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_rpcinterfaces_from_parserg s       cCstd}ddlm}|j}|}itd6dd6|_|j||j|dd}|jt |d |d }|j|d d |j|d t j t|j|d idd 6dS(Nsq [rpcinterface:dummy] supervisor.rpcinterface_factory = %(factory)s foo = %(pet)s i(RFRTR tpetssupervisor.rpcinterface_factorys rpcinterface:iiRNiR]( R RRFRfRRRJRPRHRIRQRR(RRRFRsRLRSRT((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt1test_rpcinterfaces_from_parser_factory_expansions{ s       cCstd}ddlm}|}|j||j}y$|j|dd|jdWn*tk r}|j|j ddnXdS( Ns] [rpcinterface:dummy] # note: no supervisor.rpcinterface_factory here i(RFssupervisor.rpcinterface_factorys rpcinterface:snothing raisedisOsection [rpcinterface:dummy] does not specify a supervisor.rpcinterface_factory( R RRFRJRfRPRRRHRj(RRRFRLRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt.test_rpcinterfaces_from_parser_factory_missing s     cCstd}ddlm}|}|j||j}y$|j|dd|jdWn*tk r}|j|j ddnXdS( Ns[ [rpcinterface:dummy] supervisor.rpcinterface_factory = nonexistant i(RFssupervisor.rpcinterface_factorys rpcinterface:snothing raisedis:nonexistant cannot be resolved within [rpcinterface:dummy]( R RRFRJRfRPRRRHRj(RRRFRLRsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt5test_rpcinterfaces_from_parser_factory_not_importable s     cCstj}z|j}||_d}||_|jd|d}|d}|d}t|dt|d|j|jt j j ||jt j j ||jt j j |Wdt j |XdS(NRR]R[s.1s.2R(RwRRfRRtget_autochildlog_nameRtclear_autochildlogdirRRORyR_RR(RtdnRstsidtlogfntfirsttsecond((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_clear_autochildlogdir s          cCsH|j}d|_t|_|j|j|jjdgdS(Ns!/tmp/this/cant/possibly/existjjjjsCould not clear childlog dir(RfRRRhR[RHR(RRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt*test_clear_autochildlogdir_listdir_oserror s     cCstj}|j}||_|j}tjj|d|}t|d}|j d|j d}||_ t |_ |j|j|j jd|gdS(Nscat-stdout---%s-ayWAp9.logRtlogcWsttjdS(N(RbRtENOENT(Rj((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt raise_oserror ssFailed to clean up '%s'(RwRRfRRRORyRzRRRtremoveRRhR[RHR(RRRstidentR!RRe((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_clear_autochildlogdir_unlink_oserror s          cst}|j}d}||_gfd}||_|j||jtdd}|jdj|dS(NcSstjtjdS(N(RRTRt EADDRINUSE(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytraise_eaddrinuse scsj|dS(N(RV(R@(RA(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRB sis$Another program is already listeningi( RRftmake_http_serversRCtopenhttpserversRHRIRmR(RRRsRjRBR((RAsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt;test_openhttpservers_reports_friendly_usage_when_eaddrinuse s      cst}|j}d}||_gfd}||_|j||jtddtj}|jd|dS(NcSstjtjdS(N(RRTRtEPERM(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRk scsj|dS(N(RV(R@(RA(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRB sisBCannot open an HTTP server: socket.error reported errno.EPERM (%d)i( RRfRkRCRlRHRIRRn(RRRsRkRBR((RAsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt4test_openhttpservers_reports_socket_error_with_errno s       cst}|j}d}||_gfd}||_|j||jtdd}|jd|dS(NcSstjddS(Nsuh oh(RRT(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRk scsj|dS(N(RV(R@(RA(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRB sis7Cannot open an HTTP server: socket.error reported uh ohi(RRfRkRCRlRHRI(RRRsRkRBR((RAsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt0test_openhttpservers_reports_other_socket_errors s      cst}|j}d}||_gfd}||_|j||jtdd}|jd|dS(NcSstddS(Nsnot prefixed with help(R(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRk scsj|dS(N(RV(R@(RA(sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRB sisnot prefixed with helpi(RRfRkRCRlRHRI(RRRsRkRBR((RAsA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_openhttpservers_reports_value_errors s      cCsAt}|j}d}||_|jt|j|dS(NcSs tdS(N(t OverflowError(R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRk, s(RRfRkR4RrRl(RRRsRk((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt9test_openhttpservers_does_not_catch_other_exception_types( s      cCs/|j}|jd}|j|ddS(NsNo user specified to setuid to!(Rftdrop_privilegesRRH(RRsR&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_drop_privileges_user_none5 s s pwd.getpwuidR R]i i"s os.getuidcCs5|j}|jtj}|j|ddS(N(RfRtROtgetuidRHR(RRsR&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_drop_privileges_nonroot_same_user: s i7cCs/|j}|jd}|j|ddS(Ni*s$Can't drop privilege as nonroot user(RfRtRH(RRsR&((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_drop_privileges_nonroot_different_userA s cCsR|j}d|_t|_|j|jjj|jjjdS(NcSsdS(N(R(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytJ s(Rft _daemonizeRRot daemonizetbefore_daemonizetassert_called_once_withtafter_daemonize(RRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt4test_daemonize_notifies_poller_before_and_after_forkH s     N(RRRRfRRRRR RRRRRRR#R'R)R*R+R/R2R7R:R=R?RDRERMRNRORPRQRRRSRURVRWRXR`RcRfRkRlRnRqRtRwRyRRRRRRRRRRRbRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR/R;R<R=R>R?R@RARBRCRDRERGRIRJRKRLRMRURWRXRYRaRbRhRmRoRpRqRsRuRRwRxR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRs     D    % & !                             ! 2       }  ( ) &  &        . 4       Y @       #  $              !$!$tProcessConfigTestscBsbeZdZdZdZdZdZdZdZdZ dZ d Z RS( cCsddlm}|S(Ni(t ProcessConfig(RR(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRQ scOsAi}xdD]}|||t}|j|dd}|j|j|jdS(NR(RRfRRHtget_path(RR1Rs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt.test_get_path_env_is_None_delegates_to_optionsf s cCsEt}|j|didd6}|j|j|jdS(NRR R(RRfRHR(RR1Rs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt8test_get_path_env_dict_with_no_PATH_delegates_to_optionsk s cCsdt}|j|didd6}|j|j|j|j|jdddgdS(NRs/a:/b:/cRs/as/bs/c(RRftassertNotEqualRRH(RR1Rs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_get_path_env_dict_with_PATH_uses_itp s cCstt}|j|}ddlm}||_||_|j|j|j|j|j|j|jdS(Ni(R( RRfR.RRRtcreate_autochildlogsRHt tempfile_name(RR1RsR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_create_autochildlogsv s    cCs^t}|j|}|j}ddlm}|j|j||j|jddS(Ni(t Subprocess( RRft make_processtsupervisor.processRRHR!RR(RR1RstprocessR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_make_process s   cCsat}|j|}|jd}ddlm}|j|j||j|jddS(NR?i(R(RRfRRRRHR!R(RR1RsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_make_process_with_group s  cCst}|j|}t|_t|}|j|\}}|j|djdddlm }|j|dj ||j|dd|j|djdddlm }|j|dj ||j|dddS(NiR[i(tProcessCommunicationStdoutEventiRZ(tProcessCommunicationStderrEvent( RRfR9RR tmake_dispatchersRHtchanneltsupervisor.eventsRt event_typeR(RR1Rstprocess1t dispatchersRRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_make_dispatchers_stderr_not_redirected s   cCs|t}|j|}t|}|j|\}}|j|djd|j|dd|j|dddS(NiR[RZ(RRfR RRHRR(RR1RsRRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt'test_make_dispatchers_stderr_redirected s  ( RRRRfRRRRRRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRP s        tEventListenerConfigTestscBs#eZdZdZdZRS(cCsddlm}|S(Ni(tEventListenerConfig(RR(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR scOs\i}xdD]}|||eZdZdZdZdZdZdZRS(cCsddlm}|S(Ni(R(RR(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRM scOs|j||S(N(R(RRjR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRfQ scCst}td}|j|ddg|}|j|j||j|jd|j|jd|j|jg|j|j|dS(NiRi( RR RfRHR1R#RRR"(RR1t sock_configRs((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRT s  cCst}td}|j|ddg|}td}|j|ddg|}|j||k|j||kdS(NiRi(RR RfRmR(RR1t sock_config1t instance1t sock_config2t instance2((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_same_sockets_are_equal^ s   cCst}td}|j|ddg|}td}|j|ddg|}|j||k|j||kdS(NiRii(RR RfRmR(RR1RRRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_diff_sockets_are_not_equali s   cCsct}td}|j|ddg|}|j}ddlm}|j|j|dS(NiR#ii(tFastCGIProcessGroup(RR RfRRRRHR!(RR1RRsRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRt s    (RRRRfRRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRL s    tSignalReceiverTestscBs,eZdZdZdZdZRS(cCs3ddlm}|}|j|jddS(Ni(tSignalReceiver(RRRHR6R(RRtsr((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_returns_None_initially} s cCsddlm}|}|jtjd|jtjd|j|jtj|j|jtj|j|jddS(Ni(Rtframe( RRR4RRR5RHR6R(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt&test_returns_signals_in_order_received s cCsrddlm}|}|jtjd|jtjd|j|jtj|j|jddS(Ni(RR(RRR4RRRHR6R(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_does_not_queue_duplicate_signals s  cCsddlm}|}|jtjd|j|jtj|j|jd|jtjd|j|jtj|j|jddS(Ni(RR( RRR4RRRHR6RR5(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt%test_queues_again_after_being_emptied s (RRRRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR| s  tUnhosedConfigParserTestscBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZRS(cCsddlm}|S(Ni(RF(RRF(RRF((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR scOs|j||S(N(R(RRjR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRf scCsE|j}|jdddl}|j|j|jdddS(Ns[supervisord] iRtmissing(RfRJt ConfigParserR4t NoOptionErrortsaneget(RtparserR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_saneget_no_default s     cCsE|j}|jd|jdddd}|j|ddS(Ns[supervisord] RRR*R?(RfRJRRH(RRtresult((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_saneget_with_default s  cCsU|j}idd6|_|jd|jdddd}|j|ddS(NRRVs[supervisord] RR]R*s%(pet)s(RfRRJRRH(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt$test_saneget_with_default_and_expand s   cCs[|j}idd6|_|jd|jdddddt}|j|ddS( NRRVs[supervisord] RR]R*s%(pet)st do_expand(RfRRJRR9RH(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt#test_saneget_with_default_no_expand s   cCsE|j}|jd|jdddt}|j|ddS(Ns[supervisord] foo=%(pet)s RR]Rs%(pet)s(RfRJRR9RH(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt!test_saneget_no_default_no_expand s  cCsO|j}idd6|_|jd|jdd}|j|ddS(NRRVs[supervisord] foo=%(pet)s RR](RfRRJRRH(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt(test_saneget_expands_instance_expansions s   cCs\|j}idd6|_|jd|jdddidd6}|j|ddS(NRRVs[supervisord] foo=%(pet)s RR]RR (RfRRJRRH(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt#test_saneget_expands_arg_expansions s   cCs=|j}|jd|j|j|jdddS(Ns [%s] foo=bar R]R^(RfRJt mysectionRHt getdefault(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt+test_getdefault_does_saneget_with_mysection s cCsstjdd}|j}z-|jd|j|j|j}Wd|jX|j||jgdS(NRsw+s[foo] ( RwRRfRRRR#RRH(RRRt ok_filenames((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_read_filenames_as_string s    cCsvtjdd}|j}z0|jd|j|j|jg}Wd|jX|j||jgdS(NRsw+s[foo] ( RwRRfRRRR#RRH(RRRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_read_filenames_as_list s    cCstjjtjjtd}tjdd}|j}z3|jd|j |j ||j g}Wd|j X|j ||j gdS(NRRsw+s[foo] (RORyRzRRRwRRfRRRR#RRH(RRRRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt3test_read_returns_ok_filenames_like_rawconfigparser s!    cCs#|j}|j|jidS(N(RfRHtsection_to_file(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt)test_read_section_to_file_initially_empty s cCsxtjdd}z:|jd|j|j}|j|jgWd|jX|j|j d|jdS(NRsw+s[foo] R]( RwRRRRfRR#RRHR(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt'test_read_section_to_file_read_one_files    cCstjdd}tjdd}zW|jd|j|jd|j|j}|j|j|jgWd|j|jX|j|j d|j|j|j d|jdS(NRsw+s[foo] s[bar] R]R^( RwRRRRfRR#RRHR(Rtf1tf2R((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt-test_read_section_to_file_read_multiple_files s       (RRRRfRRRRRRRRRRRRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyR s             tUtilFunctionsTestscBseZdZdZRS(cCsFddlm}|j|ddd|j|ddddS(Ni(t make_namespecRRs group:process(RRRH(RR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_make_namespecscCsrddlm}|}|j|dd|j|dd |j|dd |j|dd dS( Ni(tsplit_namespecs process:groupRRsgroup:sgroup:*(sprocesssgroup(sprocesssprocess(sgroupN(sgroupN(RRRHR(RRR((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyttest_split_namespec"s (RRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyRs cCstjtjtS(N(tunittestt findTestCasesRQRRR(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pyt test_suite*st__main__t defaultTestR(*t__doc__RORQRwRRRRRRRtmockRRRtsupervisor.loggersRRRRRRR R R R tTestCaseR RdRRRRRRRRRRRRtmain(((sA/usr/lib/python2.7/site-packages/supervisor/tests/test_options.pytsZ         Z360!