§
    ÈtºfZ…  ã                   óX  — d Z ddlZddlZddlZddlmZ 	 ddlZn# e$ r dZY nw xY w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j+        ¦   «         Z, ej-        ¦   «         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j4        ¦  «        Z5 G d!„ d"¦  «        Z6 G d#„ d$¦  «        Z7 G d%„ d&ej8        ¦  «        Z9 G d'„ d(e'¦  «        Z: G d)„ d*e'¦  «        Z; G d+„ d,ej<        ¦  «        Z= G d-„ d.e$e'¦  «        Z> G d/„ d0e'¦  «        Z? G d1„ d2e'¦  «        Z@dS )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dS )ÚDummyN)Ú__name__Ú
__module__Ú__qualname__ÚprocessName© ó    ú\/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/test/test_application.pyr   r   #   s   € € € € € Ø€K€K€Kr   r   c                   ó\   — 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dS )ÚServiceTestsc                 óŒ   — t          j        ¦   «         }|                     d¦  «         |                      |j        d¦  «         d S ©NÚhello)r   ÚServiceÚsetNameÚassertEqualÚname©ÚselfÚss     r    ÚtestNamezServiceTests.testName(   s?   € ÝŒOÑÔˆØ	�	Š	�'ÑÔÐØ×Ò˜œ Ñ)Ô)Ð)Ð)Ð)r   c                 óú   — t          j        ¦   «         }t          j        ¦   «         }|                     |¦  «         |                      t          |¦  «        |g¦  «         |                      |j        |¦  «         d S ©N)r   r&   ÚMultiServiceÚsetServiceParentr(   ÚlistÚparent©r+   r,   Úps      r    Ú
testParentzServiceTests.testParent-   sm   € ÝŒOÑÔˆÝÔ Ñ"Ô"ˆØ	×Ò˜1ÑÔÐØ×Ò�˜a™œ 1 #Ñ&Ô&Ð&Ø×Ò˜œ 1Ñ%Ô%Ð%Ð%Ð%r   c                 óD  — t          j        ¦   «         }t          j        d¦  «        }|                     |¦  «         |                      t          t          j        |¦  «        ¦  «        |g¦  «         |                      |j        t          j        |¦  «        ¦  «         d S )NÚ )r   r&   ÚApplicationr1   r(   r2   ÚIServiceCollectionr3   r4   s      r    ÚtestApplicationAsParentz$ServiceTests.testApplicationAsParent4   s‡   € ÝŒOÑÔˆÝÔ Ñ#Ô#ˆØ	×Ò˜1ÑÔÐØ×Ò��gÔ8¸Ñ;Ô;Ñ<Ô<¸q¸cÑBÔBÐBØ×Ò˜œ¥7Ô#=¸aÑ#@Ô#@ÑAÔAÐAÐAÐAr   c                 óv  — t          j        ¦   «         }t          j        ¦   «         }|                     d¦  «         |                     |¦  «         |                      t          |¦  «        |g¦  «         |                      |j        |¦  «         |                      |                     d¦  «        |¦  «         d S r$   )	r   r&   r0   r'   r1   r(   r2   r3   ÚgetServiceNamedr4   s      r    ÚtestNamedChildzServiceTests.testNamedChild;   s£   € ÝŒOÑÔˆÝÔ Ñ"Ô"ˆØ	�	Š	�'ÑÔÐØ	×Ò˜1ÑÔÐØ×Ò�˜a™œ 1 #Ñ&Ô&Ð&Ø×Ò˜œ 1Ñ%Ô%Ð%Ø×Ò˜×*Ò*¨7Ñ3Ô3°QÑ7Ô7Ð7Ð7Ð7r   c                 óè   — t          j        ¦   «         }t          j        ¦   «         }|                     d¦  «         |                     |¦  «         |                      t          |j        d¦  «         d S )Nr%   Úlala©r   r&   r0   r'   r1   ÚassertRaisesÚRuntimeErrorr4   s      r    ÚtestDoublyNamedChildz!ServiceTests.testDoublyNamedChildD   sc   € ÝŒOÑÔˆÝÔ Ñ"Ô"ˆØ	�	Š	�'ÑÔÐØ	×Ò˜1ÑÔÐØ×Ò�,¨¬	°6Ñ:Ô:Ð:Ð:Ð:r   c                 ó8  — t          j        ¦   «         }t          j        ¦   «         }|                     d¦  «         |                     |¦  «         t          j        ¦   «         }|                     d¦  «         |                      t          |j        |¦  «         d S r$   rA   r4   s      r    ÚtestDuplicateNamedChildz$ServiceTests.testDuplicateNamedChildK   sƒ   € ÝŒOÑÔˆÝÔ Ñ"Ô"ˆØ	�	Š	�'ÑÔÐØ	×Ò˜1ÑÔÐÝŒOÑÔˆØ	�	Š	�'ÑÔÐØ×Ò�,¨Ô(:¸AÑ>Ô>Ð>Ð>Ð>r   c                 óœ  — t          j        ¦   «         }t          j        ¦   «         }|                     |¦  «         |                      t          |¦  «        |g¦  «         |                      |j        |¦  «         |                     ¦   «          |                      t          |¦  «        g ¦  «         |                      |j        ¦  «         d S r/   )	r   r&   r0   r1   r(   r2   r3   ÚdisownServiceParentÚassertIsNoner4   s      r    ÚtestDisowningzServiceTests.testDisowningT   s±   € ÝŒOÑÔˆÝÔ Ñ"Ô"ˆØ	×Ò˜1ÑÔÐØ×Ò�˜a™œ 1 #Ñ&Ô&Ð&Ø×Ò˜œ 1Ñ%Ô%Ð%Ø	×ÒÑÔÐØ×Ò�˜a™œ "Ñ%Ô%Ð%Ø×Ò˜!œ(Ñ#Ô#Ð#Ð#Ð#r   c                 ó  — t          j        ¦   «         }|                      |j        ¦  «         |                     ¦   «          |                      |j        ¦  «         |                     ¦   «          |                      |j        ¦  «         d S r/   )r   r&   ÚassertFalseÚrunningÚstartServiceÚ
assertTrueÚstopServicer*   s     r    ÚtestRunningzServiceTests.testRunning^   sr   € ÝŒOÑÔˆØ×Ò˜œÑ#Ô#Ð#Ø	�ŠÑÔÐØ�Š˜œ	Ñ"Ô"Ð"Ø	�Š‰ŒˆØ×Ò˜œÑ#Ô#Ð#Ð#Ð#r   c                 ó  — t          j        ¦   «         }t          j        ¦   «         }|                     |¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                     ¦   «          |                      |j        ¦  «         |                      |j        ¦  «         |                     ¦   «          |                      |j        ¦  «         |                      |j        ¦  «         d S r/   )	r   r&   r0   r1   rL   rM   rN   rO   rP   r4   s      r    ÚtestRunningChildren1z!ServiceTests.testRunningChildren1f   sÔ   € ÝŒOÑÔˆÝÔ Ñ"Ô"ˆØ	×Ò˜1ÑÔÐØ×Ò˜œÑ#Ô#Ð#Ø×Ò˜œÑ#Ô#Ð#Ø	�ŠÑÔÐØ�Š˜œ	Ñ"Ô"Ð"Ø�Š˜œ	Ñ"Ô"Ð"Ø	�Š‰ŒˆØ×Ò˜œÑ#Ô#Ð#Ø×Ò˜œÑ#Ô#Ð#Ð#Ð#r   c                 óH  ‡ ‡— t          j        ¦   «         Šˆˆ fd„}t          j        ¦   «         }||_        ||_        t          j        ¦   «         }‰                     |¦  «         |                     |¦  «         |                     ¦   «          |                     ¦   «          d S )Nc                  ó<   •— ‰                      ‰ j        ¦  «         d S r/   )rO   rM   )r,   r+   s   €€r    ÚcheckRunningz7ServiceTests.testRunningChildren2.<locals>.checkRunningv   s   ø€ Ø�OŠO˜AœIÑ&Ô&Ð&Ð&Ð&r   )r   r&   rP   rN   r0   r1   )r+   rV   Útr5   r,   s   `   @r    ÚtestRunningChildren2z!ServiceTests.testRunningChildren2s   s£   øø€ ÝŒOÑÔˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'õ ŒOÑÔˆØ$ˆŒØ%ˆŒÝÔ Ñ"Ô"ˆØ	×Ò˜1ÑÔÐØ	×Ò˜1ÑÔÐØ	�ŠÑÔÐØ	�Š‰Œˆˆˆr   c                 óh  — t          j        ¦   «         }|                     ¦   «          t          j        ¦   «         }|                      |j        ¦  «         |                     |¦  «         |                      |j        ¦  «         |                     ¦   «          |                      |j        ¦  «         d S r/   )	r   r0   rN   r&   rL   rM   r1   rO   rH   )r+   r5   r,   s      r    ÚtestAddingIntoRunningz"ServiceTests.testAddingIntoRunning‚   s™   € ÝÔ Ñ"Ô"ˆØ	�ŠÑÔÐÝŒOÑÔˆØ×Ò˜œÑ#Ô#Ð#Ø	×Ò˜1ÑÔÐØ�Š˜œ	Ñ"Ô"Ð"Ø	×ÒÑÔÐØ×Ò˜œÑ#Ô#Ð#Ð#Ð#r   c                 óB  ‡— t          j        ¦   «         Šˆfd„}|‰_        t          j        ¦   «         }t          j        ¦   «         }‰                     |¦  «         |                     |¦  «         |                     ¦   «          |                      ‰j        ¦  «         d S )Nc                  ó   •— d‰ _         d S ©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Œ   s£   ø€ ÝŒOÑÔˆð	$ð 	$ð 	$ð 	$ð 	$ð $'ˆÔ ÝŒ_ÑÔˆÝÔ Ñ"Ô"ˆØ	×Ò˜1ÑÔÐØ
×Ò˜AÑÔÐØ	× Ò Ñ"Ô"Ð"Ø�Š˜Ô+Ñ,Ô,Ð,Ð,Ð,r   c                 óä   — t          j        ¦   «         }|                     ¦   «          t          j        |¦  «        }|                      |j        ¦  «         |                      |j        ¦  «         d S r/   )r   r&   rN   ÚcopyrL   rM   rO   )r+   r,   rb   s      r    ÚtestCopyingzServiceTests.testCopyingš   s\   € ÝŒOÑÔˆØ	�ŠÑÔÐÝŒ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"   '   sÚ   € € € € € ð*ð *ð *ð
&ð &ð &ðBð Bð Bð8ð 8ð 8ð;ð ;ð ;ð?ð ?ð ?ð$ð $ð $ð$ð $ð $ð$ð $ð $ðð ð ð$ð $ð $ð-ð -ð -ð#ð #ð #ð #ð #r   r"   Úgetuidc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚProcessTestsc                 óœ   — t          j        dd¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         d S )Né   é   )r   ÚProcessr(   ÚuidÚgid©r+   r5   s     r    ÚtestIDzProcessTests.testIDª   sI   € ÝŒO˜A˜qÑ!Ô!ˆØ×Ò˜œ Ñ"Ô"Ð"Ø×Ò˜œ Ñ"Ô"Ð"Ð"Ð"r   c                 óº  — t          j        d¦  «        }|                      |j        d¦  «         |                      |j        ¦  «         t          j        d¬¦  «        }|                      |j        ¦  «         |                      |j        d¦  «         t          j        ¦   «         }|                      |j        ¦  «         |                      |j        ¦  «         d S )Nrk   )ro   )r   rm   r(   rn   rI   ro   rp   s     r    ÚtestDefaultszProcessTests.testDefaults¯   s¾   € ÝŒO˜AÑÔˆØ×Ò˜œ Ñ"Ô"Ð"Ø×Ò˜!œ%Ñ Ô Ð ÝŒO Ð"Ñ"Ô"ˆØ×Ò˜!œ%Ñ Ô Ð Ø×Ò˜œ Ñ"Ô"Ð"ÝŒOÑÔˆØ×Ò˜!œ%Ñ Ô Ð Ø×Ò˜!œ%Ñ Ô Ð Ð Ð r   c                 ó¤   — t          j        ¦   «         }|                      |j        ¦  «         d|_        |                      |j        d¦  «         d S r$   )r   rm   rI   r   r(   rp   s     r    ÚtestProcessNamezProcessTests.testProcessNameº   sJ   € ÝŒOÑÔˆØ×Ò˜!œ-Ñ(Ô(Ð(ØˆŒØ×Ò˜œ¨Ñ0Ô0Ð0Ð0Ð0r   N)r   r   r   rq   rs   ru   r   r   r    ri   ri   ©   sA   € € € € € ð#ð #ð #ð
	!ð 	!ð 	!ð1ð 1ð 1ð 1ð 1r   ri   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚInterfacesTestsc                 óŒ   — |                       t          j                             t          j        ¦   «         ¦  «        ¦  «         d S r/   )rO   r   ÚIServiceÚ
