+
    DfjZ                     "   R t ^ RIt^ RIt^ RIt^ RIHt  ^ RIt^ RIH	t	 ^ RI
HtHtHtHt ^ RIHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHt ^ RIH t  ^ RI!H"t" ^ RI#H$t$ ^ RI%H&t&H't'  ! R R4      t( ! R R]'4      t)]*! ]R4      '       d$   ]PV                  ! 4       t,]PZ                  ! 4       t.M^ ;t,t. ! R R]'4      t/ ! R R]'4      t0 ! R R]'4      t1 ! R R]'4      t2 ! R R]'4      t3 ! R R]Ph                  4      t5 ! R  R!4      t6 ! R" R#4      t7 ! R$ R%]Pp                  4      t9 ! R& R']'4      t: ! R( R)]'4      t; ! R* R+]Px                  4      t= ! R, R-]$]'4      t> ! R. R/]'4      t? ! R0 R1]'4      t@R#   ] d    Rt ELsi ; i)2zU
Tests for L{twisted.application} and its interaction with
L{twisted.persisted.sob}.
N)StringIO)skipIf)appinternetreactorsservice)backoffPolicy)defer
interfacesprotocolreactor)MemoryReactor)sob)twisted_reactors)basicwire)usage)platformType)TwistedModulesMixin)SkipTestTestCasec                       ] tR t^#tRtRtR# )DummyN )__name__
__module____qualname____firstlineno__processName__static_attributes__r       ?/usr/lib/python3/dist-packages/twisted/test/test_application.pyr   r   #   s    Kr    r   c                   n   a  ] tR t^'t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tRtV tR# )ServiceTestsc                    \         P                  ! 4       pVP                  R 4       V P                  VP                  R 4       R# helloN)r   ServicesetNameassertEqualnameselfss   & r!   testNameServiceTests.testName(   s.    OO			')r    c                    \         P                  ! 4       p\         P                  ! 4       pVP                  V4       V P	                  \        V4      V.4       V P	                  VP                  V4       R # N)r   r'   MultiServicesetServiceParentr)   listparentr,   r-   ps   &  r!   
testParentServiceTests.testParent-   sT    OO  "	1a1#&1%r    c                >   \         P                  ! 4       p\         P                  ! R 4      pVP                  V4       V P	                  \        \         P                  ! V4      4      V.4       V P	                  VP                  \         P                  ! V4      4       R# ) N)r   r'   Applicationr3   r)   r4   IServiceCollectionr5   r6   s   &  r!   testApplicationAsParent$ServiceTests.testApplicationAsParent4   sm    OO#	1g88;<qcB7#=#=a#@Ar    c                P   \         P                  ! 4       p\         P                  ! 4       pVP                  R 4       VP	                  V4       V P                  \        V4      V.4       V P                  VP                  V4       V P                  VP                  R 4      V4       R# r%   )	r   r'   r2   r(   r3   r)   r4   r5   getServiceNamedr6   s   &  r!   testNamedChildServiceTests.testNamedChild;   s{    OO  "			'	1a1#&1%**73Q7r    c                    \         P                  ! 4       p\         P                  ! 4       pVP                  R 4       VP	                  V4       V P                  \        VP                  R4       R# )r&   lalaNr   r'   r2   r(   r3   assertRaisesRuntimeErrorr6   s   &  r!   testDoublyNamedChild!ServiceTests.testDoublyNamedChildD   sL    OO  "			'	1,		6:r    c                ,   \         P                  ! 4       p\         P                  ! 4       pVP                  R 4       VP	                  V4       \         P                  ! 4       pVP                  R 4       V P                  \        VP                  V4       R# r%   rF   r6   s   &  r!   testDuplicateNamedChild$ServiceTests.testDuplicateNamedChildK   sf    OO  "			'	1OO			',(:(:A>r    c                x   \         P                  ! 4       p\         P                  ! 4       pVP                  V4       V P	                  \        V4      V.4       V P	                  VP                  V4       VP                  4        V P	                  \        V4      . 4       V P                  VP                  4       R # r1   )	r   r'   r2   r3   r)   r4   r5   disownServiceParentassertIsNoner6   s   &  r!   testDisowningServiceTests.testDisowningT   s    OO  "	1a1#&1%	a"%!((#r    c                   \         P                  ! 4       pV P                  VP                  4       VP	                  4        V P                  VP                  4       VP                  4        V P                  VP                  4       R # r1   )r   r'   assertFalserunningstartService
assertTruestopServicer+   s   & r!   testRunningServiceTests.testRunning^   sU    OO#			"	#r    c                    \         P                  ! 4       p\         P                  ! 4       pVP                  V4       V P	                  VP
                  4       V P	                  VP
                  4       VP                  4        V P                  VP
                  4       V P                  VP
                  4       VP                  4        V P	                  VP
                  4       V P	                  VP
                  4       R # r1   )	r   r'   r2   r3   rT   rU   rV   rW   rX   r6   s   &  r!   testRunningChildren1!ServiceTests.testRunningChildren1f   s    OO  "	1##			"		"	##r    c                2  a a \         P                  ! 4       oVV 3R  lp\         P                  ! 4       pWn        Wn        \         P                  ! 4       pSP                  V4       VP                  V4       VP                  4        VP                  4        R# )c                  >   < SP                  S P                  4       R # r1   )rW   rU   )r-   r,   s   r!   checkRunning7ServiceTests.testRunningChildren2.<locals>.checkRunningv   s    OOAII&r    N)r   r'   rX   rV   r2   r3   )r,   r`   tr7   r-   s   f   @r!   testRunningChildren2!ServiceTests.testRunningChildren2s   si    OO	' OO$%  "	1	1		r    c                ^   \         P                  ! 4       pVP                  4        \         P                  ! 4       pV P	                  VP
                  4       VP                  V4       V P                  VP
                  4       VP                  4        V P	                  VP
                  4       R # r1   )	r   r2   rV   r'   rT   rU   r3   rW   rO   )r,   r7   r-   s   &  r!   testAddingIntoRunning"ServiceTests.testAddingIntoRunning   st      "	OO#	1		"	#r    c                :  a \         P                  ! 4       oV3R  lpVSn        \         P                  ! 4       p\         P                  ! 4       pSP	                  V4       VP	                  V4       VP                  4        V P                  SP                  4       R# )c                     < ^S n         R# )   N)privilegedStarted)r-   s   r!   pss(ServiceTests.testPrivileged.<locals>.pss   s    "#Ar    N)r   r'   privilegedStartServicer2   r3   rW   rk   )r,   rl   s1r7   r-   s   &   @r!   testPrivilegedServiceTests.testPrivileged   sr    OO	$ $' __  "	1
A	  "++,r    c                    \         P                  ! 4       pVP                  4        \        P                  ! V4      pV P	                  VP
                  4       V P                  VP
                  4       R # r1   )r   r'   rV   copyrT   rU   rW   )r,   r-   ro   s   &  r!   testCopyingServiceTests.testCopying   sG    OO	YYq\$		"r    r   N)r   r   r   r   r.   r8   r>   rB   rI   rL   rQ   rY   r\   rc   rf   rp   rt   r   __classdictcell____classdict__s   @r!   r#   r#   '   sL     *
&B8;?$$$$-# #r    r#   getuidc                   2   a  ] tR t^t o R tR tR tRtV tR# )ProcessTestsc                    \         P                  ! ^^4      pV P                  VP                  ^4       V P                  VP                  ^4       R# )   N)r   Processr)   uidgidr,   r7   s   & r!   testIDProcessTests.testID   s:    OOAq!""r    c                   \         P                  ! ^4      pV P                  VP                  ^4       V P	                  VP
                  4       \         P                  ! ^R7      pV P	                  VP                  4       V P                  VP
                  ^4       \         P                  ! 4       pV P	                  VP                  4       V P	                  VP
                  4       R# )r}   )r   N)r   r~   r)   r   rP   r   r   s   & r!   testDefaultsProcessTests.testDefaults   s    OOA"!%% OO"!%% "OO!%% !%% r    c                    \         P                  ! 4       pV P                  VP                  4       R Vn        V P	                  VP                  R 4       R# r%   )r   r~   rP   r   r)   r   s   & r!   testProcessNameProcessTests.testProcessName   s;    OO!--(0r    r   N)	r   r   r   r   r   r   r   r   rv   rw   s   @r!   r{   r{      s     #
	!1 1r    r{   c                   2   a  ] tR t^t o R tR tR tRtV tR# )InterfacesTestsc                    V P                  \        P                  P                  \        P                  ! 4       4      4       R # r1   )rW   r   IService
providedByr'   r,   s   &r!   testServiceInterfacesTests.testService   &    ((33GOO4EFGr    c                
   V P                  \        P                  P                  \        P                  ! 4       4      4       V P                  \        P
                  P                  \        P                  ! 4       4      4       R # r1   )rW   r   r   r   r2   r=   r   s   &r!   testMultiService InterfacesTests.testMultiService   sN    ((33G4H4H4JKL22==g>R>R>TUVr    c                    V P                  \        P                  P                  \        P                  ! 4       4      4       R # r1   )rW   r   IProcessr   r~   r   s   &r!   testProcessInterfacesTests.testProcess   r   r    r   N)	r   r   r   r   r   r   r   r   rv   rw   s   @r!   r   r      s     HWH Hr    r   c                   8   a  ] tR t^t o R tR tR tR tRtV t	R# )ApplicationTestsc                    \         P                  ! R 4       \         P                  ! R ^4       \         P                  ! R ^^4       R# r%   )r   r<   r   s   &r!   testConstructor ApplicationTests.testConstructor   s2    G$GQ'GQ*r    c                   \         P                  ! R 4      pV P                  \         P                  ! V4      P                  4       V P                  \         P                  ! V4      P
                  4       \         P                  ! R ^4      pV P                  \         P                  ! V4      P                  ^4       V P                  \         P                  ! V4      P
                  4       \         P                  ! R ^^4      pV P                  \         P                  ! V4      P                  ^4       V P                  \         P                  ! V4      P
                  ^4       R# r%   )r   r<   rP   r   r   r   r)   r,   as   & r!   testProcessComponent%ApplicationTests.testProcessComponent   s    ('**1-112'**1-112+))!,00!4'**1-112A.))!,00!4))!,00!4r    c                d   \         P                  ! R 4      pV P                  \         P                  ! V4      \         P                  ! V4      4       V P                  \         P                  ! V4      P                  R 4       V P                  \         P                  ! V4      P                  4       R# r%   )	r   r<   assertIsr   r=   r)   r*   rP   r5   r   s   & r!   testServiceComponent%ApplicationTests.testServiceComponent   sv    (g&&q)7+E+Ea+HI))!,117;'**1-445r    c                   \         P                  ! R 4      p\        P                  ! V4      pV P	                  VP
                  R4       V P	                  VP                  R 4       V P                  VP                  V4       R# )r&   pickleN)	r   r<   r   IPersistabler)   styler*   r   original)r,   r   r7   s   &  r!   testPersistableComponent)ApplicationTests.testPersistableComponent   s\    (Q(+)ajj!$r    r   N)
r   r   r   r   r   r   r   r   r   rv   rw   s   @r!   r   r      s     +
	56% %r    r   c                   &   a  ] tR t^t o R tRtV tR# )LoadingTestsc                   \         P                  ! R 4      p\        P                  ! V4      pRP	                  4        Fy  pVP                  V4       VP                  4        \         P                  ! RV^ ,          ,           V4      pV P                  \         P                  ! V4      P                  R 4       K{  	  \        RR4      ;_uu_ 4       pVP                  RR.4       RRR4       \         P                  ! RR4      pV P                  \         P                  ! V4      P                  R 4       R#   + '       g   i     LY; i)	r&   source picklezhello.taz	hello.tacw(from twisted.application import service
+application = service.Application('hello')
Npython)r   r<   r   r   splitsetStylesaveloadApplicationr)   r   r*   open
writelines)r,   r   r7   r   a1fs   &     r!   test_simpleStoreAndLoad$LoadingTests.test_simpleStoreAndLoad   s    (Q$**,EJJuFFH((eAh)>FBW--b166@	 -
 +s##qLL?B $ $$[(;))"-22G< $#s   D33E	r   N)r   r   r   r   r   r   rv   rw   s   @r!   r   r      s     = =r    r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )AppSupportTests   c                P    V P                  \        P                  ! ^ 4      4       R# )    N)rP   r   getPassphraser   s   &r!   testPassphraseAppSupportTests.testPassphrase  s    #++A./r    c                   \         P                  ! R4      pRRRRRR/pRP                  4        F  pVP                  4       pRVRR/P	                  W34      &   \
        P                  ! V4      P                  V4       \
        P                  ! V4      P                  RR	7       \        P                  ! VR4      pV P                  \         P                  ! V4      P                  R4       K  	  VP                  4       pRVR&   \        RR
4      ;_uu_ 4       pVP                  RR.4       RRR4       \        P                  ! VR4      pV P                  \         P                  ! V4      P                  R4       R#   + '       g   i     LY; i)z<
Test loading an application file in different dump format.
r&   fileNsourcer   r   helloapplicationr   filenamer   r   r   )r   r<   r   rs   getr   r   r   r   r   getApplicationr)   r   r*   r   r   )r,   r   
baseconfigr   configr   r   s   &      r!   testLoadApplication#AppSupportTests.testLoadApplication  sJ    (dHdHdC
$**,E__&F;MFHf%))%78Q((/Q$$.@$A##FD1BW--b166@ - "-x$c**aLL?B + -))"-22G< +*s   E<<F	c           
        \         P                  ! R 4      pRP                  4        F  pRP                  4        F  p\        P                  ! V4      P                  V4       \        P                  ! V4      P                  RR7       \        P                  ! RVRRV^ 4       \         P                  ! RV4      pV P                  \         P                  ! V4      P                  R 4       K  	  K  	  R# )rE   r   converttestr   Nzconverttest.out)r   r<   r   r   r   r   r   r   convertStyler   r)   r   r*   )r,   applinstyleoutstyleappl2s   &    r!   test_convertStyle!AppSupportTests.test_convertStyle  s    ""6*&,,.G+113  &//8  &++]+C  !7D2CXq  //0A8L  !1!1%!8!=!=vF 4 /r    c                    \         P                  ! R 4      p\        P                  ! V^ 4       V P	                  \         P
                  ! V4      P                  4       R# )rE   N)r   r<   r   startApplicationrW   r   rU   )r,   r   s   & r!   test_startApplication%AppSupportTests.test_startApplication)  s?    ""6*T1%((.667r    r   N)
r   r   r   r   r   r   r   r   r   rv   rw   s   @r!   r   r      s     0=2
G8 8r    r   c                   2   a  ] tR tRt o R tR tR tRtV tR# )Fooi/  c                <    V P                   P                  R 4       R# )s   lalala
N)	transportwriter   s   &r!   connectionMadeFoo.connectionMade0  s    ]+r    c                Z    WP                   n        V P                  P                  4        R # r1   )factoryliner   loseConnection)r,   r   s   &&r!   lineReceivedFoo.lineReceived3  s     %%'r    c                x    V P                   P                  P                  V P                   P                  4       R # r1   )r   dcallbackr   r,   reasons   &&r!   connectionLostFoo.connectionLost7  s"     1 12r    r   N)	r   r   r   r   r   r   r   r   rv   rw   s   @r!   r   r   /  s     ,(3 3r    r   c                   0   a  ] tR tRt o RtR tR tRtV tR# )DummyAppi;  Nc                6    WP                   VP                  &   R # r1   servicesr*   r,   r   s   &&r!   
addServiceDummyApp.addService>  s    &-gll#r    c                4    V P                   VP                   R # r1   r   r   s   &&r!   removeServiceDummyApp.removeServiceA  s    MM',,'r    r   )	r   r   r   r   r   r   r   r   rv   rw   s   @r!   r   r   ;  s     K.( (r    r   c                   ,   a  ] tR tRt o R tR tRtV tR# )TimerTargetiE  c                    . V n         R # r1   lr   s   &r!   __init__TimerTarget.__init__F  s	    r    c                <    V P                   P                  V4       R # r1   )r  append)r,   whats   &&r!   r	  TimerTarget.appendI  s    dr    r  N)r   r   r   r   r  r	  r   rv   rw   s   @r!   r  r  E  s      r    r  c                   &   a  ] tR tRt o R tRtV tR# )TestEchoiM  c                <    V P                   P                  R 4       R# TN)r   r   r   s   &&r!   r   TestEcho.connectionLostN  s    r    r   N)r   r   r   r   r   r   rv   rw   s   @r!   r  r  M  s      r    r  c                   L  a  ] tR tRt o R tR tR tR t]! ]	P                  ! ]R4      '       * R4      R 4       tR	 t]! ]	P                  ! ]R4      '       * R4      R
 4       t]! ]	P                  ! ]R4      '       * R4      R 4       tR tR tR tR tR tR tR tR tRtV tR# )InternetTestsiR  c                
  a \         P                  ! 4       oSP                  4        \        P                  ! 4       p\
        Vn        \        P                  ! 4       \
        n        \        P                  ! ^ V4      pVP                  S4       VP                  P                  4       P                  p\        P                  ! 4       p\        P                  ! 4       Vn        \         Vn        RVn        \        P$                  ! RW14      P                  S4       VP                  P'                  V P(                  R4       VP                  P'                  V3R l4       VP                  P'                  R 4       VP                  # )r   N	127.0.0.1   lalalac                 $   < SP                  4       # r1   rX   xr-   s   &r!   <lambda>'InternetTests.testTCP.<locals>.<lambda>b      r    c                 "    \         P                  # r1   r  r   r  s   &r!   r  r  c      

