ó
    ×›‘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   ó    ÚaC:\Users\psant\Downloads\Noiseback\school\venv\Lib\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.   € Ü�OŠOÓˆØ	�	‰	�'ÔØ×Ñ˜Ÿ™ Õ)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   € Ü�OŠOÓˆÜ× Ò Ó"ˆØ	×Ñ˜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   € Ü�OŠOÓˆÜ×Ò Ó#ˆØ	×Ñ˜1ÔØ×Ñœœg×8Ò8¸Ó;Ó<¸q¸cÔ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{   € Ü�OŠOÓˆÜ× Ò Ó"ˆØ	�	‰	�'ÔØ	×Ñ˜1ÔØ×Ñœ˜a› 1 #Ô&Ø×Ñ˜Ÿ™ 1Ô%Ø×Ñ˜×*Ñ*¨7Ó3°QÕ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   € Ü�OŠOÓˆÜ× Ò Ó"ˆØ	�	‰	�'ÔØ	×Ñ˜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   € Ü�OŠOÓˆÜ× Ò Ó"ˆØ	�	‰	�'ÔØ	×Ñ˜1ÔÜ�OŠOÓˆØ	�	‰	�'ÔØ×Ñœ,¨×(:Ñ(:¸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†   € Ü�OŠOÓˆÜ× Ò Ó"ˆØ	×Ñ˜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   € Ü�OŠOÓˆØ×Ñ˜Ÿ™Ô#Ø	�‰ÔØ�‰˜Ÿ	™	Ô"Ø	�‰ŒØ×Ñ˜Ÿ™Õ#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¥   € Ü�OŠOÓˆÜ× Ò Ó"ˆØ	×Ñ˜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#   ÚcheckRunningÚ7ServiceTests.testRunningChildren2.<locals>.checkRunningv   s   ø€ Ø�O‰O˜AŸI™IÕ&r"   )r   r*   r[   rY   r5   r6   )r/   rc   Útr:   r0   s   `   @r#   ÚtestRunningChildren2Ú!ServiceTests.testRunningChildren2s   si   ù€ Ü�OŠOÓˆö	'ô �OŠOÓˆØ$ŒØ%ŒÜ× Ò Ó"ˆØ	×Ñ˜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   € Ü× Ò Ó"ˆØ	�‰ÔÜ�OŠOÓˆØ×Ñ˜Ÿ™Ô#Ø	×Ñ˜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   ø€ Ü�OŠOÓˆõ	$ð $'ˆÔ Ü�_Š_ÓˆÜ× Ò Ó"ˆØ	×Ñ˜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   € Ü�OŠOÓˆØ	�‰ÔÜ�YŠY�q‹\ˆØ×Ñ˜Ÿ™Ô$Ø�‰˜Ÿ	™	Õ"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:   € Ü�OŠO˜A˜qÓ!ˆØ×Ñ˜Ÿ™ Ô"Ø×Ñ˜Ÿ™ Õ"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š   € Ü�OŠO˜AÓˆØ×Ñ˜Ÿ™ Ô"Ø×Ñ˜!Ÿ%™%Ô Ü�OŠO Ñ"ˆØ×Ñ˜!Ÿ%™%Ô Ø×Ñ˜Ÿ™ Ô"Ü�OŠOÓˆØ×Ñ˜!Ÿ%™%Ô Ø×Ñ˜!Ÿ%™%Õ 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;   € Ü�OŠOÓˆØ×Ñ˜!Ÿ-™-Ô(ØˆŒØ×Ñ˜Ÿ™¨Õ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Ñ3´G·O²OÓ4EÓ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Ñ3´G×4HÒ4HÓ4JÓ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Ô$Ü×Ò˜G QÔ'Ü×Ò˜G Q¨Õ*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Ò+EÀaÓ+HÔIØ×Ñœ×)Ò)¨!Ó,×1Ñ1°7Ô;Ø×Ñœ'×*Ò*¨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ÓˆØ×Ñ˜Ÿ™ (Ô+Ø×Ñ˜Ÿ™ Ô)Ø�‰�a—j‘j !Õ$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Ø�J‰J�uÔØ�F‰FŒHÜ×(Ò(¨°e¸A±hÑ)>ÀÓFˆBØ×ÑœW×-Ò-¨bÓ1×6Ñ6¸Ö@ñ	 -ô
 �+˜sÔ# qØ�L‰Là?ØBðô÷ $ô ×$Ò$ [°(Ó;ˆØ×Ñœ×)Ò)¨"Ó-×2Ñ2°GÕ<÷ $Õ#ú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  € ô ×Ò Ó(ˆØ"¨d¸dÑCˆ
