Ë
    ojZ…  ã                   ó  — d Z ddlZddlZddlZddlmZ 	 ddlZddlm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'  G d„ d«      Z( G d„ de'«      Z) e*ed«      r# ejV                  «       Z, ejZ                  «       Z.ndxZ,Z. G d„ de'«      Z/ G d„ de'«      Z0 G d„ de'«      Z1 G d„ de'«      Z2 G d„ de'«      Z3 G d„ d ejh                  «      Z5 G d!„ d"«      Z6 G d#„ d$«      Z7 G d%„ d&ejp                  «      Z9 G d'„ d(e'«      Z: G d)„ d*e'«      Z; G d+„ d,ejx                  «      Z= G d-„ d.e$e'«      Z> G d/„ d0e'«      Z? G d1„ d2e'«      Z@y# e$ r dZY �Œjw xY w)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                   ó   — e Zd ZdZy)ÚDummyN)Ú__name__Ú
__module__Ú__qualname__ÚprocessName© ó    ú?/usr/lib/python3/dist-packages/twisted/test/test_application.pyr   r   #   s   „ Ø�Kr   r   c                   óZ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚServiceTestsc                 ó†   — t        j                  «       }|j                  d«       | j                  |j                  d«       y ©NÚhello)r   ÚServiceÚsetNameÚassertEqualÚname©ÚselfÚss     r    ÚtestNamezServiceTests.testName(   s.   € Ü�O‰OÓˆØ	�	‰	�'ÔØ×Ñ˜Ÿ™ Õ)r   c                 óæ   — t        j                  «       }t        j                  «       }|j                  |«       | j	                  t        |«      |g«       | j	                  |j                  |«       y ©N)r   r&   ÚMultiServiceÚsetServiceParentr(   ÚlistÚparent©r+   r,   Úps      r    Ú
testParentzServiceTests.testParent-   sT   € Ü�O‰OÓˆÜ× Ñ Ó"ˆØ	×Ñ˜1ÔØ×Ñœ˜a› 1 #Ô&Ø×Ñ˜Ÿ™ 1Õ%r   c                 ó4  — t        j                  «       }t        j                  d«      }|j                  |«       | j	                  t        t        j                  |«      «      |g«       | j	                  |j                  t        j                  |«      «       y )NÚ )r   r&   ÚApplicationr1   r(   r2   ÚIServiceCollectionr3   r4   s      r    ÚtestApplicationAsParentz$ServiceTests.testApplicationAsParent4   sm   € Ü�O‰OÓˆÜ×Ñ Ó#ˆØ	×Ñ˜1ÔØ×Ñœœg×8Ñ8¸Ó;Ó<¸q¸cÔBØ×Ñ˜Ÿ™¤7×#=Ñ#=¸aÓ#@ÕAr   c                 óJ  — t        j                  «       }t        j                  «       }|j                  d«       |j	                  |«       | j                  t        |«      |g«       | j                  |j                  |«       | j                  |j                  d«      |«       y r$   )	r   r&   r0   r'   r1   r(   r2   r3   ÚgetServiceNamedr4   s      r    ÚtestNamedChildzServiceTests.testNamedChild;   s{   € Ü�O‰OÓˆÜ× Ñ Ó"ˆØ	�	‰	�'ÔØ	×Ñ˜1ÔØ×Ñœ˜a› 1 #Ô&Ø×Ñ˜Ÿ™ 1Ô%Ø×Ñ˜×*Ñ*¨7Ó3°QÕ7r   c                 óÚ   — t        j                  «       }t        j                  «       }|j                  d«       |j	                  |«       | j                  t        |j                  d«       y )Nr%   Úlala©r   r&   r0   r'   r1   ÚassertRaisesÚRuntimeErrorr4   s      r    ÚtestDoublyNamedChildz!ServiceTests.testDoublyNamedChildD   sL   € Ü�O‰OÓˆÜ× Ñ Ó"ˆØ	�	‰	�'ÔØ	×Ñ˜1ÔØ×Ñœ,¨¯	©	°6Õ:r   c                 ó$  — t        j                  «       }t        j                  «       }|j                  d«       |j	                  |«       t        j                  «       }|j                  d«       | j                  t        |j                  |«       y r$   rA   r4   s      r    ÚtestDuplicateNamedChildz$ServiceTests.testDuplicateNamedChildK   sf   € Ü�O‰OÓˆÜ× Ñ Ó"ˆØ	�	‰	�'ÔØ	×Ñ˜1ÔÜ�O‰OÓˆØ	�	‰	�'ÔØ×Ñœ,¨×(:Ñ(:¸AÕ>r   c                 ór  — t        j                  «       }t        j                  «       }|j                  |«       | j	                  t        |«      |g«       | j	                  |j                  |«       |j                  «        | j	                  t        |«      g «       | j                  |j                  «       y r/   )	r   r&   r0   r1   r(   r2   r3   ÚdisownServiceParentÚassertIsNoner4   s      r    ÚtestDisowningzServiceTests.testDisowningT   s†   € Ü�O‰OÓˆÜ× Ñ Ó"ˆØ	×Ñ˜1ÔØ×Ñœ˜a› 1 #Ô&Ø×Ñ˜Ÿ™ 1Ô%Ø	×ÑÔØ×Ñœ˜a› "Ô%Ø×Ñ˜!Ÿ(™(Õ#r   c                 ó  — t        j                  «       }| j                  |j                  «       |j	                  «        | j                  |j                  «       |j                  «        | j                  |j                  «       y r/   )r   r&   ÚassertFalseÚrunningÚstartServiceÚ
assertTrueÚstopServicer*   s     r    ÚtestRunningzServiceTests.testRunning^   sU   € Ü�O‰OÓˆØ×Ñ˜Ÿ™Ô#Ø	�‰ÔØ�‰˜Ÿ	™	Ô"Ø	�‰ŒØ×Ñ˜Ÿ™Õ#r   c                 óú  — t        j                  «       }t        j                  «       }|j                  |«       | j	                  |j
                  «       | j	                  |j
                  «       |j                  «        | j                  |j
                  «       | j                  |j
                  «       |j                  «        | j	                  |j
                  «       | j	                  |j
                  «       y r/   )	r   r&   r0   r1   rL   rM   rN   rO   rP   r4   s      r    ÚtestRunningChildren1z!ServiceTests.testRunningChildren1f   s¥   € Ü�O‰OÓˆÜ× Ñ Ó"ˆØ	×Ñ˜1ÔØ×Ñ˜Ÿ™Ô#Ø×Ñ˜Ÿ™Ô#Ø	�‰ÔØ�‰˜Ÿ	™	Ô"Ø�‰˜Ÿ	™	Ô"Ø	�‰ŒØ×Ñ˜Ÿ™Ô#Ø×Ñ˜Ÿ™Õ#r   c                 ó,  ‡ ‡— t        j                  «       Šˆˆ fd„}t        j                  «       }||_        ||_        t        j                  «       }‰j                  |«       |j                  |«       |j                  «        |j                  «        y )Nc                  ó<   •— ‰j                  ‰ j                  «       y r/   )rO   rM   )r,   r+   s   €€r    ÚcheckRunningz7ServiceTests.testRunningChildren2.<locals>.checkRunningv   s   ø€ Ø�O‰O˜AŸI™IÕ&r   )r   r&   rP   rN   r0   r1   )r+   rV   Útr5   r,   s   `   @r    ÚtestRunningChildren2z!ServiceTests.testRunningChildren2s   sm   ù€ Ü�O‰OÓˆõ	'ô �O‰OÓˆØ$ˆŒØ%ˆŒÜ× Ñ Ó"ˆØ	×Ñ˜1ÔØ	×Ñ˜1ÔØ	�‰ÔØ	�‰�r   c                 óX  — t        j                  «       }|j                  «        t        j                  «       }| j	                  |j
                  «       |j                  |«       | j                  |j
                  «       |j                  «        | j	                  |j
                  «       y r/   )	r   r0   rN   r&   rL   rM   r1   rO   rH   )r+   r5   r,   s      r    ÚtestAddingIntoRunningz"ServiceTests.testAddingIntoRunning‚   st   € Ü× Ñ Ó"ˆØ	�‰ÔÜ�O‰OÓˆØ×Ñ˜Ÿ™Ô#Ø	×Ñ˜1ÔØ�‰˜Ÿ	™	Ô"Ø	×ÑÔØ×Ñ˜Ÿ™Õ#r   c                 ó0  ‡— t        j                  «       Šˆfd„}|‰_        t        j                  «       }t        j                  «       }‰j	                  |«       |j	                  |«       |j                  «        | j                  ‰j                  «       y )Nc                  ó   •— d‰ _         y ©Né   )ÚprivilegedStarted)r,   s   €r    Úpssz(ServiceTests.testPrivileged.<locals>.pss�   s   ø€ Ø"#ˆAÕr   )r   r&   ÚprivilegedStartServicer0   r1   rO   r_   )r+   r`   Ús1r5   r,   s       @r    ÚtestPrivilegedzServiceTests.testPrivilegedŒ   sr   ø€ Ü�O‰OÓˆô	$ð $'ˆÔ Ü�_‰_ÓˆÜ× Ñ Ó"ˆØ	×Ñ˜1ÔØ