r    )r   r2   rV   r   ServerFactoryr  r	   Deferredr   r   	TCPServerr3   _portgetHostportClientFactoryr   r   	TCPClientaddCallbackr)   )r,   r   rb   numr-   s   &   @r!   testTCPInternetTests.testTCPS  s     "	((*#^^%
q'*	1ggoo$$((*NN$	;5FFqI		d..	:		78		23yyr    c                  aa \         P                  ! \        R4      '       g   \        R4      h\        P
                  ! 4       o\        P                  ! ^ S4      pVP                  4        VP                  P                  4       P                  oV P                  S^ 4       VV3R lp\        P                  ! VP                  4      P!                  V4      # )z
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.
Nz)This reactor does not support UDP socketsc                 r   < \         P                  ! SS4      pVP                  4        VP                  4       # r1   )r   	UDPServerrV   rX   )ignoredrb   r*  r7   s   & r!   onStop&InternetTests.test_UDP.<locals>.onStopt  s+    ""3*ANN==?"r    )r
   IReactorUDPr   r   r   DatagramProtocolr   r/  rV   r$  r%  r&  assertNotEqualr	   maybeDeferredrX   r)  )r,   rb   r1  r*  r7   s   &  @@r!   test_UDPInternetTests.test_UDPf  s     %%gt44FGG%%'q!$	ggoo$$C#	#
 ""1==1==fEEr    c                  aa \         P                  ! 4       p\        Vn         \        P                  ! 4       \        n        \        P                  ! ^ V4      o^Sn        SP                  4        SP                  P                  4       P                  p\         P                  ! 4       p\        P                  ! 4       Vn        \        Vn         RVn        \        P                   ! RW!4      oSP#                  4        VP
                  P%                  V P&                  R4       VP
                  P%                  V3R l4       VP
                  P%                  V3R l4       VP
                  P%                  R 4       VP
                  # )r   Nr  r  c                 $   < SP                  4       # r1   r  )r  cs   &r!   r  .InternetTests.testPrivileged.<locals>.<lambda>  r  r    c                 $   < SP                  4       # r1   r  r  rb   s   &r!   r  r<    r  r    c                 "    \         P                  # r1   r  r  s   &r!   r  r<    r   r    )r   r!  r  r	   r"  r   r   r#  