providedByr&   ©r+   s    r    ÚtestServicezInterfacesTests.testServiceÂ   ó3   € Ø�Š�Ô(×3Ò3µG´OÑ4EÔ4EÑFÔFÑGÔGÐGÐGÐGr   c                 ó  — |                       t          j                             t          j        ¦   «         ¦  «        ¦  «         |                       t          j                             t          j        ¦   «         ¦  «        ¦  «         d S r/   )rO   r   ry   rz   r0   r:   r{   s    r    ÚtestMultiServicez InterfacesTests.testMultiServiceÅ   s`   € Ø�Š�Ô(×3Ò3µGÔ4HÑ4JÔ4JÑKÔKÑLÔLÐLØ�Š�Ô2×=Ò=½gÔ>RÑ>TÔ>TÑUÔUÑVÔVÐVÐVÐVr   c                 óŒ   — |                       t          j                             t          j        ¦   «         ¦  «        ¦  «         d S 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   Á   sL   € € € € € ðHð Hð HðWð Wð WðHð Hð Hð Hð Hr   rw   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚApplicationTestsc                 ó„   — t          j        d¦  «         t          j        dd¦  «         t          j        ddd¦  «         d S ©Nr%   rk   rl   )r   r9   r{   s    r    ÚtestConstructorz ApplicationTests.testConstructorÎ   sA   € ÝÔ˜GÑ$Ô$Ð$ÝÔ˜G QÑ'Ô'Ð'ÝÔ˜G Q¨Ñ*Ô*Ð*Ð*Ð*r   c                 óš  — t          j        d¦  «        }|                      t          j        |¦  «        j        ¦  «         |                      t          j        |¦  «        j        ¦  «         t          j        dd¦  «        }|                      t          j        |¦  «        j        d¦  «         |                      t          j        |¦  «        j        ¦  «         t          j        ddd¦  «        }|                      t          j        |¦  «        j        d¦  «         |                      t          j        |¦  «        j        d¦  «         d S r†   )r   r9   rI   r�   rn   ro   r(   ©r+   Úas     r    ÚtestProcessComponentz%ApplicationTests.testProcessComponentÓ   s  € ÝÔ Ñ(Ô(ˆØ×Ò�'Ô*¨1Ñ-Ô-Ô1Ñ2Ô2Ð2Ø×Ò�'Ô*¨1Ñ-Ô-Ô1Ñ2Ô2Ð2ÝÔ ¨Ñ+Ô+ˆØ×Ò�Ô)¨!Ñ,Ô,Ô0°!Ñ4Ô4Ð4Ø×Ò�'Ô*¨1Ñ-Ô-Ô1Ñ2Ô2Ð2ÝÔ ¨¨AÑ.Ô.ˆØ×Ò�Ô)¨!Ñ,Ô,Ô0°!Ñ4Ô4Ð4Ø×Ò�Ô)¨!Ñ,Ô,Ô0°!Ñ4Ô4Ð4Ð4Ð4r   c                 óT  — t          j        d¦  «        }|                      t          j        |¦  «        t          j        |¦  «        ¦  «         |                      t          j        |¦  «        j        d¦  «         |                      t          j        |¦  «        j        ¦  «         d S r$   )	r   r9   ÚassertIsry   r:   r(   r)   rI   r3   r‰   s     r    ÚtestServiceComponentz%ApplicationTests.testServiceComponentÞ   sˆ   € ÝÔ Ñ(Ô(ˆØ�Š•gÔ& qÑ)Ô)­7Ô+EÀaÑ+HÔ+HÑIÔIÐIØ×Ò�Ô)¨!Ñ,Ô,Ô1°7Ñ;Ô;Ð;Ø×Ò�'Ô*¨1Ñ-Ô-Ô4Ñ5Ô5Ð5Ð5Ð5r   c                 óø   — t          j        d¦  «        }t          j        |¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        |¦  «         d S )Nr%   Úpickle)	r   r9   r   ÚIPersistabler(   Ústyler)   r�   Úoriginal)r+   rŠ   r5   s      r    ÚtestPersistableComponentz)ApplicationTests.testPersistableComponentä   sn   € ÝÔ Ñ(Ô(ˆÝÔ˜QÑÔˆØ×Ò˜œ (Ñ+Ô+Ð+Ø×Ò˜œ Ñ)Ô)Ð)Ø�Š�a”j !Ñ$Ô$Ð$Ð$Ð$r   N)r   r   r   r‡   r‹   rŽ   r”   r   r   r    r„   r„   Í   sP   € € € € € ð+ð +ð +ð
	5ð 	5ð 	5ð6ð 6ð 6ð%ð %ð %ð %ð %r   r„   c                   ó   — e Zd Zd„ ZdS )ÚLoadingTestsc                 ón  — t          j        d¦  «        }t          j        |¦  «        }d                     ¦   «         D ]v}|                     |¦  «         |                     ¦   «          t          j        d|d         z   |¦  «        }|                      t          j	        |¦  «        j
        d¦  «         Œwt          dd¦  «        5 }|                     ddg¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        dd	¦  «        }|                      t          j	        |¦  «        j
        d¦  «         d S )
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í   sa  € ÝÔ Ñ(Ô(ˆÝÔ˜QÑÔˆØ$×*Ò*Ñ,Ô,ð 	Að 	AˆEØ�JŠJ�uÑÔÐØ�FŠF‰HŒHˆHÝÔ(¨°e¸A´hÑ)>ÀÑFÔFˆBØ×Ò�WÔ-¨bÑ1Ô1Ô6¸Ñ@Ô@Ð@Ð@Ý�+˜sÑ#Ô#ð 	 qØ�LŠLà?ØBðñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ Ô$ [°(Ñ;Ô;ˆØ×Ò�Ô)¨"Ñ-Ô-Ô2°GÑ<Ô<Ð<Ð<Ð<s   ÃC(Ã(C,Ã/C,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dS )ÚAppSupportTestsc                 óT   — |                       t          j        d¦  «        ¦  «         d S )Nr   )rI   r   ÚgetPassphraser{   s    r    ÚtestPassphrasezAppSupportTests.testPassphrase  s'   € Ø×Ò�#Ô+¨AÑ.Ô.Ñ/Ô/Ð/Ð/Ð/r   c                 ó  — t          j        d¦  «        }ddddœ}d                     ¦   «         D ]Â}|                     ¦   «         }d|ddi                     ||¦  «        <   t          j        |¦  «                             |¦  «         t          j        |¦  «                             d¬¦  «         t          j
        |d¦  «        }|                      t          j        |¦  «        j        d¦  «         ŒÃ|                     ¦   «         }d|d	<   t          dd
¦  «        5 }|                     ddg¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        |d¦  «        }|                      t          j        |¦  «        j        d¦  «         dS )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  sÄ  € õ Ô Ñ(Ô(ˆØ"¨d¸dÐCÐCˆ
Ø$×*Ò*Ñ,Ô,ð 	Að 	AˆEØ—_’_Ñ&Ô&ˆFØ;MˆF�H˜fÐ%×)Ò)¨%°Ñ7Ô7Ñ8ÝÔ˜QÑÔ×(Ò(¨Ñ/Ô/Ð/ÝÔ˜QÑÔ×$Ò$Ð.@Ð$ÑAÔAÐAÝÔ# F¨DÑ1Ô1ˆBØ×Ò�WÔ-¨bÑ1Ô1Ô6¸Ñ@Ô@Ð@Ð@Ø—’Ñ"Ô"ˆØ-ˆˆxÑÝÐ$ cÑ*Ô*ð 	¨aØ�LŠLà?ØBðñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ Ô ¨Ñ-Ô-ˆØ×Ò�Ô)¨"Ñ-Ô-Ô2°GÑ<Ô<Ð<Ð<Ð<s   ÄD?Ä?EÅEc           
      óÞ  — t          j        d¦  «        }d                     ¦   «         D ]Ã}d                     ¦   «         D ]¬}t          j        |¦  «                             |¦  «         t          j        |¦  «                             d¬¦  «         t          j        d|d d|d¦  «         t          j	        d|¦  «        }|  
                    t          j        |¦  «        j        d¦  «         Œ­ŒÄd S )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ˆGØ+×1Ò1Ñ3Ô3ð Gð G�ÝÔ  Ñ&Ô&×/Ò/°Ñ8Ô8Ð8ÝÔ  Ñ&Ô&×+Ò+°]Ð+ÑCÔCÐCÝÔ Ø! 7¨DÐ2CÀXÈqñô ð õ  Ô/Ð0AÀ8ÑLÔL�Ø× Ò ¥Ô!1°%Ñ!8Ô!8Ô!=¸vÑFÔFÐFÐFðGð	Gð 	Gr   c                 ó°   — t          j        d¦  «        }t          j        |d¦  «         |                      t          j        |¦  «        j        ¦  «         d S )Nr@   r   )r   r9   r   ÚstartApplicationrO   ry   rM   )r+   r¹   s     r    Útest_startApplicationz%AppSupportTests.test_startApplication)  sK   € ÝÔ" 6Ñ*Ô*ˆÝÔ˜T 1Ñ%Ô%Ð%Ø�Š�Ô(¨Ñ.Ô.Ô6Ñ7Ô7Ð7Ð7Ð7r   N)r   r   r   rª   rµ   r½   rÀ   r   r   r    r§   r§      sS   € € € € € ð0ð 0ð 0ð=ð =ð =ð2
Gð 
Gð 
Gð8ð 8ð 8ð 8ð 8r   r§   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚFooc                 ó:   — | j                              d¦  «         d S )Ns   lalala
)Ú	transportÚwriter{   s    r    ÚconnectionMadezFoo.connectionMade0  s   € ØŒ×Ò˜]Ñ+Ô+Ð+Ð+Ð+r   c                 óP   — || j         _        | j                             ¦   «          d S r/   )ÚfactoryÚlinerÄ   ÚloseConnection)r+   rÉ   s     r    ÚlineReceivedzFoo.lineReceived3  s&   € Ø ˆŒÔØŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 óX   — | j         j                             | j         j        ¦  «         d S r/   )rÈ   ÚdÚcallbackrÉ   ©r+   Úreasons     r    ÚconnectionLostzFoo.connectionLost7  s%   € ØŒŒ×Ò ¤Ô 1Ñ2Ô2Ð2Ð2Ð2r   N)r   r   r   rÆ   rË   rÑ   r   r   r    rÂ   rÂ   /  sA   € € € € € ð,ð ,ð ,ð(ð (ð (ð3ð 3ð 3ð 3ð 3r   rÂ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚDummyAppNc                 ó$   — || j         |j        <   d S r/   ©Úservicesr)   ©r+   r   s     r    Ú
addServicezDummyApp.addService>  s   € Ø&-ˆŒ�g”lÑ#Ð#Ð#r   c                 ó    — | j         |j        = d S r/   rÕ   r×   s     r    ÚremoveServicezDummyApp.removeServiceA  s   € ØŒM˜'œ,Ð'Ð'Ð'r   )r   r   r   r   rØ   rÚ   r   r   r    rÓ   rÓ   ;  s7   € € € € € Ø€Kð.ð .ð .ð(ð (ð (ð (ð (r   rÓ   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTimerTargetc                 ó   — g | _         d S r/   )Úlr{   s    r    Ú__init__zTimerTarget.__init__F  s   € ØˆŒˆˆr   c                 ó:   — | j                              |¦  «         d S 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  s2   € € € € € ðð ð ðð ð ð ð r   rÜ   c                   ó   — e Zd Zd„ ZdS )ÚTestEchoc                 ó:   — | j                              d¦  «         d S ©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dS )ÚInternetTestsc                 óæ  ‡— t          j        ¦   «         Š‰                     ¦   «          t          j        ¦   «         }t
          |_        t          j        ¦   «         t
          _        t          j
        d|¦  «        }|                     ‰¦  «         |j                             ¦   «         j        }t          j        ¦   «         }t          j        ¦   «         |_        t           |_        d |_        t          j        d||¦  «                             ‰¦  «         |j                             | j        d¦  «         |j                             ˆfd„¦  «         |j                             d„ ¦  «         |j        S )Nr   ú	127.0.0.1ó   lalalac                 ó,   •— ‰                      ¦   «         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�oŠoÑÔÔ$ˆÝÔ(Ñ*Ô*ˆÝ”NÑ$Ô$ˆŒ	ÝˆÔØˆŒÝÔ˜;¨¨WÑ5Ô5×FÒFÀqÑIÔIÐIØŒ	×Ò˜dÔ.°	Ñ:Ô:Ð:ØŒ	×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8ØŒ	×ÒÐ2Ð2Ñ3Ô3Ð3ØŒyÐr   c                 óœ  ‡‡— t          j        t          d¦  «        st          d¦  «        ‚t	          j        ¦   «         Št          j        d‰¦  «        }|                     ¦   «          |j	         
                    ¦   «         j        Š|                      ‰d¦  «         ˆˆfd„}t          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                 ó~   •— t          j        ‰‰¦  «        }|                     ¦   «          |                     ¦   «         S r/   )r   Ú	UDPServerrN   rP   )ÚignoredrW   rÿ   r5   s     €€r    ÚonStopz&InternetTests.test_UDP.<locals>.onStopt  s3   ø€ ÝÔ" 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Ô4ð 	HÝÐFÑGÔGÐGÝÔ%Ñ'Ô'ˆÝÔ˜q !Ñ$Ô$ˆØ	�ŠÑÔÐØŒg�oŠoÑÔÔ$ˆØ×Ò˜C Ñ#Ô#Ð#ð	#ð 	#ð 	#ð 	#ð 	#ð 	#õ
 Ô" 1¤=Ñ1Ô1×=Ò=¸fÑEÔEÐEr   c                 óâ  ‡‡— t          j        ¦   «         }t          |_         t          j        ¦   «         t          _        t          j        d|¦  «        Šd‰_        ‰ 	                    ¦   «          ‰j
                             ¦   «         j        }t          j        ¦   «         }t          j        ¦   «         |_        t          |_         d |_        t          j        d||¦  «        Š‰                     ¦   «          |j                             | j        d¦  «         |j                             ˆfd„¦  «         |j                             ˆfd„¦  «         |j                             d„ ¦  «         |j        S )Nr   r^   rê   rë   c                 ó,   •— ‰                      ¦   «         S r/   rí   )rï   Úcs    €r    rð   z.InternetTests.testPrivileged.<locals>.<lambda>Š  rñ   r   c                 ó,   •— ‰                      ¦   «         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{  s5  øø€ ÝÔ(Ñ*Ô*ˆÝ#ˆÔÝ”^Ñ%Ô%�Œ
ÝÔ˜q 'Ñ*Ô*ˆØˆŒØ	× Ò Ñ"Ô"Ð"ØŒg�oŠoÑÔÔ$ˆÝÔ(Ñ*Ô*ˆÝ”NÑ$Ô$ˆŒ	ÝˆÔØˆŒÝÔ˜{¨C°Ñ9Ô9ˆØ	�ŠÑÔÐØŒ	×Ò˜dÔ.°	Ñ:Ô:Ð:ØŒ	×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8ØŒ	×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8ØŒ	×ÒÐ2Ð2Ñ3Ô3Ð3ØŒyÐr   c                 óº  ‡— t          j        ¦   «         }t          j        |_         t	          j        d|¦  «        }|                     ¦   «          |j                             ¦   «         j	        }| 
                    ¦   «          t          j        ¦   «         Št          j        ¦   «         }ˆfd„|_        t	          j        d||¦  «        }|                     ¦   «          ‰S )Nr   c                  ó.   •— ‰                      d ¦  «        S r/   ©rÎ   ©ÚargsrÍ   s    €r    rð   z<InternetTests.testConnectionGettingRefused.<locals>.<lambda>˜  ó   ø€ °q·z²zÀ$Ñ7GÔ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ˆÔÝÔ˜q 'Ñ*Ô*ˆØ	�ŠÑÔÐØŒg�oŠoÑÔÔ$ˆØ	�Š‰ŒˆÝŒNÑÔˆÝÔ(Ñ*Ô*ˆØ)GÐ)GÐ)GÐ)GˆÔ&ÝÔ˜{¨C°Ñ9Ô9ˆØ	�ŠÑÔÐØˆr   Nz1This reactor does not support UNIX domain socketsc                 óê  ‡— t          j        ¦   «         Š‰                     ¦   «          t          j        ¦   «         }t
          |_        t          j        ¦   «         t
          _        t          j
        d|¦  «        }|                     ‰¦  «         t          j        ¦   «         }t          |_        t          j        ¦   «         |_        d |_        t          j        d|¦  «                             ‰¦  «         |j                             | j        d¦  «         |j                             ˆfd„¦  «         |j                             d„ ¦  «         |j                             | j        |‰¦  «         |j        S )Núecho.sktrë   c                 ó,   •— ‰                      ¦   «         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�  s5  ø€ õ Ô Ñ"Ô"ˆØ	�ŠÑÔÐÝÔ(Ñ*Ô*ˆÝ#ˆÔÝ”^Ñ%Ô%�Œ
ÝÔ 
¨GÑ4Ô4ˆØ	×Ò˜1ÑÔÐÝÔ(Ñ*Ô*ˆÝˆÔÝ”NÑ$Ô$ˆŒ	ØˆŒÝÔ˜J¨Ñ0Ô0×AÒAÀ!ÑDÔDÐDØŒ	×Ò˜dÔ.°	Ñ:Ô:Ð:ØŒ	×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8ØŒ	×ÒÐ2Ð2Ñ3Ô3Ð3ØŒ	×Ò˜dÔ.°¸Ñ;Ô;Ð;ØŒyÐr   c                 ób  ‡— t          j        ¦   «         t          _        d |_        t          j        ¦   «         |_        ‰                     ¦   «          |j                             | j        d¦  «         |j                             ˆfd„¦  «         |j                             d„ ¦  «         |j        S )Nrë   c                 ó,   •— ‰                      ¦   «         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¶  s•   ø€ Ý”^Ñ%Ô%�Œ
ØˆŒÝ”NÑ$Ô$ˆŒ	Ø	�ŠÑÔÐØŒ	×Ò˜dÔ.°	Ñ:Ô:Ð:ØŒ	×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8ØŒ	×ÒÐ2Ð2Ñ3Ô3Ð3ØŒyÐr   c                 ó~  — t          j        ¦   «         }t          j        |_         t	          j        d|¦  «        }|                     ¦   «          |                      |j        d ¦  «         t          j	        |¦  «        }|  
                    |j        ¦  «         |                     ¦   «          |  
                    |j        ¦  «         |                      |j        ¦  «         t          j        ¦   «         }t          j        |_         t	          j        d|¦  «        }|                     ¦   «          |                      |j        d ¦  «         t          j	        |¦  «        }|  
                    |j        ¦  «         |                     ¦   «          |  
                    |j        ¦  «         |                      |j        ¦  «         d S )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À  sf  € õ
 Ô(Ñ*Ô*ˆÝœ9ˆÔÝÔ 
¨GÑ4Ô4ˆØ	�ŠÑÔÐØ×Ò˜QœW dÑ+Ô+Ð+ÝŒY�q‰\Œ\ˆØ×Ò˜"œ(Ñ#Ô#Ð#Ø	�Š‰ŒˆØ×Ò˜!œ'Ñ"Ô"Ð"Ø×Ò˜œÑ#Ô#Ð#åÔ(Ñ*Ô*ˆÝœ9ˆÔÝÔ 
¨GÑ4Ô4ˆØ	�ŠÑÔÐØ×Ò˜Qœ]¨DÑ1Ô1Ð1ÝŒY�q‰\Œ\ˆØ×Ò˜"œ.Ñ)Ô)Ð)Ø	�Š‰ŒˆØ×Ò˜!œ-Ñ(Ô(Ð(Ø×Ò˜œÑ#Ô#Ð#Ð#Ð#r   c                 óˆ  ‡— t          j        ¦   «         }t          j        |_         t	          j        d|¦  «        }|                     ¦   «          |                     ¦   «          |                      |j	        ¦  «         t          j
        ¦   «         }t          j        ¦   «         Šˆfd„|_        t          j        d|¦  «         ‰S )Nr  c                  ó.   •— ‰                      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ˆÔÝÔ 
¨GÑ4Ô4ˆØ	�ŠÑÔÐØ	�Š‰ŒˆØ×Ò˜œÑ#Ô#Ð#ÝÔ(Ñ*Ô*ˆÝŒNÑÔˆØ)GÐ)GÐ)GÐ)GˆÔ&ÝÔ˜J¨Ñ0Ô0Ð0Øˆr   c                 ó,  — t          ¦   «         }t          j        d|j        d¦  «        }|                     ¦   «          t          j        |¦  «        }|                     ¦   «          t          j        |¦  «        }|  	                    |j
        ¦  «         d S )Nr^   r%   )rÜ   r   ÚTimerServicerá   rN   r�   ÚdumpsrP   ÚloadsrL   rM   )r+   ÚtargetÚt0r,   rW   s        r    ÚtestPickledTimerzInternetTests.testPickledTimerì  sy   € Ý‘”ˆÝÔ" 1 f¤m°WÑ=Ô=ˆØ
�ŠÑÔÐÝŒL˜ÑÔˆØ
�ŠÑÔÐåŒL˜‰OŒOˆØ×Ò˜œÑ#Ô#Ð#Ð#Ð#r   c                 ó  ‡ ‡‡‡— t          j        ¦   «         Št          j        dd„ ¦  «        Š‰j        Šˆˆfd„}|‰_        ‰                     ¦   «          ‰                     ˆfd„¦  «         ‰                     ˆ 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                 óH   •—  ‰| ¦  «         ‰                      d ¦  «         d S r/   r  )ÚwhyrÍ   Ú	oldFaileds    €€r    Ú_failedz.InternetTests.testBrokenTimer.<locals>._failedû  s(   ø€ ØˆI�c‰NŒNˆNØ�JŠJ�tÑÔÐÐÐr   c                 ó   •— ‰j         S r/   rí   r  s    €r    rð   z/InternetTests.testBrokenTimer.<locals>.<lambda>  s	   ø€  ¤€ r   c                 ó€   •— ‰                      t          gd„ ‰                     t          ¦  «        D ¦   «         ¦  «        S )Nc                 ó&   — g | ]}|j         j        ‘ŒS r   )ÚvalueÚ	__class__)Ú.0Úos     r    ú
<listcomp>zCInternetTests.testBrokenTimer.<locals>.<lambda>.<locals>.<listcomp>  s   € ÐVÐVÐV q�”Ô"ÐVÐVÐVr   )r(   ÚZeroDivisionErrorÚflushLoggedErrors©rï   r+   s    €r    rð   z/InternetTests.testBrokenTimer.<locals>.<lambda>  s=   ø€ �d×&Ò&Ý"Ð#ØVÐV¨D×,BÒ,BÕCTÑ,UÔ,UÐVÑVÔVñô € r   )r
   r÷   r   r0  r;  rN   rþ   )r+   r;  rÍ   r:  rW   s   ` @@@r    ÚtestBrokenTimerzInternetTests.testBrokenTimerö  s²   øøøø€ ÝŒNÑÔˆÝÔ! ! ^ ^Ñ4Ô4ˆØ”Iˆ	ð	ð 	ð 	ð 	ð 	ð 	ð ˆŒ	Ø	�ŠÑÔÐØ	�ŠÐ-Ð-Ð-Ð-Ñ.Ô.Ð.Ø	�Šðð ð ð ñ	
ô 	
ð 	
ð ˆr   c           	      óŒ  — g d¢}|dd…         D ]>} t          t          d|z   ¦  «        t          d¦  «        s|                     |¦  «         Œ?|D ]ó}dD ]î}|dk    r|dk    rŒ|dk    r|dk    rŒ|                      t          t          ||z   ¦  «        ¦  «         t          t          ||z   ¦  «        j        }dd	dœ|         }|                      t          t          ||z   ¦  «        p|d	k    o|dk    ¦  «          t          t          ||z   ¦  «        ¦   «         }|                      t          j
        |¦  «        |¦  «         ŒïŒôdS )
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ÚClientrN  rQ  rL  ÚlistenÚconnect)Úgetattrr   r   ÚremoverO   Úhasattrr   Úmethodr(   r   ry   )r+   ÚtransÚtranÚsiderW  ÚprefixrB  s          r    Útest_everythingTherez"InternetTests.test_everythingThere
  s  € ð KÐJÐJˆØ˜!˜!˜!”Hð 	#ð 	#ˆDØ9•7�: z°DÑ'8Ñ9Ô9½'À4ÑHÔHð #Ø—’˜TÑ"Ô"Ð"øØð 	9ð 	9ˆDØ,ð 9ð 9�Ø˜;Ò&Ð&¨4°8Ò+;Ð+;ØØ˜5’=�= T¨XÒ%5Ð%5ØØ—’¥­°$¸±+Ñ >Ô >Ñ?Ô?Ð?Ý ¥¨4°$©;Ñ7Ô7Ô>�Ø$,¸	ÐBÐBÀ4ÔH�Ø—’Ý�G V¨f¡_Ñ5Ô5ð AØ )Ò+Ð?°¸%²ñô ð ð 3•G�H d¨T¡kÑ2Ô2Ñ4Ô4�Ø× Ò ¥Ô!1°!Ñ!4Ô!4°aÑ8Ô8Ð8Ð8ð9ð	9ð 	9r   c                 ó|   — t           j        D ].}|                      t          t           |¦  «        |› d�¦  «         Œ/dS )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   rV  )r+   Úclss     r    Útest_importAllzInternetTests.test_importAll$  sT   € õ Ô#ð 	ð 	ˆCØ�OŠOÝ� #Ñ&Ô&ØÐIÐIÐIñô ð ð ð	ð 	r   c                 ó  — t          ¦   «         }t          ¦   «         }t          j        d||¬¦  «        }|                     ¦   «          |                      |j                             ¦   «         dd…         d|f¦  «         dS )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  su   € õ  ‘/”/ˆå‘(”(ˆÝÔ˜t W°gÐ>Ñ>Ô>ˆØ	�ŠÑÔÐØ×Ò˜Ô+×/Ò/Ñ1Ô1°"°1°"Ô5¸¸g°ÑGÔGÐGÐGÐGr   c                 ó  — t          ¦   «         }t          j        ¦   «         }t          j        dd||¬¦  «        }|                     ¦   «          |                      |j                             ¦   «         dd…         dd|f¦  «         dS )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ê   rb  rc  Né   )	r   r   rü   r   rý   rN   r(   Ú
