Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/twisted/test/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/twisted/test/test_application.pyc


=Nc@sdZddlZddlZddlZddlmZddlmZmZddlm	Z	m
Z
mZddlm
Z
ddlmZddlmZmZdd	lmZmZdd
lmZmZddlmZddlmZd
fdYZdejfdYZeedrDejZ ej!Z"n
dZ Z"dejfdYZ#dejfdYZ$dejfdYZ%dejfdYZ&dejfdYZ'dej(fdYZ)dfd YZ*d!fd"YZ+d#ej,fd$YZ-d%ejfd&YZ.d'ejfd(YZ/d)ej0fd*YZ1d+ejfd,YZ2dS(-sU
Tests for L{twisted.application} and its interaction with
L{twisted.persisted.sob}.
iN(tStringIO(tunittesttutil(tservicetinternettapp(tsob(tusage(t
interfacestdefer(twiretbasic(tprotocoltreactor(treactors(t
MemoryReactortDummycBseZdZRS(N(t__name__t
__module__tNonetprocessName(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRstTestServicecBs}eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZRS(
cCs0tj}|jd|j|jddS(Nthello(RtServicetsetNametassertEqualtname(tselfts((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestNames
cCsUtj}tj}|j||jt||g|j|j|dS(N(RRtMultiServicetsetServiceParentRtlisttparent(RRtp((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
testParent!s

cCsjtj}tjd}|j||jttj||g|j|jtj|dS(Nt(RRtApplicationRRR tIServiceCollectionR!(RRR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestApplicationAsParent(s

"cCs{tj}tj}|jd|j||jt||g|j|j||j|jd|dS(NR(	RRRRRRR R!tgetServiceNamed(RRR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestNamedChild/s

cCsLtj}tj}|jd|j||jt|jddS(NRtlala(RRRRRtfailUnlessRaisestRuntimeError(RRR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestDoublyNamedChild8s


cCsetj}tj}|jd|j|tj}|jd|jt|j|dS(NR(RRRRRR+R,(RRR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestDuplicateNamedChild?s


cCstj}tj}|j||jt||g|j|j||j|jt|g|j|jddS(N(	RRRRRR R!tdisownServiceParentR(RRR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
testDisowningHs

cCsVtj}|j|j|j|j|j|j|j|jdS(N(RRtassert_trunningtstartServicetstopService(RR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestRunningRs

cCstj}tj}|j||j|j|j|j|j|j|j|j|j|j|j|j|j|jdS(N(RRRRR1R2R3R4(RRR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestRunningChildren1Zs


csztjfd}tj}||_||_tj}j||j||j|jdS(NcsjjdS(N(R1R2((RR(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytcheckRunningis(RRR4R3RR(RR7ttR"((RRsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestRunningChildren2gs		


cCsotj}|jtj}|j|j|j||j|j|j|j|jdS(N(RRR3RR1R2RR/(RR"R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestAddingIntoRunningts


csttjfd}|_tj}tj}j||j||j|jjdS(Ncs
d_dS(Ni(tprivilegedStarted((R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytpsss(RRtprivilegedStartServiceRRR1R;(RR<ts1R"((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestPrivileged~s	


cCsJtj}|jtj|}|j|j|j|jdS(N(RRR3tcopyR1R2(RRR>((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestCopyings

(RRRR#R'R)R-R.R0R5R6R9R:R?RA(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs									
		
	
	
	tgetuiditTestProcesscBs#eZdZdZdZRS(cCs<tjdd}|j|jd|j|jddS(Nii(RtProcessRtuidtgid(RR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestIDscCstjd}|j|jd|j|jdtjdd}|j|jd|j|jdtj}|j|jd|j|jddS(NiRF(RRDRRERFR(RR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestDefaultsscCs?tj}|j|jdd|_|j|jddS(NR(RRDRRR(RR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestProcessNames	(RRRGRHRI(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRCs		tTestInterfacescBs#eZdZdZdZRS(cCs#|jtjjtjdS(N(R1RtIServicet
providedByR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestServicescCsB|jtjjtj|jtjjtjdS(N(R1RRKRLRR&(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestMultiServicescCs#|jtjjtjdS(N(R1RtIProcessRLRD(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestProcesss(RRRMRNRP(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRJs		tTestApplicationcBs,eZdZdZdZdZRS(cCs4tjdtjddtjddddS(NRii(RR%(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestConstructors
cCstjd}|jtj|jd|jtj|jdtjdd}|jtj|jd|jtj|jdtjddd}|jtj|jd|jtj|jddS(NRii(RR%RRORERRF(Rta((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestProcessComponentscCsptjd}|jtj|tj|k|jtj|jd|jtj|jddS(NR(	RR%R1RKR&RRR!R(RRS((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestServiceComponents%cCs^tjd}tj|}|j|jd|j|jd|j|j|kdS(NRtpickle(	RR%RtIPersistableRtstyleRR1toriginal(RRSR"((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestPersistableComponents
(RRRRRTRURZ(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRQs			tTestLoadingcBseZdZRS(cCstjd}tj|}xadjD]S}|j||jtjd|d|}|jtj	|j
dq+Wtdd}|jddg|j
tjdd	}|jtj	|j
ddS(
NRs
source pickleshello.tais	hello.tactws(from twisted.application import service
s+application = service.Application('hello')
tpython(RR%RRWtsplittsetStyletsavetloadApplicationRRKRtopent
writelinestclose(RRSR"RXta1tf((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_simpleStoreAndLoads

 

(RRRg(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR[stTestAppSupportcBs,eZdZdZdZdZRS(cCs|jtjdddS(Ni(RRt
getPassphraseR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestPassphrasescCs;tjd}idd6dd6dd6}xdjD]}|j}d|idd6j||<tj|j|tj|j	ddt
j|d}|jtj
|jdq7W|j}d|d<tdd	}|jd
dg|jt
j|d}|jtj
|jddS(
sL
        Test loading an application file in different dump format.
        RtfiletsourceR]s
source picklethelloapplicationRVtfilenameR\s(from twisted.application import service
s+application = service.Application('hello')
N(RR%RR^R@tgetRRWR_R`RtgetApplicationRRKRRbRcRd(RRSt
baseconfigRXtconfigReRf((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestLoadApplications$ 


c	Cstjd}xdjD]}xdjD]}tj|j|tj|jddtjd|dd|dtj
d|}|jtj|j
dq/WqWdS(NR*s
source pickleRntconverttestsconverttest.outi(RR%R^RRWR_R`RtconvertStyleRRaRRKR(Rtappltinstyletoutstyletappl2((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_convertStyles
cCs<tjd}tj|d|jtj|jdS(NR*i(RR%RtstartApplicationR1RKR2(RRv((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_startApplications(RRRjRsRzR|(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRhs			tFoocBs#eZdZdZdZRS(cCs|jjddS(Nslalala
(t	transporttwrite(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytconnectionMade#scCs||j_|jjdS(N(tfactorytlineR~tloseConnection(RR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytlineReceived%scCs|jjj|jjdS(N(RtdtcallbackR(Rtreason((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytconnectionLost(s(RRRRR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR}"s		tDummyAppcBs eZdZdZdZRS(cCs||j|j<dS(N(tservicesR(RR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
addService.scCs|j|j=dS(N(RR(RR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
removeService0sN(RRRRRR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR,s	tTimerTargetcBseZdZdZRS(cCs
g|_dS(N(tl(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt__init__5scCs|jj|dS(N(Rtappend(Rtwhat((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR7s(RRRR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR4s	tTestEchocBseZdZRS(cCs|jjtdS(N(RRtTrue(RR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR;s(RRR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR:st
TestInternet2cBseZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZejd
ddeejd
ddeejd
dge_dZdZdZdZdZRS(cstjjtj}t|_tjt_t	j
d|}|j|jj
j}tj}tj|_t|_d|_t	jd||j|jj|jd|jjfd|jjd|jS(Nis	127.0.0.1tlalalacs
jS(N(R4(tx(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt<lambda>OscSstjS(N(RR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRPs(RRR3Rt
ServerFactoryRR	tDeferredRRt	TCPServerRt_porttgetHosttportt
ClientFactoryR}RRt	TCPClienttaddCallbackR(RRR8tnum((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestTCP@s"
	
		cstjtds$tjdntjtj	d}|j
|jjj
|jdfd}tj|jj|S(s
        Test L{internet.UDPServer} with a random port: starting the service
        should give it valid port, and stopService should free it so that we
        can start a server on the same port again.
        s)This reactor does not support UDP socketsics&tj}|j|jS(N(Rt	UDPServerR3R4(tignoredR8(RR"(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytonStopas
N(RtIReactorUDPR
RRtSkipTestRtDatagramProtocolRRR3RRRtassertNotEqualsR	t
maybeDeferredR4R(RR8R((R"RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_UDPTs
cs	tj}t|_tjt_tjd|d_j	j
jj}tj
}tj|_t|_d|_tjd||j|jj|jd|jjfd|jjfd|jjd|jS(Niis	127.0.0.1Rcs
jS(N(R4(R(tc(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRwscs
jS(N(R4(R(R8(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRxscSstjS(N(RR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRys(RRRR	RRRRt
privilegedR=RRRRR}RRRR3RR(RRR((RR8sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR?hs$		
		
cstj}tj|_tjd|}|j|jjj	}|j
tjtj
}fd|_tjd||}|jS(Nics
jdS(N(RR(targs(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRss	127.0.0.1(RRR
tEchoRRR3RRRR4R	RRtclientConnectionFailedR(RRR8RR((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestConnectionGettingRefused|s


cs"tjtds!tjdntjjt	j
}t|_	tj
t_tjd|}|jt	j}t|_	tj
|_d|_tjd|j|jj|jd|jjfd|jjd|jj|j||jS(Ns1This reactor does not support UNIX domain socketssecho.sktRcs
jS(N(R4(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRscSstjS(N(RR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs(RtIReactorUNIXR
RRRRRR3RRRR	RRRt
UNIXServerRRR}Rt
UNIXClientRRt_cbTestUnix(RRR8((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestUNIXs&
	
		csztjt_d|_tj|_j|jj|jd|jjfd|jjd|jS(NRcs
jS(N(R4(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRscSstjS(N(RR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs(	R	RRRRRR3RR(RRRR((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs	
cCsQtjtds!tjdntj}tj	|_t
jd|}|j|j
|jdtj|}|j|jd|j|j|jd|j|jtj}tj	|_t
jd|}|j|j
|jdtj|}|j|jd|j|j|jd|j|jdS(Ns1This reactor does not support UNIX domain socketssecho.skt(RRR
RRRRRR
RRRR3tfailIfIdenticalRR@tassertIdenticalR4tfailIfR2RRt_connection(RRR8tt1((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestVolatiles,



cstjtds!tjdntj}tj	|_t
jd|}|j|j
|j|jtj}tjfd|_tjd|S(Ns1This reactor does not support UNIX domain socketssecho.sktcs
jdS(N(RR(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs(RRR
RRRRRR
RRRR3R4RR2RR	RRtconnectUNIX(RRR8((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestStoppingServers

cCsgt}tjd|jd}|jtj|}|jtj|}|j	|j
dS(NiR(RRtTimerServiceRR3RVtdumpsR4tloadsRR2(Rttargettt0RR8((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestPickledTimers	

cstjtjddjfd}|_jjfdjfdS(NicSsddS(Nii((((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRscs|jddS(N(RR(twhy(Rt	oldFailed(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt_faileds
csjS(N(R4(R(R8(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRscs5jtggjtD]}|jj^qS(N(RtZeroDivisionErrortflushLoggedErrorstvaluet	__class__(Rto(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs(R	RRRRR3R(RR((RRRR8sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestBrokenTimers		
cCsltj|jd|jg}|j|ddd|j|ddt|jt|ddS(sM
        Instantiating L{GenericServer} emits a deprecation warning.
        toffendingFunctionsitmessages-GenericServer was deprecated in Twisted 10.1.tcategoryiN(Rt
GenericServert
flushWarningsttest_genericServerDeprecatedRtDeprecationWarningtlen(Rtwarnings((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs
	cCsltj|jd|jg}|j|ddd|j|ddt|jt|ddS(sM
        Instantiating L{GenericClient} emits a deprecation warning.
        RiRs-GenericClient was deprecated in Twisted 10.1.RiN(Rt
GenericClientRttest_genericClientDeprecatedRRR(RR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs
	c	Cshdj}x;|D]2}ttd|tds|j|qqWtjtddk	ru|jddnx|D]}xdjD]}|dkr|dkrqn|jt	t
||tt
||j}idd	6d
d6|}|jt	t||p)|d
ko)|dktt
||}|jt
j||qWq|WdS(
s
        L{twisted.application.internet} dynamically defines a set of
        L{service.Service} subclasses that in general have corresponding
        reactor.listenXXX or reactor.connectXXX calls.
        s'TCP UNIX SSL UDP UNIXDatagram MulticasttIReactoritGenerics
Server Clientt	MulticasttClienttlistentServertconnecttUDPN(R^tgetattrRR
RtremovetIReactorArbitrarytinsertt
assertTruethasattrRtmethodRRRK(RttransttrantsideRtprefixR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_everythingThere	s"
Rs-GenericServer was deprecated in Twisted 10.1.Rs-GenericClient was deprecated in Twisted 10.1.sbtwisted.internet.interfaces.IReactorArbitrary was deprecated in Twisted 10.1.0: See IReactorFDSet.cCs8x1tjD]&}|jtt|d|fq
WdS(s
        L{twisted.application.internet} dynamically defines L{service.Service}
        subclasses. This test ensures that the subclasses exposed by C{__all__}
        are valid attributes of the module.
        s3%s not importable from twisted.application.internetN(Rt__all__RR(Rtcls((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_importAll)scCs[t}t}tjd|d|}|j|j|jjd d|fdS(s
        L{internet._AbstractServer} supports a C{reactor} keyword argument
        that can be used to parametrize the reactor used to listen for
        connections.
        iR
iN(RtobjectRRR3Rt
tcpServerstpop(RR
RR8((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt#test_reactorParametrizationInServer5s
		
cCsat}t}tjdd|d|}|j|j|jjd dd|fdS(s
        L{internet._AbstractClient} supports a C{reactor} keyword arguments
        that can be used to parametrize the reactor used to create new client
        connections.
        s	127.0.0.1iR
iN(RRRRR3Rt
tcpClientsR(RR
RR8((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt#test_reactorParametrizationInClientCs		
cCst}t}tjd|d|}|j|j|jjd d|f|j|j|j|jjd d|fdS(s
        Like L{test_reactorParametrizationInServer}, but stop and restart the
        service and check that the given reactor is still used.
        iR
iN(	RRRRR3RRRR4(RR
RR8((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt0test_reactorParametrizationInServerMultipleStartRs		
#

cCst}t}tjdd|d|}|j|j|jjd dd|f|j|j|j|jjd dd|fdS(s
        Like L{test_reactorParametrizationInClient}, but stop and restart the
        service and check that the given reactor is still used.
        s	127.0.0.1iR
iN(	RRRRR3RRRR4(RR
RR8((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt0test_reactorParametrizationInClientMultipleStartbs		
 

(RRRRR?RRRRRRRRRRRtsuppressRRRRRR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR>s.						
			
								tTestTimerBasiccBs,eZdZdZdZdZRS(cswtj}tjd|jd_jj|jjd|jfd|jfd|S(NiRcs
jjS(N(R8R4(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR|scsjjjS(N(RR8R2(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR}s(	R	RRRRR8R3RR(RR((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
testTimerRunsws
cCs
|jjS(N(R8R4(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttearDownscstj}tjdf|dfgfd}tjd|_jjfd}fd}fd}|j||j||j||S(Ntbartfoocs#j\}}|j|dS(N(RR(Rtarg(twork(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttriggersicsj|djjS(NR(RR8R4(tresult(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
onFirstResultscs$jjjjjS(N(RR8R2R3(R(Rtd2(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytonFirstStops
cs!j|djjdS(NR(RR8R4(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytonSecondResults(R	RRRR8R3R(Rtd1RRRR((RRRsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestTimerRestarts



csgfd}tj}tjd|dd|_jj|jjdgd|jfd|S(Ncs3j|t|kr/|jndS(N(RRR(tdatatnumberR(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs
g{Gz?Ri
cs
jjS(N(R8R4(R(R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs(R	RRRR8R3RR(RRR((RRsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttestTimerLoopss
(RRRRRR
(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRus				tFakeReactorcBseZdZdZRS(s6
    A fake reactor with a hooked install method.
    cOs#tjj|||||_dS(sv
        @param install: any callable that will be used as install method.
        @type install: C{callable}
        N(RtReactorRtinstall(RR
Rtkwargs((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs(RRt__doc__R(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRstPluggableReactorTestCasecBsteZdZdZdZddZdZdZdZ	dZ
dZd	Zd
Z
dZRS(
s:
    Tests for the reactor discovery/inspection APIs.
    cCs.g|_g|_tj|_|jt_dS(sI
        Override the L{reactors.getPlugins} function, normally bound to
        L{twisted.plugin.getPlugins}, in order to control which
        L{IReactorInstaller} plugins are seen as available.

        C{self.pluginResults} can be customized and will be used as the
        result of calls to C{reactors.getPlugins}.
        N(tpluginCallst
pluginResultsRt
getPluginstoriginalFunctiont_getPlugins(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytsetUps			cCs|jt_dS(s>
        Restore the original L{reactors.getPlugins}.
        N(RRR(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRscCs#|jj||ft|jS(sy
        Stand-in for the real getPlugins method which records its arguments
        and returns a fixed result.
        (RRR R(Rt	interfacetpackage((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRscCsd}td}d}tj|||g|_tj}|j|jtjdfgxA|D],}|j	|krc|j|j
|PqcqcW|jddS(sP
        Test that reactor plugins are returned from L{getReactorTypes}
        tfakereactortests.fakereactortdescriptions6Reactor plugin not present in getReactorTypes() resultN(RRRRtgetReactorTypesRRtIReactorInstallerRt	shortNameRtfail(RRRRtreactorTypestr((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_getPluginReactorTypess

csKgfd}t|dtd}|j|jtgdS(sy
        Test that L{reactors.Reactor.install} loads the correct module and
        calls its install attribute.
        csjtdS(N(RR((t	installed(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR
sRt	describedN(RRR
RR(RR
t	installer((R"sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_reactorInstallations
csfgfd}d}t}d}t||||g|_tj||jtgdS(su
        Test that the L{reactors.installReactor} function correctly installs
        the specified reactor.
        csjtdS(N(RR((R"(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR
sRRN(RRRRtinstallReactorRR(RR
RRR((R"sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_installReactors
cCs&g|_|jtjtjddS(s
        Test that L{reactors.installReactor} raises L{reactors.NoSuchReactor}
        when asked to install a reactor which it cannot find.
        tsomereactorN(RtassertRaisesRt
NoSuchReactorR&(R((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_installNonExistentReactors	cCsPd}d}t}d}t||||g|_|jttj|dS(s
        Test that L{reactors.installReactor} raises an exception when asked to
        install a reactor which doesn't work in this environment.
        cSstddS(NsMissing foo bar(tImportError(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR
!sRRN(RRRR)R,RR&(RR
RRR((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_installNotAvailableReactors	csgdddtjtjffdY}fd}t|dtdg|_|}|jddd	g|jd
|jj	d|j|ddd
S(sx
        Test that the reactor selected is installed as soon as possible, ie
        when the option is parsed.
        sreactor installedssubcommands loadedtReactorSelectionOptionscs&eZfdZeeZRS(cs)jddfddfgS(Nt
subcommandcsS(N(((R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR6sstest subcommand(RR(R(texecutedtSUBCOMMAND_EVENT(RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pytsubCommands4s
(RRR2tproperty((R0R1(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR.3scsjdS(N(R((t
INSTALL_EVENTR0(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR
9sRR#s	--reactorR/iiR
N(
RtOptionsRtReactorSelectionMixinRRRtparseOptionsRtcount(RR.R
toptions((R0R1R4sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyttest_reactorSelectionMixin*s(	cCsdtjtjfdY}g|_|}t|_|jtj|j	dddg}|j
d|jd|j
d|jddS(	s
        Test that the usage mixin exits when trying to use a non existent
        reactor (the name not matching to any reactor), giving an error
        message.
        R.cBseZRS((RR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR.Lss	--reactorRR/is
help-reactorsN(RR5RR6RRt
messageOutputR)t
UsageErrorR7tassertInR(RR.R9te((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt%test_reactorSelectionMixinNonExistentFs		csdtjtjfdY}dfd}d}t}d}t||||g|_|}t|_|j	tj
|jdddg}|j|j
d	|jd
|j
d	dS(s
        Test that the usage mixin exits when trying to use a reactor not
        available (the reactor raises an error at installation), giving an
        error message.
        R.cBseZRS((RR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR.^ssMissing foo barcstdS(N(R,((R(sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR
asRRs	--reactorR/is
help-reactorsN(RR5RR6RRRRR;R)R<R7R=R(RR.R
RRRR9R>((RsA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt&test_reactorSelectionMixinNotAvailableXs	N(RRRRRRRR!R%R'R+R-R:R?R@(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRs										(3RR@tosRVRt
twisted.trialRRttwisted.applicationRRRttwisted.persistedRttwisted.pythonRttwisted.internetRR	ttwisted.protocolsR
RRR
Rttwisted.test.proto_helpersRRtTestCaseRRRBtcuruidtgetgidtcurgidRCRJRQR[RhtLineReceiverR}RRRRRRRRR(((sA/usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt<module>s>$x

/
85