×Ñ˜AÔØ	× Ñ Ô"Ø�‰˜×+Ñ+Õ,r   c                 óâ   — t        j                  «       }|j                  «        t        j                  |«      }| j	                  |j
                  «       | j                  |j
                  «       y r/   )r   r&   rN   ÚcopyrL   rM   rO   )r+   r,   rb   s      r    ÚtestCopyingzServiceTests.testCopyingš   sG   € Ü�O‰OÓˆØ	�‰ÔÜ�Y‰Y�q‹\ˆØ×Ñ˜Ÿ™Ô$Ø�‰˜Ÿ	™	Õ"r   N)r   r   r   r-   r6   r;   r>   rD   rF   rJ   rQ   rS   rX   rZ   rc   rf   r   r   r    r"   r"   '   sD   „ ò*ò
&òBò8ò;ò?ò$ò$ò$òò$ò-ó#r   r"   Úgetuidc                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚProcessTestsc                 ó    — t        j                  dd«      }| j                  |j                  d«       | j                  |j                  d«       y )Né   é   )r   ÚProcessr(   ÚuidÚgid©r+   r5   s     r    ÚtestIDzProcessTests.testIDª   s:   € Ü�O‰O˜A˜qÓ!ˆØ×Ñ˜Ÿ™ Ô"Ø×Ñ˜Ÿ™ Õ"r   c                 óÊ  — t        j                  d«      }| j                  |j                  d«       | j	                  |j
                  «       t        j                  d¬«      }| j	                  |j                  «       | j                  |j
                  d«       t        j                  «       }| j	                  |j                  «       | j	                  |j
                  «       y )Nrk   )ro   )r   rm   r(   rn   rI   ro   rp   s     r    ÚtestDefaultszProcessTests.testDefaults¯   sš   € Ü�O‰O˜AÓˆØ×Ñ˜Ÿ™ Ô"Ø×Ñ˜!Ÿ%™%Ô Ü�O‰O Ô"ˆØ×Ñ˜!Ÿ%™%Ô Ø×Ñ˜Ÿ™ Ô"Ü�O‰OÓˆØ×Ñ˜!Ÿ%™%Ô Ø×Ñ˜!Ÿ%™%Õ r   c                 ó¨   — t        j                  «       }| j                  |j                  «       d|_        | j	                  |j                  d«       y r$   )r   rm   rI   r   r(   rp   s     r    ÚtestProcessNamezProcessTests.testProcessNameº   s;   € Ü�O‰OÓˆØ×Ñ˜!Ÿ-™-Ô(ØˆŒØ×Ñ˜Ÿ™¨Õ0r   N)r   r   r   rq   rs   ru   r   r   r    ri   ri   ©   s   „ ò#ò
	!ó1r   ri   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚInterfacesTestsc                 ó„   — | j                  t        j                  j                  t        j                  «       «      «       y r/   )rO   r   ÚIServiceÚ
providedByr&   ©r+   s    r    ÚtestServicezInterfacesTests.testServiceÂ   ó&   € Ø�‰œ×(Ñ(×3Ñ3´G·O±OÓ4EÓFÕGr   c                 ó  — | j                  t        j                  j                  t        j                  «       «      «       | j                  t        j
                  j                  t        j                  «       «      «       y r/   )rO   r   ry   rz   r0   r:   r{   s    r    ÚtestMultiServicez InterfacesTests.testMultiServiceÅ   sN   € Ø�‰œ×(Ñ(×3Ñ3´G×4HÑ4HÓ4JÓKÔLØ�‰œ×2Ñ2×=Ñ=¼g×>RÑ>RÓ>TÓUÕVr   c                 ó„   — | j                  t        j                  j                  t        j                  «       «      «       y r/   )rO   r   ÚIProcessrz   rm   r{   s    r    ÚtestProcesszInterfacesTests.testProcessÉ   r}   r   N)r   r   r   r|   r   r‚   r   r   r    rw   rw   Á   s   „ òHòWóHr   rw   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚApplicationTestsc                 óˆ   — t        j                  d«       t        j                  dd«       t        j                  ddd«       y ©Nr%   rk   rl   )r   r9   r{   s    r    ÚtestConstructorz ApplicationTests.testConstructorÎ   s2   € Ü×Ñ˜GÔ$Ü×Ñ˜G QÔ'Ü×Ñ˜G Q¨Õ*r   c                 ó¶  — t        j                  d«      }| j                  t        j                  |«      j                  «       | j                  t        j                  |«      j
                  «       t        j                  dd«      }| j                  t        j                  |«      j                  d«       | j                  t        j                  |«      j
                  «       t        j                  ddd«      }| j                  t        j                  |«      j                  d«       | j                  t        j                  |«      j
                  d«       y r†   )r   r9   rI   r�   rn   ro   r(   ©r+   Úas     r    ÚtestProcessComponentz%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                 óX  — t        j                  d«      }| j                  t        j                  |«      t        j                  |«      «       | j                  t        j                  |«      j                  d«       | j                  t        j                  |«      j                  «       y r$   )	r   r9   ÚassertIsry   r:   r(   r)   rI   r3   r‰   s     r    ÚtestServiceComponentz%ApplicationTests.testServiceComponentÞ   sv   € Ü×Ñ Ó(ˆØ�‰”g×&Ñ& qÓ)¬7×+EÑ+EÀaÓ+HÔIØ×Ñœ×)Ñ)¨!Ó,×1Ñ1°7Ô;Ø×Ñœ'×*Ñ*¨1Ó-×4Ñ4Õ5r   c                 ó   — t        j                  d«      }t        j                  |«      }| j	                  |j
                  d«       | j	                  |j                  d«       | j                  |j                  |«       y )Nr%   Úpickle)	r   r9   r   ÚIPersistabler(   Ústyler)   r�   Úoriginal)r+   rŠ   r5   s      r    ÚtestPersistableComponentz)ApplicationTests.testPersistableComponentä   s\   € Ü×Ñ Ó(ˆÜ×Ñ˜QÓˆØ×Ñ˜Ÿ™ (Ô+Ø×Ñ˜Ÿ™ Ô)Ø�‰�a—j‘j !Õ$r   N)r   r   r   r‡   r‹   rŽ   r”   r   r   r    r„   r„   Í   s   „ ò+ò
	5ò6ó%r   r„   c                   ó   — e Zd Zd„ Zy)ÚLoadingTestsc                 óL  — t        j                  d«      }t        j                  |«      }dj	                  «       D ]n  }|j                  |«       |j                  «        t        j                  d|d   z   |«      }| j                  t        j                  |«      j                  d«       Œp t        dd«      5 }|j                  ddg«       d d d «       t        j                  dd	«      }| j                  t        j                  |«      j                  d«       y # 1 sw Y   ŒOxY w)
Nr%   úsource picklezhello.tar   z	hello.tacÚwú(from twisted.application import service
ú+application = service.Application('hello')
Úpython)r   r9   r   r‘   ÚsplitÚsetStyleÚsaveÚloadApplicationr(   ry   r)   ÚopenÚ
writelines)r+   rŠ   r5   r’   Úa1Úfs         r    Útest_simpleStoreAndLoadz$LoadingTests.test_simpleStoreAndLoadí   sü   € Ü×Ñ Ó(ˆÜ×Ñ˜QÓˆØ$×*Ñ*Ó,ò 	AˆEØ�J‰J�uÔØ�F‰FŒHÜ×(Ñ(¨°e¸A±hÑ)>ÀÓFˆBØ×ÑœW×-Ñ-¨bÓ1×6Ñ6¸Õ@ð		Aô
 �+˜sÓ#ð 	 qØ�L‰Là?ØBðô÷	ô ×$Ñ$ [°(Ó;ˆØ×Ñœ×)Ñ)¨"Ó-×2Ñ2°GÕ<÷	ð 	ús   Â8DÄD#N)r   r   r   r¥   r   r   r    r–   r–   ì   s   „ ó=r   r–   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚAppSupportTestsc                 óL   — | j                  t        j                  d«      «       y )Nr   )rI   r   ÚgetPassphraser{   s    r    ÚtestPassphrasezAppSupportTests.testPassphrase  s   € Ø×Ñœ#×+Ñ+¨AÓ.Õ/r   c                 óê  — t        j                  d«      }ddddœ}dj                  «       D ]·  }|j                  «       }d|ddij	                  ||«      <   t        j                  |«      j                  |«       t        j                  |«      j                  d¬«       t        j                  |d«      }| j                  t        j                  |«      j                  d«       Œ¹ |j                  «       }d|d	<   t        dd
«      5 }|j                  ddg«       ddd«       t        j                  |d«      }| j                  t        j                  |«      j                  d«       y# 1 sw Y   ŒOxY w)zL
        Test loading an application file in different dump format.
        r%   N)ÚfileÚsourcerœ   r˜   Úhelloapplicationr�   r¬   ©Úfilenamerœ   r™   rš   r›   )r   r9   r�   re   Úgetr   r‘   rž   rŸ   r   ÚgetApplicationr(   ry   r)   r¡   r¢   )r+   rŠ   Ú