tcpClientsrg  rh  s       r    Ú#test_reactorParametrizationInClientz1InternetTests.test_reactorParametrizationInClient=  s   € õ  ‘/”/ˆåÔ(Ñ*Ô*ˆÝÔ˜{¨D°'À7ÐKÑKÔKˆØ	�ŠÑÔÐØ×Ò˜Ô+×/Ò/Ñ1Ô1°"°1°"Ô5¸ÀTÈ7Ð7SÑTÔTÐTÐTÐTr   c                 óÊ  — t          ¦   «         }t          j        ¦   «         }t          j        d||¬¦  «        }|                     ¦   «          |                      |j                             ¦   «         dd…         d|f¦  «         | 	                    ¦   «          |                     ¦   «          |                      |j                             ¦   «         dd…         d|f¦  «         dS )z—
        Like L{test_reactorParametrizationInServer}, but stop and restart the
        service and check that the given reactor is still used.
        rb  rc  Nrd  )
r   r   ÚFactoryr   rø   rN   r(   rf  rg  rP   rh  s       r    Ú0test_reactorParametrizationInServerMultipleStartz>InternetTests.test_reactorParametrizationInServerMultipleStartJ  sÉ   € õ
  ‘/”/ˆåÔ"Ñ$Ô$ˆÝÔ˜t W°gÐ>Ñ>Ô>ˆØ	�ŠÑÔÐØ×Ò˜Ô+×/Ò/Ñ1Ô1°"°1°"Ô5¸¸g°ÑGÔGÐGØ	�Š‰ŒˆØ	�ŠÑÔÐØ×Ò˜Ô+×/Ò/Ñ1Ô1°"°1°"Ô5¸¸g°ÑGÔGÐGÐGÐGr   c                 óÐ  — t          ¦   «         }t          j        ¦   «         }t          j        dd||¬¦  «        }|                     ¦   «          |                      |j                             ¦   «         dd…         dd|f¦  «         | 	                    ¦   «          |                     ¦   «          |                      |j                             ¦   «         dd…         dd|f¦  «         dS )z—
        Like L{test_reactorParametrizationInClient}, but stop and restart the
        service and check that the given reactor is still used.
        rê   rb  rc  Nrk  )