privilegedrn   r$  r%  r&  r'  r   r   r(  rV   r)  r)   )r,   r   r*  r;  rb   s   &  @@r!   rp   InternetTests.testPrivileged{  s   ((*#^^%
q'*	  "ggoo$$((*NN$	{C9			d..	:		78		78		23yyr    c                  a \         P                  ! 4       p\        P                  Vn         \        P
                  ! ^ V4      pVP                  4        VP                  P                  4       P                  pVP                  4        \        P                  ! 4       o\         P                  ! 4       pV3R lVn        \        P                  ! RW14      pVP                  4        S# )r   c                  &   < SP                  R 4      # r1   r   argsr   s   *r!   r  <InternetTests.testConnectionGettingRefused.<locals>.<lambda>      qzz$7Gr    r  )r   r!  r   Echor   r#  rV   r$  r%  r&  rX   r	   r"  r'  clientConnectionFailedr(  )r,   r   rb   r*  r;  r   s   &    @r!   testConnectionGettingRefused*InternetTests.testConnectionGettingRefused  s    ((*99q'*	ggoo$$	NN((*)G&{C9	r    Nz1This reactor does not support UNIX domain socketsc                  a \         P                  ! 4       oSP                  4        \        P                  ! 4       p\
        Vn        \        P                  ! 4       \
        n        \        P                  ! R V4      pVP                  S4       \        P                  ! 4       p\        Vn        \        P                  ! 4       Vn        RVn        \        P                  ! R V4      P                  S4       VP                  P!                  V P"                  R4       VP                  P!                  V3R l4       VP                  P!                  R 4       VP                  P!                  V P$                  VS4       VP                  # )echo.sktNr  c                 $   < SP                  4       # r1   r  r  s   &r!   r  (InternetTests.testUNIX.<locals>.<lambda>  r  r    c                 "    \         P                  # r1   r  r  s   &r!   r  rP    r   r    )r   r2   rV   r   r!  r  r	   r"  r   r   