baseconfigr’   Úconfigr£   r¤   s          r    ÚtestLoadApplicationz#AppSupportTests.testLoadApplication  sQ  € ô ×Ñ Ó(ˆØ"¨d¸dÑCˆ
Ø$×*Ñ*Ó,ò 	AˆEØ—_‘_Ó&ˆFØ;MˆF�H˜fÐ%×)Ñ)¨%°Ó7Ñ8Ü×Ñ˜QÓ×(Ñ(¨Ô/Ü×Ñ˜QÓ×$Ñ$Ð.@Ð$ÔAÜ×#Ñ# F¨DÓ1ˆBØ×ÑœW×-Ñ-¨bÓ1×6Ñ6¸Õ@ð	Að —‘Ó"ˆØ-ˆˆxÑÜÐ$ cÓ*ð 	¨aØ�L‰Là?ØBðô÷	ô ×Ñ ¨Ó-ˆØ×Ñœ×)Ñ)¨"Ó-×2Ñ2°GÕ<÷	ð 	ús   ÄE)Å)E2c           
      óÒ  — t        j                  d«      }dj                  «       D ]¿  }dj                  «       D ]ª  }t        j                  |«      j                  |«       t        j                  |«      j                  d¬«       t        j                  d|d d|d«       t        j                  d|«      }| j                  t        j                  |«      j                  d«       Œ¬ ŒÁ y )Nr@   r˜   Úconverttestr¯   zconverttest.outr   )r   r9   r�   r   r‘   rž   rŸ   r   ÚconvertStyler    r(   ry   r)   )r+   ÚapplÚinstyleÚoutstyleÚappl2s        r    Útest_convertStylez!AppSupportTests.test_convertStyle  sÍ   € Ü×"Ñ" 6Ó*ˆØ&×,Ñ,Ó.ò 	GˆGØ+×1Ñ1Ó3ò G�Ü× Ñ  Ó&×/Ñ/°Ô8Ü× Ñ  Ó&×+Ñ+°]Ð+ÔCÜ× Ñ Ø! 7¨DÐ2CÀXÈqôô  ×/Ñ/Ð0AÀ8ÓL�Ø× Ñ ¤×!1Ñ!1°%Ó!8×!=Ñ!=¸vÕFñGñ	Gr   c                 ó¶   — t        j                  d«      }t        j                  |d«       | j	                  t        j
                  |«      j                  «       y )Nr@   r   )r   r9   r   ÚstartApplicationrO   ry   rM   )r+   r¹   s     r    Útest_startApplicationz%AppSupportTests.test_startApplication)  s?   € Ü×"Ñ" 6Ó*ˆÜ×Ñ˜T 1Ô%Ø�‰œ×(Ñ(¨Ó.×6Ñ6Õ7r   N)r   r   r   rª   rµ   r½   rÀ   r   r   r    r§   r§      s   „ ò0ò=ò2
Gó8r   r§   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚFooc                 ó:   — | j                   j                  d«       y )Ns   lalala
)Ú	transportÚwriter{   s    r    ÚconnectionMadezFoo.connectionMade0  s   € Ø�‰×Ñ˜]Õ+r   c                 óZ   — || j                   _        | j                  j                  «        y r/   )ÚfactoryÚlinerÄ   ÚloseConnection)r+   rÉ   s     r    ÚlineReceivedzFoo.lineReceived3  s   € Ø ˆ�‰ÔØ�‰×%Ñ%Õ'r   c                 óv   — | j                   j                  j                  | j                   j                  «       y r/   )rÈ   ÚdÚcallbackrÉ   ©r+   Úreasons     r    ÚconnectionLostzFoo.connectionLost7  s"   € Ø�‰�‰×Ñ §¡× 1Ñ 1Õ2r   N)r   r   r   rÆ   rË   rÑ   r   r   r    rÂ   rÂ   /  s   „ ò,ò(ó3r   rÂ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚDummyAppNc                 ó6   — || j                   |j                  <   y r/   ©Úservicesr)   ©r+   r   s     r    Ú
addServicezDummyApp.addService>  s   € Ø&-ˆ�‰�g—l‘lÒ#r   c                 ó2   — | j                   |j                  = y r/   rÕ   r×   s     r    ÚremoveServicezDummyApp.removeServiceA  s   € Ø�M‰M˜'Ÿ,™,Ñ'r   )r   r   r   r   rØ   rÚ   r   r   r    rÓ   rÓ   ;  s   „ Ø€Kò.ó(r   rÓ   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTimerTargetc                 ó   — g | _         y r/   )Úlr{   s    r    Ú__init__zTimerTarget.__init__F  s	   € Øˆ�r   c                 ó:   — | j                   j                  |«       y r/   )rÞ   Úappend)r+   Úwhats     r    rá   zTimerTarget.appendI  s   € Ø�‰�‰�dÕr   N)r   r   r   rß   rá   r   r   r    rÜ   rÜ   E  s   „ òór   rÜ   c                   ó   — e Zd Zd„ Zy)ÚTestEchoc                 ó:   — | j                   j                  d«       y ©NT)rÍ   rÎ   rÏ   s     r    rÑ   zTestEcho.connectionLostN  s   € Ø�‰�‰˜Õr   N)r   r   r   rÑ   r   r   r    rä   rä   M  s   „ ór   rä   c                   ó   — e Zd Zd„ Zd„ Zd„ Zd„ Z e ej                  e
d«       d«      d„ «       Zd„ Z e ej                  e
d«       d«      d	„ «       Z e ej                  e
d«       d«      d
„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚInternetTestsc                 óü  ‡— t        j                  «       Š‰j                  «        t        j                  «       }t
        |_        t        j                  «       t
        _        t        j                  d|«      }|j                  ‰«       |j                  j                  «       j                  }t        j                  «       }t        j                  «       |_        t         |_        d |_        t        j$                  d||«      j                  ‰«       |j                  j'                  | j(                  d«       |j                  j'                  ˆfd„«       |j                  j'                  d„ «       |j                  S )Nr   ú	127.0.0.1ó   lalalac                 ó$   •— ‰j                  «       S r/   ©rP   ©Úxr,   s    €r    ú<lambda>z'InternetTests.testTCP.<locals>.<lambda>b  ó   ø€ ¨¯©«€ r   c                 ó"   — t         j                  S r/   ©rä   rÍ   ©rï   s    r    rð   z'InternetTests.testTCP.<locals>.<lambda>c  ó
   € ¬¯
©
€ r   )r   r0   rN   r   ÚServerFactoryrä   r
   ÚDeferredrÍ   r   Ú	TCPServerr1   Ú_portÚgetHostÚportÚClientFactoryrÂ   rÉ   Ú	TCPClientÚaddCallbackr(   )r+   rÈ   rW   Únumr,   s       @r    ÚtestTCPzInternetTests.testTCPS  s  ø€ Ü× Ñ Ó"ˆØ	�‰ÔÜ×(Ñ(Ó*ˆÜ#ˆÔÜ—^‘^Ó%ŒŒ