r   r   rü   r   rý   rN   r(   rl  rg  rP   rh  s       r    Ú0test_reactorParametrizationInClientMultipleStartz>InternetTests.test_reactorParametrizationInClientMultipleStartY  sÑ   € õ
  ‘/”/ˆåÔ(Ñ*Ô*ˆÝÔ˜{¨D°'À7ÐKÑKÔKˆØ	�ŠÑÔÐØ×Ò˜Ô+×/Ò/Ñ1Ô1°"°1°"Ô5¸ÀTÈ7Ð7SÑTÔTÐTØ	�Š‰ŒˆØ	�ŠÑÔÐØ×Ò˜Ô+×/Ò/Ñ1Ô1°"°1°"Ô5¸ÀTÈ7Ð7SÑTÔTÐTÐTÐTr   )r   r   r   r   r
  rc   r  r   r   ÚIReactorUNIXr   r"  r!  r*  r.  r5  rG  r\  r`  ri  rm  rp  rr  r   r   r    rè   rè   R  s®  € € € € € ðð ð ð&Fð Fð Fð*ð ð ð(ð ð ð €VØ#ˆJÔ# G¨TÑ2Ô2Ð2Ø;ñô ðð ñ	ô ðð*ð ð ð €VØ#ˆJÔ# G¨TÑ2Ô2Ð2Ø;ñô ð$ð $ñ	ô ð$ð. €VØ#ˆJÔ# G¨TÑ2Ô2Ð2Ø;ñô ðð ñ	ô ðð$ð $ð $ðð ð ð(9ð 9ð 9ð4
ð 
ð 
ðHð Hð HðUð Uð UðHð Hð HðUð Uð Uð Uð Ur   rè   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTimerBasicTestsc                 ó6  ‡ — t          j        ¦   «         }t          j        d|j        d¦  «        ‰ _        ‰ j                             ¦   «          |                     ‰ j        d¦  «         |                     ˆ fd„¦  «         |                     ˆ fd„¦  «         |S )Nr^   r%   c                 ó6   •— ‰j                              ¦   «         S r/   ©rW   rP   rF  s    €r    rð   z/TimerBasicTests.testTimerRuns.<locals>.<lambda>o  ó   ø€  ¤× 2Ò 2Ñ 4Ô 4€ r   c                 óB   •— ‰                      ‰j        j        ¦  «        S r/   )rL   rW   rM   rF  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  s�   ø€ ÝŒNÑÔˆÝÔ& q¨!¬*°gÑ>Ô>ˆŒØŒ×ÒÑÔÐØ	�Š�dÔ&¨Ñ0Ô0Ð0Ø	�ŠÐ4Ð4Ð4Ð4Ñ5Ô5Ð5Ø	�ŠÐ@Ð@Ð@Ð@ÑAÔAÐAØˆr   c                 ó4   — | j                              ¦   «         S r/   rx  r{   s    r    ÚtearDownzTimerBasicTests.tearDowns  s   € ØŒv×!Ò!Ñ#Ô#Ð#r   c                 óv  ‡ ‡‡— t          j        ¦   «         }t          j        ¦   «         Š‰df|dfgŠˆfd„}t          j        d|¦  «        ‰ _        ‰ j                             ¦   «          ˆ fd„}ˆˆ fd„}ˆ fd„}|                     |¦  «         |                     |¦  «         |                     |¦  «         |S )NÚbarÚfooc                  ó`   •— ‰                      ¦   «         \  } }|                      |¦  «         d S r/   )rg  rÎ   )rÍ   ÚargÚworks     €r    Útriggerz1TimerBasicTests.testTimerRestart.<locals>.trigger|  s'   ø€ Ø—X’X‘Z”Z‰FˆAˆsØ�JŠJ�s‰OŒOˆOˆOˆOr   r^   c                 ób   •— ‰                      | d¦  «         ‰j                             ¦   «         S )Nr€  ©r(   rW   rP   ©Úresultr+   s    €r    ÚonFirstResultz7TimerBasicTests.testTimerRestart.<locals>.onFirstResultƒ  s-   ø€ Ø×Ò˜V UÑ+Ô+Ð+Ø”6×%Ò%Ñ'Ô'Ð'r   c                 óx   •— ‰                      ‰j        j        ¦  «         ‰j                             ¦   «          ‰S r/   )rL   rW   rM   rN   )r  Úd2r+   s    €€r    ÚonFirstStopz5TimerBasicTests.testTimerRestart.<locals>.onFirstStop‡  s4   ø€ Ø×Ò˜TœVœ^Ñ,Ô,Ð,ØŒF×ÒÑ!Ô!Ð!ØˆIr   c                 óf   •— ‰                      | d¦  «         ‰j                             ¦   «          d S )Nr  r†  r‡  s    €r    ÚonSecondResultz8TimerBasicTests.testTimerRestart.<locals>.onSecondResultŒ  s3   ø€ Ø×Ò˜V UÑ+Ô+Ð+ØŒ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Ô2ˆŒØŒ×ÒÑÔÐð	(ð 	(ð 	(ð 	(ð 	(ð	ð 	ð 	ð 	ð 	ð 	ð
	!ð 	!ð 	!ð 	!ð 	!ð 	�Š�}Ñ%Ô%Ð%Ø
