ó
    Ö›‘h¢  ã                   ó˜  • S r SSKrSSKJrJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SS	KJrJrJrJrJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%  SSK&J'r'  \#RP                  " 5       (       d  Sr)OSr) " S S\5      r* " S S5      r+ " S S5      r, " S S\'RZ                  5      r. " S S\'RZ                  \5      r/ " S S\'RZ                  5      r0 " S  S!\'RZ                  5      r1 " S" S#\'RZ                  5      r2 " S$ S%5      r3 " S& S'\'RZ                  5      r4 " S( S)\'RZ                  5      r5g)*z)
Test cases for L{twisted.names.client}.
é    N)ÚverifyClassÚverifyObject)Údefer)ÚCannotListenErrorÚConnectionRefusedError)Ú	IResolver)ÚClock)ÚAlternateReactor)ÚcacheÚclientÚdnsÚerrorÚhosts)ÚResolverBase)ÚDNSQueryTimeoutError)Ú	test_util)ÚGoodTempPathMixin)Úfailure)ÚFilePath)Úplatform)Úproto_helpers)Úunittestz:These tests need more work before they'll work on Windows.c                   ó   • \ rS rSrS rSrg)ÚFakeResolveré#   c                 óì   • US:X  a:  [         R                  " U[         R                  US[         R                  " SSS9S9nO[         R                  " XUSS9nU/n/ n/ n[        R
                  " XgU45      $ )z“
The getHostByNameTest does a different type of query that requires it
return an A record from an ALL_RECORDS lookup, so we accommodate that
here.
ó   getHostByNameTesté<   ú	127.0.0.1)ÚaddressÚttl)ÚnameÚtypeÚclsr!   Úpayload)r"   r#   r$   r!   )r   ÚRRHeaderÚAÚRecord_Ar   Úsucceed)	Úselfr"   r$   ÚqtypeÚtimeoutÚrrÚresultsÚ	authorityÚ
additionals	            ÚbC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/names/test/test_client.pyÚ_lookupÚFakeResolver._lookup$   sr   € ð Ð'Ó'Ü—’ØÜ—U‘UØØÜŸš¨[¸bÑAñ‰Bô —’ 4¸À"ÑEˆBà�$ˆØˆ	Øˆ
Ü�}Š}˜g°*Ð=Ó>Ð>ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r2   Ú__static_attributes__r5   r4   r1   r   r   #   s   † õ?r4   r   c                   ó"   • \ rS rSrSrSrS rSrg)ÚStubPorté;   zÑ
A partial implementation of L{IListeningPort} which only keeps track of
whether it has been stopped.

@ivar disconnected: A C{bool} which is C{False} until C{stopListening} is
    called, C{True} afterwards.
Fc                 ó   • SU l         g )NT©Údisconnected©r*   s    r1   ÚstopListeningÚStubPort.stopListeningF   s
   € Ø ˆÕr4   r?   N)r6   r7   r8   r9   Ú__doc__r@   rB   r:   r5   r4   r1   r<   r<   ;   s   † ñð €Lõ!r4   r<   c                   ó(   • \ rS rSrSrS rSS jrSrg)ÚStubDNSDatagramProtocoléJ   zº
L{dns.DNSDatagramProtocol}-alike.

@ivar queries: A C{list} of tuples giving the arguments passed to
    C{query} along with the L{defer.Deferred} which was returned from
    the call.
c                 ó0   • / U l         [        5       U l        g ©N©Úqueriesr<   Ú	transportrA   s    r1   Ú__init__Ú StubDNSDatagramProtocol.__init__S   ó   € ØˆŒÜ!›ˆ�r4   Nc                 ól   • [         R                  " 5       nU R                  R                  XX4U45        U$ )z^
Record the given arguments and return a Deferred which will not be
called back by this code.
)r   ÚDeferredrK   Úappend)r*   r    rK   r,   ÚidÚresults         r1   ÚqueryÚStubDNSDatagramProtocol.queryW   s.   € ô
 —’Ó!ˆØ�‰×Ñ˜W¨w¸FÐCÔDØˆr4   ©rK   rL   ©é
   N)r6   r7   r8   r9   rD   rM   rU   r:   r5   r4   r1   rF   rF   J   s   † ñò$÷r4   rF   c                   ó(   • \ rS rSrSr\rS rS rSr	g)ÚGetResolverTestséa   z"