Ü×Ñ˜q 'Ó*ˆØ	×Ñ˜1ÔØ�g‰g�o‰oÓ×$Ñ$ˆÜ×(Ñ(Ó*ˆÜ—N‘NÓ$ˆŒ	ÜˆÔØˆŒÜ×Ñ˜;¨¨WÓ5×FÑFÀqÔIØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÓ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�y‰yÐr   c                 ó˜  ‡‡— t        j                  t        d«      st        d«      ‚t	        j
                  «       Št        j                  d‰«      }|j                  «        |j                  j                  «       j                  Š| j                  ‰d«       ˆˆfd„}t        j                  |j                  «      j!                  |«      S )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                 óp   •— t        j                  ‰‰«      }|j                  «        |j                  «       S r/   )r   Ú	UDPServerrN   rP   )ÚignoredrW   rÿ   r5   s     €€r    ÚonStopz&InternetTests.test_UDP.<locals>.onStopt  s+   ø€ Ü×"Ñ" 3¨Ó*ˆAØ�N‰NÔØ—=‘=“?Ð"r   )r   ÚIReactorUDPr   r   r   ÚDatagramProtocolr   r  rN   rù   rú   rû   ÚassertNotEqualr
   ÚmaybeDeferredrP   rþ   )r+   rW   r  rÿ   r5   s      @@r    Útest_UDPzInternetTests.test_UDPf  s˜   ù€ ô ×%Ñ%¤g¨tÔ4ÜÐFÓGÐGÜ×%Ñ%Ó'ˆÜ×Ñ˜q !Ó$ˆØ	�‰ÔØ�g‰g�o‰oÓ×$Ñ$ˆØ×Ñ˜C Ô#õ	#ô
 ×"Ñ" 1§=¡=Ó1×=Ñ=¸fÓEÐEr   c                 ó   ‡‡— t        j                  «       }t        |_         t        j                  «       t        _        t        j                  d|«      Šd‰_        ‰j                  «        ‰j                  j                  «       j                  }t        j                  «       }t        j                  «       |_        t        |_         d |_        t        j                   d||«      Š‰j#                  «        |j
                  j%                  | j&                  d«       |j
                  j%                  ˆfd„«       |j
                  j%                  ˆfd„«       |j
                  j%                  d„ «       |j
                  S )Nr   r^   rê   rë   c                 ó$   •— ‰j                  «       S r/   rí   )rï   Úcs    €r    rð   z.InternetTests.testPrivileged.<locals>.<lambda>Š  rñ   r   c                 ó$   •— ‰j                  «       S r/   rí   ©rï   rW   s    €r    rð   z.InternetTests.testPrivileged.<locals>.<lambda>‹  rñ   r   c                 ó"   — t         j                  S r/   ró   rô   s    r    rð   z.InternetTests.testPrivileged.<locals>.<lambda>Œ  rõ   r   )r   rö   rä   r
   r÷   rÍ   r   rø   Ú
privilegedra   rù   rú   rû   rü   rÂ   rÉ   rý   rN   rþ   r(   )r+   rÈ   rÿ   r  rW   s      @@r    rc   zInternetTests.testPrivileged{  s  ù€ Ü×(Ñ(Ó*ˆÜ#ˆÔÜ—^‘^Ó%ŒŒ
Ü×Ñ˜q 'Ó*ˆØˆŒØ	× Ñ Ô"Ø�g‰g�o‰oÓ×$Ñ$ˆÜ×(Ñ(Ó*ˆÜ—N‘NÓ$ˆŒ	ÜˆÔØˆŒÜ×Ñ˜{¨C°Ó9ˆØ	�‰ÔØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÓ7Ô8Ø�	‰	×ÑÓ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�y‰yÐr   c                 óÀ  ‡— t        j                  «       }t        j                  |_         t	        j
                  d|«      }|j                  «        |j                  j                  «       j                  }|j                  «        t        j                  «       Št        j                  «       }ˆfd„|_        t	        j                  d||«      }|j                  «        ‰S )Nr   c                  ó&   •— ‰j                  d «      S r/   ©rÎ   ©ÚargsrÍ   s    €r    rð   z<InternetTests.testConnectionGettingRefused.<locals>.<lambda>˜  ó   ø€ °q·z±zÀ$Ó7G€ r   rê   )r   rö   r   ÚEchor   rø   rN   rù   rú   rû   rP   r
   r÷   rü   ÚclientConnectionFailedrý   )r+   rÈ   rW   rÿ   r  rÍ   s        @r    ÚtestConnectionGettingRefusedz*InternetTests.testConnectionGettingRefused�  s�   ø€ Ü×(Ñ(Ó*ˆÜŸ9™9ˆÔÜ×Ñ˜q 'Ó*ˆØ	�‰ÔØ�g‰g�o‰oÓ×$Ñ$ˆØ	�‰ŒÜ�N‰NÓˆÜ×(Ñ(Ó*ˆÛ)GˆÔ&Ü×Ñ˜{¨C°Ó9ˆØ	�‰ÔØˆr   Nz1This reactor does not support UNIX domain socketsc                 ó   ‡— t        j                  «       Š‰j                  «        t        j                  «       }t
        |_        t        j                  «       t
        _        t        j                  d|«      }|j                  ‰«       t        j                  «       }t        |_        t        j                  «       |_        d |_        t        j                  d|«      j                  ‰«       |j                  j!                  | j"                  d«       |j                  j!                  ˆfd„«       |j                  j!                  d„ «       |j                  j!                  | j$                  |‰«       |j                  S )Núecho.sktrë   c                 ó$   •— ‰j                  «       S r/   rí   rî   s    €r    rð   z(InternetTests.testUNIX.<locals>.<lambda>±  rñ   r   c                 ó"   — t         j                  S r/   ró   rô   s    r    rð   z(InternetTests.testUNIX.<locals>.<lambda>²  rõ   r   )r   r0   rN   r   rö   rä   r
   r÷   rÍ   r   Ú
