
    hZ                        S r SSKrSSKrSSKrSSKJr   SSKrSSKJ	r	  SSK
JrJrJrJr  SSKJr  SSKJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&J'r'   " S S5      r( " S S\'5      r)\*" \S5      (       a#  \RV                  " 5       r,\RZ                  " 5       r.OS=r,r. " S S\'5      r/ " S S\'5      r0 " S S\'5      r1 " S S\'5      r2 " S S\'5      r3 " S S \Rh                  5      r5 " S! S"5      r6 " S# S$5      r7 " S% S&\Rp                  5      r9 " S' S(\'5      r: " S) S*\'5      r; " S+ S,\Rx                  5      r= " S- S.\$\'5      r> " S/ S0\'5      r? " S1 S2\'5      r@g! \ a    Sr GNpf = f)3zU
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                       \ rS rSrSrSrg)Dummy#   N )__name__
__module____qualname____firstlineno__processName__static_attributes__r       d/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/test/test_application.pyr   r   #   s    Kr"   r   c                   b    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)ServiceTests'   c                     [         R                  " 5       nUR                  S5        U R                  UR                  S5        g Nhello)r   ServicesetNameassertEqualnameselfss     r#   testNameServiceTests.testName(   s.    OO			')r"   c                     [         R                  " 5       n[         R                  " 5       nUR                  U5        U R	                  [        U5      U/5        U R	                  UR                  U5        g N)r   r*   MultiServicesetServiceParentr,   listparentr/   r0   ps      r#   
testParentServiceTests.testParent-   sT    OO  "	1a1#&1%r"   c                 <   [         R                  " 5       n[         R                  " S5      nUR                  U5        U R	                  [        [         R                  " U5      5      U/5        U R	                  UR                  [         R                  " U5      5        g )N )r   r*   Applicationr6   r,   r7   IServiceCollectionr8   r9   s      r#   testApplicationAsParent$ServiceTests.testApplicationAsParent4   sm    OO#	1g88;<qcB7#=#=a#@Ar"   c                 N   [         R                  " 5       n[         R                  " 5       nUR                  S5        UR	                  U5        U R                  [        U5      U/5        U R                  UR                  U5        U R                  UR                  S5      U5        g r(   )	r   r*   r5   r+   r6   r,   r7   r8   getServiceNamedr9   s      r#   testNamedChildServiceTests.testNamedChild;   s{    OO  "			'	1a1#&1%**73Q7r"   c                     [         R                  " 5       n[         R                  " 5       nUR                  S5        UR	                  U5        U R                  [        UR                  S5        g )Nr)   lalar   r*   r5   r+   r6   assertRaisesRuntimeErrorr9   s      r#   testDoublyNamedChild!ServiceTests.testDoublyNamedChildD   sL    OO  "			'	1,		6:r"   c                 *   [         R                  " 5       n[         R                  " 5       nUR                  S5        UR	                  U5        [         R                  " 5       nUR                  S5        U R                  [        UR                  U5        g r(   rI   r9   s      r#   testDuplicateNamedChild$ServiceTests.testDuplicateNamedChildK   sf    OO  "			'	1OO			',(:(:A>r"   c                 v   [         R                  " 5       n[         R                  " 5       nUR                  U5        U R	                  [        U5      U/5        U R	                  UR                  U5        UR                  5         U R	                  [        U5      / 5        U R                  UR                  5        g r4   )	r   r*   r5   r6   r,   r7   r8   disownServiceParentassertIsNoner9   s      r#   testDisowningServiceTests.testDisowningT   s    OO  "	1a1#&1%	a"%!((#r"   c                    [         R                  " 5       nU R                  UR                  5        UR	                  5         U R                  UR                  5        UR                  5         U R                  UR                  5        g r4   )r   r*   assertFalserunningstartService
assertTruestopServicer.   s     r#   testRunningServiceTests.testRunning^   sU    OO#			"	#r"   c                    [         R                  " 5       n[         R                  " 5       nUR                  U5        U R	                  UR
                  5        U R	                  UR
                  5        UR                  5         U R                  UR
                  5        U R                  UR
                  5        UR                  5         U R	                  UR
                  5        U R	                  UR
                  5        g r4   )	r   r*   r5   r6   rW   rX   rY   rZ   r[   r9   s      r#   testRunningChildren1!ServiceTests.testRunningChildren1f   s    OO  "	1##			"		"	##r"   c                 0  ^ ^ [         R                  " 5       mUU 4S jn[         R                  " 5       nXl        Xl        [         R                  " 5       nTR                  U5        UR                  U5        UR                  5         UR                  5         g )Nc                  <   > TR                  T R                  5        g r4   )rZ   rX   )r0   r/   s   r#   checkRunning7ServiceTests.testRunningChildren2.<locals>.checkRunningv   s    OOAII&r"   )r   r*   r[   rY   r5   r6   )r/   rc   tr:   r0   s   `   @r#   testRunningChildren2!ServiceTests.testRunningChildren2s   si    OO	' OO$%  "	1	1		r"   c                 \   [         R                  " 5       nUR                  5         [         R                  " 5       nU R	                  UR
                  5        UR                  U5        U R                  UR
                  5        UR                  5         U R	                  UR
                  5        g r4   )	r   r5   rY   r*   rW   rX   r6   rZ   rR   )r/   r:   r0   s      r#   testAddingIntoRunning"ServiceTests.testAddingIntoRunning   st      "	OO#	1		"	#r"   c                 8  ^ [         R                  " 5       mU4S jnUTl        [         R                  " 5       n[         R                  " 5       nTR	                  U5        UR	                  U5        UR                  5         U R                  TR                  5        g )Nc                     > ST l         g N   )privilegedStarted)r0   s   r#   pss(ServiceTests.testPrivileged.<locals>.pss   s    "#Ar"   )r   r*   privilegedStartServicer5   r6   rZ   ro   )r/   rp   s1r:   r0   s       @r#   testPrivilegedServiceTests.testPrivileged   sr    OO	$ $' __  "	1