UNIXServerr3   r'  r   r   
UNIXClientr)  r)   _cbTestUnix)r,   r   rb   r-   s   &  @r!   testUNIXInternetTests.testUNIX  s      "	((*#^^%

G4	1((*NN$	J0AA!D		d..	:		78		23		d..;yyr    c                |  a \         P                  ! 4       \        n        R Vn        \         P                  ! 4       Vn        SP                  4        VP                  P                  V P                  R4       VP                  P                  V3R l4       VP                  P                  R 4       VP                  # )Nr  c                 $   < SP                  4       # r1   r  r  s   &r!   r  +InternetTests._cbTestUnix.<locals>.<lambda>  r  r    c                 "    \         P                  # r1   r  r  s   &r!   r  rY    r   r    )r	   r"  r  r   r   rV   r)  r)   )r,   r0  r   r-   s   &&&fr!   rT  InternetTests._cbTestUnix  sz    ^^%
NN$				d..	:		78		23yyr    c                   \         P                  ! 4       p\        P                  Vn         \        P
                  ! R V4      pVP                  4        V P                  VP                  R4       \        P                  ! V4      pV P                  VP                  4       VP                  4        V P                  VP                  4       V P                  VP                  4       \         P                  ! 4       p\        P                  Vn         \        P                  ! R V4      pVP                  4        V P                  VP                   R4       \        P                  ! V4      pV P                  VP                   4       VP                  4        V P                  VP                   4       V P                  VP                  4       R# )rN  N)r   r!  r   rI  r   rR  rV   failIfIdenticalr$  rs   rP   rX   rT   rU   r'  rS  _connection)r,   r   rb   t1s   &   r!   testVolatileInternetTests.testVolatile  s0   
 ((*99
G4	QWWd+YYq\"((#	!''"#((*99
G4	Q]]D1YYq\"..)	!--(#r    c                  a \         P                  ! 4       p\        P                  Vn         \        P
                  ! R V4      pVP                  4        VP                  4        V P                  VP                  4       \         P                  ! 4       p\        P                  ! 4       oV3R lVn        \        P                  ! R V4       S# )rN  c                  &   < SP                  R 4      # r1   rD  rE  s   *r!   r  2InternetTests.testStoppingServer.<locals>.<lambda>  rH  r    )r   r!  r   rI  r   rR  rV   rX   rT   rU   r'  r	   r"  rJ  r   connectUNIX)r,   r   rb   r   s   &  @r!   testStoppingServer InternetTests.testStoppingServer  s    
 ((*99
G4		#((*NN)G&J0r    c                ,   \        4       p\        P                  ! ^VP                  R4      pVP	                  4        \
        P                  ! V4      pVP                  4        \
        P                  ! V4      pV P                  VP                  4       R# )rj   r&   N)r  r   TimerServicer	  rV   r   dumpsrX   loadsrT   rU   )r,   targett0r-   rb   s   &    r!   testPickledTimerInternetTests.testPickledTimer  sb    ""1fmmW=
LL
LLO#r    c                  a aaa \         P                  ! 4       o\        P                  ! ^R 4      oSP                  oVV3R lpVSn        SP                  4        SP                  V3R l4       SP                  V 3R l4       S# )rj   c                      ^^ ,          # rj   r   r   r    r!   r  /InternetTests.testBrokenTimer.<locals>.<lambda>  s    Q!Vr    c                 :   < S! V 4       SP                  R 4       R # r1   rD  )whyr   	oldFaileds   &r!   _failed.InternetTests.testBrokenTimer.<locals>._failed  s    cNJJtr    c                    < SP                   # r1   r  r>  s   &r!   r  rs    s	    r    c                    < SP                  \        .SP                  \        4       Uu. uF  qP                  P                  NK  	  up4      # u upi r1   )r)   ZeroDivisionErrorflushLoggedErrorsvalue	__class__)r  or,   s   & r!   r  rs    sA    d&&"#,0,B,BCT,UV,Uq"",UVVs   A
)r	   r"  r   ri  rw  rV   r)  )r,   rw  r   rv  rb   s   f @@@r!   testBrokenTimerInternetTests.testBrokenTimer  sg    NN!!!^4II		 			-.		
 r    c           	        . R
OpVR,           F>  p\        \        RV,           4      ! \        R4      '       d   K-  VP                  V4       K@  	  V F  pR F  pVR8X  d
   VR8X  d   K  VR8X  d
   VR8X  d   K#  V P	                  \        \        W#,           4      4       \        \        W#,           4      P                  pRRRR	/V,          pT P	                  \        \        WT,           4      ;'       g    VR	8H  ;'       d    VR8H  4       \        \        W#,           4      ! 4       pV P                  \        P                  ! V4      V4       K  	  EK  	  R# )z
L{twisted.application.internet} dynamically defines a set of
L{service.Service} subclasses that in general have corresponding
reactor.listenXXX or reactor.connectXXX calls.
UDP	Multicast:NNNIReactorNServerClientlistenconnect)TCPUNIXSSLr  UNIXDatagramr  )r  r  )getattrr
   r   removerW   hasattrr   methodr)   r   r   )r,   transtransider  prefixr  s   &      r!   test_everythingThere"InternetTests.test_everythingThere
  s    K!HHD:zD'89'4HHT"  D,;&48+;5=TX%5$+ >? 4;7>>"Hh	B4HGV_5 A A)+??% Hdk24  !1!1!!4a8 - r    c                z    \         P                   F&  pV P                  \        \         V4      V R24       K(  	  R# )z
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.
z1 not importable from twisted.application.internetN)r   __all__rW   r  )r,   clss   & r!   test_importAllInternetTests.test_importAll$  s5     ##COO#&%HI $r    c                    \        4       p\        4       p\        P                  ! RW!R7      pVP	                  4        V P                  VP                  P                  4       R,          RV34       R# )z
L{internet._AbstractServer} supports a C{reactor} keyword argument
that can be used to parametrize the reactor used to listen for
connections.
  r   N   NN)r   objectr   r#  rV   r)   