UNIXServerr1   rü   rÂ   rÉ   Ú
UNIXClientrþ   r(   Ú_cbTestUnix)r+   rÈ   rW   r,   s      @r    ÚtestUNIXzInternetTests.testUNIX�  s  ø€ ô × Ñ Ó"ˆØ	�‰ÔÜ×(Ñ(Ó*ˆÜ#ˆÔÜ—^‘^Ó%ŒŒ
Ü×Ñ 
¨GÓ4ˆØ	×Ñ˜1ÔÜ×(Ñ(Ó*ˆÜˆÔÜ—N‘NÓ$ˆŒ	ØˆŒÜ×Ñ˜J¨Ó0×AÑAÀ!ÔDØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÓ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�	‰	×Ñ˜d×.Ñ.°¸Ô;Ø�y‰yÐr   c                 óv  ‡— t        j                  «       t        _        d |_        t        j                  «       |_        ‰j                  «        |j                  j                  | j                  d«       |j                  j                  ˆfd„«       |j                  j                  d„ «       |j                  S )Nrë   c                 ó$   •— ‰j                  «       S r/   rí   rî   s    €r    rð   z+InternetTests._cbTestUnix.<locals>.<lambda>¼  rñ   r   c                 ó"   — t         j                  S r/   ró   rô   s    r    rð   z+InternetTests._cbTestUnix.<locals>.<lambda>½  rõ   r   )r
   r÷   rä   rÍ   rÉ   rN   rþ   r(   )r+   r  rÈ   r,   s      `r    r!  zInternetTests._cbTestUnix¶  sz   ø€ Ü—^‘^Ó%ŒŒ
ØˆŒÜ—N‘NÓ$ˆŒ	Ø	�‰ÔØ�	‰	×Ñ˜d×.Ñ.°	Ô:Ø�	‰	×ÑÓ7Ô8Ø�	‰	×ÑÑ2Ô3Ø�y‰yÐr   c                 óˆ  — t        j                  «       }t        j                  |_         t	        j
                  d|«      }|j                  «        | j                  |j                  d «       t        j                  |«      }| j                  |j                  «       |j                  «        | j                  |j                  «       | j                  |j                  «       t        j                  «       }t        j                  |_         t	        j                  d|«      }|j                  «        | j                  |j                   d «       t        j                  |«      }| j                  |j                   «       |j                  «        | j                  |j                   «       | j                  |j                  «       y )Nr  )r   rö   r   r  r   r  rN   ÚfailIfIdenticalrù   re   rI   rP   rL   rM   rü   r   Ú_connection)r+   rÈ   rW   Út1s       r    ÚtestVolatilez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                 óŒ  ‡— t        j                  «       }t        j                  |_         t	        j
                  d|«      }|j                  «        |j                  «        | j                  |j                  «       t        j                  «       }t        j                  «       Šˆfd„|_        t        j                  d|«       ‰S )Nr  c                  ó&   •— ‰j                  d «      S r/   r  r  s    €r    rð   z2InternetTests.testStoppingServer.<locals>.<lambda>è  r  r   )r   rö   r   r  r   r  rN   rP   rL   rM   rü   r
   r÷   r  r   ÚconnectUNIX)r+   rÈ   rW   rÍ   s      @r    ÚtestStoppingServerz InternetTests.testStoppingServerÛ  s�   ø€ ô
 ×(Ñ(Ó*ˆÜŸ9™9ˆÔÜ×Ñ 
¨GÓ4ˆØ	�‰ÔØ	�‰ŒØ×Ñ˜Ÿ™Ô#Ü×(Ñ(Ó*ˆÜ�N‰NÓˆÛ)GˆÔ&Ü×Ñ˜J¨Ô0Øˆr   c                 ó$  — t        «       }t        j                  d|j                  d«      }|j	                  «        t        j                  |«      }|j                  «        t        j                  |«      }| j                  |j                  «       y )Nr^   r%   )rÜ   r   ÚTimerServicerá   rN   r�   ÚdumpsrP   ÚloadsrL   rM   )r+   ÚtargetÚt0r,   rW   s        r    ÚtestPickledTimerzInternetTests.testPickledTimerì  sb   € Ü“ˆÜ×"Ñ" 1 f§m¡m°WÓ=ˆØ
�‰ÔÜ�L‰L˜ÓˆØ
�‰Ôä�L‰L˜‹OˆØ×Ñ˜Ÿ™Õ#r   c                 ó  ‡ ‡‡‡— t        j                  «       Št        j                  dd„ «      Š‰j                  Šˆˆfd„}|‰_        ‰j                  «        ‰j                  ˆfd„«       ‰j                  ˆ fd„«       ‰S )Nr^   c                  ó   — ddz  S )Nr^   r   r   r   r   r    rð   z/InternetTests.testBrokenTimer.<locals>.<lambda>ø  s
   € ¨Q°!©V€ r   c                 ó8   •—  ‰| «       ‰j                  d «       y r/   r  )ÚwhyrÍ   Ú	oldFaileds    €€r    Ú_failedz.InternetTests.testBrokenTimer.<locals>._failedû  s   ø€ Ù�cŒNØ�J‰J�tÕr   c                 ó   •— ‰j                   S r/   rí   r  s    €r    rð   z/InternetTests.testBrokenTimer.<locals>.<lambda>  s   ø€  §¡€ r   c                 ó¦   •— ‰j                  t        g‰j                  t        «      D �cg c]  }|j                  j                  ‘Œ c}«      S c c}w r/   )r(   ÚZeroDivisionErrorÚflushLoggedErrorsÚvalueÚ	__class__)rï   Úor+   s     €r    rð   z/InternetTests.testBrokenTimer.<locals>.<lambda>  s?   ø€ �d×&Ñ&Ü"Ð#Ø,0×,BÑ,BÔCTÓ,UÖV q�—‘×"Ó"ÒVó€ ùâVs   ªA
)r
   r÷   r   r0  r;  rN   rþ   )r+   r;  rÍ   r:  rW   s   ` @@@r    ÚtestBrokenTimerzInternetTests.testBrokenTimerö  sg   û€ Ü�N‰NÓˆÜ×!Ñ! !¡^Ó4ˆØ—I‘Iˆ	õ	ð ˆŒ	Ø	�‰ÔØ	�‰Ó-Ô.Ø	�‰óô	
ð ˆr   c           	      ó0  — g d¢}|dd D ]2  } t        t        d|z   «      t        d«      rŒ"|j                  |«       Œ4 |D ]Ó  }dD ]Ì  }|dk(  r|dk(  rŒ|dk(  r|dk(  rŒ| j	                  t        t        ||z   «      «       t        t        ||z   «      j                  }dd	dœ|   }| j	                  t        t        ||z   «      xs |d	k(  xr |dk(  «        t        t        ||z   «      «       }| j                  t        j                  |«      |«       ŒÎ ŒÕ y)
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ÚClientrJ  rM  rH  ÚlistenÚconnect)Úgetattrr   r   ÚremoverO   Úhasattrr   Úmethodr(   r   ry   )r+   ÚtransÚtranÚsiderS  ÚprefixrB  s          r    Útest_everythingTherez"InternetTests.test_everythingThere
  s#  € ò KˆØ™!�Hò 	#ˆDØ9”7œ: z°DÑ'8Ó9¼'À4ÕHØ—‘˜TÕ"ð	#ð ò 	9ˆDØ,ò 9�Ø˜;Ò&¨4°8Ò+;ØØ˜5’= T¨XÒ%5ØØ—‘¤¬°$¸±+Ó >Ô?Ü ¤¨4°$©;Ó7×>Ñ>�Ø$,¸	ÑBÀ4ÑH�Ø—‘ÜœG V¨f¡_Ó5ò AØ )Ñ+Ò?°¸%±ôð 3”GœH d¨T¡kÓ2Ó4�Ø× Ñ ¤×!1Ñ!1°!Ó!4°aÕ8ñ9ñ	9r   c                 ót   — t         j                  D ]%  }| j                  t        t         |«      |› d�«       Œ' y)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__rO   rR  )r+   Úclss     r    Útest_importAllzInternetTests.test_importAll$  s:   € ô ×#Ñ#ò 	ˆCØ�O‰OÜœ #Ó&Ø�%ÐHÐIõñ	r   c                 óÚ   — t        «       }t        «       }t        j                  d||¬«      }|j	                  «        | j                  |j                  j                  «       dd d|f«       y)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ø   rN   r(   Ú
tcpServersÚpop©r+   r   rÈ   rW   s       r    Ú#test_reactorParametrizationInServerz1InternetTests.test_reactorParametrizationInServer0  sZ   € ô  “/ˆä“(ˆÜ×Ñ˜t W°gÔ>ˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸¸g°ÕGr   c                 óò   — t        «       }t        j                  «       }t        j                  dd||¬«      }|j                  «        | j                  |j                  j                  «       dd dd|f«       y)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ý   rN   r(   Ú
tcpClientsrc  rd  s       r    Ú#test_reactorParametrizationInClientz1InternetTests.test_reactorParametrizationInClient=  sf   € ô  “/ˆä×(Ñ(Ó*ˆÜ×Ñ˜{¨D°'À7ÔKˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸ÀTÈ7Ð7SÕTr   c                 óŒ  — t        «       }t        j                  «       }t        j                  d||¬«      }|j                  «        | j                  |j                  j                  «       dd d|f«       |j                  «        |j                  «        | j                  |j                  j                  «       dd d|f«       y)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ø   rN   r(   rb  rc  rP   rd  s       r    Ú0test_reactorParametrizationInServerMultipleStartz>InternetTests.test_reactorParametrizationInServerMultipleStartJ  sž   € ô
  “/ˆä×"Ñ"Ó$ˆÜ×Ñ˜t W°gÔ>ˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸¸g°ÔGØ	�‰ŒØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸¸g°ÕGr   c                 ó’  — t        «       }t        j                  «       }t        j                  dd||¬«      }|j                  «        | j                  |j                  j                  «       dd dd|f«       |j                  «        |j                  «        | j                  |j                  j                  «       dd dd|f«       y)z—
        Like L{test_reactorParametrizationInClient}, but stop and restart the
        service and check that the given reactor is still used.
        rê   r^  r_  Nrg  )