Tests for L{client.getResolver}.
c                 óÆ   • [        [        5       5         [        R                  " 5       nSSS5        U R	                  [        [        W5      5        g! , (       d  f       N.= f)zA
L{client.getResolver} returns an object providing L{IResolver}.
N)r
   r	   r   ÚgetResolverÚ
assertTruer   r   ©r*   Úresolvers     r1   Útest_interfaceÚGetResolverTests.test_interfaceh   s=   € ô œe›gÕ&Ü×)Ò)Ó+ˆH÷ 'à�‰œ¤Y°Ó9Õ:÷ 'Õ&ús   ”AÁ
A c                 óÖ   • [        [        5       5         [        R                  " 5       n[        R                  " 5       nSSS5        U R	                  WW5        g! , (       d  f       N!= f)zV
Multiple calls to L{client.getResolver} return the same L{IResolver}
implementation.
N)r
   r	   r   r^   ÚassertIs)r*   ÚaÚbs      r1   Útest_idempotentÚ GetResolverTests.test_idempotentp   sH   € ô
 œe›gÕ&Ü×"Ò"Ó$ˆAÜ×"Ò"Ó$ˆA÷ 'ð 	�‰�a˜Õ÷ 'Õ&ús   ”+AÁ
A(r5   N)
r6   r7   r8   r9   rD   ÚwindowsSkipÚskiprb   rh   r:   r5   r4   r1   r[   r[   a   s   † ñð €Dò;õr4   r[   c                   óX   • \ rS rSrSr\rS rS rS r	S r
S rS rS	 rS
 rS rS rSrg)ÚCreateResolverTestsé{   z%
Tests for L{client.createResolver}.
c                 óü   • UR                    Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU R	                  S[        U5      5        U R	                  US   R                  U5        g s  snf )Né   r   )Ú	resolversÚ
isinstancer   ÚResolverÚassertEqualÚlenÚfile©r*   ra   ÚfilenameÚrÚress        r1   Ú
_hostsTestÚCreateResolverTests._hostsTest‚   s]   € Ø"×,Ò,ÓNÒ,�Q´
¸1¼e¿n¹n×0M�qÑ,ˆÐNØ×Ñ˜œC ›HÔ%Ø×Ñ˜˜Q™Ÿ™ hÕ/ùò Oó
   �#A9¶A9c                 ó¬   • [        [        5       5         [        R                  " 5       nSSS5        U R	                  WS5        g! , (       d  f       N!= f)z˜
L{client.createResolver} returns a L{resolve.ResolverChain} including a
L{hosts.Resolver} using I{/etc/hosts} if no alternate hosts file is
specified.
Ns
   /etc/hosts©r
   r	   r   ÚcreateResolverr{   r`   s     r1   Útest_defaultHostsÚ%CreateResolverTests.test_defaultHosts‡   s8   € ô œe›gÕ&Ü×,Ò,Ó.ˆH÷ 'à�‰˜ -Õ0÷ 'Õ&úó   ”AÁ
Ac                 óª   • [        [        5       5         [        R                  " SS9nSSS5        U R	                  WS5        g! , (       d  f       N!= f)z—
The I{hosts} parameter to L{client.createResolver} overrides the hosts
file used by the L{hosts.Resolver} in the L{resolve.ResolverChain} it
returns.
ó   /foo/bar)r   Nr   r`   s     r1   Útest_overrideHostsÚ&CreateResolverTests.test_overrideHosts‘   s:   € ô œe›gÕ&Ü×,Ò,°;Ñ?ˆH÷ 'à�‰˜ +Õ.÷ 'Õ&úó   ”AÁ
Ac                 óü   • UR                    Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU R	                  S[        U5      5        U R	                  US   R                  U5        gs  snf )zd
Verify that C{resolver} has a L{client.Resolver} with a configuration
filename set to C{filename}.
rp   r   N)rq   rr   r   rs   rt   ru   Úresolvrw   s        r1   Ú_resolvConfTestÚ#CreateResolverTests._resolvConfTest›   s_   € ð
 #×,Ò,ÓOÒ,�Q´
¸1¼f¿o¹o×0N�qÑ,ˆÐOØ×Ñ˜œC ›HÔ%Ø×Ñ˜˜Q™Ÿ™¨Õ1ùò Pr}   c                 ó‚  • [        5       n[        U5         [        R                  " 5       nSSS5        WR                   Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU R                  S[        U5      5        U R                  XS   R                  5        g! , (       d  f       N…= fs  snf )z
The L{client.Resolver} included in the L{resolve.ResolverChain} returned
by L{client.createResolver} uses the global reactor.
Nrp   r   )r	   r
   r   r€   rq   rr   rs   rt   ru   re   Ú_reactor)r*   Úreactorra   ry   rz   s        r1   Útest_reactorÚ CreateResolverTests.test_reactor¤   s‚   € ô
 “'ˆÜ˜gÕ&Ü×,Ò,Ó.ˆH÷ 'à"×,Ò,ÓOÒ,�Q´
¸1¼f¿o¹o×0N�qÑ,ˆÐOØ×Ñ˜œC ›HÔ%Ø�‰�g 1™vŸ™Õ/÷	 'Õ&üâOs   –B+Á#B<Á)B<Â+
B9c                 ó¬   • [        [        5       5         [        R                  " 5       nSSS5        U R	                  WS5        g! , (       d  f       N!= f)z°
L{client.createResolver} returns a L{resolve.ResolverChain} including a
L{client.Resolver} using I{/etc/resolv.conf} if no alternate resolver
configuration file is specified.
Ns   /etc/resolv.conf©r
   r	   r   r€   r‹   r`   s     r1   Útest_defaultResolvConfÚ*CreateResolverTests.test_defaultResolvConf°   s;   € ô œe›gÕ&Ü×,Ò,Ó.ˆH÷ 'à×Ñ˜XÐ':Õ;÷ 'Õ&úrƒ   c                 óª   • [        [        5       5         [        R                  " SS9nSSS5        U R	                  WS5        g! , (       d  f       N!= f)z®
The I{resolvconf} parameter to L{client.createResolver} overrides the
resolver configuration file used by the L{client.Resolver} in the
L{resolve.ResolverChain} it returns.
r…   ©Ú
resolvconfNr“   r`   s     r1   Útest_overrideResolvConfÚ+CreateResolverTests.test_overrideResolvConfº   s<   € ô œe›gÕ&Ü×,Ò,¸ÑDˆH÷ 'à×Ñ˜X {Õ3÷ 'Õ&úrˆ   c                 ó  • U R                  5       nUR                  S5        [        [        5       5         [        R
                  " UR                   S9nSSS5        WR                   Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU R                  S[        U5      5        U R                  / US   R                  5        U R                  S/US   R                  5        g! , (       d  f       N¦= fs  snf )z~
If no servers are given, addresses are taken from the file given by the
I{resolvconf} parameter to L{client.createResolver}.
ó   nameserver 127.1.2.3
r—   Nrp   r   ©z	127.1.2.3é5   ©ÚpathÚ
setContentr
   r	   r   r€   rq   rr   rs   rt   ru   ÚserversÚ
dynServers©r*   r˜   ra   ry   rz   s        r1   Útest_defaultServersÚ'CreateResolverTests.test_defaultServersÄ   s¿   € ð
 —Y‘Y“[ˆ
Ø×ÑÐ7Ô8Üœe›gÕ&Ü×,Ò,¸
¿¹ÑHˆH÷ 'à"×,Ò,ÓOÒ,�Q´
¸1¼f¿o¹o×0N�qÑ,ˆÐOØ×Ñ˜œC ›HÔ%Ø×Ñ˜˜S ™VŸ^™^Ô,Ø×ÑÐ+Ð,¨c°!©f×.?Ñ.?Õ@÷ 'Õ&üâOs   µC4Á*#DÂDÃ4
Dc                 ó  • U R                  5       nUR                  S5        [        [        5       5         [        R
                  " S/UR                   S9nSSS5        WR                   Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU R                  S[        U5      5        U R                  S/US   R                  5        U R                  S/US   R                  5        g! , (       d  f       N§= fs  snf )z€
Servers passed to L{client.createResolver} are used in addition to any
found in the file given by the I{resolvconf} parameter.
rœ   )z	127.3.2.1rž   )r¢   r˜   Nrp   r   r�   rŸ   r¤   s        r1   Útest_overrideServersÚ(CreateResolverTests.test_overrideServersÒ   sÐ   € ð
 —Y‘Y“[ˆ
Ø×ÑÐ7Ô8Üœe›gÕ&Ü×,Ò,Ø*Ð+¸
¿¹ñˆH÷ 'ð #×,Ò,ÓOÒ,�Q´
¸1¼f¿o¹o×0N�qÑ,ˆÐOØ×Ñ˜œC ›HÔ%Ø×ÑÐ+Ð,¨c°!©f¯n©nÔ=Ø×ÑÐ+Ð,¨c°!©f×.?Ñ.?Õ@÷ 'Õ&üò Ps   µ!C7Á,#DÂDÃ7
Dc                 óB  • [        [        5       5         [        R                  " 5       nSSS5        WR                   Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU R                  S[        U5      5        g! , (       d  f       Ng= fs  snf )za
L{client.createResolver} returns a L{resolve.ResolverChain} including a
L{cache.CacheResolver}.
Nrp   )
r
   r	   r   r€   rq   rr   r   ÚCacheResolverrt   ru   )r*   ra   ry   rz   s       r1   Ú
test_cacheÚCreateResolverTests.test_cacheâ   sk   € ô
 œe›gÕ&Ü×,Ò,Ó.ˆH÷ 'à"×,Ò,ÓSÒ,�Q´
¸1¼e×>QÑ>Q×0R�qÑ,ˆÐSØ×Ñ˜œC ›HÕ%÷ 'Õ&üâSs   ”BÁ #BÁ'BÂ
Br5   N)r6   r7   r8   r9   rD   rj   rk   r{   r�   r†   r‹   r�   r”   r™   r¥   r¨   r¬   r:   r5   r4   r1   rm   rm   {   sB   † ñð €Dò0ò
1ò/ò2ò
0ò<ò4òAòAõ &r4   rm   c                   óÀ   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r Sr!g )!ÚResolverTestséí   z
Tests for L{client.Resolver}.
c                 ó,   • [        [        [        5        g)zE
L{client} provides L{IResolver} through a series of free
functions.
N)r   r   r   rA   s    r1   Útest_clientProvidesIResolverÚ*ResolverTests.test_clientProvidesIResolverò   s   € ô
 	”Y¤Õ'r4   c                 ó@   • [        [        [        R                  5        g)z+
L{client.Resolver} provides L{IResolver}.
N)r   r   r   rs   rA   s    r1   Ú$test_clientResolverProvidesIResolverÚ2ResolverTests.test_clientResolverProvidesIResolverù   s   € ô 	”IœvŸ™Õ/r4   c                 óL   • U R                  [        [        R                  5        g)zr
L{client.Resolver} raises L{ValueError} if constructed with neither
servers nor a nameserver configuration file.
N)ÚassertRaisesÚ
ValueErrorr   rs   rA   s    r1   Útest_noServersÚResolverTests.test_noServersÿ   s   € ð
 	×Ñœ*¤f§o¡oÕ6r4   c                 ó”   • [         R                  " U R                  5       [        5       S9nU R	                  S/UR
                  5        g)z›
A missing nameserver configuration file results in no server information
being loaded from it (ie, not an exception) and a default server being
provided.
©rŠ   r�   ©r   rž   N)r   rs   Úmktempr	   rt   r£   r`   s     r1   Útest_missingConfigurationÚ'ResolverTests.test_missingConfiguration  s6   € ô —?’?¨$¯+©+«-ÄÃÑIˆØ×ÑÐ+Ð,¨h×.AÑ.AÕBr4   c                 óè   ^• [        U R                  5       5      nUR                  SS9m " U4S jS[        R                  5      nU" SS/S[        5       S9  U R                  TR                  5        g	)
z‘
As part of its constructor, C{StubResolver} opens C{/etc/resolv.conf};
then, explicitly closes it and does not count on the GC to do so for
it.
zw+)Úmodec                   ó"   >• \ rS rSrU 4S jrSrg)Ú9ResolverTests.test_closesResolvConf.<locals>.StubResolveri  c                 ó   >• T$ rI   r5   )r*   r"   Ú
resolvConfs     €r1   Ú	_openFileÚCResolverTests.test_closesResolvConf.<locals>.StubResolver._openFile  s	   ø€ Ø!Ð!r4   r5   N)r6   r7   r8   r9   rÈ   r:   )rÇ   s   €r1   ÚStubResolverrÅ     s   ø† ÷"ð "r4   rÊ   úexample.comrž   z/etc/resolv.conf)r¢   rŠ   r�   N)r   r¿   Úopenr   rs   r	   r_   Úclosed)r*   ÚhandlerÊ   rÇ   s      @r1   Útest_closesResolvConfÚ#ResolverTests.test_closesResolvConf  sb   ø€ ô ˜$Ÿ+™+›-Ó(ˆØ—[‘[ d�[Ð+ˆ
÷	"œ6Ÿ?™?ô 	"ñ 	Ø" BÐ'Ð0BÌEËGò	
ð 	�‰˜
×)Ñ)Õ*r4   c                 óŠ   • [         R                  " S/S9nUR                  S/5        U R                  SUR                  5        g)zn
L{client.Resolver.parseConfig} treats a I{domain} line without an
argument as indicating a domain of C{b""}.
r¾   ©r¢   s   domain
r4   N)r   rs   ÚparseConfigrt   Údomainr`   s     r1   Útest_domainEmptyArgumentÚ&ResolverTests.test_domainEmptyArgument!  s:   € ô
 —?’?Ð,=Ð+>Ñ?ˆØ×Ñ˜k˜]Ô+Ø×Ñ˜˜hŸo™oÕ.r4   c                 óŠ   • [         R                  " S/S9nUR                  S/5        U R                  / UR                  5        g)zr
L{client.Resolver.parseConfig} treats a I{search} line without an
argument as indicating an empty search suffix.
r¾   rÒ   s   search
N)r   rs   rÓ   rt   Úsearchr`   s     r1   Útest_searchEmptyArgumentÚ&ResolverTests.test_searchEmptyArgument*  s:   € ô
 —?’?Ð,=Ð+>Ñ?ˆØ×Ñ˜k˜]Ô+Ø×Ñ˜˜XŸ_™_Õ-r4   c                 ór  ^• [        5       mSS/nSS/n[        R                  " US9nX#l        U4S jUl        [        5       nUR                  S5      nUR                  U R                  U5        U R                  [        TR                  5      S5        U R                  TR                  S	   S	   US	   5        TR                  S	   S
   R                  [        S	5      5        U R                  [        TR                  5      S5        U R                  TR                  S   S	   US   5        TR                  S   S
   R                  [        S5      5        U R                  [        TR                  5      S5        U R                  TR                  S   S	   US	   5        TR                  S   S
   R                  [        S5      5        U R                  [        TR                  5      S5        U R                  TR                  S   S	   US   5        TR                  S   S
   R                  U5        U$ )zå
L{client.Resolver.queryUDP} should issue queries to its
L{dns.DNSDatagramProtocol} with server addresses taken from its own
C{servers} and C{dynServers} lists, proceeding through them in order
as L{DNSQueryTimeoutError}s occur.
©z::1rž   )z::2rž   )z::3rž   )z::4rž   rÒ   c                 ó   >• T$ rI   r5   )Ú	interfaceÚprotocols    €r1   Ú<lambda>Ú=ResolverTests.test_datagramQueryServerOrder.<locals>.<lambda>@  s   ø€ ¹r4   Nrp   r   éÿÿÿÿé   é   é   )rF   r   rs   r£   Ú_connectedProtocolÚobjectÚqueryUDPÚaddCallbackrt   ru   rK   re   Úerrbackr   Úcallback)r*   r¢   r£   ra   ÚexpectedResultÚqueryResultrß   s         @r1   Útest_datagramQueryServerOrderÚ+ResolverTests.test_datagramQueryServerOrder3  sî  ø€ ô +Ó,ˆà Ð,ˆØ! ;Ð/ˆ
Ü—?’?¨7Ñ3ˆØ(ÔÜ&@ˆÔ#ä›ˆØ×'Ñ'¨Ó-ˆØ×Ñ × 0Ñ 0°.ÔAà×Ñœ˜X×-Ñ-Ó.°Ô2Ø�‰�h×&Ñ& qÑ)¨!Ñ,¨g°a©jÔ9Ø×Ñ˜Ñ˜BÑ×'Ñ'Ô(<¸QÓ(?Ô@Ø×Ñœ˜X×-Ñ-Ó.°Ô2Ø�‰�h×&Ñ& qÑ)¨!Ñ,¨g°a©jÔ9Ø×Ñ˜Ñ˜BÑ×'Ñ'Ô(<¸QÓ(?Ô@Ø×Ñœ˜X×-Ñ-Ó.°Ô2Ø�‰�h×&Ñ& qÑ)¨!Ñ,¨j¸©mÔ<Ø×Ñ˜Ñ˜BÑ×'Ñ'Ô(<¸QÓ(?Ô@Ø×Ñœ˜X×-Ñ-Ó.°Ô2Ø�‰�h×&Ñ& qÑ)¨!Ñ,¨j¸©mÔ<Ø×Ñ˜Ñ˜BÑ×(Ñ(¨Ô8àÐr4   c                 ó¦  ^ ^	^
• [        5       m
[        R                  " S/S9nU
4S jUl        T
R                  n[
        R                  " S[
        R                  [
        R                  5      nUR                  U5      nT R                  [        U5      S5        UR                  U5      nT R                  [        U5      S5        [        5       m	[
        R                  " 5       nUR                  R                  T	5        UR!                  5       S   R#                  U5        [$        R&                  " XE/5      nU	U 4S jnUR)                  U5        U$ )zÑ
L{client.Resolver.query} only issues one request at a time per query.
Subsequent requests made before responses to prior ones are received
are queued and given the same response as is given to the first one.
©rË   rž   rÒ   c                  ó   >• T $ rI   r5   ©rß   s   €r1   rà   Ú<ResolverTests.test_singleConcurrentRequest.<locals>.<lambda>]  ó   ø€ ©hr4   ó   foo.example.comrp   râ   c                 óf   >• U u  pTR                  UT// / 45        TR                  UT// / 45        g rI   ©rt   )Ú	responsesÚfirstResponseÚsecondResponseÚanswerr*   s      €€r1   Ú
cbFinishedÚ>ResolverTests.test_singleConcurrentRequest.<locals>.cbFinishedr  s=   ø€ Ø,5Ñ)ˆMØ×Ñ˜]¨f¨X°r¸2Ð,>Ô?Ø×Ñ˜^¨v¨h¸¸BÐ-?Õ@r4   )rF   r   rs   ræ   rK   r   ÚQueryr'   ÚINrU   rt   ru   rç   ÚMessageÚanswersrR   Úpoprë   r   ÚgatherResultsré   )r*   ra   rK   rU   ÚfirstResultÚsecondResultÚresponseÚdrý   rü   rß   s   `        @@r1   Útest_singleConcurrentRequestÚ*ResolverTests.test_singleConcurrentRequestU  s   ú€ ô +Ó,ˆÜ—?’?Ð,?Ð+@ÑAˆÜ&6ˆÔ#Ø×"Ñ"ˆä—	’	Ð,¬c¯e©e´S·V±VÓ<ˆà—n‘n UÓ+ˆØ×Ñœ˜W› qÔ)ð  —~‘~ eÓ,ˆØ×Ñœ˜W› qÔ)ô “ˆÜ—;’;“=ˆØ×Ñ×Ñ Ô'Ø�‰‹�bÑ×"Ñ" 8Ô,ä×Ò Ð ;Ó<ˆö	Að
 	
�‰�jÔ!Øˆr4   c                 óX  ^• [        5       m[        R                  " S/S9nU4S jUl        TR                  n[
        R                  " S[
        R                  5      nUR                  U5        U R                  [        U5      S5        [
        R                  " S[
        R                  5      nUR                  U5        U R                  [        U5      S5        [
        R                  " S[
        R                  5      nUR                  U5        U R                  [        U5      S5        g	)
zP
L{client.Resolver.query} issues a request for each different concurrent
query.
rñ   rÒ   c                  ó   >• T $ rI   r5   ró   s   €r1   rà   Ú?ResolverTests.test_multipleConcurrentRequests.<locals>.<lambda>�  rõ   r4   rö   rp   ó   bar.example.comrã   rä   N)rF   r   rs   ræ   rK   r   rÿ   r'   rU   rt   ru   ÚA6)r*   ra   rK   Ú
firstQueryÚsecondQueryÚ
thirdQueryrß   s         @r1   Útest_multipleConcurrentRequestsÚ-ResolverTests.test_multipleConcurrentRequestsz  s×   ø€ ô
 +Ó,ˆÜ—?’?Ð,?Ð+@ÑAˆÜ&6ˆÔ#Ø×"Ñ"ˆô —Y’YÐ1´3·5±5Ó9ˆ
Ø�‰�zÔ"Ø×Ñœ˜W› qÔ)ô —i’iÐ 2´C·E±EÓ:ˆØ�‰�{Ô#Ø×Ñœ˜W› qÔ)ô —Y’YÐ1´3·6±6Ó:ˆ
Ø�‰�zÔ"Ø×Ñœ˜W› qÕ)r4   c                 óÖ  ^• [        5       m[        R                  " S/S9nU4S jUl        TR                  n[
        R                  " S[
        R                  5      nUR                  U5        U R                  [        U5      S5        UR                  5       S   R                  [
        R                  " 5       5        UR                  U5        U R                  [        U5      S5        g)z˜
After a response is received to a query issued with
L{client.Resolver.query}, another query with the same parameters
results in a new network request.
rñ   rÒ   c                  ó   >• T $ rI   r5   ró   s   €r1   rà   Ú?ResolverTests.test_multipleSequentialRequests.<locals>.<lambda>�  rõ   r4   rö   rp   râ   N)rF   r   rs   ræ   rK   r   rÿ   r'   rU   rt   ru   r  rë   r  )r*   ra   rK   rU   rß   s       @r1   Útest_multipleSequentialRequestsÚ-ResolverTests.test_multipleSequentialRequests•  s¬   ø€ ô +Ó,ˆÜ—?’?Ð,?Ð+@ÑAˆÜ&6ˆÔ#Ø×"Ñ"ˆä—	’	Ð,¬c¯e©eÓ4ˆð 	�‰�uÔØ×Ñœ˜W› qÔ)ð 	�‰‹�bÑ×"Ñ"¤3§;¢;£=Ô1ð 	�‰�uÔØ×Ñœ˜W› qÕ)r4   c                 óþ  ^• [        5       m[        R                  " S/S9nU4S jUl        TR                  n[
        R                  " S[
        R                  5      nUR                  U5      nUR                  U5      n " S S[        5      nUR                  5       S   R                  [        R                  " U" 5       5      5        [        R                  " U R!                  XF5      U R!                  XV5      /5      $ )z›
If the result of a request is an error response, the Deferreds for all
concurrently issued requests associated with that result fire with the
L{Failure}.
rñ   rÒ   c                  ó   >• T $ rI   r5   ró   s   €r1   rà   Ú>ResolverTests.test_multipleConcurrentFailure.<locals>.<lambda>µ  rõ   r4   rö   c                   ó   • \ rS rSrSrg)ÚGResolverTests.test_multipleConcurrentFailure.<locals>.ExpectedExceptioni¼  r5   N©r6   r7   r8   r9   r:   r5   r4   r1   ÚExpectedExceptionr  ¼  ó   † Úr4   r   râ   )rF   r   rs   ræ   rK   r   rÿ   r'   rU   Ú	Exceptionr  rê   r   ÚFailurer   r  ÚassertFailure)r*   ra   rK   rU   r  r  r   rß   s          @r1   Útest_multipleConcurrentFailureÚ,ResolverTests.test_multipleConcurrentFailure­  sË   ø€ ô +Ó,ˆÜ—?’?Ð,?Ð+@ÑAˆÜ&6ˆÔ#Ø×"Ñ"ˆä—	’	Ð,¬c¯e©eÓ4ˆØ—n‘n UÓ+ˆØ—~‘~ eÓ,ˆô	¤	ô 	ð 	�‰‹�bÑ×!Ñ!¤'§/¢/Ñ2CÓ2EÓ"FÔGä×"Ò"à×"Ñ" ;ÓBØ×"Ñ" <ÓCðó
ð 	
r4   c                 óT  • [         R                  " S/S9nUR                  5       nUR                  5       nU R                  UR                  5        U R                  UR                  5        U R                  UR                  R                  5       R                  UR                  R                  5       R                  5        [        R                  " [        R                  " UR                  R                  5      [        R                  " UR                  R                  5      /5      $ )z›
L{client.Resolver._connectedProtocol} returns a new
L{DNSDatagramProtocol} connected to a new address with a
cryptographically secure random port number.
rñ   rÒ   )r   rs   ræ   ÚassertIsNotNonerL   ÚassertNotEqualÚgetHostÚportr   r  ÚmaybeDeferredrB   )r*   ra   Ú
firstProtoÚsecondProtos       r1   Útest_connectedProtocolÚ$ResolverTests.test_connectedProtocolÈ  så   € ô —?’?Ð,?Ð+@ÑAˆØ×0Ñ0Ó2ˆ
Ø×1Ñ1Ó3ˆà×Ñ˜Z×1Ñ1Ô2Ø×Ñ˜[×2Ñ2Ô3Ø×ÑØ× Ñ ×(Ñ(Ó*×/Ñ/°×1FÑ1F×1NÑ1NÓ1P×1UÑ1Uô	
ô ×"Ò"ä×#Ò# J×$8Ñ$8×$FÑ$FÓGÜ×#Ò# K×$9Ñ$9×$GÑ$GÓHðó
ð 	
r4   c                 óÌ   • [         R                  " 5       n[        R                  " U R	                  5       US9nUR                  5       nU R                  UR                  U5        g)z¥
If a reactor instance is supplied to L{client.Resolver}
L{client.Resolver._connectedProtocol} should pass that reactor
to L{twisted.names.dns.DNSDatagramProtocol}.
r½   N)r   ÚMemoryReactorr   rs   r¿   ræ   re   rŽ   )r*   r�   ra   Úprotos       r1   Ú)test_resolverUsesOnlyParameterizedReactorÚ7ResolverTests.test_resolverUsesOnlyParameterizedReactorß  sH   € ô ×)Ò)Ó+ˆÜ—?’?¨$¯+©+«-ÀÑIˆØ×+Ñ+Ó-ˆØ�‰�e—n‘n gÕ.r4   c                 ó6  ^• [         R                  " S/S9n/ m " U4S jS5      nX!l        UR                  [        R
                  " S5      5        UR                  [        R
                  " S5      5        U R                  [        [        T5      5      S5        g)	zŸ
L{client.Resolver._connectedProtocol} is called once each time a UDP
request needs to be issued and the resulting protocol instance is used
for that request.
rñ   rÒ   c                   ó,   >• \ rS rSrS rSU 4S jjrSrg)Ú:ResolverTests.test_differentProtocol.<locals>.FakeProtocolió  c                 ó"   • [        5       U l        g rI   ©r<   rL   rA   s    r1   rM   ÚCResolverTests.test_differentProtocol.<locals>.FakeProtocol.__init__ô  ó   € Ü!)£�•r4   Nc                 óx   >• TR                  U 5        [        R                  " [        R                  " 5       5      $ rI   )rR   r   r)   r   r  )r*   r    rU   r,   rS   Ú	protocolss        €r1   rU   Ú@ResolverTests.test_differentProtocol.<locals>.FakeProtocol.query÷  s&   ø€ Ø× Ñ  Ô&Ü—}’}¤S§[¢[£]Ó3Ð3r4   ©rL   rX   ©r6   r7   r8   r9   rM   rU   r:   )r>  s   €r1   ÚFakeProtocolr8  ó  s   ø† ò,÷4ò 4r4   rB  rö   r  rã   N)	r   rs   ræ   rU   r   rÿ   rt   ru   Úset)r*   ra   rB  r>  s      @r1   Útest_differentProtocolÚ$ResolverTests.test_differentProtocolê  ss   ø€ ô —?’?Ð,?Ð+@ÑAˆØˆ	÷	4ô 	4ð '3Ô#Ø�‰”s—y’yÐ!3Ó4Ô5Ø�‰”s—y’yÐ!3Ó4Ô5Ø×ÑœœS ›^Ó,¨aÕ0r4   c                 ó8  • [         R                  " 5       n[        R                  " S/US9nUR	                  [
        R                  " S5      5        UR                  R                  5       u  u  p4UR                  5       R                  nU R                  SU5        g)z,
If the resolver is ipv6, open a ipv6 port.
rÜ   ©r¢   r�   rö   z::N)r   r2  r   rs   rU   r   rÿ   ÚudpPortsÚitemsr*  Úhostrt   )r*   Úfakera   r3  rL   rÞ   s         r1   Útest_ipv6ResolverÚResolverTests.test_ipv6Resolver   sv   € ô
 ×&Ò&Ó(ˆÜ—?’?¨K¨=À$ÑGˆØ�‰”s—y’yÐ!3Ó4Ô5Ø#Ÿ}™}×2Ñ2Ó4ÑÑ	ˆ%Ø×%Ñ%Ó'×,Ñ,ˆ	Ø×Ñ˜˜yÕ)r4   c                 óÎ   ^• / m " U4S jS5      n[         R                  " S/S9nU" 5       Ul        UR                  5         U R	                  [        [        T5      5      S5        g)z‰
If a port number is initially selected which cannot be bound, the
L{CannotListenError} is handled and another port number is attempted.
c                   ó"   >• \ rS rSrU 4S jrSrg)Ú6ResolverTests.test_disallowedPort.<locals>.FakeReactori  c                 ó`   >• TR                  U5        [        T5      S:X  a  [        S US 5      eg )Nrp   )rR   ru   r   ©r*   r+  ÚargsÚkwargsÚportss       €r1   Ú	listenUDPÚ@ResolverTests.test_disallowedPort.<locals>.FakeReactor.listenUDP  s.   ø€ Ø—‘˜TÔ"Ü�u“: “?Ü+¨D°$¸Ó=Ð=ð #r4   r5   N©r6   r7   r8   r9   rV  r:   ©rU  s   €r1   ÚFakeReactorrP    s   ø† ÷>ð >r4   rZ  rñ   rÒ   rã   N)r   rs   rŽ   ræ   rt   ru   rC  ©r*   rZ  ra   rU  s      @r1   Útest_disallowedPortÚ!ResolverTests.test_disallowedPort  sV   ø€ ð
 ˆ÷	>ô 	>ô —?’?Ð,?Ð+@ÑAˆÙ'›MˆÔà×#Ñ#Ô%Ø×ÑœœS ›Z›¨!Õ,r4   c                 óÜ   ^• / m " U4S jS5      n[         R                  " S/S9nU" 5       Ul        U R                  [        UR
                  5        U R                  [        T5      S5        g)zw
If port numbers that cannot be bound are repeatedly selected,
L{resolver._connectedProtocol} will give up eventually.
c                   ó"   >• \ rS rSrU 4S jrSrg)Ú@ResolverTests.test_disallowedPortRepeatedly.<locals>.FakeReactori&  c                 ó@   >• TR                  U5        [        S US 5      erI   )rR   r   rR  s       €r1   rV  ÚJResolverTests.test_disallowedPortRepeatedly.<locals>.FakeReactor.listenUDP'  s   ø€ Ø—‘˜TÔ"Ü'¨¨d°DÓ9Ð9r4   r5   NrX  rY  s   €r1   rZ  r`  &  s   ø† ÷:ð :r4   rZ  rñ   rÒ   iè  N)r   rs   rŽ   r¸   r   ræ   rt   ru   r[  s      @r1   Útest_disallowedPortRepeatedlyÚ+ResolverTests.test_disallowedPortRepeatedly  s]   ø€ ð
 ˆ÷	:ô 	:ô
 —?’?Ð,?Ð+@ÑAˆÙ'›MˆÔà×ÑÔ+¨X×-HÑ-HÔIà×Ñœ˜U› TÕ*r4   c                 óD  ^• / m " U4S jS5      n[         R                  " S/S9nU" 5       Ul        U R                  [        UR
                  5      nU R                  UR                  R                  [        R                  5        U R                  [        T5      S5        g)zN
If the process is out of files, L{Resolver._connectedProtocol}
will give up.
c                   ó"   >• \ rS rSrU 4S jrSrg)Ú5ResolverTests.test_runOutOfFiles.<locals>.FakeReactori9  c                 ór   >• TR                  U5        [        [        R                  S5      n[	        S X5      e)NzOut of files :()rR   ÚOSErrorÚerrnoÚEMFILEr   )r*   r+  rS  rT  ÚerrrU  s        €r1   rV  Ú?ResolverTests.test_runOutOfFiles.<locals>.FakeReactor.listenUDP:  s-   ø€ Ø—‘˜TÔ"ÜœeŸl™lÐ,=Ó>�Ü'¨¨dÓ8Ð8r4   r5   NrX  rY  s   €r1   rZ  rg  9  s   ø† ÷9ð 9r4   rZ  rñ   rÒ   rp   N)r   rs   rŽ   r¸   r   ræ   rt   ÚsocketErrorrj  rk  ru   )r*   rZ  ra   ÚexcrU  s       @r1   Útest_runOutOfFilesÚ ResolverTests.test_runOutOfFiles2  s   ø€ ð
 ˆ÷	9ô 	9ô —?’?Ð,?Ð+@ÑAˆÙ'›MˆÔà×ÑÔ 1°8×3NÑ3NÓOˆð 	×Ñ˜Ÿ™×.Ñ.´·±Ô=Ø×Ñœ˜U› QÕ'r4   c                 ó¨  ^^• [         R                  " S/S9n/ m[        R                  " [        R
                  " [        S5      5      5      [        R                  " [        R                  " 5       5      /m " UU4S jS5      nX!l
        UR                  [        R                  " S5      5        U R                  [        [        T5      5      S5        g)zd
When a query issued by L{client.Resolver.query} times out, the retry
uses a new protocol instance.
rñ   rÒ   Nc                   ó.   >• \ rS rSrS rSU U4S jjrSrg)ÚFResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocoliT  c                 ó"   • [        5       U l        g rI   r:  rA   s    r1   rM   ÚOResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocol.__init__U  r<  r4   Nc                 óH   >• TR                  U 5        TR                  S5      $ ©Nr   ©rR   r  ©r*   r    rU   r,   rS   r>  r.   s        €€r1   rU   ÚLResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocol.queryX  ó   ø€ Ø× Ñ  Ô&Ø—{‘{ 1“~Ð%r4   r@  rX   rA  ©r>  r.   s   €€r1   rB  rt  T  ó   ø† ò,÷&ó &r4   rB  rö   rã   )r   rs   r   Úfailr   r#  r   r)   r   r  ræ   rU   rÿ   rt   ru   rC  )r*   ra   rB  r>  r.   s      @@r1   Ú"test_differentProtocolAfterTimeoutÚ0ResolverTests.test_differentProtocolAfterTimeoutH  s‘   ù€ ô
 —?’?Ð,?Ð+@ÑAˆØˆ	ä�JŠJ”w—’Ô';¸DÓ'AÓBÓCÜ�MŠMœ#Ÿ+š+›-Ó(ð
ˆ÷
	&õ 	&ð '3Ô#Ø�‰”s—y’yÐ!3Ó4Ô5Ø×ÑœœS ›^Ó,¨aÕ0r4   c                 óº  ^^• [         R                  " S/S9n/ m[        R                  " 5       m " UU4S jS5      nX!l        UR                  [        R                  " S5      5        U R                  TS   R                  R                  5        TR                  [        R                  " 5       5        U R                  TS   R                  R                  5        g)z�
After the L{Deferred} returned by L{DNSDatagramProtocol.query} is
called back, the L{DNSDatagramProtocol} is disconnected from its
transport.
rñ   rÒ   c                   ó.   >• \ rS rSrS rSU U4S jjrSrg)Ú9ResolverTests.test_protocolShutDown.<locals>.FakeProtocolij  c                 ó"   • [        5       U l        g rI   r:  rA   s    r1   rM   ÚBResolverTests.test_protocolShutDown.<locals>.FakeProtocol.__init__k  r<  r4   Nc                 ó*   >• TR                  U 5        T$ rI   ©rR   ©r*   r    rU   r,   rS   r>  rT   s        €€r1   rU   Ú?ResolverTests.test_protocolShutDown.<locals>.FakeProtocol.queryn  ó   ø€ Ø× Ñ  Ô&Ø�r4   r@  rX   rA  ©r>  rT   s   €€r1   rB  r„  j  ó   ø† ò,÷ó r4   rB  rö   r   N)r   rs   r   rQ   ræ   rU   r   rÿ   ÚassertFalserL   r@   rë   r  r_   )r*   ra   rB  r>  rT   s      @@r1   Útest_protocolShutDownÚ#ResolverTests.test_protocolShutDown`  sœ   ù€ ô —?’?Ð,?Ð+@ÑAˆØˆ	Ü—’Ó!ˆ÷	õ 	ð '3Ô#Ø�‰”s—y’yÐ!3Ó4Ô5à×Ñ˜ 1™×/Ñ/×<Ñ<Ô=Ø�‰œŸš›Ô&Ø�‰˜	 !™×.Ñ.×;Ñ;Õ<r4   c                 ó$  ^^• [         R                  " S/S9n/ m[        R                  " 5       n[        R                  " [
        R                  " [        S5      5      5      U/m " UU4S jS5      nX1l        UR                  [        R                  " S5      5        U R                  TS   R                  R                  5        UR                  [        R                   " 5       5        U R#                  TS   R                  R                  5        g)z¦
The L{DNSDatagramProtocol} created when an interim timeout occurs is
also disconnected from its transport after the Deferred returned by its
query method completes.
rñ   rÒ   Nc                   ó.   >• \ rS rSrS rSU U4S jjrSrg)ÚEResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocoli„  c                 ó"   • [        5       U l        g rI   r:  rA   s    r1   rM   ÚNResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocol.__init__…  r<  r4   Nc                 óH   >• TR                  U 5        TR                  S5      $ rx  ry  rz  s        €€r1   rU   ÚKResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocol.queryˆ  r|  r4   r@  rX   rA  r}  s   €€r1   rB  r“  „  r~  r4   rB  rö   rp   )r   rs   r   rQ   r  r   r#  r   ræ   rU   r   rÿ   rŽ  rL   r@   rë   r  r_   )r*   ra   rT   rB  r>  r.   s       @@r1   Ú!test_protocolShutDownAfterTimeoutÚ/ResolverTests.test_protocolShutDownAfterTimeouty  s¾   ù€ ô —?’?Ð,?Ð+@ÑAˆØˆ	Ü—’Ó!ˆÜ—:’:œgŸošoÔ.BÀ4Ó.HÓIÓJÈFÐSˆ÷	&õ 	&ð '3Ô#Ø�‰”s—y’yÐ!3Ó4Ô5à×Ñ˜ 1™×/Ñ/×<Ñ<Ô=Ø�‰œŸš›Ô&Ø�‰˜	 !™×.Ñ.×;Ñ;Õ<r4   c                 ó  ^^•  " S S[         5      n[        R                  " S/S9n/ m[        R                  " 5       m " UU4S jS5      nX2l        UR                  [        R                  " S5      5      nU R                  TS   R                  R                  5        TR                  [        R                  " U" 5       5      5        U R                  TS   R                  R                  5        U R!                  XA5      $ )	z˜
If the L{Deferred} returned by L{DNSDatagramProtocol.query} fires with
a failure, the L{DNSDatagramProtocol} is still disconnected from its
transport.
c                   ó   • \ rS rSrSrg)ÚJResolverTests.test_protocolShutDownAfterFailure.<locals>.ExpectedExceptioniš  r5   Nr  r5   r4   r1   r   rœ  š  r!  r4   r   rñ   rÒ   c                   ó.   >• \ rS rSrS rSU U4S jjrSrg)ÚEResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocoli¡  c                 ó"   • [        5       U l        g rI   r:  rA   s    r1   rM   ÚNResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocol.__init__¢  r<  r4   Nc                 ó*   >• TR                  U 5        T$ rI   rˆ  r‰  s        €€r1   rU   ÚKResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocol.query¥  r‹  r4   r@  rX   rA  rŒ  s   €€r1   rB  rž  ¡  r�  r4   rB  rö   r   )r"  r   rs   r   rQ   ræ   rU   r   rÿ   rŽ  rL   r@   rê   r   r#  r_   r$  )r*   r   ra   rB  rí   r>  rT   s        @@r1   Ú!test_protocolShutDownAfterFailureÚ/ResolverTests.test_protocolShutDownAfterFailure“  sÂ   ù€ ô	¤	ô 	ô —?’?Ð,?Ð+@ÑAˆØˆ	Ü—’Ó!ˆ÷	õ 	ð '3Ô#Ø—n‘n¤S§Y¢YÐ/AÓ%BÓCˆà×Ñ˜ 1™×/Ñ/×<Ñ<Ô=Ø�‰”w—’Ñ'8Ó':Ó;Ô<Ø�‰˜	 !™×.Ñ.×;Ñ;Ô<à×!Ñ! +ÓAÐAr4   c                 ó  • [         R                  " S/S9nUR                  R                  S5      nUR	                  S5        U R                  X!R                  5        UR                  S5        U R                  X!R                  5        g)zt
When a TCP DNS protocol associated with a Resolver disconnects, it is
removed from the Resolver's connection list.
rñ   rÒ   N)	r   rs   ÚfactoryÚbuildProtocolÚmakeConnectionÚassertInÚconnectionsÚconnectionLostÚassertNotIn)r*   ra   rß   s      r1   Ú(test_tcpDisconnectRemovesFromConnectionsÚ6ResolverTests.test_tcpDisconnectRemovesFromConnections²  sp   € ô
 —?’?Ð,?Ð+@ÑAˆØ×#Ñ#×1Ñ1°$Ó7ˆØ×Ñ Ô%Ø�‰�h× 4Ñ 4Ô5ð 	×Ñ Ô%Ø×Ñ˜×#7Ñ#7Õ8r4   c                 óz  • [         R                  " 5       n[        R                  " S/US9nUR	                  [
        R                  " S5      5      nUR                  S   u  pEpgn " S S[        5      n	UR                  UR                  S   [        R                  " U	" 5       5      5        U R                  X95        g)z¶
The deferred returned by L{client.Resolver.queryTCP} will
errback when the TCP connection attempt fails. The reason for
the connection failure is passed as the argument to errback.
©z192.0.2.100rž   rG  rË   r   c                   ó   • \ rS rSrSrg)ÚVResolverTests.test_singleTCPQueryErrbackOnConnectionFailure.<locals>.SentinelExceptioniÌ  r5   Nr  r5   r4   r1   ÚSentinelExceptionr²  Ì  r!  r4   r³  N)r   r2  r   rs   ÚqueryTCPr   rÿ   Ú
tcpClientsr"  ÚclientConnectionFailedÚ
connectorsr   r#  ÚfailureResultOf)
r*   r�   ra   r  rJ  r+  r¦  r,   ÚbindAddressr³  s
             r1   Ú-test_singleTCPQueryErrbackOnConnectionFailureÚ;ResolverTests.test_singleTCPQueryErrbackOnConnectionFailureÀ  sŸ   € ô  ×-Ò-Ó/ˆÜ—?’?Ð,?Ð+@È'ÑRˆà×ÑœcŸiši¨Ó6Ó7ˆØ4;×4FÑ4FÀqÑ4IÑ1ˆ�G kô	¤	ô 	ð 	×&Ñ&Ø×Ñ˜qÑ!¤7§?¢?Ñ3DÓ3FÓ#Gô	
ð 	×Ñ˜QÕ2r4   c                 ó  • [         R                  " 5       n[        R                  " S/US9nUR	                  [
        R                  " S5      5      nUR	                  [
        R                  " S5      5      nUR                  S   u  pVpxn	 " S S[        5      n
UR                  UR                  S   [        R                  " U
" 5       5      5        U R                  X:5      nU R                  XJ5      nU R                  X¼5        g)	zy
All pending L{resolver.queryTCP} C{deferred}s will C{errback}
with the same C{Failure} if the connection attempt fails.
r°  rG  rË   zexample.netr   c                   ó   • \ rS rSrSrg)ÚXResolverTests.test_multipleTCPQueryErrbackOnConnectionFailure.<locals>.SentinelExceptioniá  r5   Nr  r5   r4   r1   r³  r¾  á  r!  r4   r³  N)r   r2  r   rs   r´  r   rÿ   rµ  r"  r¶  r·  r   r#  r¸  re   )r*   r�   ra   Úd1Úd2rJ  r+  r¦  r,   r¹  r³  Úf1Úf2s                r1   Ú/test_multipleTCPQueryErrbackOnConnectionFailureÚ=ResolverTests.test_multipleTCPQueryErrbackOnConnectionFailureÕ  sÖ   € ô
  ×-Ò-Ó/ˆÜ—?’?Ð,?Ð+@È'ÑRˆà×ÑœsŸyšy¨Ó7Ó8ˆØ×ÑœsŸyšy¨Ó7Ó8ˆØ4;×4FÑ4FÀqÑ4IÑ1ˆ�G kô	¤	ô 	ð 	×&Ñ&Ø×Ñ˜qÑ!¤7§?¢?Ñ3DÓ3FÓ#Gô	
ð ×!Ñ! "Ó8ˆØ×!Ñ! "Ó8ˆØ�‰�bÕr4   c                 óŽ  ^^• [         R                  " 5       n[        R                  " S/US9m[        R
                  " S5      mTR                  T5      nUU4S jnUR                  U5        U R                  [        UR                  5      S5        U R                  [        UR                  5      S5        UR                  S   u  pEpgn[        R                  " [        5       5      n	UR                  UR                  S   U	5        U R                  [        UR                  5      S5        U R                  [        UR                  5      S5        U R!                  U5        [        R                  " [        5       5      n
UR                  UR                  S   U
5        U R#                  U[        5      nU R%                  Xº5        g)	zc
An errback on the deferred returned by
L{client.Resolver.queryTCP} may trigger another TCP query.
)r   iE'  rG  rË   c                 óP   >• U R                  [        5        TR                  T5      $ rI   )Útrapr   r´  )ÚeÚqra   s    €€r1   ÚreissueÚOResolverTests.test_reentrantTCPQueryErrbackOnConnectionFailure.<locals>.reissueú  s!   ø€ Ø�F‰FÔ)Ô*Ø×$Ñ$ QÓ'Ð'r4   rp   r   rã   N)r   r2  r   rs   r   rÿ   r´  Ú
addErrbackrt   ru   rµ  r·  r   r#  r   r¶  ÚassertNoResultr¸  re   )r*   r�   r  rÊ  rJ  r+  r¦  r,   r¹  rÁ  rÂ  ÚfrÉ  ra   s               @@r1   Ú0test_reentrantTCPQueryErrbackOnConnectionFailureÚ>ResolverTests.test_reentrantTCPQueryErrbackOnConnectionFailureì  sl  ù€ ô
  ×-Ò-Ó/ˆÜ—?’?Ð,@Ð+AÈ7ÑSˆä�IŠI�mÓ$ˆð ×Ñ˜aÓ ˆö	(ð 	
�‰�WÔà×Ñœ˜W×/Ñ/Ó0°!Ô4Ø×Ñœ˜W×/Ñ/Ó0°!Ô4à4;×4FÑ4FÀqÑ4IÑ1ˆ�G kô �_Š_Ô3Ó5Ó6ˆØ×&Ñ& w×'9Ñ'9¸!Ñ'<¸bÔAð 	×Ñœ˜W×/Ñ/Ó0°!Ô4Ø×Ñœ˜W×/Ñ/Ó0°!Ô4à×Ñ˜AÔô �_Š_Ô3Ó5Ó6ˆØ×&Ñ& w×'9Ñ'9¸!Ñ'<¸bÔAð × Ñ  Ô$:Ó;ˆØ�‰�aÕr4   c                 ó6  • [         R                  " 5       n[        R                  " S/US9nUR	                  [
        R                  " S5      5      nUR                  S   u  pEpgnUR                  n	U R                  [        U	5      S5         " S S[        5      n
UR                  UR                  S   [        R                  " U
" 5       5      5        U R!                  X:5        U R#                  UR                  U	5        U R                  [        U	5      S5        g)	z‹
When the TCP connection attempt fails, the
L{client.Resolver.pending} list is emptied in place. It is not
replaced with a new empty list.
r°  rG  rË   r   rp   c                   ó   • \ rS rSrSrg)ÚJResolverTests.test_pendingEmptiedInPlaceOnError.<locals>.SentinelExceptioni'  r5   Nr  r5   r4   r1   r³  rÓ  '  r!  r4   r³  N)r   r2  r   rs   r´  r   rÿ   rµ  Úpendingrt   ru   r"  r¶  r·  r   r#  r¸  re   )r*   r�   ra   r  rJ  r+  r¦  r,   r¹  Ú
prePendingr³  s              r1   Ú!test_pendingEmptiedInPlaceOnErrorÚ/ResolverTests.test_pendingEmptiedInPlaceOnError  sæ   € ô  ×-Ò-Ó/ˆÜ—?’?Ð,?Ð+@È'ÑRˆà×ÑœcŸiši¨Ó6Ó7ˆà4;×4FÑ4FÀqÑ4IÑ1ˆ�G kà×%Ñ%ˆ
Ø×Ñœ˜Z›¨!Ô,ô	¤	ô 	ð 	×&Ñ&Ø×Ñ˜qÑ!¤7§?¢?Ñ3DÓ3FÓ#Gô	
ð 	×Ñ˜QÔ2Ø�‰�h×&Ñ&¨
Ô3Ø×Ñœ˜Z›¨!Õ,r4   r5   N)"r6   r7   r8   r9   rD   r²   rµ   rº   rÀ   rÏ   rÕ   rÙ   rî   r	  r  r  r%  r/  r4  rD  rL  r\  rc  rp  r€  r�  r˜  r£  r­  rº  rÃ  rÏ  rÖ  r:   r5   r4   r1   r¯   r¯   í   s˜   † ñò(ò0ò7òCò+ò$/ò.ò òD#òJ*ò6*ò0
ò6
ò.	/ò1ò,
*ò-ò&+ò&(ò,1ò0=ò2=ò4Bò>9ò3ò*ò.)õV-r4   r¯   c                   óÂ   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r Sr!g )!ÚClientTestsi3  c                 óF   • [        5       [        l        SU l        SU l        g)z*
Replace the resolver with a FakeResolver
ó   example.comr   N)r   r   ÚtheResolverÚhostnameÚhostnameForGetHostByNamerA   s    r1   ÚsetUpÚClientTests.setUp4  s   € ô *›^ŒÔØ&ˆŒØ(<ˆÕ%r4   c                 ó   • S[         l        g)zX
By setting the resolver to None, it will be recreated next time a name
lookup is done.
N)r   rÜ  rA   s    r1   ÚtearDownÚClientTests.tearDown<  s   € ð
 "ŒÕr4   c                 ó°   • Uu  p4nUS   nU R                  UR                  R                  U R                  5        U R                  UR                  U5        g)zD
Verify that the result is the same query type as what is expected.
r   N)rt   r"   rÝ  r#   )r*   r.   r+   r  r/   r0   rT   s          r1   ÚcheckResultÚClientTests.checkResultC  sI   € ð *1Ñ&ˆ˜JØ˜‘ˆØ×Ñ˜Ÿ™×)Ñ)¨4¯=©=Ô9Ø×Ñ˜Ÿ™ eÕ,r4   c                 ó(   • U R                  US5        g)zB
Test that the getHostByName query returns the 127.0.0.1 address.
r   Nrø   ©r*   rT   s     r1   ÚcheckGetHostByNameÚClientTests.checkGetHostByNameL  s   € ð 	×Ñ˜ Õ-r4   c                 ó|   • [         R                  " U R                  5      nUR                  U R                  5        U$ )z=
do a getHostByName of a value that should return 127.0.0.1.
)r   ÚgetHostByNamerÞ  ré   ré  ©r*   r  s     r1   Útest_getHostByNameÚClientTests.test_getHostByNameR  s1   € ô × Ò  ×!>Ñ!>Ó?ˆØ	�‰�d×-Ñ-Ô.Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ )zÀ
Do a lookup and test that the resolver will issue the correct type of
query type. We do this by checking that FakeResolver returns a result
record with the same query type as what we issued.
)r   ÚlookupAddressrÝ  ré   rå  r   r'   rí  s     r1   Útest_lookupAddressÚClientTests.test_lookupAddressZ  s5   € ô × Ò  §¡Ó/ˆØ	�‰�d×&Ñ&¬¯©Ô.Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ ©z
See L{test_lookupAddress}
)r   ÚlookupIPV6AddressrÝ  ré   rå  r   ÚAAAArí  s     r1   Útest_lookupIPV6AddressÚ"ClientTests.test_lookupIPV6Addressd  s5   € ô ×$Ò$ T§]¡]Ó3ˆØ	�‰�d×&Ñ&¬¯©Ô1Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupAddress6rÝ  ré   rå  r   r  rí  s     r1   Útest_lookupAddress6ÚClientTests.test_lookupAddress6l  s5   € ô ×!Ò! $§-¡-Ó0ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupNameserversrÝ  ré   rå  r   ÚNSrí  s     r1   Útest_lookupNameserversÚ"ClientTests.test_lookupNameserverst  s5   € ô ×$Ò$ T§]¡]Ó3ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupCanonicalNamerÝ  ré   rå  r   ÚCNAMErí  s     r1   Útest_lookupCanonicalNameÚ$ClientTests.test_lookupCanonicalName|  s5   € ô ×&Ò& t§}¡}Ó5ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupAuthorityrÝ  ré   rå  r   ÚSOArí  s     r1   Útest_lookupAuthorityÚ ClientTests.test_lookupAuthority„  s5   € ô ×"Ò" 4§=¡=Ó1ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupMailBoxrÝ  ré   rå  r   ÚMBrí  s     r1   Útest_lookupMailBoxÚClientTests.test_lookupMailBoxŒ  s5   € ô × Ò  §¡Ó/ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupMailGrouprÝ  ré   rå  r   ÚMGrí  s     r1   Útest_lookupMailGroupÚ ClientTests.test_lookupMailGroup”  s5   € ô ×"Ò" 4§=¡=Ó1ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupMailRenamerÝ  ré   rå  r   ÚMRrí  s     r1   Útest_lookupMailRenameÚ!ClientTests.test_lookupMailRenameœ  s5   € ô ×#Ò# D§M¡MÓ2ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   Ú
lookupNullrÝ  ré   rå  r   ÚNULLrí  s     r1   Útest_lookupNullÚClientTests.test_lookupNull¤  ó5   € ô ×Ò˜dŸm™mÓ,ˆØ	�‰�d×&Ñ&¬¯©Ô1Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupWellKnownServicesrÝ  ré   rå  r   ÚWKSrí  s     r1   Útest_lookupWellKnownServicesÚ(ClientTests.test_lookupWellKnownServices¬  s5   € ô ×*Ò*¨4¯=©=Ó9ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupPointerrÝ  ré   rå  r   ÚPTRrí  s     r1   Útest_lookupPointerÚClientTests.test_lookupPointer´  ó5   € ô × Ò  §¡Ó/ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupHostInforÝ  ré   rå  r   ÚHINFOrí  s     r1   Útest_lookupHostInfoÚClientTests.test_lookupHostInfo¼  s5   € ô ×!Ò! $§-¡-Ó0ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupMailboxInforÝ  ré   rå  r   ÚMINFOrí  s     r1   Útest_lookupMailboxInfoÚ"ClientTests.test_lookupMailboxInfoÄ  ó5   € ô ×$Ò$ T§]¡]Ó3ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupMailExchangerÝ  ré   rå  r   ÚMXrí  s     r1   Útest_lookupMailExchangeÚ#ClientTests.test_lookupMailExchangeÌ  s5   € ô ×%Ò% d§m¡mÓ4ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   Ú
lookupTextrÝ  ré   rå  r   ÚTXTrí  s     r1   Útest_lookupTextÚClientTests.test_lookupTextÔ  s5   € ô ×Ò˜dŸm™mÓ,ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupSenderPolicyrÝ  ré   rå  r   ÚSPFrí  s     r1   Útest_lookupSenderPolicyÚ#ClientTests.test_lookupSenderPolicyÜ  s5   € ô ×%Ò% d§m¡mÓ4ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupResponsibilityrÝ  ré   rå  r   ÚRPrí  s     r1   Útest_lookupResponsibilityÚ%ClientTests.test_lookupResponsibilityä  s5   € ô ×'Ò'¨¯©Ó6ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupAFSDatabaserÝ  ré   rå  r   ÚAFSDBrí  s     r1   Útest_lookupAFSDatabaseÚ"ClientTests.test_lookupAFSDatabaseì  r7  r4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupServicerÝ  ré   rå  r   ÚSRVrí  s     r1   Útest_lookupServiceÚClientTests.test_lookupServiceô  r,  r4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   Ú
lookupZonerÝ  ré   rå  r   ÚAXFRrí  s     r1   Útest_lookupZoneÚClientTests.test_lookupZoneü  r!  r4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupAllRecordsrÝ  ré   rå  r   ÚALL_RECORDSrí  s     r1   Útest_lookupAllRecordsÚ!ClientTests.test_lookupAllRecords  s5   € ô ×#Ò# D§M¡MÓ2ˆØ	�‰�d×&Ñ&¬¯©Ô8Øˆr4   c                 óš   • [         R                  " U R                  5      nUR                  U R                  [
        R                  5        U$ rõ  )r   ÚlookupNamingAuthorityPointerrÝ  ré   rå  r   ÚNAPTRrí  s     r1   Ú!test_lookupNamingAuthorityPointerÚ-ClientTests.test_lookupNamingAuthorityPointer  s5   € ô ×/Ò/°·±Ó>ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr4   c                 óä   • [         R                  " U R                  [         R                  5      n[        R
                  " U5      nUR                  U R                  [         R                  5        U$ )zÝ
L{client.query} accepts a L{dns.Query} instance and dispatches
it to L{client.theResolver}.C{query}, which in turn dispatches
to an appropriate C{lookup*} method of L{client.theResolver},
based on the L{dns.Query} type.
)r   rÿ   rÝ  r'   r   rU   ré   rå  )r*   rÉ  r  s      r1   Ú
test_queryÚClientTests.test_query  sF   € ô �IŠI�d—m‘m¤S§U¡UÓ+ˆÜ�LŠL˜‹OˆØ	�‰�d×&Ñ&¬¯©Ô.Øˆr4   )rÝ  rÞ  N)"r6   r7   r8   r9   rß  râ  rå  ré  rî  rò  rø  rü  r  r  r  r  r  r  r  r%  r*  r0  r5  r;  r@  rE  rJ  rO  rT  rY  r^  rc  rf  r:   r5   r4   r1   rÙ  rÙ  3  s“   † ò=ò"ò-ò.òòòòòòòòòòòòòòòòòòòòòòòòõ
r4   rÙ  c                   óN   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)ÚFilterAnswersTestsi!  zp
Test L{twisted.names.client.Resolver.filterAnswers}'s handling of various
error conditions it might encounter.
c                 ó8   • [         R                  " S/S9U l        g )N)z0.0.0.0r   rÒ   )r   rs   ra   rA   s    r1   rß  ÚFilterAnswersTests.setUp'  s   € ô Ÿš°Ð0@ÑAˆ�r4   c                 óþ   ^ ^• [         R                  " SS9mTR                  S5        UU 4S jnUT R                  l        T R                  R                  T5      nUR                  T R                  S/S/S/45        U$ )zN
Test that a truncated message results in an equivalent request made via
TCP.
T)ÚtruncrÛ  c                 óÂ   >• TR                  U TR                  5        [        R                  " 5       nS/Ul        S/Ul        S/Ul        [        R                  " U5      $ )Nrü   r/   r0   )	rt   rK   r   r  r  r/   r0   r   r)   )rK   r  Úmr*   s     €€r1   r´  Ú:FilterAnswersTests.test_truncatedMessage.<locals>.queryTCP4  sO   ø€ Ø×Ñ˜W a§i¡iÔ0Ü—{’{“}ˆHØ (˜zˆHÔØ"- ˆHÔØ#/ .ˆHÔÜ—=’= Ó*Ð*r4   rü   r/   r0   )r   r  ÚaddQueryra   r´  ÚfilterAnswersré   rt   )r*   r´  r  ro  s   `  @r1   Útest_truncatedMessageÚ(FilterAnswersTests.test_truncatedMessage,  sl   ù€ ô
 �KŠK˜dÑ#ˆØ	�
‰
�>Ô"ö	+ð "*ˆ�‰ÔØ�M‰M×'Ñ'¨Ó*ˆØ	�‰�d×&Ñ&¨(¨°k°]À\ÀNÐ(SÔTØˆr4   c                 ó„   • [         R                  " US9nU R                  R                  U5      nUR	                  U5        g )N)ÚrCode)r   r  ra   rr  rÇ  )r*   Úrcodero  ro  rl  s        r1   Ú
_rcodeTestÚFilterAnswersTests._rcodeTestA  s/   € Ü�KŠK˜eÑ$ˆØ�m‰m×)Ñ)¨!Ó,ˆØ�‰��r4   c                 ó^   • U R                  [        R                  [        R                  5      $ )zm
Test that a message with a result code of C{EFORMAT} results in a
failure wrapped around L{DNSFormatError}.
)rx  r   ÚEFORMATr   ÚDNSFormatErrorrA   s    r1   Útest_formatErrorÚ#FilterAnswersTests.test_formatErrorF  s   € ð
 �‰œsŸ{™{¬E×,@Ñ,@ÓAÐAr4   c                 ó^   • U R                  [        R                  [        R                  5      $ )z@
Like L{test_formatError} but for C{ESERVER}/L{DNSServerError}.
)rx  r   ÚESERVERr   ÚDNSServerErrorrA   s    r1   Útest_serverErrorÚ#FilterAnswersTests.test_serverErrorM  s   € ð �‰œsŸ{™{¬E×,@Ñ,@ÓAÐAr4   c                 ó^   • U R                  [        R                  [        R                  5      $ )z<
Like L{test_formatError} but for C{ENAME}/L{DNSNameError}.
)rx  r   ÚENAMEr   ÚDNSNameErrorrA   s    r1   Útest_nameErrorÚ!FilterAnswersTests.test_nameErrorS  s   € ð �‰œsŸy™y¬%×*<Ñ*<Ó=Ð=r4   c                 ó^   • U R                  [        R                  [        R                  5      $ )zH
Like L{test_formatError} but for C{ENOTIMP}/L{DNSNotImplementedError}.
)rx  r   ÚENOTIMPr   ÚDNSNotImplementedErrorrA   s    r1   Útest_notImplementedErrorÚ+FilterAnswersTests.test_notImplementedErrorY  s   € ð �‰œsŸ{™{¬E×,HÑ,HÓIÐIr4   c                 ó^   • U R                  [        R                  [        R                  5      $ )zG
Like L{test_formatError} but for C{EREFUSED}/L{DNSQueryRefusedError}.
)rx  r   ÚEREFUSEDr   ÚDNSQueryRefusedErrorrA   s    r1   Útest_refusedErrorÚ$FilterAnswersTests.test_refusedError_  s   € ð �‰œsŸ|™|¬U×-GÑ-GÓHÐHr4   c                 ód   • U R                  [        R                  S-   [        R                  5      $ )zU
Like L{test_formatError} but for an unrecognized error code and
L{DNSUnknownError}.
rp   )rx  r   r�  r   ÚDNSUnknownErrorrA   s    r1   Útest_refusedErrorUnknownÚ+FilterAnswersTests.test_refusedErrorUnknowne  s$   € ð
 �‰œsŸ|™|¨aÑ/´×1FÑ1FÓGÐGr4   )ra   N)r6   r7   r8   r9   rD   rß  rs  rx  r}  r‚  r‡  rŒ  r‘  r•  r:   r5   r4   r1   ri  ri  !  s:   † ñò
Bò
ò*ò
BòBò>òJòIõHr4   ri  c                   ó*   • \ rS rSrS rSS jrS rSrg)ÚFakeDNSDatagramProtocolim  c                 ó0   • / U l         [        5       U l        g rI   rJ   rA   s    r1   rM   Ú FakeDNSDatagramProtocol.__init__n  rO   r4   Nc                 ó�   • U R                   R                  XX445        [        R                  " [        R
                  " U5      5      $ rI   )rK   rR   r   r  r   r   )r*   r    rK   r,   rS   s        r1   rU   ÚFakeDNSDatagramProtocol.queryr  s3   € Ø�‰×Ñ˜W¨wÐ;Ô<Ü�zŠzœ%×4Ò4°WÓ=Ó>Ð>r4   c                 ó   • g rI   r5   )r*   rS   s     r1   ÚremoveResendÚ$FakeDNSDatagramProtocol.removeResendv  s   € àr4   rW   rX   )r6   r7   r8   r9   rM   rU   rž  r:   r5   r4   r1   r˜  r˜  m  s   † ò$ô?õr4   r˜  c                   ó2   • \ rS rSrSr/ SQrS rS rS rSr	g)	ÚRetryLogicTestsi{  z=
Tests for query retrying implemented by L{client.Resolver}.
)z1.2.3.4z4.3.2.1za.b.c.dzz.y.x.wc                 ó$  ^• U R                    Vs/ s H  oS4PM     nn[        R                  " SUS9n[        5       mU4S jUl        UR                  S5      R                  U R                  5      R                  U R                  T5      $ s  snf )zê
When timeouts occur waiting for responses to queries, the next
configured server is issued the query.  When the query has been issued
to all configured servers, the timeout is increased and the process
begins again at the beginning.
rž   N)rŠ   r¢   c                  ó   >• T $ rI   r5   )r3  s   €r1   rà   Ú8RetryLogicTests.test_roundRobinBackoff.<locals>.<lambda>Œ  s   ø€ ¡ur4   rö   )
ÚtestServersr   rs   r˜  ræ   rñ  ré   Ú_cbRoundRobinBackoffrÌ  Ú_ebRoundRobinBackoff)r*   ÚxÚaddrsry   r3  s       @r1   Útest_roundRobinBackoffÚ&RetryLogicTests.test_roundRobinBackoff‚  s|   ø€ ð #'×"2Ò"2Ó3Ò"2˜Q�R“Ñ"2ˆÐ3Ü�OŠO 4°Ñ7ˆÜ'Ó)ˆÜ,ˆÔà�O‰OÐ.Ó/ß‰[˜×2Ñ2Ó3ß‰Z˜×1Ñ1°5Ó9ð	
ùò	 4s   �Bc                 ó&   • U R                  S5        g )Nz/Lookup address succeeded, should have timed out)r  rè  s     r1   r¦  Ú$RetryLogicTests._cbRoundRobinBackoff“  s   € Ø�	‰	ÐCÕDr4   c                 óö  • UR                   " [        R                  5        S H¸  nUR                  S [	        U R
                  5       nUR                  S [	        U R
                  5      2	 UR                  5         [        U R
                  5      nUR                  5         [        XE5       H-  u  u  pgp‰n
U R                  XjS45        U R                  Xƒ5        M/     Mº     U R                  UR                  5        g )N)rp   rä   é   é-   rž   )rÇ  r   ÚTimeoutErrorrK   ru   r¥  ÚsortÚlistÚziprt   rŽ  )r*   r   Ú	fakeProtoÚtÚtriesÚexpectedÚaddrrU   r,   rS   ÚexpectedAddrs              r1   r§  Ú$RetryLogicTests._ebRoundRobinBackoff–  sÐ   € Ø�Š”U×'Ñ'Ô(ó
  ˆAØ×%Ñ%Ð&=¬¨D×,<Ñ,<Ó(=Ð>ˆEØ×!Ñ!Ð"9¤C¨×(8Ñ(8Ó$9Ð"9Ð:à�J‰JŒLÜ˜D×,Ñ,Ó-ˆHØ�M‰MŒOä<?ÀÖ<PÑ8Ñ*�˜g¨LØ× Ñ  °bÐ'9Ô:Ø× Ñ  Ö,ó =Qñ  ð 	×Ñ˜×*Ñ*Õ+r4   r5   N)
r6   r7   r8   r9   rD   r¥  rª  r¦  r§  r:   r5   r4   r1   r¡  r¡  {  s   † ñò ?€Kò
ò"Eõ,r4   r¡  c                   ó   • \ rS rSrSrS rSrg)ÚThreadedResolverTestsi«  z'
Tests for L{client.ThreadedResolver}.
c                 ó   • [         R                  " 5         U R                  U R                  /S9nU R	                  US   S   S5        U R	                  US   S   [
        5        U R	                  [        U5      S5        g)z‹
L{client.ThreadedResolver} is deprecated.  Instantiating it emits a
deprecation warning pointing at the code that does the instantiation.
)ÚoffendingFunctionsr   Úmessagezztwisted.names.client.ThreadedResolver is deprecated since Twisted 9.0, use twisted.internet.base.ThreadedResolver instead.Úcategoryrp   N)r   ÚThreadedResolverÚflushWarningsÚtest_deprecatedrt   ÚDeprecationWarningru   )r*   Úwarningss     r1   rÄ  Ú%ThreadedResolverTests.test_deprecated°  s{   € ô
 	×ÒÔ!Ø×%Ñ%¸$×:NÑ:NÐ9OÐ%ÐPˆØ×ÑØ�Q‰K˜	Ñ"ðô	
ð 	×Ñ˜ !™ ZÑ0Ô2DÔEØ×Ñœ˜X›¨Õ*r4   r5   N)r6   r7   r8   r9   rD   rÄ  r:   r5   r4   r1   r½  r½  «  s   † ñõ+r4   r½  )6rD   rj  Úzope.interface.verifyr   r   Útwisted.internetr   Útwisted.internet.errorr   r   Útwisted.internet.interfacesr   Útwisted.internet.taskr	   Ú#twisted.internet.test.modulehelpersr
   Útwisted.namesr   r   r   r   r   Útwisted.names.commonr   Útwisted.names.errorr   Útwisted.names.testr   Útwisted.names.test.test_hostsr   Útwisted.pythonr   Útwisted.python.filepathr   Útwisted.python.runtimer   Útwisted.testr   Útwisted.trialr   Ú	isWindowsrj   r   r<   rF   ÚTestCaser[   rm   r¯   rÙ  ri  r˜  r¡  r½  r5   r4   r1   Ú<module>rÚ     s  ðñó
 ç ;å "ß LÝ 1Ý 'Ý @ß :Õ :Ý -Ý 4Ý (Ý ;Ý "Ý ,Ý +Ý &Ý "à×Ò×ÑØ�KàN€Kô?�<ô ?÷0!ñ !÷ñ ô.�x×(Ñ(ô ô4o&˜(×+Ñ+Ð->ô o&ôdC	-�H×%Ñ%ô C	-ôLk�(×#Ñ#ô kô\IH˜×*Ñ*ô IH÷Xñ ô-,�h×'Ñ'ô -,ô`+˜H×-Ñ-õ +r4   