tcpServerspopr,   r   r   rb   s   &   r!   #test_reactorParametrizationInServer1InternetTests.test_reactorParametrizationInServer0  sV      /(tW>	++//1"5gGr    c                    \        4       p\        P                  ! 4       p\        P                  ! RRW!R7      pVP                  4        V P                  VP                  P                  4       R,          RRV34       R# )z
L{internet._AbstractClient} supports a C{reactor} keyword arguments
that can be used to parametrize the reactor used to create new client
connections.
r  r  r  N   NN)	r   r   r'  r   r(  rV   r)   
tcpClientsr  r  s   &   r!   #test_reactorParametrizationInClient1InternetTests.test_reactorParametrizationInClient=  sb      /((*{D'K	++//1"5T77STr    c                   \        4       p\        P                  ! 4       p\        P                  ! RW!R7      pVP                  4        V P                  VP                  P                  4       R,          RV34       VP                  4        VP                  4        V P                  VP                  P                  4       R,          RV34       R# )z
Like L{test_reactorParametrizationInServer}, but stop and restart the
service and check that the given reactor is still used.
r  r  r  N)
r   r   Factoryr   r#  rV   r)   r  r  rX   r  s   &   r!   0test_reactorParametrizationInServerMultipleStart>InternetTests.test_reactorParametrizationInServerMultipleStartJ  s    
  /""$tW>	++//1"5gG		++//1"5gGr    c                   \        4       p\        P                  ! 4       p\        P                  ! RRW!R7      pVP                  4        V P                  VP                  P                  4       R,          RRV34       VP                  4        VP                  4        V P                  VP                  P                  4       R,          RRV34       R# )z