r   r   rü   r   rý   rN   r(   rh  rc  rP   rd  s       r    Ú0test_reactorParametrizationInClientMultipleStartz>InternetTests.test_reactorParametrizationInClientMultipleStartY  s¦   € ô
  “/ˆä×(Ñ(Ó*ˆÜ×Ñ˜{¨D°'À7ÔKˆØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸ÀTÈ7Ð7SÔTØ	�‰ŒØ	�‰ÔØ×Ñ˜×+Ñ+×/Ñ/Ó1°"°1Ð5¸ÀTÈ7Ð7SÕTr   )r   r   r   r   r
  rc   r  r   r   ÚIReactorUNIXr   r"  r!  r*  r.  r5  rC  rX  r\  re  ri  rl  rn  r   r   r    rè   rè   R  sÛ   „ òò&Fò*ò(ñ Ø#ˆJ×#Ñ# G¨TÓ2Ð2Ø;óñó	ðò*ñ Ø#ˆJ×#Ñ# G¨TÓ2Ð2Ø;óñ$ó	ð$ñ. Ø#ˆJ×#Ñ# G¨TÓ2Ð2Ø;óñó	ðò$òò(9ò4
òHòUòHóUr   rè   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTimerBasicTestsc                 ó8  ‡ — t        j                  «       }t        j                  d|j                  d«      ‰ _        ‰ j
                  j                  «        |j                  ‰ j                  d«       |j                  ˆ fd„«       |j                  ˆ fd„«       |S )Nr^   r%   c                 ó8   •— ‰j                   j                  «       S r/   ©rW   rP   ©rï   r+   s    €r    rð   z/TimerBasicTests.testTimerRuns.<locals>.<lambda>o  ó   ø€  §¡× 2Ñ 2Ó 4€ r   c                 óN   •— ‰j                  ‰j                  j                  «      S r/   )rL   rW   rM   ru  s    €r    rð   z/TimerBasicTests.testTimerRuns.<locals>.<lambda>p  s   ø€  × 0Ñ 0°·±·±Ó @€ r   )	r
   r÷   r   r0  rÎ   rW   rN   rþ   r(   )r+   rÍ   s   ` r    ÚtestTimerRunszTimerBasicTests.testTimerRunsj  sl   ø€ Ü�N‰NÓˆÜ×&Ñ& q¨!¯*©*°gÓ>ˆŒØ�‰×ÑÔØ	�‰�d×&Ñ&¨Ô0Ø	�‰Ó4Ô5Ø	�‰Ó@ÔAØˆr   c                 ó6   — | j                   j                  «       S r/   rt  r{   s    r    ÚtearDownzTimerBasicTests.tearDowns  s   € Ø�v‰v×!Ñ!Ó#Ð#r   c                 óf  ‡ ‡‡— t        j                  «       }t        j                  «       Š‰df|dfgŠˆfd„}t        j                  d|«      ‰ _        ‰ j                  j                  «        ˆ fd„}ˆˆ fd„}ˆ fd„}|j                  |«       |j                  |«       |j                  |«       |S )NÚbarÚfooc                  óN   •— ‰j                  «       \  } }| j                  |«       y r/   )rc  rÎ   )rÍ   ÚargÚworks     €r    Útriggerz1TimerBasicTests.testTimerRestart.<locals>.trigger|  s   ø€ Ø—X‘X“Z‰FˆAˆsØ�J‰J�s�Or   r^   c                 ó\   •— ‰j                  | d«       ‰j                  j                  «       S )Nr}  ©r(   rW   rP   ©Úresultr+   s    €r    ÚonFirstResultz7TimerBasicTests.testTimerRestart.<locals>.onFirstResultƒ  s&   ø€ Ø×Ñ˜V UÔ+Ø—6‘6×%Ñ%Ó'Ð'r   c                 ó†   •— ‰j                  ‰j                  j                  «       ‰j                  j                  «        ‰S r/   )rL   rW   rM   rN   )r  Úd2r+   s    €€r    ÚonFirstStopz5TimerBasicTests.testTimerRestart.<locals>.onFirstStop‡  s.   ø€ Ø×Ñ˜TŸV™VŸ^™^Ô,Ø�F‰F×ÑÔ!ØˆIr   c                 ó^   •— ‰j                  | d«       ‰j                  j                  «        y )Nr|  rƒ  r„  s    €r    ÚonSecondResultz8TimerBasicTests.testTimerRestart.<locals>.onSecondResultŒ  s#   ø€ Ø×Ñ˜V UÔ+Ø�F‰F×ÑÕ r   )r
   r÷   r   r0  rW   rN   rþ   )r+   Úd1r�  r†  r‰  r‹  rˆ  r€  s   `     @@r    ÚtestTimerRestartz TimerBasicTests.testTimerRestartv  s’   ú€ ä�^‰^ÓˆÜ�^‰^ÓˆØ�U�˜b %˜[Ð)ˆô	ô ×&Ñ& q¨'Ó2ˆŒØ�‰×ÑÔô	(õ	ô
	!ð 	�‰�}Ô%Ø