Ø$×*Ñ*Ö,ˆEØ—_‘_Ó&ˆFØ;MˆF�H˜fÐ%×)Ñ)¨%Ó7Ñ8Ü×Ò˜QÓ×(Ñ(¨Ô/Ü×Ò˜QÓ×$Ñ$Ð.@Ð$ÑAÜ×#Ò# F¨DÓ1ˆBØ×ÑœW×-Ò-¨bÓ1×6Ñ6¸Ö@ñ -ð —‘Ó"ˆØ-ˆˆxÑÜÐ$ cÔ*¨aØ�L‰Là?ØBðô÷ +ô ×Ò ¨Ó-ˆØ×Ñœ×)Ò)¨"Ó-×2Ñ2°GÕ<÷ +Õ*ú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Ü× Ò Ø! 7¨DÐ2CÀXÈqôô  ×/Ò/Ð0AÀ8Ó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Ó*ˆÜ×Ò˜T 1Ô%Ø�‰œ×(Ò(¨Ó.×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   € Ø&-�‰�g—l‘lÒ#r"   c                 ó2   • U R                   UR                  	 g r4   rÿ   r  s     r#   ÚremoveServiceÚDummyApp.removeServiceA  s   € Ø�M‰M˜'Ÿ,™,Ñ'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ÔØ�g‰g�o‰oÓ×$Ñ$ˆÜ×(Ò(Ó*ˆÜ—N’NÓ$ˆŒ	ÜˆÔØˆŒÜ×Ò˜;¨Ó5×FÑFÀqÔIØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÔ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�y‰yÐ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Ø�N‰NÔØ—=‘=“?Ð"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›   ù€ ô ×%Ò%¤g¨t×4Ñ4ÜÐFÓGÐGÜ×%Ò%Ó'ˆÜ×Ò˜q !Ó$ˆØ	�‰ÔØ�g‰g�o‰oÓ×$Ñ$ˆØ×Ñ˜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 'Ó*ˆØˆŒØ	× Ñ Ô"Ø�g‰g�o‰oÓ×$Ñ$ˆÜ×(Ò(Ó*ˆÜ—N’NÓ$ˆŒ	ÜˆÔØˆŒÜ×Ò˜{¨CÓ9ˆØ	�‰ÔØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÔ7Ô8Ø�	‰	×ÑÔ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�y‰yÐ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>˜  ó   ø€ °q·z±zÀ$Ô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›   ø€ Ü×(Ò(Ó*ˆÜŸ9™9ˆÔÜ×Ò˜q 'Ó*ˆØ	�‰ÔØ�g‰g�o‰oÓ×$Ñ$ˆØ	�‰ŒÜ�NŠNÓˆÜ×(Ò(Ó*ˆÜ)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ÔÜ×(Ò(Ó*ˆÜˆÔÜ—N’NÓ$ˆŒ	ØˆŒÜ×Ò˜J¨Ó0×AÑAÀ!ÔDØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÔ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�	‰	×Ñ˜d×.Ñ.°¸Ô;Ø�y‰yÐ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   ø€ Ü—^’^Ó%ŒŒ
ØˆŒÜ—N’NÓ$ˆŒ	Ø	�‰ÔØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÔ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�y‰yÐ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  € ô
 ×(Ò(Ó*ˆÜŸ9™9ˆÔÜ×Ò 
¨GÓ4ˆØ	�‰ÔØ×Ñ˜QŸW™W dÔ+Ü�YŠY�q‹\ˆØ×Ñ˜"Ÿ(™(Ô#Ø	�‰ŒØ×Ñ˜!Ÿ'™'Ô"Ø×Ñ˜Ÿ™Ô#ä×(Ò(Ó*ˆÜŸ9™9ˆÔÜ×Ò 
¨GÓ4ˆØ	�‰ÔØ×Ñ˜QŸ]™]¨DÔ1Ü�YŠY�q‹\ˆØ×Ñ˜"Ÿ.™.Ô)Ø	�‰ŒØ×Ñ˜!Ÿ-™-Ô(Ø×Ñ˜Ÿ™Õ#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�   ø€ ô
 ×(Ò(Ó*ˆÜŸ9™9ˆÔÜ×Ò 
¨GÓ4ˆØ	�‰ÔØ	�‰ŒØ×Ñ˜Ÿ™Ô#Ü×(Ò(Ó*ˆÜ�NŠNÓˆÜ)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   € Ü“ˆÜ×"Ò" 1 f§m¡m°WÓ=ˆØ
�‰ÔÜ�LŠL˜ÓˆØ
�‰Ôä�LŠL˜‹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   ø€ Ù�cŒNØ�J‰J�tÕ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Ñ,BÔCTÔ,UÓVÒ,U q—‘×"Ô"Ñ,UÑVôùâVs   ªA
)r
   r(  r   ro  r|  rY   r/  )r/   r|  rö   r{  re   s   ` @@@r#   ÚtestBrokenTimerÚInternetTests.testBrokenTimerö  sg   û€ Ü�NŠNÓˆÜ×!Ò! !¡^Ó4ˆØ—I‘Iˆ	ö	ð ˆŒ	Ø	�‰ÔØ	�‰Ô-Ô.Ø	�‰ôô	
ð ˆ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ˆØ™!“HˆDÜœ: z°DÑ'8Ô9¼'À4×HÓHØ—‘˜TÖ"ñ ó ˆDÛ,�Ø˜;Ó&¨4°8Ó+;ÙØ˜5“= T¨XÓ%5ÙØ—‘¤¬°$±+Ó >Ô?Ü ¤¨4©;Ó7×>Ñ>�Ø$,¸	ÑBÀ4ÑH�Ø—‘ÜœG V¡_Ó5÷ AØ )Ñ+×?°¸%±ôô œH d¡kÔ2Ó4�Ø× Ñ ¤×!1Ò!1°!Ó!4°aÖ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Ø�O‰OÜœ #Ó&Ø�%Ð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_reactorParametrizationInServerÚ1InternetTests.test_reactorParametrizationInServer0  sX   € ô  “/ˆä“(ˆÜ×Ò˜t WÑ>ˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó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_reactorParametrizationInClientÚ1InternetTests.test_reactorParametrizationInClient=  sd   € ô  “/ˆä×(Ò(Ó*ˆÜ×Ò˜{¨D°'ÑKˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸ÀTÈ7Ð7SÕ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œ   € ô
  “/ˆä×"Ò"Ó$ˆÜ×Ò˜t WÑ>ˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó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¸ÀTÈ7Ð7SÔTØ	�‰ŒØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸ÀTÈ7Ð7SÕ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ò*ò(ñ Ø×#Ò# G¨TÓ2Ô2Ø;óñó	ðò*ñ Ø×#Ò# G¨TÓ2Ô2Ø;óñ$ó	ð$ñ. Ø×#Ò# G¨TÓ2Ô2Ø;óñó	ðò$òò(9ò4
ò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   ø€ Ü�NŠNÓˆÜ×&Ò& q¨!¯*©*°gÓ>ˆŒØ�‰×ÑÔØ	�‰�d×&Ñ&¨Ô0Ø	�‰Ô4Ô5Ø	�‰Ô@ÔAØˆr"   c                 ó6   • U R                   R                  5       $ r4   r½  r“   s    r#   ÚtearDownÚTimerBasicTests.tearDowns  s   € Ø�v‰v×!Ñ!Ó#Ð#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#   ÚtriggerÚ1TimerBasicTests.testTimerRestart.<locals>.trigger|  s   ø€ Ø—X‘X“Z‰FˆAØ�J‰J�s�Or"   rn   c                 ó\   >• TR                  U S5        TR                  R                  5       $ )NrÉ  ©r,   re   r[   ©Úresultr/   s    €r#   ÚonFirstResultÚ7TimerBasicTests.testTimerRestart.<locals>.onFirstResultƒ  s&   ø€ Ø×Ñ˜V UÔ+Ø—6‘6×%Ñ%Ó'Ð'r"   c                 ó†   >• TR                  TR                  R                  5        TR                  R                  5         T$ r4   )rW   re   rX   rY   )r6  Úd2r/   s    €€r#   ÚonFirstStopÚ5TimerBasicTests.testTimerRestart.<locals>.onFirstStop‡  s.   ø€ Ø×Ñ˜TŸV™VŸ^™^Ô,Ø�F‰F×ÑÔ!ØˆIr"   c                 ó^   >• TR                  U S5        TR                  R                  5         g )NrÈ  rÐ  rÑ  s    €r#   ÚonSecondResultÚ8TimerBasicTests.testTimerRestart.<locals>.onSecondResultŒ  s#   ø€ Ø×Ñ˜V UÔ+Ø�F‰F×ÑÕ 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*   ø€ Ø�H‰H�TŒNÜ�1‹v˜ÓØ—
‘
˜1•ð  r"   g{®Gáz„?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   ù€ Øˆõ	ô
 �NŠNÓˆÜ×&Ò& t¨W°g¸rÀ1Ó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_getPluginReactorTypesÚ0PluggableReactorTests.test_getPluginReactorTypesÔ  sž   € ð !ˆÜ˜^Ñ+ˆØ#ˆÜ&×.Ò.¨t¸kÓJÐKˆÔÜ×/Ò/Ó1ˆà×Ñ˜×)Ñ)¬X×-GÑ-GÈÐ,NÐ+OÔPãˆAØ�{‰{˜dÕ"Ø× Ñ  §¡°Ô<Ùñ ð
 �I‰IÐ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ˆ	Ø×ÑÔØ×Ñ˜ T FÕ+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ˆÔÜ×Ò Ô%Ø×Ñ˜ T FÕ+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   ø€ Ý(à�J‰J�x ¨GÕ4r"   r  r  N)r¦  r   rë  rö  r   r   r«   )r/   rî  r-   r   r  r  r   s   `     @r#   Ú!test_installReactorReturnsReactorÚ7PluggableReactorTests.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_installReactorMultiplePluginsÚ8PluggableReactorTests.test_installReactorMultiplePlugins  se   ø€ ð
 ˆ	õ	#ð !ˆÜˆØ#ˆÜ! '°ÓFˆÜ"¡<°ÀÓVˆØ*Ð8ˆÔÜ×Ò Ô%Ø×Ñ˜ T FÕ+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_installNonExistentReactorÚ4PluggableReactorTests.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_installNotAvailableReactorÚ5PluggableReactorTests.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   ø€ Ø�O‰O˜MÕ*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_reactorSelectionMixinÚ0PluggableReactorTests.test_reactorSelectionMixinH  s±   ú€ ð
 ˆØ+ˆØ/Ð÷	Oð 	O¤e§m¡m´S×5NÑ5Nô 	Oö	+ô ˜Ð!2´H¸kÓ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Š   € ô	¤e§m¡m´S×5NÑ5Nô 	ð  ˆÔá)Ó+ˆÜ (£
ˆÔØ×ÑÜ×ÑØ× Ñ Ú:ó
ˆð
 	�‰Ð'¨¯©°©Ô3Ø�‰�o q§v¡v¨a¡yÕ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¯   ø€ ô	¤e§m¡m´S×5NÑ5Nô 	ð $ˆõ	'ð !ˆÜˆØ#ˆÜ)¨'¸ÓNÐOˆÔá)Ó+ˆÜ (£
ˆÔØ×ÑÜ×ÑØ× Ñ Ú:ó
ˆð
 	�‰�g˜qŸv™v a™yÔ)Ø�‰�o q§v¡v¨a¡yÕ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ˆ�‰Ô"Ø×Ñœ* d§l¡l×&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   € ð
 	�‰Ô&×.Ñ.×:Ñ:¸D¿L¹LÔ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   € ð
 	�‰Ô&×.Ñ.×:Ñ:¸D¿L¹LÔIØ×Ñ˜Ô/×7Ñ7×AÑAÑAÀ4Ç<Á<Õ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ˆØ×ÑÐ1°7Õ;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ñ ˆL˜GÑ#Ð%FÓGñNó HðNñ ˆL˜GÑ#Ð%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_valuesÚ1BackoffPolicyTests.test_calculates_correct_valuesÜ  sx   € ô ˜C  s±9Ñ=ˆØ×Ñ™s 1›v qÔ)Ø×Ñ™s 1›v sÔ+Ø×Ñ™s 2›w¨Ô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  s±9Ñ=ˆØ×Ñ™˜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_valueÚABackoffPolicyTests.test_does_not_overflow_with_large_factor_valueó  s(   € ô ˜C  t±IÑ>ˆØ×Ñ™˜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 ˆ2ˆx×ÑØ�YŠY‹[€FØ�YŠY‹[�FàÐ€FˆVô1�8ô 1ô0	H�hô 	Hô%�xô %ô>=�8ô =ô(,8�hô ,8ô^	3ˆ%×
Ñ
ô 	3÷(ñ (÷ñ ôˆt�y‰yô ô
TU�Hô TUôn9�hô 9ôx�(×"Ñ"ô ôc2Ð/°ô c2ôL;<˜ô ;<ô|#(˜õ #(øðM ó ØƒGðús   –E? Å?FÆ
F