Like L{test_reactorParametrizationInClient}, but stop and restart the
service and check that the given reactor is still used.
r  r  r  r  N)
r   r   r'  r   r(  rV   r)   r  r  rX   r  s   &   r!   0test_reactorParametrizationInClientMultipleStart>InternetTests.test_reactorParametrizationInClientMultipleStartY  s    
  /((*{D'K	++//1"5T77ST		++//1"5T77STr    r   )r   r   r   r   r+  r7  rp   rK  r   r
   IReactorUNIXr   rU  rT  r`  rf  rn  r  r  r  r  r  r  r  r   rv   rw   s   @r!   r  r  R  s     &F*( ##GT22;	* ##GT22;$	$. ##GT22;	$(94
HUHU Ur    r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )TimerBasicTestsii  c                @  a  \         P                  ! 4       p\        P                  ! ^VP                  R4      S n        S P
                  P                  4        VP                  S P                  R4       VP                  V 3R l4       VP                  V 3R l4       V# )rj   r&   c                 8   < SP                   P                  4       # r1   rb   rX   r  r,   s   &r!   r  /TimerBasicTests.testTimerRuns.<locals>.<lambda>o       2 2 4r    c                 N   < SP                  SP                  P                  4      # r1   )rT   rb   rU   r  s   &r!   r  r  p  s     0 0 @r    )	r	   r"  r   ri  r   rb   rV   r)  r)   )r,   r   s   f r!   testTimerRunsTimerBasicTests.testTimerRunsj  sl    NN&&q!**g>	d&&0	45	@Ar    c                6    V P                   P                  4       # r1   r  r   s   &r!   tearDownTimerBasicTests.tearDowns  s    vv!!##r    c                t  a aa \         P                  ! 4       p\         P                  ! 4       oSR 3VR3.oV3R lp\        P                  ! ^V4      S n        S P                  P                  4        V 3R lpVV 3R lpV 3R lpVP                  V4       VP                  V4       VP                  V4       V# )barfooc                  N   < SP                  4       w  rV P                  V4       R # r1   )r  r   )r   argworks     r!   trigger1TimerBasicTests.testTimerRestart.<locals>.trigger|  s    XXZFAJJsOr    c                 \   < SP                  V R 4       SP                  P                  4       # )r  r)   rb   rX   resultr,   s   &r!   onFirstResult7TimerBasicTests.testTimerRestart.<locals>.onFirstResult  s&    VU+66%%''r    c                    < SP                  SP                  P                  4       SP                  P                  4        S# r1   )rT   rb   rU   rV   )r0  d2r,   s   &r!   onFirstStop5TimerBasicTests.testTimerRestart.<locals>.onFirstStop  s.    TVV^^,FF!Ir    c                 `   < SP                  V R 4       SP                  P                  4        R# )r  Nr  r  s   &r!   onSecondResult8TimerBasicTests.testTimerRestart.<locals>.onSecondResult  s#    VU+FF r    )r	   r"  r   ri  rb   rV   r)  )r,   d1r  r  r  r  r  r  s   f     @@r!   testTimerRestart TimerBasicTests.testTimerRestartv  s    ^^^^Ub%[)	 &&q'2	(	
	! 	}%
{#
~&	r    c                (  a a . oV3R  lp\         P                  ! 4       p\        P                  ! RVR^
V4      S n        S P                  P                  4        VP                  S P                  R.^
,          4       VP                  V 3R l4       V# )c                 p   < SP                  V 4       \        S4      V8X  d   VP                  S4       R # R # r1   )r	  lenr   )datanumberr   r  s   &&&r!   r  /TimerBasicTests.testTimerLoops.<locals>.trigger  s*    HHTN1v

1  r    g{Gz?r&   c                 8   < SP                   P                  4       # r1   r  r  s   &r!   r  0TimerBasicTests.testTimerLoops.<locals>.<lambda>  r  r    )r	   r"  r   ri  rb   rV   r)  r)   )r,   r  r   r  s   f  @r!   testTimerLoopsTimerBasicTests.testTimerLoops  sq    	
 NN&&tWgr1E	d&&	B7	45r    )rb   N)
r   r   r   r   r  r  r  r  r   rv   rw   s   @r!   r  r  i  s     $> r    r  c                   *   a  ] tR tRt o RtR tRtV tR# )FakeReactori  z.
A fake reactor with a hooked install method.
c                Z    \         P                  P                  ! V .VO5/ VB  Wn        R# )z^
@param install: any callable that will be used as install method.
@type install: C{callable}
N)r   Reactorr  install)r,   r  rF  kwargss   &&*,r!   r  FakeReactor.__init__  s'    
 	!!$888r    )r  N)r   r   r   r   __doc__r  r   rv   rw   s   @r!   r  r    s      r    r  c                   v   a  ] tR tRt o RtR tR tRR ltR tR t	R	 t
R
 tR tR tR tR tR tR tRtV tR# )PluggableReactorTestsi  z2
Tests for the reactor discovery/inspection APIs.
c                v    . V n         . V n        \        P                  V n        V P
                  \        n        R# )a  
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)pluginCallspluginResultsr   
getPluginsoriginalFunction_getPluginsr   s   &r!   setUpPluggableReactorTests.setUp  s0      ( 3 3"..r    c                0    V P                   \        n        R# )z.
Restore the original L{reactors.getPlugins}.
N)r  r   r  r   s   &r!   r  PluggableReactorTests.tearDown  s     #33r    Nc                d    V P                   P                  W34       \        V P                  4      # )za
Stand-in for the real getPlugins method which records its arguments
and returns a fixed result.
)r  r	  r4   r  )r,   	interfacepackages   &&&r!   r  !PluggableReactorTests._getPlugins  s,    
 	 45D&&''r    c                z   Rp\         R,           pRp\        P                  ! WV4      .V n        \        P                  ! 4       pV P                  V P                  \        P                  R3.4       V F3  pVP                  V8X  g   K  V P                  VP                  V4        R# 	  V P                  R4       R# )z@
Test that reactor plugins are returned from L{getReactorTypes}
fakereactortestz.fakereactordescriptionNz6Reactor plugin not present in getReactorTypes() result)r   r   r  r  getReactorTypesr)   r  IReactorInstaller	shortNamer   fail)r,   r*   r  r   reactorTypesrs   &     r!   test_getPluginReactorTypes0PluggableReactorTests.test_getPluginReactorTypes  s     !^+#&..tkJK//1))X-G-G,N+OPA{{d"  < 
 IINOr    c                   a . oV3R lp\        VR\        R4      pRV/pV P                  V4       \        P                  ! RRR4      pVP                  4        V P                  SR.4       R# )za
Test that L{reactors.Reactor.install} loads the correct module and
calls its install attribute.
c                  *   < S P                  R 4       R# r  r	  	installeds   r!   r  ?PluggableReactorTests.test_reactorInstallation.<locals>.install      T"r    r  	describedfakereactorTN)r  r   replaceSysModulesr   r  r  r)   )r,   r  fakeReactormodules	installerr  s   &    @r!   test_reactorInstallation.PluggableReactorTests.test_reactorInstallation  sm    
 		# "'+<hT$k2w'$$]4E{S	TF+r    c                   a . oV3R lpRp\         pRp\        WW44      .V n        \        P                  ! V4       V P                  SR.4       R# )z]
Test that the L{reactors.installReactor} function correctly installs
the specified reactor.
c                  *   < S P                  R 4       R# r  r  r  s   r!   r  :PluggableReactorTests.test_installReactor.<locals>.install  r  r    r  r   TNr   r  r  r   installReactorr)   )r,   r  r*   r  r   r  s   &    @r!   test_installReactor)PluggableReactorTests.test_installReactor  sR    
 		# !#)'NO%TF+r    c                   a a \        4       oVV 3R lpRp\        pRp\        WW44      .S n        \        P
                  ! V4      pS P                  VS4       R# )z\