�Š�{Ñ#Ô#Ð#Ø
�Š�~Ñ&Ô&Ð&Øˆ	r   c                 ó  ‡ ‡— g Šˆfd„}t          j        ¦   «         }t          j        d|dd|¦  «        ‰ _        ‰ j                             ¦   «          |                     ‰ j        dgdz  ¦  «         |                     ˆ fd„¦  «         |S )Nc                 ó†   •— ‰                      | ¦  «         t          ‰¦  «        |k    r|                     ‰¦  «         d S d S r/   )rá   ÚlenrÎ   )ÚdataÚnumberrÍ   rÞ   s      €r    r„  z/TimerBasicTests.testTimerLoops.<locals>.trigger˜  s>   ø€ Ø�HŠH�T‰NŒNˆNÝ�1‰vŒv˜ÒÐØ—
’
˜1‘”���ð  Ðr   g{®Gáz„?r%   é
   c                 ó6   •— ‰j                              ¦   «         S r/   rx  rF  s    €r    rð   z0TimerBasicTests.testTimerLoops.<locals>.<lambda>¡  ry  r   )r
   r÷   r   r0  rW   rN   rþ   r(   )r+   r„  rÍ   rÞ   s   `  @r    ÚtestTimerLoopszTimerBasicTests.testTimerLoops•  s�   øø€ Øˆð	ð 	ð 	ð 	ð 	õ
 ŒNÑÔˆÝÔ& t¨W°g¸rÀ1ÑEÔEˆŒØŒ×ÒÑÔÐØ	�Š�dÔ&¨¨	°B©Ñ7Ô7Ð7Ø	�ŠÐ4Ð4Ð4Ð4Ñ5Ô5Ð5Øˆr   N)r   r   r   r{  r}  r�  r˜  r   r   r    ru  ru  i  sP   € € € € € ðð ð ð$ð $ð $ðð ð ð>ð ð ð ð r   ru  c                   ó   — e Zd ZdZd„ ZdS )ÚFakeReactorz6
    A fake reactor with a hooked install method.
    c                 óH   — t          j        j        | g|¢R i |¤Ž || _        dS )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__ª  s3   € õ
 	ÔÔ! $Ð8¨Ð8Ð8Ð8°Ð8Ð8Ð8ØˆŒˆˆr   N)r   r   r   Ú__doc__rß   r   r   r    rš  rš  ¥  s-   € € € € € ðð ðð ð ð ð r   rš  c                   ób   — 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dS )ÚPluggableReactorTestsz:
    Tests for the reactor discovery/inspection APIs.
    c                 óf   — g | _         g | _        t          j        | _        | j        t          _        dS )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ˆÔØ"Ô.�ÔÐÐr   c                 ó(   — | j         t          _        dS )z>
        Restore the original L{reactors.getPlugins}.
        N)r¦  r   r¥  r{   s    r    r}  zPluggableReactorTests.tearDownÆ  s   € ð #Ô3�ÔÐÐr   Nc                 ób   — | 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Ì  s1   € ð
 	Ô×Ò ¨GÐ 4Ñ5Ô5Ð5Ý�DÔ&Ñ'Ô'Ð'r   c                 óV  — d}t           dz   }d}t          j        |||¦  «        g| _        t          j        ¦   «         }|                      | j        t          j        dfg¦  «         |D ]+}|j        |k    r|                      |j	        |¦  «          dS Œ,|  
                    d¦  «         dS )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ÔJÐKˆÔÝÔ/Ñ1Ô1ˆà×Ò˜Ô)­XÔ-GÈÐ,NÐ+OÑPÔPÐPàð 	Pð 	PˆAØŒ{˜dÒ"Ð"Ø× Ò  ¤°Ñ<Ô<Ð<Ø��ð #ð �IŠIÐNÑOÔOÐOÐOÐOr   c                 óø   ‡— g Šˆfd„}t          |dt          d¦  «        }d|i}|                      |¦  «         t          j        ddd¦  «        }|                     ¦   «          |                      ‰dg¦  «         dS )zy
        Test that L{reactors.Reactor.install} loads the correct module and
        calls its install attribute.
        c                  ó2   •— ‰                       d¦  «         d S 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ç  sœ   ø€ ð
 ˆ	ð	#ð 	#ð 	#ð 	#ð 	#õ " 'Ð+<½hÈÑTÔTˆØ$ kÐ2ˆØ×Ò˜wÑ'Ô'Ð'ÝÔ$ ]Ð4EÀ{ÑSÔSˆ	Ø×ÒÑÔÐØ×Ò˜ T FÑ+Ô+Ð+Ð+Ð+r   c                 ó²   ‡— g Šˆfd„}d}t           }d}t          ||||¦  «        g| _        t          j        |¦  «         |                      ‰dg¦  «         dS )zu
        Test that the L{reactors.installReactor} function correctly installs
        the specified reactor.
        c                  ó2   •— ‰                       d¦  «         d S 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ø  s|   ø€ ð
 ˆ	ð	#ð 	#ð 	#ð 	#ð 	#ð !ˆÝˆØ#ˆÝ)¨'°4¸À+ÑNÔNÐOˆÔÝÔ Ñ%Ô%Ð%Ø×Ò˜ T FÑ+Ô+Ð+Ð+Ð+r   c                 óÌ   ‡ ‡— t          ¦   «         Šˆˆ fd„}d}t          }d}t          ||||¦  «        g‰ _        t	          j        |¦  «        }‰                      |‰¦  «         dS )zt
        Test that the L{reactors.installReactor} function correctly returns
        the installed reactor.
        c                  óB   •— ddl m}  ‰                     | d‰¦  «         d S )Nr   )r   r   )Útwistedr   Úpatch)r   r   r+   s    €€r    r�  zHPluggableReactorTests.test_installReactorReturnsReactor.<locals>.install  s1   ø€ Ø(Ð(Ð(Ð(Ð(Ð(à�JŠJ�x ¨GÑ4Ô4Ð4Ð4Ð4r   r®  r¯  N)re  r   rš  r¤  r   rÇ  r�   )r+   r�  r)   r¬  r¯  r»  r   s   `     @r    Ú!test_installReactorReturnsReactorz7PluggableReactorTests.test_installReactorReturnsReactor	  s�   øø€ õ
 ‘(”(ˆð	5ð 	5ð 	5ð 	5ð 	5ð 	5ð
 !ˆÝˆØ#ˆÝ)¨'°4¸À+ÑNÔNÐOˆÔÝÔ+¨DÑ1Ô1ˆ	Ø�Š�i Ñ)Ô)Ð)Ð)Ð)r   c                 óÞ   ‡— g Šˆfd„}d}t           }d}t          ||||¦  «        }t          d„ d||¦  «        }||g| _        t          j        |¦  «         |                      ‰dg¦  «         dS )z�
        Test that the L{reactors.installReactor} function correctly installs
        the specified reactor when there are multiple reactor plugins.
        c                  ó2   •— ‰                       d¦  «         d S ræ   r¹  rº  s   €r    r�  zIPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.install#  r¼  r   r®  r¯  c                  ó   — d S r/   r   r   r   r    rð   zJPluggableReactorTests.test_installReactorMultiplePlugins.<locals>.<lambda>*  s   € ¨4€ r   ÚotherreactorTNrÆ  )r+   r�  r)   r¬  r¯  rÀ  ÚotherReactorr»  s          @r    Ú"test_installReactorMultiplePluginsz8PluggableReactorTests.test_installReactorMultiplePlugins  s˜   ø€ ð
 ˆ	ð	#ð 	#ð 	#ð 	#ð 	#ð !ˆÝˆØ#ˆÝ! '¨4°¸+ÑFÔFˆÝ" < <°ÀÈ+ÑVÔVˆØ*¨KÐ8ˆÔÝÔ Ñ%Ô%Ð%Ø×Ò˜ T FÑ+Ô+Ð+Ð+Ð+r   c                 ój   — g | _         |                      t          j        t          j        d¦  «         dS )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| _        |                      t          t
          j        |¦  «         dS )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Ô0Ð0r   r®  r¯  N)r   rš  r¤  rB   rÜ  r   rÇ  )r+   r�  r)   r¬  r¯  s        r    Útest_installNotAvailableReactorz5PluggableReactorTests.test_installNotAvailableReactor9  s\   € ð	1ð 	1ð 	1ð !ˆÝˆØ#ˆÝ)¨'°4¸À+ÑNÔNÐOˆÔØ×Ò�+¥xÔ'>ÀÑEÔEÐEÐEÐEr   c                 ó®  ‡‡‡— g ŠdŠdŠ G ˆˆfd„dt           j        t          j        ¦  «        }ˆˆfd„}t	          |dt
          d¦  «        g| _         |¦   «         }|                     g d¢¦  «         |                      ‰d	         ‰¦  «         |                      ‰ 	                    ‰¦  «        d