�‰�{Ô#Ø
�‰�~Ô&Øˆ	r   c                 ó  ‡ ‡— g Šˆfd„}t        j                  «       }t        j                  d|dd|«      ‰ _        ‰ j                  j                  «        |j                  ‰ j                  dgdz  «       |j                  ˆ fd„«       |S )Nc                 óh   •— ‰j                  | «       t        ‰«      |k(  r|j                  ‰«       y y r/   )rá   ÚlenrÎ   )ÚdataÚnumberrÍ   rÞ   s      €r    r�  z/TimerBasicTests.testTimerLoops.<locals>.trigger˜  s*   ø€ Ø�H‰H�TŒNÜ�1‹v˜ÒØ—
‘
˜1•ð  r   g{®Gáz„?r%   é
   c                 ó8   •— ‰j                   j                  «       S r/   rt  ru  s    €r    rð   z0TimerBasicTests.testTimerLoops.<locals>.<lambda>¡  rv  r   )r
   r÷   r   r0  rW   rN   rþ   r(   )r+   r�  rÍ   rÞ   s   `  @r    ÚtestTimerLoopszTimerBasicTests.testTimerLoops•  sq   ù€ Øˆô	ô
 �N‰NÓˆÜ×&Ñ& t¨W°g¸rÀ1ÓEˆŒØ�‰×ÑÔØ	�‰�d×&Ñ&¨¨	°B©Ô7Ø	�‰Ó4Ô5Øˆr   N)r   r   r   rx  rz  r�  r•  r   r   r    rq  rq  i  s   „ òò$òó>r   rq  c                   ó   — e Zd ZdZd„ Zy)ÚFakeReactorz6
    A fake reactor with a hooked install method.
    c                 óX   — t        j                  j                  | g|¢­i |¤Ž || _        y)zv
        @param install: any callable that will be used as install method.
        @type install: C{callable}
        N)r   ÚReactorrß   Úinstall)r+   rš  r  Úkwargss       r    rß   zFakeReactor.__init__ª  s)   € ô
 	×Ñ×!Ñ! $Ð8¨Ò8°Ò8Øˆ�r   N)r   r   r   Ú__doc__rß   r   r   r    r—  r—  ¥  s   „ ñór   r—  c                   ó`   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚPluggableReactorTestsz:
    Tests for the reactor discovery/inspection APIs.
    c                 ót   — g | _         g | _        t        j                  | _        | j
                  t        _        y)aI  
        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    ÚsetUpzPluggableReactorTests.setUp¸  s0   € ð ˆÔØˆÔÜ (× 3Ñ 3ˆÔØ"×.Ñ.ŒÕr   c                 ó.   — | j                   t        _        y)z>
        Restore the original L{reactors.getPlugins}.
        N)r£  r   r¢  r{   s    r    rz  zPluggableReactorTests.tearDownÆ  s   € ð #×3Ñ3ŒÕr   Nc                 óf   — | j                   j                  ||f«       t        | j                  «      S )zy
        Stand-in for the real getPlugins method which records its arguments
        and returns a fixed result.
        )r   rá   r2   r¡  )r+   Ú	interfaceÚpackages      r    r¤  z!PluggableReactorTests._getPluginsÌ  s.   € ð
 	×Ñ×Ñ ¨GÐ 4Ô5Ü�D×&Ñ&Ó'Ð'r   c                 ód  — d}t         dz   }d}t        j                  |||«      g| _        t        j                  «       }| j                  | j                  t        j                  dfg«       |D ]/  }|j                  |k(  sŒ| j                  |j                  |«        y | j                  d«       y)zP
        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_getPluginReactorTypesz0PluggableReactorTests.test_getPluginReactorTypesÔ  s§   € ð !ˆÜ˜^Ñ+ˆØ#ˆÜ&×.Ñ.¨t°W¸kÓJÐKˆÔÜ×/Ñ/Ó1ˆà×Ñ˜×)Ñ)¬X×-GÑ-GÈÐ,NÐ+OÔPàò 	PˆAØ�{‰{˜dÓ"Ø× Ñ  §¡°Ô<Ùð	Pð
 �I‰IÐNÕOr   c                 óÖ   ‡— g Šˆfd„}t        |dt        d«      }d|i}| j                  |«       t        j                  ddd«      }|j                  «        | j                  ‰dg«       y)zy
        Test that L{reactors.Reactor.install} loads the correct module and
        calls its install attribute.
        c                  ó(   •— ‰ j                  d«       y ræ   ©rá   ©Ú	installeds   €r    rš  z?PluggableReactorTests.test_reactorInstallation.<locals>.installî  ó   ø€ Ø×Ñ˜TÕ"r   r«  Ú	describedÚfakereactorTN)r—  r   ÚreplaceSysModulesr   r™  rš  r(   )r+   rš  ÚfakeReactorÚmodulesÚ	installerr¸  s        @r    Útest_reactorInstallationz.PluggableReactorTests.test_reactorInstallationç  sm   ø€ ð
 ˆ	ô	#ô " 'Ð+<¼hÈÓTˆØ$ kÐ2ˆØ×Ñ˜wÔ'Ü×$Ñ$ ]Ð4EÀ{ÓSˆ	Ø×ÑÔØ×Ñ˜ T FÕ+r   c                 ó    ‡— g Šˆfd„}d}t         }d}t        ||||«      g| _        t        j                  |«       | j                  ‰dg«       y)zu
        Test that the L{reactors.installReactor} function correctly installs
        the specified reactor.
        c                  ó(   •— ‰ j                  d«       y ræ   r¶  r·  s   €r    rš  z:PluggableReactorTests.test_installReactor.<locals>.installÿ  r¹  r   r«  r¬  TN©r   r—  r¡  r   ÚinstallReactorr(   )r+   rš  r)   r©  r¬  r¸  s        @r    Útest_installReactorz)PluggableReactorTests.test_installReactorø  sV   ø€ ð
 ˆ	ô	#ð !ˆÜˆØ#ˆÜ)¨'°4¸À+ÓNÐOˆÔÜ×Ñ Ô%Ø×Ñ˜ T FÕ+r   c                 ó²   ‡ ‡— t        «       Šˆˆ fd„}d}t        }d}t        ||||«      g‰ _        t	        j
                  |«      }‰ j                  |‰«       y)zt
        Test that the L{reactors.installReactor} function correctly returns
        the installed reactor.
        c                  ó8   •— ddl m}  ‰j                  | d‰«       y )Nr   )r   r   )Útwistedr   Úpatch)r   r   r+   s    €€r    rš  zHPluggableReactorTests.test_installReactorReturnsReactor.<locals>.install  s   ø€ Ý(à�J‰J�x ¨GÕ4r   r«  r¬  N)ra  r   r—  r¡  r   rÄ  r�   )r+   rš  r)   r©  r¬  r¸  r   s   `     @r    Ú!test_installReactorReturnsReactorz7PluggableReactorTests.test_installReactorReturnsReactor	  sV   ù€ ô
 “(ˆõ	5ð
 !ˆÜˆØ#ˆÜ)¨'°4¸À+ÓNÐOˆÔÜ×+Ñ+¨DÓ1ˆ	Ø�‰�i Õ)r   c                 óÄ   ‡— g Šˆfd„}d}t         }d}t        ||||«      }t        d„ d||«      }||g| _        t        j                  |«       | j                  ‰dg«       y)z�
        Test that the L{reactors.installReactor} function correctly installs
        the specified reactor when there are multiple reactor plugins.
        c                  ó(   •— ‰ j                  d«       y ræ   r¶  r·  s   €r    rš  zIPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.install#  r¹  r   r«  r¬  c                   ó   — y r/   r   r   r   r    rð   zJPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.<lambda>*  ó   � r   ÚotherreactorTNrÃ  )r+   rš  r)   r©  r¬  r½  ÚotherReactorr¸  s          @r    Ú"test_installReactorMultiplePluginsz8PluggableReactorTests.test_installReactorMultiplePlugins  sm   ø€ ð
 ˆ	ô	#ð !ˆÜˆØ#ˆÜ! '¨4°¸+ÓFˆÜ"¡<°ÀÈ+ÓVˆØ*¨KÐ8ˆÔÜ×Ñ Ô%Ø×Ñ˜ T FÕ+r   c                 óp   — g | _         | j                  t        j                  t        j                  d«       y)z•
        Test that L{reactors.installReactor} raises L{reactors.NoSuchReactor}
        when asked to install a reactor which it cannot find.
        ÚsomereactorN)r¡  rB   r   ÚNoSuchReactorrÄ  r{   s    r    Útest_installNonExistentReactorz4PluggableReactorTests.test_installNonExistentReactor/  s-   € ð
  ˆÔØ×ÑÜ×"Ñ"¤H×$;Ñ$;¸]õ	
r   c                 ó�   — d„ }d}t         }d}t        ||||«      g| _        | j                  t        t
        j                  |«       y)zš
        Test that L{reactors.installReactor} raises an exception when asked to
        install a reactor which doesn't work in this environment.
        c                  ó   — t        d«      ‚)NúMissing foo bar©ÚImportErrorr   r   r    rš  zFPluggableReactorTests.test_installNotAvailableReactor.<locals>.install?  s   € ÜÐ/Ó0Ð0r   r«  r¬  N)r   r—  r¡  rB   rÚ  r   rÄ  )r+   rš  r)   r©  r¬  s        r    Útest_installNotAvailableReactorz5PluggableReactorTests.test_installNotAvailableReactor9  sF   € ò	1ð !ˆÜˆØ#ˆÜ)¨'°4¸À+ÓNÐOˆÔØ×Ñœ+¤x×'>Ñ'>ÀÕEr   c                 ór  ‡‡‡— g ŠdŠdŠ G ˆˆfd„dt         j                  t        j                  «      }ˆˆfd„}t	        |dt
        d«      g| _         |«       }|j                  g d¢«       | j                  ‰d	   ‰«       | j                  ‰j                  ‰«      d
«       | j                  |d   d«       y)zx
        Test that the reactor selected is installed as soon as possible, ie
        when the option is parsed.
        zreactor installedzsubcommands loadedc                   ó$   •— e Zd Zeˆ ˆfd„«       Zy)úQPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptionsc                 ó<   •‡ — ‰j                  ‰«       dd ˆ fd„dfgS )NÚ
subcommandc                  ó   •— ‰ S r/   r   r{   s   €r    rð   zoPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptions.subCommands.<locals>.<lambda>U  s   ø€ °T€ r   ztest subcommandr¶  )r+   ÚSUBCOMMAND_EVENTÚexecuteds   `€€r    ÚsubCommandsz]PluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptions.subCommandsR  s#   ù€ à—‘Ð 0Ô1Ø% t«\Ð;LÐMÐNÐNr   N)r   r   r   Úpropertyrä  )râ  rã  s   €€r    ÚReactorSelectionOptionsrÞ  Q  s   ø„ ØôOó ñOr   ræ  c                  ó(   •— ‰j                  ‰ «       y r/   r¶  )ÚINSTALL_EVENTrã  s   €€r    rš  zAPluggableReactorTests.test_reactorSelectionMixin.<locals>.installW  s   ø€ Ø�O‰O˜MÕ*r   r«  rº  ©z	--reactorr«  rà  r   r^   r   N)
r   ÚOptionsr   ÚReactorSelectionMixinr—  r   r¡  ÚparseOptionsr(   Úcount)r+   ræ  rš  Úoptionsrè  râ  rã  s       @@@r    Útest_reactorSelectionMixinz0PluggableReactorTests.test_reactorSelectionMixinH  s«   ú€ ð
 ˆØ+ˆØ/Ð÷	O¤e§m¡m´S×5NÑ5Nô 	Oõ	+ô ˜Ð!2´H¸kÓJð
ˆÔñ *Ó+ˆØ×ÑÒKÔLØ×Ñ˜ !™ mÔ4Ø×Ñ˜Ÿ™¨Ó6¸Ô:Ø×Ñ˜ Ñ+Ð->Õ?r   c                 ód  —  G d„ dt         j                  t        j                  «      }g | _         |«       }t        «       |_        | j                  t         j                  |j                  g d¢«      }| j                  d|j                  d   «       | j                  d|j                  d   «       y)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                   ó   — e Zd Zy)ú\PluggableReactorTests.test_reactorSelectionMixinNonExistent.<locals>.ReactorSelectionOptionsN©r   r   r   r   r   r    ræ  rò  k  ó   „ Ør   ræ  ré  r«  r   úhelp-reactorsN)r   rê  r   rë  r¡  r   ÚmessageOutputrB   Ú
UsageErrorrì  ÚassertInr  )r+   ræ  rî  Úes       r    Ú%test_reactorSelectionMixinNonExistentz;PluggableReactorTests.test_reactorSelectionMixinNonExistentd  sŠ   € ô	¤e§m¡m´S×5NÑ5Nô 	ð  ˆÔá)Ó+ˆÜ (£
ˆÔØ×ÑÜ×ÑØ× Ñ Ú:ó
ˆð
 	�‰Ð'¨¯©°©Ô3Ø�‰�o q§v¡v¨a¡yÕ1r   c                 ó¢  ‡—  G d„ dt         j                  t        j                  «      }dŠˆfd„}d}t        }d}t        ||||«      g| _         |«       }t        «       |_        | j                  t         j                  |j                  g d¢«      }| j                  ‰|j                  d   «       | j                  d	|j                  d   «       y
)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                   ó   — e Zd Zy)ú]PluggableReactorTests.test_reactorSelectionMixinNotAvailable.<locals>.ReactorSelectionOptionsNró  r   r   r    ræ  rý  �  rô  r   ræ  rØ  c                  ó   •— t        ‰ «      ‚r/   rÙ  )Úmessages   €r    rš  zMPluggableReactorTests.test_reactorSelectionMixinNotAvailable.<locals>.install†  s   ø€ Ü˜gÓ&Ð&r   r«  r¬  ré  r   rõ  N)r   rê  r   rë  r   r—  r¡  r   rö  rB   r÷  rì  rø  r  )	r+   ræ  rš  r)   r©  r¬  rî  rù  rÿ  s	           @r    Ú&test_reactorSelectionMixinNotAvailablez<PluggableReactorTests.test_reactorSelectionMixinNotAvailablez  s³   ø€ ô	¤e§m¡m´S×5NÑ5Nô 	ð $ˆô	'ð !ˆÜˆØ#ˆÜ)¨'°4¸À+ÓNÐOˆÔá)Ó+ˆÜ (£
ˆÔØ×ÑÜ×ÑØ× Ñ Ú:ó
ˆð
 	�‰�g˜qŸv™v a™yÔ)Ø�‰�o q§v¡v¨a¡yÕ1r   r/   )r   r   r   rœ  r¥  rz  r¤  r³  rÀ  rÅ  rÊ  rÑ  rÕ  rÛ  rï  rú  r   r   r   r    rž  rž  ³  sK   „ ñò/ò4ó(òPò&,ò",ò"*ò&,ò&
òFò@ò82ó,2r   rž  c                   ó¢   — e Zd ZdZd„ Z eed«      d„ «       Z ee d«      d„ «       Z ee	dk7  d«      d	„ «       Z
 ee	dk(  d
«      d„ «       Zd„ Zy)ÚHelpReactorsTestsz6
    --help-reactors lists the available reactors
    c                 ó  — t        j                  «       | _        t        «       | j                  _        | j                  t        | j                  j                  «       | j                  j                  j                  «       | _	        y)z3
        Get the text from --help-reactors
        N)