Test that the L{reactors.installReactor} function correctly returns
the installed reactor.
c                  :   < ^ RI Hp  SP                  V RS4       R# )r   )r   r   N)twistedr   patch)r   r   r,   s    r!   r  HPluggableReactorTests.test_installReactorReturnsReactor.<locals>.install  s    (JJxG4r    r  r   N)r  r   r  r  r   r  r   )r,   r  r*   r  r   r  r   s   f     @r!   !test_installReactorReturnsReactor7PluggableReactorTests.test_installReactorReturnsReactor	  sR    
 (	5
 !#)'NO++D1	i)r    c                   a . oV3R lpRp\         pRp\        WW44      p\        R RW44      pWe.V n        \        P                  ! V4       V P                  SR.4       R# )z
Test that the L{reactors.installReactor} function correctly installs
the specified reactor when there are multiple reactor plugins.
c                  *   < S P                  R 4       R# r  r  r  s   r!   r  IPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.install#  r  r    r  r   c                      R # r1   r   r   r    r!   r  JPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.<lambda>*  s    4r    otherreactorTNr  )r,   r  r*   r  r   r  otherReactorr  s   &      @r!   "test_installReactorMultiplePlugins8PluggableReactorTests.test_installReactorMultiplePlugins  se    
 		# !#!'F"<V*8%TF+r    c                r    . V n         V P                  \        P                  \        P                  R4       R# )z}
Test that L{reactors.installReactor} raises L{reactors.NoSuchReactor}
when asked to install a reactor which it cannot find.
somereactorN)r  rG   r   NoSuchReactorr  r   s   &r!   test_installNonExistentReactor4PluggableReactorTests.test_installNonExistentReactor/  s-    
  ""H$;$;]	
r    c                    R pRp\         pRp\        WW44      .V n        V P                  \        \
        P                  V4       R# )z
Test that L{reactors.installReactor} raises an exception when asked to
install a reactor which doesn't work in this environment.
c                      \        R 4      h)Missing foo barImportErrorr   r    r!   r  FPluggableReactorTests.test_installNotAvailableReactor.<locals>.install?  s    /00r    r  r   N)r   r  r  rG   r8  r   r  )r,   r  r*   r  r   s   &    r!   test_installNotAvailableReactor5PluggableReactorTests.test_installNotAvailableReactor9  sB    	1 !#)'NO+x'>'>Er    c                  aaa . oRoRo ! VV3R lR\         P                  \        P                  4      pVV3R lp\	        VR\
        R4      .V n        V! 4       pVP                  . R
O4       V P                  S^ ,          S4       V P                  SP                  S4      ^4       V P                  VR,          R4       R	# )z`
Test that the reactor selected is installed as soon as possible, ie
when the option is parsed.
zreactor installedzsubcommands loadedc                   :   <a  ] tR tRt o ]VV3R l4       tRtV tR# )QPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptionsiQ  c                >   <a  SP                  S4       R RV 3R lR3.# )
subcommandNc                     < S # r1   r   r   s   r!   r  oPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptions.subCommands.<locals>.<lambda>U  s    Tr    ztest subcommandr  )r,   SUBCOMMAND_EVENTexecuteds   fr!   subCommands]PluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptions.subCommandsR  s#     01%t\;LMNNr    r   N)r   r   r   r   propertyrE  r   rv   )rx   rC  rD  s   @r!   ReactorSelectionOptionsr>  Q  s     O Or    rH  c                  *   < SP                  S 4       R # r1   r  )INSTALL_EVENTrD  s   r!   r  APluggableReactorTests.test_reactorSelectionMixin.<locals>.installW  s    OOM*r    r  r  r   Nz	--reactorr  r@  )
r   Optionsr   ReactorSelectionMixinr  r   r  parseOptionsr)   count)r,   rH  r  optionsrJ  rC  rD  s   &   @@@r!   test_reactorSelectionMixin0PluggableReactorTests.test_reactorSelectionMixinH  s    
 +/	O 	OemmS5N5N 	O	+ !2HkJ
 *+KL!m46:+->?r    c                v    ! R R\         P                  \        P                  4      p. V n        V! 4       p\        4       Vn        V P                  \         P                  VP                  . RO4      pV P                  RVP                  ^ ,          4       V P                  RVP                  ^ ,          4       R# )z
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.
c                       ] tR tRtRtR# )\PluggableReactorTests.test_reactorSelectionMixinNonExistent.<locals>.ReactorSelectionOptionsik  r   Nr   r   r   r   r   r   r    r!   rH  rV  k      r    rH  r  help-reactorsNrL  )r   rM  r   rN  r  r   messageOutputrG   
UsageErrorrO  assertInrF  )r,   rH  rQ  es   &   r!   %test_reactorSelectionMixinNonExistent;PluggableReactorTests.test_reactorSelectionMixinNonExistentd  s    	emmS5N5N 	  )+ (
  :

 	'3oqvvay1r    c                  a  ! R R\         P                  \        P                  4      pRoV3R lpRp\        pRp\        W#WE4      .V n        V! 4       p\        4       Vn        V P                  \         P                  VP                  . R	O4      pV P                  SVP                  ^ ,          4       V P                  RVP                  ^ ,          4       R# )
z
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.
c                       ] tR tRtRtR# )]PluggableReactorTests.test_reactorSelectionMixinNotAvailable.<locals>.ReactorSelectionOptionsi  r   NrW  r   r    r!   rH  rb    rX  r    rH  r6  c                     < \        S 4      hr1   r7  )messages   r!   r  MPluggableReactorTests.test_reactorSelectionMixinNotAvailable.<locals>.install  s    g&&r    r  r   rY  NrL  )r   rM  r   rN  r   r  r  r   rZ  rG   r[  rO  r\  rF  )	r,   rH  r  r*   r  r   rQ  r]  rd  s	   &       @r!   &test_reactorSelectionMixinNotAvailable<PluggableReactorTests.test_reactorSelectionMixinNotAvailablez  s    	emmS5N5N 	 $	' !#)'NO)+ (
  :

 	gqvvay)oqvvay1r    )r  r  r  r1   )r   r   r   r   r  r  r  r  r  r  r  r$  r-  r2  r:  rR  r^  rf  r   rv   rw   s   @r!   r  r    sS     /4(P&,","*&,&
F@82,2 2r    r  c                      a  ] tR tRt o RtR t]! ]R4      R 4       t]! ]'       * R4      R 4       t	]! ]
R8g  R	4      R
 4       t]! ]