¦  «         |                      |d         d¦  «         dS )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dS )úQPluggableReactorTests.test_reactorSelectionMixin.<locals>.ReactorSelectionOptionsc                 óD   •‡ — ‰                      ‰¦  «         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  s0   øø€ à—’Ð 0Ñ1Ô1Ð1Ø% t¨\¨\¨\¨\Ð;LÐMÐNÐNr   N)r   r   r   Úpropertyræ  )rä  rå  s   €€r    ÚReactorSelectionOptionsrà  Q  sE   ø€ € € € € ØðOð Oð Oð Oð Oñ ŒXðOð Oð Or   rè  c                  ó2   •— ‰                      ‰ ¦  «         d S 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ð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	O¥e¤mµSÔ5Nñ 	Oô 	Oð 	Oð	+ð 	+ð 	+ð 	+ð 	+ð 	+õ ˜Ð!2µH¸kÑJÔJð
ˆÔð *Ð)Ñ+Ô+ˆØ×ÒÐKÐKÐKÑLÔLÐLØ×Ò˜ !œ mÑ4Ô4Ð4Ø×Ò˜Ÿš¨Ñ6Ô6¸Ñ:Ô:Ð:Ø×Ò˜ Ô+Ð->Ñ?Ô?Ð?Ð?Ð?r   c                 óh  —  G d„ dt           j        t          j        ¦  «        }g | _         |¦   «         }t          ¦   «         |_        |                      t           j        |j	        g d¢¦  «        }|  
                    d|j        d         ¦  «         |  
                    d|j        d         ¦  «         dS )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dS )ú\PluggableReactorTests.test_reactorSelectionMixinNonExistent.<locals>.ReactorSelectionOptionsN©r   r   r   r   r   r    rè  rô  k  ó   € € € € € ØˆDr   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µSÔ5Nñ 	ô 	ð 	ð  ˆÔà)Ð)Ñ+Ô+ˆÝ (¡
¤
ˆÔØ×ÒÝÔØÔ Ø:Ð:Ð:ñ
ô 
ˆð
 	�ŠÐ'¨¬°¬Ñ3Ô3Ð3Ø�Š�o q¤v¨a¤yÑ1Ô1Ð1Ð1Ð1r   c                 ó°  ‡—  G d„ dt           j        t          j        ¦  «        }dŠˆfd„}d}t          }d}t          ||||¦  «        g| _         |¦   «         }t          ¦   «         |_        |  	                    t           j
        |j        g d¢¦  «        }|                      ‰|j        d         ¦  «         |                      d	|j        d         ¦  «         d