r   rë  rî  r   rö  rB   Ú
SystemExitÚopt_help_reactorsÚgetvaluerÿ  r{   s    r    r¥  zHelpReactorsTests.setUpž  sV   € ô ×0Ñ0Ó2ˆŒÜ%-£Zˆ�‰Ô"Ø×Ñœ* d§l¡l×&DÑ&DÔEØ—|‘|×1Ñ1×:Ñ:Ó<ˆ�r   z$Not applicable, asyncio is availablec                 óÚ   — | j                  t        j                  j                  | j                  «       | j                  dt        j                  j
                  z   | j                  «       y)zX
        --help-reactors should NOT display the asyncio reactor on Python < 3.4
        ú!N)rø  r   Úasyncior¬  rÿ  r¯  r{   s    r    Útest_lacksAsyncIOz#HelpReactorsTests.test_lacksAsyncIO§  sG   € ð
 	�‰Ô&×.Ñ.×:Ñ:¸D¿L¹LÔIØ�‰�cÔ,×4Ñ4×>Ñ>Ñ>ÀÇÁÕMr   zasyncio library not availablec                 óÚ   — | j                  t        j                  j                  | j                  «       | j                  dt        j                  j                  z   | j                  «       y)zU
        --help-reactors should display the asyncio reactor on Python >= 3.4
        r  N)rø  r   r	  r¬  rÿ  ÚassertNotInr¯  r{   s    r    Útest_hasAsyncIOz!HelpReactorsTests.test_hasAsyncIO¯  sI   € ð
 	�‰Ô&×.Ñ.×:Ñ:¸D¿L¹LÔIØ×Ñ˜Ô/×7Ñ7×AÑAÑAÀ4Ç<Á<ÕPr   Úwin32zTest only applicable on Windowsc                 óÚ   — | j                  t        j                  j                  | j                  «       | j                  dt        j                  j                  z   | j                  «       y)zL
        --help-reactors should display the iocp reactor on Windows
        r  N)rø  r   Úiocpr¬  rÿ  r  r¯  r{   s    r    Útest_iocpWin32z HelpReactorsTests.test_iocpWin32·  sI   € ð
 	�‰Ô&×+Ñ+×7Ñ7¸¿¹ÔFØ×Ñ˜Ô/×4Ñ4×>Ñ>Ñ>ÀÇÁÕMr   zTest not applicable on Windowsc                 óÚ   — | j                  t        j                  j                  | j                  «       | j                  dt        j                  j
                  z   | j                  «       y)zP
        --help-reactors should NOT display the iocp reactor on Windows
        r  N)rø  r   r  r¬  rÿ  r¯  r{   s    r    Útest_iocpNotWin32z#HelpReactorsTests.test_iocpNotWin32¿  sG   € ð
 	�‰Ô&×+Ñ+×7Ñ7¸¿¹ÔFØ�‰�cÔ,×1Ñ1×;Ñ;Ñ;¸T¿\¹\ÕJr   c                 óö   — d„ }t        j                  «       }||_        t        «       |_        | j                  t        |j                  «       |j                  j                  «       }| j                  d|«       y)z>
        --help-reactors with only supported reactors
        c               3   ó0   K  — t         j                  –— y ­wr/   )r   Údefaultr   r   r    r­  zEHelpReactorsTests.test_onlySupportedReactors.<locals>.getReactorTypesÌ  s   è ø€ Ü"×*Ñ*Ó*ùs   ‚zreactors not availableN)
r   rë  Ú_getReactorTypesr   rö  rB   r  r  r  r  )r+   r­  rî  rÿ  s       r    Útest_onlySupportedReactorsz,HelpReactorsTests.test_onlySupportedReactorsÇ  sd   € ò
	+ô ×+Ñ+Ó-ˆØ#2ˆÔ Ü (£
ˆÔØ×Ñœ* g×&?Ñ&?Ô@Ø×'Ñ'×0Ñ0Ó2ˆØ×ÑÐ1°7Õ;r   N)r   r   r   rœ  r¥  r   r	  r
  r  r   r  r  r  r   r   r    r  r  ™  s—   „ ñò=ñ ˆGÐ;Ó<ñNó =ðNñ �ˆKÐ8Ó9ñQó :ðQñ ˆL˜GÑ#Ð%FÓGñNó HðNñ ˆL˜GÑ#Ð%EÓFñKó GðKó<r   r  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚBackoffPolicyTestsz@
    Tests of L{twisted.application.internet.backoffPolicy}
    c                 ó  — t        dddd„ ¬«      }| j                   |d«      d«       | j                   |d«      d	«       | j                   |d
«      d«       | j                   |d«      d«       | j                   |d«      d«       y)zI
        Test that L{backoffPolicy()} calculates expected values
        ç      ð?ç      N@ç      ø?c                   ó   — yr]   r   r   r   r    rð   zCBackoffPolicyTests.test_calculates_correct_values.<locals>.<lambda>à  rÎ  r   ©Újitterr   r`  r^   g      @r“  g     UM@é   é=   éd   N)r	   ÚassertAlmostEqualr(   ©r+   Úpols     r    Útest_calculates_correct_valuesz1BackoffPolicyTests.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                 ó„   — t        dddd„ ¬«      }| j                   |d«      d«       | j                   |d«      d«       y	)
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                   ó   — yr]   r   r   r   r    rð   zLBackoffPolicyTests.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_attemptsz:BackoffPolicyTests.test_does_not_overflow_on_high_attemptsç  s<   € ô ˜C  s±9Ô=ˆØ×Ñ™˜T› BÔ'Ø×Ñ™˜W› rÕ*r   c                 óT   — t        dddd„ ¬«      }| j                   |d«      d«       y)	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                   ó   — yr]   r   r   r   r    rð   zSBackoffPolicyTests.test_does_not_overflow_with_large_factor_value.<locals>.<lambda>ù  rÎ  r   r   r+  r#  Nr,  r&  s     r    Ú.test_does_not_overflow_with_large_factor_valuezABackoffPolicyTests.test_does_not_overflow_with_large_factor_valueó  s(   € ô ˜C  t±IÔ>ˆØ×Ñ™˜T› BÕ'r   N)r   r   r   rœ  r(  r-  r0  r   r   r    r  r  ×  s   „ ñò	'ò
+ó(r   r  )Arœ  re   Úosr�   Úior   r	  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"   rR  rg   ÚcuruidÚgetgidÚcurgidri   rw   r„   r–   r§   ÚLineReceiverrÂ   rÓ   rÜ   r  rä   rè   rq  r™  r—  rž  r  r  r   r   r    ú<module>rC     s|  ðñó Û 	Û Ý ðÛõ ç @Ó @Ý 6ß AÓ AÝ 2Ý !Ý ,ß )Ý  Ý /Ý Cß 5÷ñ ôx#�8ô x#ñv ˆ2ˆxÔØˆR�Y‰Y‹[€FØˆR�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