R8H  R4      R 4       tR tRtV tR# )HelpReactorsTestsi  z.
--help-reactors lists the available reactors
c                   \         P                  ! 4       V n        \        4       V P                  n        V P                  \        V P                  P                  4       V P                  P                  P                  4       V n	        R# )z#
Get the text from --help-reactors
N)
r   rN  rQ  r   rZ  rG   
SystemExitopt_help_reactorsgetvaluerd  r   s   &r!   r  HelpReactorsTests.setUp  sV     002%-Z"*dll&D&DE||11::<r    z$Not applicable, asyncio is availablec                    V P                  \        P                  P                  V P                  4       V P                  R\        P                  P
                  ,           V P                  4       R# )zH
--help-reactors should NOT display the asyncio reactor on Python < 3.4
!N)r\  r   asyncior   rd  r  r   s   &r!   test_lacksAsyncIO#HelpReactorsTests.test_lacksAsyncIO  sG    
 	&..::DLLIc,44>>>Mr    zasyncio library not availablec                    V P                  \        P                  P                  V P                  4       V P                  R\        P                  P                  ,           V P                  4       R# )zE
--help-reactors should display the asyncio reactor on Python >= 3.4
rp  N)r\  r   rq  r   rd  assertNotInr  r   s   &r!   test_hasAsyncIO!HelpReactorsTests.test_hasAsyncIO  sI    
 	&..::DLLI/77AAA4<<Pr    win32zTest only applicable on Windowsc                    V P                  \        P                  P                  V P                  4       V P                  R\        P                  P                  ,           V P                  4       R# )z<
--help-reactors should display the iocp reactor on Windows
rp  N)r\  r   iocpr   rd  ru  r  r   s   &r!   test_iocpWin32 HelpReactorsTests.test_iocpWin32  sI    
 	&++77F/44>>>Mr    zTest not applicable on Windowsc                    V P                  \        P                  P                  V P                  4       V P                  R\        P                  P
                  ,           V P                  4       R# )z@
--help-reactors should NOT display the iocp reactor on Windows
rp  N)r\  r   rz  r   rd  r  r   s   &r!   test_iocpNotWin32#HelpReactorsTests.test_iocpNotWin32  sG    
 	&++77Fc,11;;;T\\Jr    c                    R p\         P                  ! 4       pWn        \        4       Vn        V P                  \        VP                  4       VP                  P                  4       pV P                  RV4       R# )z.
--help-reactors with only supported reactors
c               3   2   "   \         P                  x  R # 5ir1   )r   defaultr   r    r!   r  EHelpReactorsTests.test_onlySupportedReactors.<locals>.getReactorTypes  s     "***s   zreactors not availableN)
r   rN  _getReactorTypesr   rZ  rG   rk  rl  rm  ru  )r,   r  rQ  rd  s   &   r!   test_onlySupportedReactors,HelpReactorsTests.test_onlySupportedReactors  sb    
	+ ++-#2  (
*g&?&?@''00217;r    )rd  rQ  N)r   r   r   r   r  r  r   rq  rr  rv  r   r{  r~  r  r   rv   rw   s   @r!   ri  ri    s     = G;<N =N K89Q :Q LG#%FGN HN LG#%EFK GK< <r    ri  c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )BackoffPolicyTestsi  z8
Tests of L{twisted.application.internet.backoffPolicy}
c                   \        RRRR R7      pV P                  V! ^ 4      ^4       V P                  V! ^4      R4       V P                  V! ^
4      R4       V P                  V! ^4      ^=4       V P                  V! ^d4      ^=4       R# )	z9
Test that L{backoffPolicy()} calculates expected values
      ?      N@      ?c                      ^# rr  r   r   r    r!   r  CBackoffPolicyTests.test_calculates_correct_values.<locals>.<lambda>      1r    jitterg      @g     UM@N)r   assertAlmostEqualr)   r,   pols   & r!   test_calculates_correct_values1BackoffPolicyTests.test_calculates_correct_values  sx     Cs9=s1vq)s1vs+s2w6R"%S2&r    c                    \        RRRR R7      pV P                  V! R4      ^=4       V P                  V! R4      ^=4       R# )	z
L{backoffPolicy()} does not fail for large values of the attempt
parameter. In previous versions, this test failed when attempt was
larger than 1750.

See https://twistedmatrix.com/trac/ticket/9476
r  r  r  c                      ^# rr  r   r   r    r!   r  LBackoffPolicyTests.test_does_not_overflow_on_high_attempts.<locals>.<lambda>  r  r    r    i@B Nr   r)   r  s   & r!   'test_does_not_overflow_on_high_attempts:BackoffPolicyTests.test_does_not_overflow_on_high_attempts  s<     Cs9=TB'Wr*r    c                V    \        RRRR R7      pV P                  V! R4      ^=4       R# )z
Even with unusual parameters, any L{OverflowError} within
L{backoffPolicy()} will be caught and L{maxDelay} will be returned
instead
r  r  g    _Bc                      ^# rr  r   r   r    r!   r  SBackoffPolicyTests.test_does_not_overflow_with_large_factor_value.<locals>.<lambda>  s    Ar    r  r  Nr  r  s   & r!   .test_does_not_overflow_with_large_factor_valueABackoffPolicyTests.test_does_not_overflow_with_large_factor_value  s(     CtI>TB'r    r   N)
r   r   r   r   r  r  r  r  r   rv   rw   s   @r!   r  r    s     	'
+( (r    r  )Ar  rs   osr   ior   rq  r8  unittestr   twisted.applicationr   r   r   r   twisted.application.internetr   twisted.internetr	   r
   r   r   twisted.internet.testingr   twisted.persistedr   twisted.pluginsr   twisted.protocolsr   r   twisted.pythonr   twisted.python.runtimer   #twisted.python.test.modules_helpersr   twisted.trial.unittestr   r   r   r#   r  ry   curuidgetgidcurgidr{   r   r   r   r   LineReceiverr   r   r  rI  r  r  r  r  r  r  ri  r  r   r    r!   <module>r     s{    	    @ @ 6 A A 2 ! , )   / C 5 x#8 x#v 2xYY[FYY[FFV18 10	Hh 	H%x %>=8 =(,8h ,8^	3%

 	3( ( tyy 
TUH TUn9h 9x("" c2/ c2L;< ;<|#( #(M  Gs   F 	FF