S )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dS )ú]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µSÔ5Nñ 	ô 	ð 	ð $ˆð	'ð 	'ð 	'ð 	'ð 	'ð !ˆÝˆØ#ˆÝ)¨'°4¸À+ÑNÔNÐOˆÔà)Ð)Ñ+Ô+ˆÝ (¡
¤
ˆÔØ×ÒÝÔØÔ Ø:Ð:Ð:ñ
ô 
ˆð
 	�Š�g˜qœv aœyÑ)Ô)Ð)Ø�Š�o q¤v¨a¤yÑ1Ô1Ð1Ð1Ð1r   r/   )r   r   r   rŸ  r¨  r}  r§  r¶  rÃ  rÈ  rÍ  rÓ  r×  rÝ  rñ  rü  r  r   r   r    r¡  r¡  ³  sï   € € € € € ðð ð/ð /ð /ð4ð 4ð 4ð(ð (ð (ð (ðPð Pð Pð&,ð ,ð ,ð",ð ,ð ,ð"*ð *ð *ð&,ð ,ð ,ð&
ð 
ð 
ðFð Fð Fð@ð @ð @ð82ð 2ð 2ð,2ð 2ð 2ð 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k    d¦  «        d	„ ¦   «         Z
 ee	dk    d
¦  «        d„ ¦   «         Zd„ ZdS )ÚHelpReactorsTestsz6
    --help-reactors lists the available reactors
    c                 óö   — t          j        ¦   «         | _        t          ¦   «         | j        _        |                      t          | j        j        ¦  «         | j        j                             ¦   «         | _	        dS )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ž  sY   € õ Ô0Ñ2Ô2ˆŒÝ%-¡Z¤ZˆŒÔ"Ø×Ò�* d¤lÔ&DÑEÔEÐEØ”|Ô1×:Ò:Ñ<Ô<ˆŒˆˆr   z$Not applicable, asyncio is availablec                 ó´   — |                       t          j        j        | j        ¦  «         |                       dt          j        j        z   | j        ¦  «         dS )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§  sI   € ð
 	�ŠÕ&Ô.Ô:¸D¼LÑIÔIÐIØ�Š�cÕ,Ô4Ô>Ñ>ÀÄÑMÔMÐMÐMÐMr   zasyncio library not availablec                 ó´   — |                       t          j        j        | j        ¦  «         |                      dt          j        j        z   | j        ¦  «         dS )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¯  sK   € ð
 	�ŠÕ&Ô.Ô:¸D¼LÑIÔIÐIØ×Ò˜Õ/Ô7ÔAÑAÀ4Ä<ÑPÔPÐPÐPÐPr   Úwin32zTest only applicable on Windowsc                 ó´   — |                       t          j        j        | j        ¦  «         |                      dt          j        j        z   | j        ¦  «         dS )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·  sK   € ð
 	�ŠÕ&Ô+Ô7¸¼ÑFÔFÐFØ×Ò˜Õ/Ô4Ô>Ñ>ÀÄÑMÔMÐMÐMÐMr   zTest not applicable on Windowsc                 ó´   — |                       t          j        j        | j        ¦  «         |                       dt          j        j        z   | j        ¦  «         dS )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¿  sI   € ð
 	�ŠÕ&Ô+Ô7¸¼ÑFÔFÐFØ�Š�cÕ,Ô1Ô;Ñ;¸T¼\ÑJÔJÐJÐJÐJr   c                 ó  — d„ }t          j        ¦   «         }||_        t          ¦   «         |_        |                      t          |j        ¦  «         |j                             ¦   «         }|  	                    d|¦  «         dS )z>
        --help-reactors with only supported reactors
        c               3   ó&   K  — t           j        V — d S r/   )r   Údefaultr   r   r    r°  zEHelpReactorsTests.test_onlySupportedReactors.<locals>.getReactorTypesÌ  s   è è € Ý"Ô*Ð*Ð*Ð*Ð*Ð*r   zreactors not availableN)