A	  "++,r"   c                     [         R                  " 5       nUR                  5         [        R                  " U5      nU R	                  UR
                  5        U R                  UR
                  5        g r4   )r   r*   rY   copyrW   rX   rZ   )r/   r0   rs   s      r#   testCopyingServiceTests.testCopying   sG    OO	YYq\$		"r"   r   N)r   r   r   r   r1   r;   rA   rE   rL   rO   rT   r\   r_   rf   ri   rt   rx   r!   r   r"   r#   r%   r%   '   sD    *
&B8;?$$$$-#r"   r%   getuidc                   &    \ rS rSrS rS rS rSrg)ProcessTests   c                     [         R                  " SS5      nU R                  UR                  S5        U R                  UR                  S5        g )N      )r   Processr,   uidgidr/   r:   s     r#   testIDProcessTests.testID   s:    OOAq!""r"   c                    [         R                  " S5      nU R                  UR                  S5        U R	                  UR
                  5        [         R                  " SS9nU R	                  UR                  5        U R                  UR
                  S5        [         R                  " 5       nU R	                  UR                  5        U R	                  UR
                  5        g )Nr   )r   )r   r   r,   r   rS   r   r   s     r#   testDefaultsProcessTests.testDefaults   s    OOA"!%% OO"!%% "OO!%% !%% r"   c                     [         R                  " 5       nU R                  UR                  5        SUl        U R	                  UR                  S5        g r(   )r   r   rS   r    r,   r   s     r#   testProcessNameProcessTests.testProcessName   s;    OO!--(0r"   r   N)r   r   r   r   r   r   r   r!   r   r"   r#   r|   r|      s    #
	!1r"   r|   c                   &    \ rS rSrS rS rS rSrg)InterfacesTests   c                     U R                  [        R                  R                  [        R                  " 5       5      5        g r4   )rZ   r   IService