r   rí  Ú_getReactorTypesr   rø  rB   r  r  r  r  )r+   r°  rð  r  s       r    Útest_onlySupportedReactorsz,HelpReactorsTests.test_onlySupportedReactorsÇ  s   € ð
	+ð 	+ð 	+õ Ô+Ñ-Ô-ˆØ#2ˆÔ Ý (¡
¤
ˆÔØ×Ò�* gÔ&?Ñ@Ô@Ð@ØÔ'×0Ò0Ñ2Ô2ˆØ×ÒÐ1°7Ñ;Ô;Ð;Ð;Ð;r   N)r   r   r   rŸ  r¨  r   r  r  r  r   r  r  r  r   r   r    r  r  ™  sú   € € € € € ðð ð=ð =ð =ð €VˆGÐ;Ñ<Ô<ðNð Nñ =Ô<ðNð €V�ˆKÐ8Ñ9Ô9ðQð Qñ :Ô9ðQð €VˆL˜GÒ#Ð%FÑGÔGðNð Nñ HÔGðNð €VˆL˜GÒ#Ð%EÑFÔFðKð Kñ GÔFðKð<ð <ð <ð <ð <r   r  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚBackoffPolicyTestsz@
    Tests of L{twisted.application.internet.backoffPolicy}
    c                 ód  — t          dddd„ ¬¦  «        }|                       |d¦  «        d¦  «         |                       |d¦  «        d	¦  «         |                       |d
¦  «        d¦  «         |                       |d¦  «        d¦  «         |                       |d¦  «        d¦  «         dS )zI
        Test that L{backoffPolicy()} calculates expected values
        ç      ð?ç      N@ç      ø?c                  ó   — dS r]   r   r   r   r    rð   zCBackoffPolicyTests.test_calculates_correct_values.<locals>.<lambda>à  ó   € ¸1€ r   ©Újitterr   rd  r^   g      @r–  g     UM@é   é=   éd   N)r	   ÚassertAlmostEqualr(   ©r+   Úpols     r    Útest_calculates_correct_valuesz1BackoffPolicyTests.test_calculates_correct_valuesÜ  s¸   € õ ˜C  s°9°9Ð=Ñ=Ô=ˆØ×Ò˜s˜s 1™vœv qÑ)Ô)Ð)Ø×Ò˜s˜s 1™vœv sÑ+Ô+Ð+Ø×Ò˜s˜s 2™wœw¨Ñ6Ô6Ð6Ø×Ò˜˜˜R™œ "Ñ%Ô%Ð%Ø×Ò˜˜˜S™œ 2Ñ&Ô&Ð&Ð&Ð&r   c                 óª   — t          dddd„ ¬¦  «        }|                       |d¦  «        d¦  «         |                       |d¦  «        d¦  «         d	S )
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                  ó   — dS 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°9Ð=Ñ=Ô=ˆØ×Ò˜˜˜T™œ BÑ'Ô'Ð'Ø×Ò˜˜˜W™œ rÑ*Ô*Ð*Ð*Ð*r   c                 ól   — t          dddd„ ¬¦  «        }|                       |d¦  «        d¦  «         dS )	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                  ó   — dS r]   r   r   r   r    rð   zSBackoffPolicyTests.test_does_not_overflow_with_large_factor_value.<locals>.<lambda>ù  s   € ¸A€ 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°IÐ>Ñ>Ô>ˆØ×Ò˜˜˜T™œ BÑ'Ô'Ð'Ð'Ð'r   N)r   r   r   rŸ  r+  r0  r3  r   r   r    r  r  ×  sK   € € € € € ðð ð	'ð 	'ð 	'ð
+ð 
+ð 
+ð(ð (ð (ð (ð (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"   rV  rg   ÚcuruidÚgetgidÚcurgidri   rw   r„   r–   r§   ÚLineReceiverrÂ   rÓ   rÜ   r  rä   rè   ru  rœ  rš  r¡  r  r  r   r   r    ú<module>rF     s¿  ððð ð €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð ðØ€N€N€N€NøØð ð ð Ø€G€G€Gðøøøð Ð Ð Ð Ð Ð à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø  Ð  Ð  Ð  Ð  Ð  Ø /Ð /Ð /Ð /Ð /Ð /Ø CÐ CÐ CÐ CÐ CÐ CØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ñ ô ð ðx#ð x#ð x#ð x#ð x#�8ñ x#ô x#ð x#ðv €7ˆ2ˆxÑÔð ØˆRŒY‰[Œ[€FØˆRŒY‰[Œ[€F€FàÐ€FˆVð1ð 1ð 1ð 1ð 1�8ñ 1ô 1ð 1ð0	Hð 	Hð 	Hð 	Hð 	H�hñ 	Hô 	Hð 	Hð%ð %ð %ð %ð %�xñ %ô %ð %ð>=ð =ð =ð =ð =�8ñ =ô =ð =ð(,8ð ,8ð ,8ð ,8ð ,8�hñ ,8ô ,8ð ,8ð^	3ð 	3ð 	3ð 	3ð 	3ˆ%Ô
ñ 	3ô 	3ð 	3ð(ð (ð (ð (ð (ñ (ô (ð (ðð ð ð ð ñ ô ð ðð ð ð ð ˆtŒyñ ô ð ð
TUð TUð TUð TUð TU�Hñ TUô TUð TUðn9ð 9ð 9ð 9ð 9�hñ 9ô 9ð 9ðxð ð ð ð �(Ô"ñ ô ð ðc2ð c2ð c2ð c2ð c2Ð/°ñ c2ô c2ð c2ðL;<ð ;<ð ;<ð ;<ð ;<˜ñ ;<ô ;<ð ;<ð|#(ð #(ð #(ð #(ð #(˜ñ #(ô #(ð #(ð #(ð #(s   – ›%¤%