providedByr*   r/   s    r#   testServiceInterfacesTests.testService   &    ((33GOO4EFGr"   c                    U R                  [        R                  R                  [        R                  " 5       5      5        U R                  [        R
                  R                  [        R                  " 5       5      5        g r4   )rZ   r   r   r   r5   r@   r   s    r#   testMultiService InterfacesTests.testMultiService   sN    ((33G4H4H4JKL22==g>R>R>TUVr"   c                     U R                  [        R                  R                  [        R                  " 5       5      5        g r4   )rZ   r   IProcessr   r   r   s    r#   testProcessInterfacesTests.testProcess   r   r"   r   N)r   r   r   r   r   r   r   r!   r   r"   r#   r   r      s    HWHr"   r   c                   ,    \ rS rSrS rS rS rS rSrg)ApplicationTests   c                     [         R                  " S5        [         R                  " SS5        [         R                  " SSS5        g Nr)   r   r   )r   r?   r   s    r#   testConstructor ApplicationTests.testConstructor   s2    G$GQ'GQ*r"   c                    [         R                  " S5      nU R                  [         R                  " U5      R                  5        U R                  [         R                  " U5      R
                  5        [         R                  " SS5      nU R                  [         R                  " U5      R                  S5        U R                  [         R                  " U5      R
                  5        [         R                  " SSS5      nU R                  [         R                  " U5      R                  S5        U R                  [         R                  " U5      R
                  S5        g r   )r   r?   rS   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                 b   [         R                  " S5      nU R                  [         R                  " U5      [         R                  " U5      5        U R                  [         R                  " U5      R                  S5        U R                  [         R                  " U5      R                  5        g r(   )	r   r?   assertIsr   r@   r,   r-   rS   r8   r   s     r#   testServiceComponent%ApplicationTests.testServiceComponent   sv    (g&&q)7+E+Ea+HI))!,117;'**1-445r"   c                    [         R                  " S5      n[        R                  " U5      nU R	                  UR
                  S5        U R	                  UR                  S5        U R                  UR                  U5        g )Nr)   pickle)	r   r?   r   IPersistabler,   styler-   r   original)r/   r   r:   s      r#   testPersistableComponent)ApplicationTests.testPersistableComponent   s\    (Q(+)ajj!$r"   r   N)	r   r   r   r   r   r   r   r   r!   r   r"   r#   r   r      s    +
	56%r"   r   c                       \ rS rSrS rSrg)LoadingTests   c                 f   [         R                  " S5      n[        R                  " U5      nSR	                  5        Hq  nUR                  U5        UR                  5         [         R                  " SUS   -   U5      nU R                  [         R                  " U5      R                  S5        Ms     [        SS5       nUR                  SS/5        S S S 5        [         R                  " SS	5      nU R                  [         R                  " U5      R                  S5        g ! , (       d  f       NV= f)
Nr)   source picklezhello.tar   z	hello.tacw(from twisted.application import service
+application = service.Application('hello')
python)r   r?   r   r   splitsetStylesaveloadApplicationr,   r   r-   open
writelines)r/   r   r:   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   >D""
D0r   N)r   r   r   r   r   r!   r   r"   r#   r   r      s    =r"   r   c                   ,    \ rS rSrS rS rS rS rSrg)AppSupportTests   c                 N    U R                  [        R                  " S5      5        g )Nr   )rS   r   getPassphraser   s    r#   testPassphraseAppSupportTests.testPassphrase  s    #++A./r"   c                    [         R                  " S5      nSSSS.nSR                  5        H  nUR                  5       nSUSS0R	                  X35      '   [
        R                  " U5      R                  U5        [
        R                  " U5      R                  SS9  [        R                  " US5      nU R                  [         R                  " U5      R                  S5        M     UR                  5       nSUS	'   [        SS
5       nUR                  SS/5        SSS5        [        R                  " US5      nU R                  [         R                  " U5      R                  S5        g! , (       d  f       NV= f)z<
Test loading an application file in different dump format.
r)   N)filesourcer   r   helloapplicationr   r   filenamer   r   r   r   )r   r?   r   rw   getr   r   r   r   r   getApplicationr,   r   r-   r   r   )r/   r   
baseconfigr   configr   r   s          r#   testLoadApplication#AppSupportTests.testLoadApplication  sA    ("dd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..
E<c           
         [         R                  " S5      nSR                  5        H  nSR                  5        H  n[        R                  " U5      R                  U5        [        R                  " U5      R                  SS9  [        R                  " SUS SUS5        [         R                  " SU5      nU R                  [         R                  " U5      R                  S5        M     M     g )NrH   r   converttestr   zconverttest.outr   )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                     [         R                  " S5      n[        R                  " US5        U R	                  [         R
                  " U5      R                  5        g )NrH   r   )r   r?   r   startApplicationrZ   r   rX   )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!   r   r"   r#   r   r      s    0=2
G8r"   r   c                   &    \ rS rSrS rS rS rSrg)Fooi/  c                 :    U R                   R                  S5        g )Ns   lalala
)	transportwriter   s    r#   connectionMadeFoo.connectionMade0  s    ]+r"   c                 X    XR                   l        U R                  R                  5         g r4   )factoryliner   loseConnection)r/   r   s     r#   lineReceivedFoo.lineReceived3  s     %%'r"   c                 v    U R                   R                  R                  U R                   R                  5        g r4   )r   dcallbackr   r/   reasons     r#   connectionLostFoo.connectionLost7  s"     1 12r"   r   N)r   r   r   r   r   r   r   r!   r   r"   r#   r   r   /  s    ,(3r"   r   c                   $    \ rS rSrSrS rS rSrg)DummyAppi;  Nc                 4    XR                   UR                  '   g r4   servicesr-   r/   r   s     r#   
addServiceDummyApp.addService>  s    &-gll#r"   c                 2    U R                   UR                  	 g r4   r   r  s     r#   removeServiceDummyApp.removeServiceA  s    MM',,'r"   r   )r   r   r   r   r    r  r  r!   r   r"   r#   r   r   ;  s    K.(r"   r   c                        \ rS rSrS rS rSrg)TimerTargetiE  c                     / U l         g r4   lr   s    r#   __init__TimerTarget.__init__F  s	    r"   c                 :    U R                   R                  U5        g r4   )r  append)r/   whats     r#   r  TimerTarget.appendI  s    dr"   r
  N)r   r   r   r   r  r  r!   r   r"   r#   r  r  E  s    r"   r  c                       \ rS rSrS rSrg)TestEchoiM  c                 :    U R                   R                  S5        g NT)r   r   r   s     r#   r   TestEcho.connectionLostN  s    r"   r   N)r   r   r   r   r   r!   r   r"   r#   r  r  M  s    r"   r  c                   @   \ rS rSrS rS rS rS r\" \	R                  " \S5      (       + S5      S 5       rS	 r\" \	R                  " \S5      (       + S5      S
 5       r\" \	R                  " \S5      (       + S5      S 5       rS rS rS rS rS rS rS rS rSrg)InternetTestsiR  c                 
  ^ [         R                  " 5       mTR                  5         [        R                  " 5       n[
        Ul        [        R                  " 5       [
        l        [        R                  " SU5      nUR                  T5        UR                  R                  5       R                  n[        R                  " 5       n[        R                  " 5       Ul        [         Ul        S Ul        [        R$                  " SX15      R                  T5        UR                  R'                  U R(                  S5        UR                  R'                  U4S j5        UR                  R'                  S 5        UR                  $ )Nr   	127.0.0.1   lalalac                 $   > TR                  5       $ r4   r[   xr0   s    r#   <lambda>'InternetTests.testTCP.<locals>.<lambda>b      r"   c                 "    [         R                  $ r4   r  r   r  s    r#   r   r!  c      

r"   )r   r5   rY   r   ServerFactoryr  r
   Deferredr   r   	TCPServerr6   _portgetHostportClientFactoryr   r   	TCPClientaddCallbackr,   )r/   r   re   numr0   s       @r#   testTCPInternetTests.testTCPS  s     "	((*#^^%
q'*	1ggoo$$((*NN$	;5FFqI		d..	:		78		23yyr"   c                   ^^ [         R                  " [        S5      (       d  [        S5      e[        R
                  " 5       m[        R                  " ST5      nUR                  5         UR                  R                  5       R                  mU R                  TS5        UU4S jn[        R                  " UR                  5      R!                  U5      $ )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 socketsr   c                 r   > [         R                  " TT5      nUR                  5         UR                  5       $ r4   )r   	UDPServerrY   r[   )ignoredre   r0  r:   s     r#   onStop&InternetTests.test_UDP.<locals>.onStopt  s+    ""3*ANN==?"r"   )r   IReactorUDPr   r   r   DatagramProtocolr   r5  rY   r*  r+  r,  assertNotEqualr
   maybeDeferredr[   r/  )r/   re   r7  r0  r:   s      @@r#   test_UDPInternetTests.test_UDPf  s     %%gt44FGG%%'q!$	ggoo$$C#	#
 ""1==1==fEEr"   c                   ^^ [         R                  " 5       n[        Ul         [        R                  " 5       [        l        [        R                  " SU5      mSTl        TR                  5         TR                  R                  5       R                  n[         R                  " 5       n[        R                  " 5       Ul        [        Ul         S Ul        [        R                   " SX!5      mTR#                  5         UR
                  R%                  U R&                  S5        UR
                  R%                  U4S j5        UR
                  R%                  U4S j5        UR
                  R%                  S 5        UR
                  $ )Nr   rn   r  r  c                 $   > TR                  5       $ r4   r  )r  cs    r#   r   .InternetTests.testPrivileged.<locals>.<lambda>  r"  r"   c                 $   > TR                  5       $ r4   r  r  re   s    r#   r   rB    r"  r"   c                 "    [         R                  $ r4   r$  r%  s    r#   r   rB    r&  r"   )r   r'  r  r
   r(  r   r   r)  
privilegedrr   r*  r+  r,  r-  r   r   r.  rY   r/  r,   )r/   r   r0  rA  re   s      @@r#   rt   InternetTests.testPrivileged{  s   ((*#^^%
q'*	  "ggoo$$((*NN$	{C9			d..	:		78		78		23yyr"   c                   ^ [         R                  " 5       n[        R                  Ul         [        R
                  " SU5      nUR                  5         UR                  R                  5       R                  nUR                  5         [        R                  " 5       m[         R                  " 5       nU4S jUl        [        R                  " SX15      nUR                  5         T$ )Nr   c                  &   > TR                  S 5      $ r4   r   argsr   s    r#   r   <InternetTests.testConnectionGettingRefused.<locals>.<lambda>      qzz$7Gr"   r  )r   r'  r   Echor   r)  rY   r*  r+  r,  r[   r
   r(  r-  clientConnectionFailedr.  )r/   r   re   r0  rA  r   s        @r#   testConnectionGettingRefused*InternetTests.testConnectionGettingRefused  s    ((*99q'*	ggoo$$	NN((*)G&{C9	r"   Nz1This reactor does not support UNIX domain socketsc                   ^ [         R                  " 5       mTR                  5         [        R                  " 5       n[
        Ul        [        R                  " 5       [
        l        [        R                  " SU5      nUR                  T5        [        R                  " 5       n[        Ul        [        R                  " 5       Ul        S Ul        [        R                  " SU5      R                  T5        UR                  R!                  U R"                  S5        UR                  R!                  U4S j5        UR                  R!                  S 5        UR                  R!                  U R$                  UT5        UR                  $ )Necho.sktr  c                 $   > TR                  5       $ r4   r  r  s    r#   r   (InternetTests.testUNIX.<locals>.<lambda>  r"  r"   c                 "    [         R                  $ r4   r$  r%  s    r#   r   rV    r&  r"   )r   r5   rY   r   r'  r  r
   r(  r   r   
UNIXServerr6   r-  r   r   
UNIXClientr/  r,   _cbTestUnix)r/   r   re   r0   s      @r#   testUNIXInternetTests.testUNIX  s      "	((*#^^%

G4	1((*NN$	J0AA!D		d..	:		78		23		d..;yyr"   c                 |  ^ [         R                  " 5       [        l        S Ul        [         R                  " 5       Ul        TR                  5         UR                  R                  U R                  S5        UR                  R                  U4S j5        UR                  R                  S 5        UR                  $ )Nr  c                 $   > TR                  5       $ r4   r  r  s    r#   r   +InternetTests._cbTestUnix.<locals>.<lambda>  r"  r"   c                 "    [         R                  $ r4   r$  r%  s    r#   r   r_    r&  r"   )r
   r(  r  r   r   rY   r/  r,   )r/   r6  r   r0   s      `r#   rZ  InternetTests._cbTestUnix  sz    ^^%
NN$				d..	:		78		23yyr"   c                    [         R                  " 5       n[        R                  Ul         [        R
                  " SU5      nUR                  5         U R                  UR                  S 5        [        R                  " U5      nU R                  UR                  5        UR                  5         U R                  UR                  5        U R                  UR                  5        [         R                  " 5       n[        R                  Ul         [        R                  " SU5      nUR                  5         U R                  UR                   S 5        [        R                  " U5      nU R                  UR                   5        UR                  5         U R                  UR                   5        U R                  UR                  5        g )NrT  )r   r'  r   rO  r   rX  rY   failIfIdenticalr*  rw   rS   r[   rW   rX   r-  rY  _connection)r/   r   re   t1s       r#   testVolatileInternetTests.testVolatile  s0   
 ((*99
G4	QWWd+YYq\"((#	!''"#((*99
G4	Q]]D1YYq\"..)	!--(#r"   c                   ^ [         R                  " 5       n[        R                  Ul         [        R
                  " SU5      nUR                  5         UR                  5         U R                  UR                  5        [         R                  " 5       n[        R                  " 5       mU4S jUl        [        R                  " SU5        T$ )NrT  c                  &   > TR                  S 5      $ r4   rJ  rK  s    r#   r   2InternetTests.testStoppingServer.<locals>.<lambda>  rN  r"   )r   r'  r   rO  r   rX  rY   r[   rW   rX   r-  r
   r(  rP  r   connectUNIX)r/   r   re   r   s      @r#   testStoppingServer InternetTests.testStoppingServer  s    
 ((*99
G4		#((*NN)G&J0r"   c                 *   [        5       n[        R                  " SUR                  S5      nUR	                  5         [
        R                  " U5      nUR                  5         [
        R                  " U5      nU R                  UR                  5        g )Nrn   r)   )r  r   TimerServicer  rY   r   dumpsr[   loadsrW   rX   )r/   targett0r0   re   s        r#   testPickledTimerInternetTests.testPickledTimer  sb    ""1fmmW=
LL
LLO#r"   c                   ^ ^^^ [         R                  " 5       m[        R                  " SS 5      mTR                  mUU4S jnUTl        TR                  5         TR                  U4S j5        TR                  U 4S j5        T$ )Nrn   c                      SS-  $ )Nrn   r   r   r   r"   r#   r   /InternetTests.testBrokenTimer.<locals>.<lambda>  s    Q!Vr"   c                 8   > T" U 5        TR                  S 5        g r4   rJ  )whyr   	oldFaileds    r#   _failed.InternetTests.testBrokenTimer.<locals>._failed  s    cNJJtr"   c                    > TR                   $ r4   r  rD  s    r#   r   rx    s	    r"   c                    > TR                  [        /TR                  [        5       Vs/ s H  oR                  R                  PM     sn5      $ s  snf r4   )r,   ZeroDivisionErrorflushLoggedErrorsvalue	__class__)r  or/   s     r#   r   rx    sA    d&&"#,0,B,BCT,UV,Uq"",UVVs   A
)r
   r(  r   ro  r|  rY   r/  )r/   r|  r   r{  re   s   ` @@@r#   testBrokenTimerInternetTests.testBrokenTimer  sg    NN!!!^4II		 			-.		
 r"   c           	      b   / SQnUSS  H9  n[        [        SU-   5      " [        S5      (       a  M(  UR                  U5        M;     U H  nS H  nUS:X  a  US:X  a  M  US:X  a  US:X  a  M  U R	                  [        [        X#-   5      5        [        [        X#-   5      R                  nSS	S.U   nU R	                  [        [        XT-   5      =(       d    US	:H  =(       a    US:H  5        [        [        X#-   5      " 5       nU R                  [        R                  " U5      U5        M     M     g)
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.
)TCPUNIXSSLUDPUNIXDatagram	MulticastNIReactor)ServerClientr  r  r  listenconnect)getattrr   r   removerZ   hasattrr   methodr,   r   r   )r/   transtransider  prefixr  s          r#   test_everythingThere"InternetTests.test_everythingThere
  s    K!HD:zD'89'4HHT"  D,;&48+;5=TX%5$+ >? 4;7>>$,	B4HGV_5 A)+?% Hdk24  !1!1!!4a8 - r"   c                 x    [         R                   H&  nU R                  [        [         U5      U S35        M(     g)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__rZ   r  )r/   clss     r#   test_importAllInternetTests.test_importAll$  s5     ##COO#&%HI $r"   c                     [        5       n[        5       n[        R                  " SX!S9nUR	                  5         U R                  UR                  R                  5       SS SU45        g)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   )r   objectr   r)  rY   r,   
tcpServerspopr/   r   r   re   s       r#   #test_reactorParametrizationInServer1InternetTests.test_reactorParametrizationInServer0  sX      /(tW>	++//1"15gGr"   c                     [        5       n[        R                  " 5       n[        R                  " SSX!S9nUR                  5         U R                  UR                  R                  5       SS SSU45        g)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   )	r   r   r-  r   r.  rY   r,   
tcpClientsr  r  s       r#   #test_reactorParametrizationInClient1InternetTests.test_reactorParametrizationInClient=  sd      /((*{D'K	++//1"15T77STr"   c                    [        5       n[        R                  " 5       n[        R                  " SX!S9nUR                  5         U R                  UR                  R                  5       SS SU45        UR                  5         UR                  5         U R                  UR                  R                  5       SS SU45        g)z
Like L{test_reactorParametrizationInServer}, but stop and restart the
service and check that the given reactor is still used.
r  r  Nr  )
r   r   Factoryr   r)  rY   r,   r  r  r[   r  s       r#   0test_reactorParametrizationInServerMultipleStart>InternetTests.test_reactorParametrizationInServerMultipleStartJ  s    
  /""$tW>	++//1"15gG		++//1"15gGr"   c                    [        5       n[        R                  " 5       n[        R                  " SSX!S9nUR                  5         U R                  UR                  R                  5       SS SSU45        UR                  5         UR                  5         U R                  UR                  R                  5       SS SSU45        g)z
Like L{test_reactorParametrizationInClient}, but stop and restart the
service and check that the given reactor is still used.
r  r  r  Nr  )
r   r   r-  r   r.  rY   r,   r  r  r[   r  s       r#   0test_reactorParametrizationInClientMultipleStart>InternetTests.test_reactorParametrizationInClientMultipleStartY  s    
  /((*{D'K	++//1"15T77ST		++//1"15T77STr"   r   )r   r   r   r   r1  r=  rt   rQ  r   r   IReactorUNIXr   r[  rZ  rf  rl  rt  r  r  r  r  r  r  r  r!   r   r"   r#   r  r  R  s    &F*( ##GT22;	* ##GT22;$	$. ##GT22;	$(94
HUHUr"   r  c                   ,    \ rS rSrS rS rS rS rSrg)TimerBasicTestsii  c                 @  ^  [         R                  " 5       n[        R                  " SUR                  S5      T l        T R
                  R                  5         UR                  T R                  S5        UR                  U 4S j5        UR                  U 4S j5        U$ )Nrn   r)   c                 8   > TR                   R                  5       $ r4   re   r[   r  r/   s    r#   r   /TimerBasicTests.testTimerRuns.<locals>.<lambda>o       2 2 4r"   c                 N   > TR                  TR                  R                  5      $ r4   )rW   re   rX   r  s    r#   r   r  p  s     0 0 @r"   )	r
   r(  r   ro  r   re   rY   r/  r,   )r/   r   s   ` r#   testTimerRunsTimerBasicTests.testTimerRunsj  sl    NN&&q!**g>	d&&0	45	@Ar"   c                 6    U R                   R                  5       $ r4   r  r   s    r#   tearDownTimerBasicTests.tearDowns  s    vv!!##r"   c                 t  ^ ^^ [         R                  " 5       n[         R                  " 5       mTS4US4/mU4S jn[        R                  " SU5      T l        T R                  R                  5         U 4S jnUU 4S jnU 4S jnUR                  U5        UR                  U5        UR                  U5        U$ )Nbarfooc                  L   > TR                  5       u  pU R                  U5        g r4   )r  r   )r   argworks     r#   trigger1TimerBasicTests.testTimerRestart.<locals>.trigger|  s    XXZFAJJsOr"   rn   c                 \   > TR                  U S5        TR                  R                  5       $ )Nr  r,   re   r[   resultr/   s    r#   onFirstResult7TimerBasicTests.testTimerRestart.<locals>.onFirstResult  s&    VU+66%%''r"   c                    > TR                  TR                  R                  5        TR                  R                  5         T$ r4   )rW   re   rX   rY   )r6  d2r/   s    r#   onFirstStop5TimerBasicTests.testTimerRestart.<locals>.onFirstStop  s.    TVV^^,FF!Ir"   c                 ^   > TR                  U S5        TR                  R                  5         g )Nr  r  r  s    r#   onSecondResult8TimerBasicTests.testTimerRestart.<locals>.onSecondResult  s#    VU+FF r"   )r
   r(  r   ro  re   rY   r/  )r/   d1r  r  r  r  r  r  s   `     @@r#   testTimerRestart TimerBasicTests.testTimerRestartv  s    ^^^^Ub%[)	 &&q'2	(	
	! 	}%
{#
~&	r"   c                    ^ ^ / mU4S jn[         R                  " 5       n[        R                  " SUSSU5      T l        T R                  R                  5         UR                  T R                  S/S-  5        UR                  U 4S j5        U$ )Nc                 j   > TR                  U 5        [        T5      U:X  a  UR                  T5        g g r4   )r  lenr   )datanumberr   r  s      r#   r  /TimerBasicTests.testTimerLoops.<locals>.trigger  s*    HHTN1v

1  r"   g{Gz?r)   
   c                 8   > TR                   R                  5       $ r4   r  r  s    r#   r   0TimerBasicTests.testTimerLoops.<locals>.<lambda>  r  r"   )r
   r(  r   ro  re   rY   r/  r,   )r/   r  r   r  s   `  @r#   testTimerLoopsTimerBasicTests.testTimerLoops  sq    	
 NN&&tWgr1E	d&&	B7	45r"   )re   N)	r   r   r   r   r  r  r  r  r!   r   r"   r#   r  r  i  s    $>r"   r  c                       \ rS rSrSrS rSrg)FakeReactori  z.
A fake reactor with a hooked install method.
c                 X    [         R                  R                  " U /UQ70 UD6  Xl        g)z^
@param install: any callable that will be used as install method.
@type install: C{callable}
N)r   Reactorr  install)r/   r  rL  kwargss       r#   r  FakeReactor.__init__  s'    
 	!!$888r"   )r  N)r   r   r   r   __doc__r  r!   r   r"   r#   r  r    s    r"   r  c                   j    \ rS rSrSrS rS rSS jrS rS r	S	 r
S
 rS rS rS rS rS rS rSrg)PluggableReactorTestsi  z2
Tests for the reactor discovery/inspection APIs.
c                 t    / U l         / U l        [        R                  U l        U R
                  [        l        g)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                 .    U R                   [        l        g)z.
Restore the original L{reactors.getPlugins}.
N)r  r   r  r   s    r#   r  PluggableReactorTests.tearDown  s     #33r"   Nc                 d    U R                   R                  X45        [        U R                  5      $ )za
Stand-in for the real getPlugins method which records its arguments
and returns a fixed result.
)r  r  r7   r  )r/   	interfacepackages      r#   r  !PluggableReactorTests._getPlugins  s,    
 	 45D&&''r"   c                 l   Sn[         S-   nSn[        R                  " XU5      /U l        [        R                  " 5       nU R                  U R                  [        R                  S4/5        U H1  nUR                  U:X  d  M  U R                  UR                  U5          g   U R                  S5        g)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                    ^ / mU4S jn[        US[        S5      nSU0nU R                  U5        [        R                  " SSS5      nUR                  5         U R                  TS/5        g)za
Test that L{reactors.Reactor.install} loads the correct module and
calls its install attribute.
c                  (   > T R                  S5        g 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                    ^ / mU4S jnSn[         nSn[        XX45      /U l        [        R                  " U5        U R                  TS/5        g)z]
Test that the L{reactors.installReactor} function correctly installs
the specified reactor.
c                  (   > T R                  S5        g 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                    ^ ^ [        5       mUU 4S jnSn[        nSn[        XX45      /T l        [        R
                  " U5      nT R                  UT5        g)z\
Test that the L{reactors.installReactor} function correctly returns
the installed reactor.
c                  8   > SSK Jn   TR                  U ST5        g )Nr   )r   r   )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   `     @r#   !test_installReactorReturnsReactor7PluggableReactorTests.test_installReactorReturnsReactor	  sR    
 (	5
 !#)'NO++D1	i)r"   c                    ^ / mU4S jnSn[         nSn[        XX45      n[        S SX45      nXe/U l        [        R                  " U5        U R                  TS/5        g)z
Test that the L{reactors.installReactor} function correctly installs
the specified reactor when there are multiple reactor plugins.
c                  (   > T R                  S5        g r  r  r  s   r#   r  IPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.install#  r  r"   r  r  c                      g r4   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                 p    / U l         U R                  [        R                  [        R                  S5        g)z}
Test that L{reactors.installReactor} raises L{reactors.NoSuchReactor}
when asked to install a reactor which it cannot find.
somereactorN)r  rJ   r   NoSuchReactorr   r   s    r#   test_installNonExistentReactor4PluggableReactorTests.test_installNonExistentReactor/  s-    
  ""H$;$;]	
r"   c                     S nSn[         nSn[        XX45      /U l        U R                  [        [
        R                  U5        g)z
Test that L{reactors.installReactor} raises an exception when asked to
install a reactor which doesn't work in this environment.
c                      [        S5      e)NMissing foo barImportErrorr   r"   r#   r  FPluggableReactorTests.test_installNotAvailableReactor.<locals>.install?  s    /00r"   r  r  N)r   r  r  rJ   r<  r   r   )r/   r  r-   r   r  s        r#   test_installNotAvailableReactor5PluggableReactorTests.test_installNotAvailableReactor9  sB    	1 !#)'NO+x'>'>Er"   c                 v  ^^^ / mSmSm " UU4S jS[         R                  [        R                  5      nUU4S jn[	        US[
        S5      /U l        U" 5       nUR                  / SQ5        U R                  TS	   T5        U R                  TR                  T5      S
5        U R                  US   S5        g)z`
Test that the reactor selected is installed as soon as possible, ie
when the option is parsed.
zreactor installedzsubcommands loadedc                   .   > \ rS rSr\U U4S j5       rSrg)QPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptionsiQ  c                 >   >^  TR                  T5        SS U 4S jS4/$ )N
subcommandc                     > T $ r4   r   r   s   r#   r   oPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptions.subCommands.<locals>.<lambda>U  s    Tr"   ztest subcommandr  )r/   SUBCOMMAND_EVENTexecuteds   `r#   subCommands]PluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptions.subCommandsR  s#     01%t\;LMNNr"   r   N)r   r   r   r   propertyrI  r!   )rG  rH  s   r#   ReactorSelectionOptionsrB  Q  s    O Or"   rL  c                  (   > TR                  T 5        g r4   r  )INSTALL_EVENTrH  s   r#   r  APluggableReactorTests.test_reactorSelectionMixin.<locals>.installW  s    OOM*r"   r  r  z	--reactorr  rD  r   rn   r   N)
r   Optionsr   ReactorSelectionMixinr  r   r  parseOptionsr,   count)r/   rL  r  optionsrN  rG  rH  s       @@@r#   test_reactorSelectionMixin0PluggableReactorTests.test_reactorSelectionMixinH  s    
 +/	O 	OemmS5N5N 	O	+ !2HkJ
 *+KL!m46:+->?r"   c                 d    " S S[         R                  [        R                  5      n/ U l        U" 5       n[        5       Ul        U R                  [         R                  UR                  / SQ5      nU R                  SUR                  S   5        U R                  SUR                  S   5        g)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                       \ rS rSrSrg)\PluggableReactorTests.test_reactorSelectionMixinNonExistent.<locals>.ReactorSelectionOptionsik  r   Nr   r   r   r   r!   r   r"   r#   rL  rZ  k      r"   rL  rP  r  r   help-reactorsN)r   rQ  r   rR  r  r   messageOutputrJ   
UsageErrorrS  assertInrL  )r/   rL  rU  es       r#   %test_reactorSelectionMixinNonExistent;PluggableReactorTests.test_reactorSelectionMixinNonExistentd  s    	emmS5N5N 	  )+ (
  :

 	'3oqvvay1r"   c                   ^  " S S[         R                  [        R                  5      nSmU4S jnSn[        nSn[        X#XE5      /U l        U" 5       n[        5       Ul        U R                  [         R                  UR                  / SQ5      nU R                  TUR                  S   5        U R                  S	UR                  S   5        g
)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                       \ rS rSrSrg)]PluggableReactorTests.test_reactorSelectionMixinNotAvailable.<locals>.ReactorSelectionOptionsi  r   Nr[  r   r"   r#   rL  rf    r\  r"   rL  r:  c                     > [        T 5      er4   r;  )messages   r#   r  MPluggableReactorTests.test_reactorSelectionMixinNotAvailable.<locals>.install  s    g&&r"   r  r  rP  r   r]  N)r   rQ  r   rR  r   r  r  r   r^  rJ   r_  rS  r`  rL  )	r/   rL  r  r-   r   r  rU  ra  rh  s	           @r#   &test_reactorSelectionMixinNotAvailable<PluggableReactorTests.test_reactorSelectionMixinNotAvailablez  s    	emmS5N5N 	 $	' !#)'NO)+ (
  :

 	gqvvay)oqvvay1r"   )r  r  r  r4   )r   r   r   r   r  r  r  r  r  r  r!  r(  r1  r6  r>  rV  rb  rj  r!   r   r"   r#   r  r    sK    /4(P&,","*&,&
F@82,2r"   r  c                       \ rS rSrSrS r\" \S5      S 5       r\" \(       + S5      S 5       r	\" \
S:g  S	5      S
 5       r\" \
S:H  S5      S 5       rS rSrg)HelpReactorsTestsi  z.
--help-reactors lists the available reactors
c                    [         R                  " 5       U l        [        5       U R                  l        U R                  [        U R                  R                  5        U R                  R                  R                  5       U l	        g)z#
Get the text from --help-reactors
N)
r   rR  rU  r   r^  rJ   
SystemExitopt_help_reactorsgetvaluerh  r   s    r#   r  HelpReactorsTests.setUp  sV     002%-Z"*dll&D&DE||11::<r"   z$Not applicable, asyncio is availablec                     U R                  [        R                  R                  U R                  5        U R                  S[        R                  R
                  -   U R                  5        g)zH
--help-reactors should NOT display the asyncio reactor on Python < 3.4
!N)r`  r   asyncior  rh  r  r   s    r#   test_lacksAsyncIO#HelpReactorsTests.test_lacksAsyncIO  sG    
 	&..::DLLIc,44>>>Mr"   zasyncio library not availablec                     U R                  [        R                  R                  U R                  5        U R                  S[        R                  R                  -   U R                  5        g)zE
--help-reactors should display the asyncio reactor on Python >= 3.4
rt  N)r`  r   ru  r  rh  assertNotInr  r   s    r#   test_hasAsyncIO!HelpReactorsTests.test_hasAsyncIO  sI    
 	&..::DLLI/77AAA4<<Pr"   win32zTest only applicable on Windowsc                     U R                  [        R                  R                  U R                  5        U R                  S[        R                  R                  -   U R                  5        g)z<
--help-reactors should display the iocp reactor on Windows
rt  N)r`  r   iocpr  rh  ry  r  r   s    r#   test_iocpWin32 HelpReactorsTests.test_iocpWin32  sI    
 	&++77F/44>>>Mr"   zTest not applicable on Windowsc                     U R                  [        R                  R                  U R                  5        U R                  S[        R                  R
                  -   U R                  5        g)z@
--help-reactors should NOT display the iocp reactor on Windows
rt  N)r`  r   r~  r  rh  r  r   s    r#   test_iocpNotWin32#HelpReactorsTests.test_iocpNotWin32  sG    
 	&++77Fc,11;;;T\\Jr"   c                     S n[         R                  " 5       nXl        [        5       Ul        U R                  [        UR                  5        UR                  R                  5       nU R                  SU5        g)z.
--help-reactors with only supported reactors
c               3   0   #    [         R                  v   g 7fr4   )r   defaultr   r"   r#   r  EHelpReactorsTests.test_onlySupportedReactors.<locals>.getReactorTypes  s     "***s   zreactors not availableN)
r   rR  _getReactorTypesr   r^  rJ   ro  rp  rq  ry  )r/   r  rU  rh  s       r#   test_onlySupportedReactors,HelpReactorsTests.test_onlySupportedReactors  sb    
	+ ++-#2  (
*g&?&?@''00217;r"   )rh  rU  N)r   r   r   r   r  r  r   ru  rv  rz  r   r  r  r  r!   r   r"   r#   rm  rm    s    = G;<N =N K89Q :Q LG#%FGN HN LG#%EFK GK<r"   rm  c                   *    \ rS rSrSrS rS rS rSrg)BackoffPolicyTestsi  z8
Tests of L{twisted.application.internet.backoffPolicy}
c                    [        SSSS S9nU R                  U" S5      S5        U R                  U" S5      S	5        U R                  U" S
5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g)z9
Test that L{backoffPolicy()} calculates expected values
      ?      N@      ?c                      grm   r   r   r"   r#   r   CBackoffPolicyTests.test_calculates_correct_values.<locals>.<lambda>      1r"   jitterr   r  rn   g      @r  g     UM@   =   d   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                 ~    [        SSSS S9nU R                  U" S5      S5        U R                  U" S5      S5        g	)
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                      grm   r   r   r"   r#   r   LBackoffPolicyTests.test_does_not_overflow_on_high_attempts.<locals>.<lambda>  r  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                 N    [        SSSS S9nU R                  U" S5      S5        g)	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                      grm   r   r   r"   r#   r   SBackoffPolicyTests.test_does_not_overflow_with_large_factor_value.<locals>.<lambda>  s    Ar"   r  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!   r   r"   r#   r  r    s    	'
+(r"   r  )Ar  rw   osr   ior   ru  r<  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  rz   curuidgetgidcurgidr|   r   r   r   r   LineReceiverr   r   r  rO  r  r  r  r  r  r  rm  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   E? ?F
F