Ë
    oj¢  ã                   óŽ  — d Z ddlZddlmZ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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 ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'  e#jP                  «       sdZ)ndZ) G d„ de«      Z* G d„ d«      Z+ G d„ d«      Z, G d„ de'jZ                  «      Z. G d„ de'jZ                  e«      Z/ G d„ de'jZ                  «      Z0 G d „ d!e'jZ                  «      Z1 G d"„ d#e'jZ                  «      Z2 G d$„ d%«      Z3 G d&„ d'e'jZ                  «      Z4 G d(„ d)e'jZ                  «      Z5y)*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                   ó   — e Zd Zd„ Zy)ÚFakeResolverc           
      óø   — |dk(  r>t        j                  |t         j                  |dt        j                  dd¬«      ¬«      }nt        j                  |||d¬«      }|g}g }g }t	        j
                  |||f«      S )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	            ú@/usr/lib/python3/dist-packages/twisted/names/test/test_client.pyÚ_lookupzFakeResolver._lookup$   sv   € ð Ð'Ò'Ü—‘ØÜ—U‘UØØÜŸ™¨[¸bÔAô‰Bô —‘ 4¨e¸À"ÔEˆBà�$ˆØˆ	Øˆ
Ü�}‰}˜g y°*Ð=Ó>Ð>ó    N)Ú__name__Ú
__module__Ú__qualname__r1   © r2   r0   r   r   #   s   „ ó?r2   r   c                   ó   — e Zd ZdZdZd„ Zy)ÚStubPortzå
    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                 ó   — d| _         y )NT)Údisconnected©r)   s    r0   ÚstopListeningzStubPort.stopListeningF   s
   € Ø ˆÕr2   N)r3   r4   r5   Ú__doc__r:   r<   r6   r2   r0   r8   r8   ;   s   „ ñð €Ló!r2   r8   c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚStubDNSDatagramProtocolzÎ
    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   — g | _         t        «       | _        y ©N©Úqueriesr8   Ú	transportr;   s    r0   Ú__init__z StubDNSDatagramProtocol.__init__S   ó   € ØˆŒÜ!›ˆ�r2   Nc                 ón   — t        j                  «       }| j                  j                  |||||f«       |S )zv
        Record the given arguments and return a Deferred which will not be
        called back by this code.
        )r   ÚDeferredrC   Úappend)r)   r   rC   r+   ÚidÚresults         r0   ÚqueryzStubDNSDatagramProtocol.queryW   s2   € ô
 —‘Ó!ˆØ�‰×Ñ˜W g¨w¸¸FÐCÔDØˆr2   ©é
   N)r3   r4   r5   r=   rE   rL   r6   r2   r0   r?   r?   J   s   „ ñò$ôr2   r?   c                   ó    — e Zd ZdZeZd„ Zd„ Zy)ÚGetResolverTestsz*
    Tests for L{client.getResolver}.
    c                 óº   — t        t        «       «      5  t        j                  «       }ddd«       | j	                  t        t        «      «       y# 1 sw Y   Œ)xY w)zQ
        L{client.getResolver} returns an object providing L{IResolver}.
        N)r
   r	   r   ÚgetResolverÚ
assertTruer   r   ©r)   Úresolvers     r0   Útest_interfacezGetResolverTests.test_interfaceh   sD   € ô œe›gÓ&ñ 	,Ü×)Ñ)Ó+ˆH÷	,à�‰œ¤Y°Ó9Õ:÷	,ð 	,ús   ”AÁAc                 óÈ   — t        t        «       «      5  t        j                  «       }t        j                  «       }ddd«       | j	                  «       y# 1 sw Y   ŒxY w)zn
        Multiple calls to L{client.getResolver} return the same L{IResolver}
        implementation.
        N)r
   r	   r   rR   ÚassertIs)r)   ÚaÚbs      r0   Útest_idempotentz GetResolverTests.test_idempotentp   sO   € ô
 œe›gÓ&ñ 	%Ü×"Ñ"Ó$ˆAÜ×"Ñ"Ó$ˆA÷	%ð 	�‰�a˜Õ÷	%ð 	%ús   ”)AÁA!N)r3   r4   r5   r=   ÚwindowsSkipÚskiprV   r[   r6   r2   r0   rP   rP   a   s   „ ñð €Dò;ór2   rP   c                   óP   — e Zd ZdZeZd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zy)ÚCreateResolverTestsz-
    Tests for L{client.createResolver}.
    c                 óê   — |j                   D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}| j	                  dt        |«      «       | j	                  |d   j                  |«       y c c}w )Né   r   )Ú	resolversÚ
isinstancer   ÚResolverÚassertEqualÚlenÚfile©r)   rU   ÚfilenameÚrÚress        r0   Ú
_hostsTestzCreateResolverTests._hostsTest‚   sZ   € Ø"×,Ñ,ÖN�Q´
¸1¼e¿n¹nÕ0MŠqÐNˆÐNØ×Ñ˜œC ›HÔ%Ø×Ñ˜˜Q™Ÿ™ hÕ/ùò Oó
   �A0¯A0c                 ó    — t        t        «       «      5  t        j                  «       }ddd«       | j	                  d«       y# 1 sw Y   ŒxY w)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   ÚcreateResolverrl   rT   s     r0   Útest_defaultHostsz%CreateResolverTests.test_defaultHosts‡   s?   € ô œe›gÓ&ñ 	/Ü×,Ñ,Ó.ˆH÷	/à�‰˜ -Õ0÷	/ð 	/úó   ”AÁAc                 ó¤   — t        t        «       «      5  t        j                  d¬«      }ddd«       | j	                  d«       y# 1 sw Y   ŒxY w)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   Nro   rT   s     r0   Útest_overrideHostsz&CreateResolverTests.test_overrideHosts‘   sE   € ô œe›gÓ&ñ 	@Ü×,Ñ,°;Ô?ˆH÷	@à�‰˜ +Õ.÷	@ð 	@úó   ”AÁAc                 óê   — |j                   D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}| j	                  dt        |«      «       | j	                  |d   j                  |«       yc c}w )z|
        Verify that C{resolver} has a L{client.Resolver} with a configuration
        filename set to C{filename}.
        ra   r   N)rb   rc   r   rd   re   rf   Úresolvrh   s        r0   Ú_resolvConfTestz#CreateResolverTests._resolvConfTest›   s\   € ð
 #×,Ñ,ÖO�Q´
¸1¼f¿o¹oÕ0NŠqÐOˆÐOØ×Ñ˜œC ›HÔ%Ø×Ñ˜˜Q™Ÿ™¨Õ1ùò Prm   c                 óf  — t        «       }t        |«      5  t        j                  «       }ddd«       j                  D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}| j                  dt        |«      «       | j                  ||d   j                  «       y# 1 sw Y   ŒxxY wc c}w )z—
        The L{client.Resolver} included in the L{resolve.ResolverChain} returned
        by L{client.createResolver} uses the global reactor.
        Nra   r   )r	   r
   r   rp   rb   rc   rd   re   rf   rX   Ú_reactor)r)   ÚreactorrU   rj   rk   s        r0   Útest_reactorz CreateResolverTests.test_reactor¤   sˆ   € ô
 “'ˆÜ˜gÓ&ñ 	/Ü×,Ñ,Ó.ˆH÷	/à"×,Ñ,ÖO�Q´
¸1¼f¿o¹oÕ0NŠqÐOˆÐOØ×Ñ˜œC ›HÔ%Ø�‰�g˜s 1™vŸ™Õ/÷		/ð 	/üâOs   –B"ÁB.Á!B.Â"B+c                 ó    — t        t        «       «      5  t        j                  «       }ddd«       | j	                  d«       y# 1 sw Y   ŒxY w)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   rp   ry   rT   s     r0   Útest_defaultResolvConfz*CreateResolverTests.test_defaultResolvConf°   sB   € ô œe›gÓ&ñ 	/Ü×,Ñ,Ó.ˆH÷	/à×Ñ˜XÐ':Õ;÷	/ð 	/úrr   c                 ó¤   — t        t        «       «      5  t        j                  d¬«      }ddd«       | j	                  d«       y# 1 sw Y   ŒxY w)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.
        rt   ©Ú
resolvconfNr   rT   s     r0   Útest_overrideResolvConfz+CreateResolverTests.test_overrideResolvConfº   sG   € ô œe›gÓ&ñ 	EÜ×,Ñ,¸ÔDˆH÷	Eà×Ñ˜X {Õ3÷	Eð 	Eúrv   c                 óü  — | j                  «       }|j                  d«       t        t        «       «      5  t	        j
                  |j                   ¬«      }ddd«       j                  D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}| j                  dt        |«      «       | j                  g |d   j                  «       | j                  dg|d   j                  «       y# 1 sw Y   Œ˜xY wc c}w )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‚   Nra   r   ©z	127.1.2.3é5   ©ÚpathÚ
setContentr
   r	   r   rp   rb   rc   rd   re   rf   ÚserversÚ
dynServers©r)   rƒ   rU   rj   rk   s        r0   Útest_defaultServersz'CreateResolverTests.test_defaultServersÄ   sÇ   € ð
 —Y‘Y“[ˆ
Ø×ÑÐ7Ô8Üœe›gÓ&ñ 	IÜ×,Ñ,¸
¿¹ÔHˆH÷	Ià"×,Ñ,ÖO�Q´
¸1¼f¿o¹oÕ0NŠqÐOˆÐOØ×Ñ˜œC ›HÔ%Ø×Ñ˜˜S ™VŸ^™^Ô,Ø×ÑÐ+Ð,¨c°!©f×.?Ñ.?Õ@÷	Ið 	IüâOs   µ!C-Á,C9ÂC9Ã-C6c                 ó  — | j                  «       }|j                  d«       t        t        «       «      5  t	        j
                  dg|j                   ¬«      }ddd«       j                  D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}| j                  dt        |«      «       | j                  dg|d   j                  «       | j                  dg|d   j                  «       y# 1 sw Y   Œ™xY wc c}w )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ƒ   Nra   r   r‡   r‰   rŽ   s        r0   Útest_overrideServersz(CreateResolverTests.test_overrideServersÒ   sÔ   € ð
 —Y‘Y“[ˆ
Ø×ÑÐ7Ô8Üœe›gÓ&ñ 	Ü×,Ñ,Ø*Ð+¸
¿¹ôˆH÷	ð #×,Ñ,ÖO�Q´
¸1¼f¿o¹oÕ0NŠqÐOˆÐOØ×Ñ˜œC ›HÔ%Ø×ÑÐ+Ð,¨c°!©f¯n©nÔ=Ø×ÑÐ+Ð,¨c°!©f×.?Ñ.?Õ@÷	ð 	üò Ps   µ#C0Á.C<ÂC<Ã0C9c                 ó$  — t        t        «       «      5  t        j                  «       }ddd«       j                  D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}| j                  dt        |«      «       y# 1 sw Y   ŒYxY wc c}w )zy
        L{client.createResolver} returns a L{resolve.ResolverChain} including a
        L{cache.CacheResolver}.
        Nra   )
r
   r	   r   rp   rb   rc   r   ÚCacheResolverre   rf   )r)   rU   rj   rk   s       r0   Ú
test_cachezCreateResolverTests.test_cacheâ   so   € ô
 œe›gÓ&ñ 	/Ü×,Ñ,Ó.ˆH÷	/à"×,Ñ,ÖS�Q´
¸1¼e×>QÑ>QÕ0RŠqÐSˆÐSØ×Ñ˜œC ›HÕ%÷	/ð 	/üâSs   ”B¿BÁBÂB
N)r3   r4   r5   r=   r\   r]   rl   rq   ru   ry   r}   r€   r„   r�   r‘   r”   r6   r2   r0   r_   r_   {   sB   „ ñð €Dò0ò
1ò/ò2ò
0ò<ò4òAòAó &r2   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„ 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„ Zy)ÚResolverTestsz'
    Tests for L{client.Resolver}.
    c                 ó,   — t        t        t        «       y)z]
        L{client} provides L{IResolver} through a series of free
        functions.
        N)r   r   r   r;   s    r0   Útest_clientProvidesIResolverz*ResolverTests.test_clientProvidesIResolverò   s   € ô
 	”Y¤Õ'r2   c                 ó@   — t        t        t        j                  «       y)z;
        L{client.Resolver} provides L{IResolver}.
        N)r   r   r   rd   r;   s    r0   Ú$test_clientResolverProvidesIResolverz2ResolverTests.test_clientResolverProvidesIResolverù   s   € ô 	”IœvŸ™Õ/r2   c                 óL   — | j                  t        t        j                  «       y)zŠ
        L{client.Resolver} raises L{ValueError} if constructed with neither
        servers nor a nameserver configuration file.
        N)ÚassertRaisesÚ
ValueErrorr   rd   r;   s    r0   Útest_noServerszResolverTests.test_noServersÿ   s   € ð
 	×Ñœ*¤f§o¡oÕ6r2   c                 ó˜   — t        j                  | j                  «       t        «       ¬«      }| j	                  dg|j
                  «       y)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.
        ©rx   r|   ©r   rˆ   N)r   rd   Úmktempr	   re   r�   rT   s     r0   Útest_missingConfigurationz'ResolverTests.test_missingConfiguration  s6   € ô —?‘?¨$¯+©+«-ÄÃÔIˆØ×ÑÐ+Ð,¨h×.AÑ.AÕBr2   c                 óò   ‡— t        | j                  «       «      }|j                  d¬«      Š G ˆfd„dt        j                  «      } |ddgdt        «       ¬«       | j                  ‰j                  «       y	)
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                   ó   •— e Zd Zˆ fd„Zy)ú9ResolverTests.test_closesResolvConf.<locals>.StubResolverc                 ó   •— ‰S rA   r6   )r)   r!   Ú
resolvConfs     €r0   Ú	_openFilezCResolverTests.test_closesResolvConf.<locals>.StubResolver._openFile  s	   ø€ Ø!Ð!r2   N)r3   r4   r5   rª   )r©   s   €r0   ÚStubResolverr§     s   ø„ õ"r2   r«   úexample.comrˆ   z/etc/resolv.conf)rŒ   rx   r|   N)r   r¢   Úopenr   rd   r	   rS   Úclosed)r)   Úhandler«   r©   s      @r0   Útest_closesResolvConfz#ResolverTests.test_closesResolvConf  sb   ø€ ô ˜$Ÿ+™+›-Ó(ˆØ—[‘[ d�[Ó+ˆ
ö	"œ6Ÿ?™?ô 	"ñ 	Ø" BÐ'Ð0BÌEËGõ	
ð 	�‰˜
×)Ñ)Õ*r2   c                 óŽ   — t        j                  dg¬«      }|j                  dg«       | j                  d|j                  «       y)z†
        L{client.Resolver.parseConfig} treats a I{domain} line without an
        argument as indicating a domain of C{b""}.
        r¡   ©rŒ   s   domain
r2   N)r   rd   ÚparseConfigre   ÚdomainrT   s     r0   Útest_domainEmptyArgumentz&ResolverTests.test_domainEmptyArgument!  s:   € ô
 —?‘?Ð,=Ð+>Ô?ˆØ×Ñ˜k˜]Ô+Ø×Ñ˜˜hŸo™oÕ.r2   c                 óŽ   — t        j                  dg¬«      }|j                  dg«       | j                  g |j                  «       y)zŠ
        L{client.Resolver.parseConfig} treats a I{search} line without an
        argument as indicating an empty search suffix.
        r¡   r²   s   search
N)r   rd   r³   re   ÚsearchrT   s     r0   Útest_searchEmptyArgumentz&ResolverTests.test_searchEmptyArgument*  s:   € ô
 —?‘?Ð,=Ð+>Ô?ˆØ×Ñ˜k˜]Ô+Ø×Ñ˜˜XŸ_™_Õ-r2   c                 óv  ‡— t        «       Šddg}ddg}t        j                  |¬«      }||_        ˆfd„|_        t        «       }|j                  d«      }|j                  | j                  |«       | j                  t        ‰j                  «      d«       | j                  ‰j                  d	   d	   |d	   «       ‰j                  d	   d
   j                  t        d	«      «       | j                  t        ‰j                  «      d«       | j                  ‰j                  d   d	   |d   «       ‰j                  d   d
   j                  t        d«      «       | j                  t        ‰j                  «      d«       | j                  ‰j                  d   d	   |d	   «       ‰j                  d   d
   j                  t        d«      «       | j                  t        ‰j                  «      d«       | j                  ‰j                  d   d	   |d   «       ‰j                  d   d
   j                  |«       |S )a  
        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                 ó   •— ‰S rA   r6   )Ú	interfaceÚprotocols    €r0   ú<lambda>z=ResolverTests.test_datagramQueryServerOrder.<locals>.<lambda>@  s   ø€ ¸€ r2   Nra   r   éÿÿÿÿé   é   é   )r?   r   rd   r�   Ú_connectedProtocolÚobjectÚqueryUDPÚaddCallbackre   rf   rC   rX   Úerrbackr   Úcallback)r)   rŒ   r�   rU   ÚexpectedResultÚqueryResultr½   s         @r0   Útest_datagramQueryServerOrderz+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àÐr2   c                 ó¢  ‡ ‡	‡
— t        «       Š
t        j                  dg¬«      }ˆ
fd„|_        ‰
j                  }t        j                  dt
        j                  t
        j                  «      }|j                  |«      }‰ j                  t        |«      d«       |j                  |«      }‰ j                  t        |«      d«       t        «       Š	t        j                  «       }|j                  j                  ‰	«       |j!                  «       d   j#                  |«       t%        j&                  ||g«      }ˆ	ˆ fd„}|j)                  |«       |S )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                  ó   •— ‰ S rA   r6   ©r½   s   €r0   r¾   z<ResolverTests.test_singleConcurrentRequest.<locals>.<lambda>]  ó   ø€ ¨h€ r2   ó   foo.example.comra   r¿   c                 óh   •— | \  }}‰j                  |‰gg g f«       ‰j                  |‰gg g f«       y rA   ©re   )Ú	responsesÚfirstResponseÚsecondResponseÚanswerr)   s      €€r0   Ú
cbFinishedz>ResolverTests.test_singleConcurrentRequest.<locals>.cbFinishedr  s?   ø€ Ø,5Ñ)ˆM˜>Ø×Ñ˜]¨f¨X°r¸2Ð,>Ô?Ø×Ñ˜^¨v¨h¸¸BÐ-?Õ@r2   )r?   r   rd   rÃ   rC   r   ÚQueryr&   ÚINrL   re   rf   rÄ   ÚMessageÚanswersrI   ÚpoprÈ   r   ÚgatherResultsrÆ   )r)   rU   rC   rL   ÚfirstResultÚsecondResultÚresponseÚdrØ   r×   r½   s   `        @@r0   Útest_singleConcurrentRequestz*ResolverTests.test_singleConcurrentRequestU  s  ú€ ô +Ó,ˆÜ—?‘?Ð,?Ð+@ÔAˆÛ&6ˆÔ#Ø×"Ñ"ˆä—	‘	Ð,¬c¯e©e´S·V±VÓ<ˆà—n‘n UÓ+ˆØ×Ñœ˜W› qÔ)ð  —~‘~ eÓ,ˆØ×Ñœ˜W› qÔ)ô “ˆÜ—;‘;“=ˆØ×Ñ×Ñ Ô'Ø�‰‹�bÑ×"Ñ" 8Ô,ä×Ñ ¨lÐ ;Ó<ˆõ	Að
 	
�‰�jÔ!Øˆr2   c                 óT  ‡— t        «       Št        j                  dg¬«      }ˆfd„|_        ‰j                  }t        j                  dt
        j                  «      }|j                  |«       | j                  t        |«      d«       t        j                  dt
        j                  «      }|j                  |«       | j                  t        |«      d«       t        j                  dt
        j                  «      }|j                  |«       | j                  t        |«      d«       y	)
zh
        L{client.Resolver.query} issues a request for each different concurrent
        query.
        rÍ   r²   c                  ó   •— ‰ S rA   r6   rÏ   s   €r0   r¾   z?ResolverTests.test_multipleConcurrentRequests.<locals>.<lambda>�  rÐ   r2   rÑ   ra   ó   bar.example.comrÀ   rÁ   N)r?   r   rd   rÃ   rC   r   rÙ   r&   rL   re   rf   ÚA6)r)   rU   rC   Ú
firstQueryÚsecondQueryÚ
thirdQueryr½   s         @r0   Útest_multipleConcurrentRequestsz-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Õ)r2   c                 óÔ  ‡— t        «       Št        j                  dg¬«      }ˆfd„|_        ‰j                  }t        j                  dt
        j                  «      }|j                  |«       | j                  t        |«      d«       |j                  «       d   j                  t        j                  «       «       |j                  |«       | j                  t        |«      d«       y)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                  ó   •— ‰ S rA   r6   rÏ   s   €r0   r¾   z?ResolverTests.test_multipleSequentialRequests.<locals>.<lambda>�  rÐ   r2   rÑ   ra   r¿   N)r?   r   rd   rÃ   rC   r   rÙ   r&   rL   re   rf   rÝ   rÈ   rÛ   )r)   rU   rC   rL   r½   s       @r0   Útest_multipleSequentialRequestsz-ResolverTests.test_multipleSequentialRequests•  s¬   ø€ ô +Ó,ˆÜ—?‘?Ð,?Ð+@ÔAˆÛ&6ˆÔ#Ø×"Ñ"ˆä—	‘	Ð,¬c¯e©eÓ4ˆð 	�‰�uÔØ×Ñœ˜W› qÔ)ð 	�‰‹�bÑ×"Ñ"¤3§;¡;£=Ô1ð 	�‰�uÔØ×Ñœ˜W› qÕ)r2   c                 óþ  ‡— t        «       Št        j                  dg¬«      }ˆfd„|_        ‰j                  }t        j                  dt
        j                  «      }|j                  |«      }|j                  |«      } G d„ dt        «      }|j                  «       d   j                  t        j                   |«       «      «       t        j                  | j!                  ||«      | j!                  ||«      g«      S )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                  ó   •— ‰ S rA   r6   rÏ   s   €r0   r¾   z>ResolverTests.test_multipleConcurrentFailure.<locals>.<lambda>µ  rÐ   r2   rÑ   c                   ó   — e Zd Zy)úGResolverTests.test_multipleConcurrentFailure.<locals>.ExpectedExceptionN©r3   r4   r5   r6   r2   r0   ÚExpectedExceptionrò   ¼  ó   „ Ør2   rô   r¿   )r?   r   rd   rÃ   rC   r   rÙ   r&   rL   Ú	ExceptionrÝ   rÇ   r   ÚFailurer   rÞ   ÚassertFailure)r)   rU   rC   rL   rß   rà   rô   r½   s          @r0   Útest_multipleConcurrentFailurez,ResolverTests.test_multipleConcurrentFailure­  sÑ   ø€ ô +Ó,ˆÜ—?‘?Ð,?Ð+@ÔAˆÛ&6ˆÔ#Ø×"Ñ"ˆä—	‘	Ð,¬c¯e©eÓ4ˆØ—n‘n UÓ+ˆØ—~‘~ eÓ,ˆô	¤	ô 	ð 	�‰‹�bÑ×!Ñ!¤'§/¡/Ñ2CÓ2EÓ"FÔGä×"Ñ"à×"Ñ" ;Ð0AÓBØ×"Ñ" <Ð1BÓCðó
ð 	
r2   c                 óR  — t        j                  dg¬«      }|j                  «       }|j                  «       }| j                  |j                  «       | j                  |j                  «       | j                  |j                  j                  «       j                  |j                  j                  «       j                  «       t        j                  t        j                  |j                  j                  «      t        j                  |j                  j                  «      g«      S )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   rd   rÃ   ÚassertIsNotNonerD   ÚassertNotEqualÚgetHostÚportr   rÞ   ÚmaybeDeferredr<   )r)   rU   Ú
firstProtoÚsecondProtos       r0   Útest_connectedProtocolz$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ðó
ð 	
r2   c                 óÎ   — t        j                  «       }t        j                  | j	                  «       |¬«      }|j                  «       }| j                  |j                  |«       y)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   rd   r¢   rÃ   rX   r{   )r)   r|   rU   Úprotos       r0   Ú)test_resolverUsesOnlyParameterizedReactorz7ResolverTests.test_resolverUsesOnlyParameterizedReactorß  sH   € ô ×)Ñ)Ó+ˆÜ—?‘?¨$¯+©+«-ÀÔIˆØ×+Ñ+Ó-ˆØ�‰�e—n‘n gÕ.r2   c                 ó6  ‡— t        j                  dg¬«      }g Š G ˆfd„d«      }||_        |j                  t	        j
                  d«      «       |j                  t	        j
                  d«      «       | j                  t        t        ‰«      «      d«       y)	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                   ó    •— e Zd Zd„ Zdˆ fd„	Zy)ú:ResolverTests.test_differentProtocol.<locals>.FakeProtocolc                 ó"   — t        «       | _        y rA   ©r8   rD   r;   s    r0   rE   zCResolverTests.test_differentProtocol.<locals>.FakeProtocol.__init__ô  ó   € Ü!)£�•r2   Nc                 ót   •— ‰j                  | «       t        j                  t        j                  «       «      S rA   )rI   r   r(   r   rÛ   )r)   r   rL   r+   rJ   Ú	protocolss        €r0   rL   z@ResolverTests.test_differentProtocol.<locals>.FakeProtocol.query÷  s&   ø€ Ø× Ñ  Ô&Ü—}‘}¤S§[¡[£]Ó3Ð3r2   rM   ©r3   r4   r5   rE   rL   )r  s   €r0   ÚFakeProtocolr	  ó  s   ø„ ò,ö4r2   r  rÑ   ræ   rÀ   N)	r   rd   rÃ   rL   r   rÙ   re   rf   Úset)r)   rU   r  r  s      @r0   Útest_differentProtocolz$ResolverTests.test_differentProtocolê  su   ø€ ô —?‘?Ð,?Ð+@ÔAˆØˆ	÷	4ó 	4ð '3ˆÔ#Ø�‰”s—y‘yÐ!3Ó4Ô5Ø�‰”s—y‘yÐ!3Ó4Ô5Ø×ÑœœS ›^Ó,¨aÕ0r2   c                 ó:  — t        j                  «       }t        j                  dg|¬«      }|j	                  t        j                  d«      «       |j                  j                  «       \  \  }}|j                  «       j                  }| j                  d|«       y)z<
        If the resolver is ipv6, open a ipv6 port.
        rº   ©rŒ   r|   rÑ   z::N)r   r  r   rd   rL   r   rÙ   ÚudpPortsÚitemsrý   Úhostre   )r)   ÚfakerU   r  rD   r¼   s         r0   Útest_ipv6ResolverzResolverTests.test_ipv6Resolver   sx   € ô
 ×&Ñ&Ó(ˆÜ—?‘?¨K¨=À$ÔGˆØ�‰”s—y‘yÐ!3Ó4Ô5Ø#Ÿ}™}×2Ñ2Ó4ÑÑ	ˆ%�Ø×%Ñ%Ó'×,Ñ,ˆ	Ø×Ñ˜˜yÕ)r2   c                 óÐ   ‡— g Š G ˆfd„d«      }t        j                  dg¬«      } |«       |_        |j                  «        | j	                  t        t        ‰«      «      d«       y)z¡
        If a port number is initially selected which cannot be bound, the
        L{CannotListenError} is handled and another port number is attempted.
        c                   ó   •— e Zd Zˆ fd„Zy)ú6ResolverTests.test_disallowedPort.<locals>.FakeReactorc                 ó^   •— ‰j                  |«       t        ‰«      dk(  rt        d |d «      ‚y )Nra   )rI   rf   r   ©r)   rþ   ÚargsÚkwargsÚportss       €r0   Ú	listenUDPz@ResolverTests.test_disallowedPort.<locals>.FakeReactor.listenUDP  s.   ø€ Ø—‘˜TÔ"Ü�u“: ’?Ü+¨D°$¸Ó=Ð=ð #r2   N©r3   r4   r5   r"  ©r!  s   €r0   ÚFakeReactorr    s   ø„ õ>r2   r%  rÍ   r²   rÀ   N)r   rd   r{   rÃ   re   rf   r  ©r)   r%  rU   r!  s      @r0   Útest_disallowedPortz!ResolverTests.test_disallowedPort  sV   ø€ ð
 ˆ÷	>ó 	>ô —?‘?Ð,?Ð+@ÔAˆÙ'›MˆÔà×#Ñ#Ô%Ø×ÑœœS ›Z›¨!Õ,r2   c                 óÞ   ‡— g Š G ˆfd„d«      }t        j                  dg¬«      } |«       |_        | j                  t        |j
                  «       | j                  t        ‰«      d«       y)z�
        If port numbers that cannot be bound are repeatedly selected,
        L{resolver._connectedProtocol} will give up eventually.
        c                   ó   •— e Zd Zˆ fd„Zy)ú@ResolverTests.test_disallowedPortRepeatedly.<locals>.FakeReactorc                 ó@   •— ‰j                  |«       t        d |d «      ‚rA   )rI   r   r  s       €r0   r"  zJResolverTests.test_disallowedPortRepeatedly.<locals>.FakeReactor.listenUDP'  s   ø€ Ø—‘˜TÔ"Ü'¨¨d°DÓ9Ð9r2   Nr#  r$  s   €r0   r%  r*  &  s   ø„ õ:r2   r%  rÍ   r²   iè  N)r   rd   r{   rœ   r   rÃ   re   rf   r&  s      @r0   Útest_disallowedPortRepeatedlyz+ResolverTests.test_disallowedPortRepeatedly  s]   ø€ ð
 ˆ÷	:ó 	:ô
 —?‘?Ð,?Ð+@ÔAˆÙ'›MˆÔà×ÑÔ+¨X×-HÑ-HÔIà×Ñœ˜U› TÕ*r2   c                 óF  ‡— g Š G ˆfd„d«      }t        j                  dg¬«      } |«       |_        | j                  t        |j
                  «      }| j                  |j                  j                  t        j                  «       | j                  t        ‰«      d«       y)zf
        If the process is out of files, L{Resolver._connectedProtocol}
        will give up.
        c                   ó   •— e Zd Zˆ fd„Zy)ú5ResolverTests.test_runOutOfFiles.<locals>.FakeReactorc                 ót   •— ‰j                  |«       t        t        j                  d«      }t	        d ||«      ‚)NzOut of files :()rI   ÚOSErrorÚerrnoÚEMFILEr   )r)   rþ   r  r   Úerrr!  s        €r0   r"  z?ResolverTests.test_runOutOfFiles.<locals>.FakeReactor.listenUDP:  s/   ø€ Ø—‘˜TÔ"ÜœeŸl™lÐ,=Ó>�Ü'¨¨d°CÓ8Ð8r2   Nr#  r$  s   €r0   r%  r/  9  s   ø„ õ9r2   r%  rÍ   r²   ra   N)r   rd   r{   rœ   r   rÃ   re   ÚsocketErrorr2  r3  rf   )r)   r%  rU   Úexcr!  s       @r0   Útest_runOutOfFilesz ResolverTests.test_runOutOfFiles2  s   ø€ ð
 ˆ÷	9ó 	9ô —?‘?Ð,?Ð+@ÔAˆÙ'›MˆÔà×ÑÔ 1°8×3NÑ3NÓOˆð 	×Ñ˜Ÿ™×.Ñ.´·±Ô=Ø×Ñœ˜U› QÕ'r2   c                 ó¢  ‡‡— t        j                  dg¬«      }g Št        j                  t	        j
                  t        d«      «      «      t        j                  t        j                  «       «      gŠ G ˆˆfd„d«      }||_
        |j                  t        j                  d«      «       | j                  t        t        ‰«      «      d«       y)z|
        When a query issued by L{client.Resolver.query} times out, the retry
        uses a new protocol instance.
        rÍ   r²   Nc                   ó"   •— e Zd Zd„ Zdˆ ˆfd„	Zy)úFResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocolc                 ó"   — t        «       | _        y rA   r  r;   s    r0   rE   zOResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocol.__init__U  r  r2   Nc                 óH   •— ‰j                  | «       ‰j                  d«      S ©Nr   ©rI   rÝ   ©r)   r   rL   r+   rJ   r  r-   s        €€r0   rL   zLResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocol.queryX  ó   ø€ Ø× Ñ  Ô&Ø—{‘{ 1“~Ð%r2   rM   r  ©r  r-   s   €€r0   r  r:  T  ó   ø„ ò,÷&r2   r  rÑ   rÀ   )r   rd   r   Úfailr   r÷   r   r(   r   rÛ   rÃ   rL   rÙ   re   rf   r  )r)   rU   r  r  r-   s      @@r0   Ú"test_differentProtocolAfterTimeoutz0ResolverTests.test_differentProtocolAfterTimeoutH  s“   ù€ ô
 —?‘?Ð,?Ð+@ÔAˆØˆ	ä�J‰J”w—‘Ô';¸DÓ'AÓBÓCÜ�M‰Mœ#Ÿ+™+›-Ó(ð
ˆ÷
	&ô 	&ð '3ˆÔ#Ø�‰”s—y‘yÐ!3Ó4Ô5Ø×ÑœœS ›^Ó,¨aÕ0r2   c                 ó¸  ‡‡— t        j                  dg¬«      }g Št        j                  «       Š G ˆˆfd„d«      }||_        |j                  t        j                  d«      «       | j                  ‰d   j                  j                  «       ‰j                  t        j                  «       «       | j                  ‰d   j                  j                  «       y)z¯
        After the L{Deferred} returned by L{DNSDatagramProtocol.query} is
        called back, the L{DNSDatagramProtocol} is disconnected from its
        transport.
        rÍ   r²   c                   ó"   •— e Zd Zd„ Zdˆ ˆfd„	Zy)ú9ResolverTests.test_protocolShutDown.<locals>.FakeProtocolc                 ó"   — t        «       | _        y rA   r  r;   s    r0   rE   zBResolverTests.test_protocolShutDown.<locals>.FakeProtocol.__init__k  r  r2   Nc                 ó*   •— ‰j                  | «       ‰S rA   ©rI   ©r)   r   rL   r+   rJ   r  rK   s        €€r0   rL   z?ResolverTests.test_protocolShutDown.<locals>.FakeProtocol.queryn  ó   ø€ Ø× Ñ  Ô&Ø�r2   rM   r  ©r  rK   s   €€r0   r  rG  j  ó   ø„ ò,÷r2   r  rÑ   r   N)r   rd   r   rH   rÃ   rL   r   rÙ   ÚassertFalserD   r:   rÈ   rÛ   rS   )r)   rU   r  r  rK   s      @@r0   Útest_protocolShutDownz#ResolverTests.test_protocolShutDown`  sž   ù€ ô —?‘?Ð,?Ð+@ÔAˆØˆ	Ü—‘Ó!ˆ÷	ô 	ð '3ˆÔ#Ø�‰”s—y‘yÐ!3Ó4Ô5à×Ñ˜ 1™×/Ñ/×<Ñ<Ô=Ø�‰œŸ™›Ô&Ø�‰˜	 !™×.Ñ.×;Ñ;Õ<r2   c                 ó  ‡‡— t        j                  dg¬«      }g Št        j                  «       }t        j                  t        j                  t        d«      «      «      |gŠ G ˆˆfd„d«      }||_        |j                  t        j                  d«      «       | j                  ‰d   j                  j                  «       |j                  t        j                   «       «       | j#                  ‰d   j                  j                  «       y)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                   ó"   •— e Zd Zd„ Zdˆ ˆfd„	Zy)úEResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocolc                 ó"   — t        «       | _        y rA   r  r;   s    r0   rE   zNResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocol.__init__…  r  r2   Nc                 óH   •— ‰j                  | «       ‰j                  d«      S r=  r>  r?  s        €€r0   rL   zKResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocol.queryˆ  r@  r2   rM   r  rA  s   €€r0   r  rS  „  rB  r2   r  rÑ   ra   )r   rd   r   rH   rC  r   r÷   r   rÃ   rL   r   rÙ   rO  rD   r:   rÈ   rÛ   rS   )r)   rU   rK   r  r  r-   s       @@r0   Ú!test_protocolShutDownAfterTimeoutz/ResolverTests.test_protocolShutDownAfterTimeouty  sÀ   ù€ ô —?‘?Ð,?Ð+@ÔAˆØˆ	Ü—‘Ó!ˆÜ—:‘:œgŸo™oÔ.BÀ4Ó.HÓIÓJÈFÐSˆ÷	&ô 	&ð '3ˆÔ#Ø�‰”s—y‘yÐ!3Ó4Ô5à×Ñ˜ 1™×/Ñ/×<Ñ<Ô=Ø�‰œŸ™›Ô&Ø�‰˜	 !™×.Ñ.×;Ñ;Õ<r2   c                 ó  ‡‡—  G d„ dt         «      }t        j                  dg¬«      }g Št        j                  «       Š G ˆˆfd„d«      }||_        |j                  t        j                  d«      «      }| j                  ‰d   j                  j                  «       ‰j                  t        j                   |«       «      «       | j                  ‰d   j                  j                  «       | j!                  ||«      S )	z¸
        If the L{Deferred} returned by L{DNSDatagramProtocol.query} fires with
        a failure, the L{DNSDatagramProtocol} is still disconnected from its
        transport.
        c                   ó   — e Zd Zy)úJResolverTests.test_protocolShutDownAfterFailure.<locals>.ExpectedExceptionNró   r6   r2   r0   rô   rY  š  rõ   r2   rô   rÍ   r²   c                   ó"   •— e Zd Zd„ Zdˆ ˆfd„	Zy)úEResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocolc                 ó"   — t        «       | _        y rA   r  r;   s    r0   rE   zNResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocol.__init__¢  r  r2   Nc                 ó*   •— ‰j                  | «       ‰S rA   rJ  rK  s        €€r0   rL   zKResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocol.query¥  rL  r2   rM   r  rM  s   €€r0   r  r[  ¡  rN  r2   r  rÑ   r   )rö   r   rd   r   rH   rÃ   rL   r   rÙ   rO  rD   r:   rÇ   r   r÷   rS   rø   )r)   rô   rU   r  rÊ   r  rK   s        @@r0   Ú!test_protocolShutDownAfterFailurez/ResolverTests.test_protocolShutDownAfterFailure“  sÇ   ù€ ô	¤	ô 	ô —?‘?Ð,?Ð+@ÔAˆØˆ	Ü—‘Ó!ˆ÷	ô 	ð '3ˆÔ#Ø—n‘n¤S§Y¡YÐ/AÓ%BÓCˆà×Ñ˜ 1™×/Ñ/×<Ñ<Ô=Ø�‰”w—‘Ñ'8Ó':Ó;Ô<Ø�‰˜	 !™×.Ñ.×;Ñ;Ô<à×!Ñ! +Ð/@ÓAÐAr2   c                 ó  — t        j                  dg¬«      }|j                  j                  d«      }|j	                  d«       | j                  ||j                  «       |j                  d«       | j                  ||j                  «       y)zŒ
        When a TCP DNS protocol associated with a Resolver disconnects, it is
        removed from the Resolver's connection list.
        rÍ   r²   N)	r   rd   ÚfactoryÚbuildProtocolÚmakeConnectionÚassertInÚconnectionsÚconnectionLostÚassertNotIn)r)   rU   r½   s      r0   Ú(test_tcpDisconnectRemovesFromConnectionsz6ResolverTests.test_tcpDisconnectRemovesFromConnections²  st   € ô
 —?‘?Ð,?Ð+@ÔAˆØ×#Ñ#×1Ñ1°$Ó7ˆØ×Ñ Ô%Ø�‰�h × 4Ñ 4Ô5ð 	×Ñ Ô%Ø×Ñ˜ 8×#7Ñ#7Õ8r2   c                 ó~  — t        j                  «       }t        j                  dg|¬«      }|j	                  t        j                  d«      «      }|j                  d   \  }}}}} G d„ dt        «      }	|j                  |j                  d   t        j                   |	«       «      «       | j                  ||	«       y)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ˆ   r  r¬   r   c                   ó   — e Zd Zy)úVResolverTests.test_singleTCPQueryErrbackOnConnectionFailure.<locals>.SentinelExceptionNró   r6   r2   r0   ÚSentinelExceptionrk  Ì  rõ   r2   rl  N)r   r  r   rd   ÚqueryTCPr   rÙ   Ú
tcpClientsrö   ÚclientConnectionFailedÚ
connectorsr   r÷   ÚfailureResultOf)
r)   r|   rU   râ   r  rþ   r`  r+   ÚbindAddressrl  s
             r0   Ú-test_singleTCPQueryErrbackOnConnectionFailurez;ResolverTests.test_singleTCPQueryErrbackOnConnectionFailureÀ  s¦   € ô  ×-Ñ-Ó/ˆÜ—?‘?Ð,?Ð+@È'ÔRˆà×ÑœcŸi™i¨Ó6Ó7ˆØ4;×4FÑ4FÀqÑ4IÑ1ˆˆd�G˜W kô	¤	ô 	ð 	×&Ñ&Ø×Ñ˜qÑ!¤7§?¡?Ñ3DÓ3FÓ#Gô	
ð 	×Ñ˜QÐ 1Õ2r2   c                 ó  — t        j                  «       }t        j                  dg|¬«      }|j	                  t        j                  d«      «      }|j	                  t        j                  d«      «      }|j                  d   \  }}}}}	 G d„ dt        «      }
|j                  |j                  d   t        j                   |
«       «      «       | j                  ||
«      }| j                  ||
«      }| j                  ||«       y)	z‘
        All pending L{resolver.queryTCP} C{deferred}s will C{errback}
        with the same C{Failure} if the connection attempt fails.
        ri  r  r¬   zexample.netr   c                   ó   — e Zd Zy)úXResolverTests.test_multipleTCPQueryErrbackOnConnectionFailure.<locals>.SentinelExceptionNró   r6   r2   r0   rl  rv  á  rõ   r2   rl  N)r   r  r   rd   rm  r   rÙ   rn  rö   ro  rp  r   r÷   rq  rX   )r)   r|   rU   Úd1Úd2r  rþ   r`  r+   rr  rl  Úf1Úf2s                r0   Ú/test_multipleTCPQueryErrbackOnConnectionFailurez=ResolverTests.test_multipleTCPQueryErrbackOnConnectionFailureÕ  sâ   € ô
  ×-Ñ-Ó/ˆÜ—?‘?Ð,?Ð+@È'ÔRˆà×ÑœsŸy™y¨Ó7Ó8ˆØ×ÑœsŸy™y¨Ó7Ó8ˆØ4;×4FÑ4FÀqÑ4IÑ1ˆˆd�G˜W kô	¤	ô 	ð 	×&Ñ&Ø×Ñ˜qÑ!¤7§?¡?Ñ3DÓ3FÓ#Gô	
ð ×!Ñ! "Ð&7Ó8ˆØ×!Ñ! "Ð&7Ó8ˆØ�‰�b˜"Õr2   c                 óŽ  ‡‡— t        j                  «       }t        j                  dg|¬«      Št	        j
                  d«      Š‰j                  ‰«      }ˆˆfd„}|j                  |«       | j                  t        |j                  «      d«       | j                  t        |j                  «      d«       |j                  d   \  }}}}}t        j                  t        «       «      }	|j                  |j                  d   |	«       | j                  t        |j                  «      d«       | j                  t        |j                  «      d«       | j!                  |«       t        j                  t        «       «      }
|j                  |j                  d   |
«       | j#                  |t        «      }| j%                  ||
«       y)	z{
        An errback on the deferred returned by
        L{client.Resolver.queryTCP} may trigger another TCP query.
        )r   iE'  r  r¬   c                 óP   •— | j                  t        «       ‰j                  ‰«      S rA   )Útrapr   rm  )ÚeÚqrU   s    €€r0   ÚreissuezOResolverTests.test_reentrantTCPQueryErrbackOnConnectionFailure.<locals>.reissueú  s!   ø€ Ø�F‰FÔ)Ô*Ø×$Ñ$ QÓ'Ð'r2   ra   r   rÀ   N)r   r  r   rd   r   rÙ   rm  Ú
addErrbackre   rf   rn  rp  r   r÷   r   ro  ÚassertNoResultrq  rX   )r)   r|   râ   r�  r  rþ   r`  r+   rr  ry  rz  Úfr€  rU   s               @@r0   Ú0test_reentrantTCPQueryErrbackOnConnectionFailurez>ResolverTests.test_reentrantTCPQueryErrbackOnConnectionFailureì  sr  ù€ ô
  ×-Ñ-Ó/ˆÜ—?‘?Ð,@Ð+AÈ7ÔSˆä�I‰I�mÓ$ˆð ×Ñ˜aÓ ˆõ	(ð 	
�‰�WÔà×Ñœ˜W×/Ñ/Ó0°!Ô4Ø×Ñœ˜W×/Ñ/Ó0°!Ô4à4;×4FÑ4FÀqÑ4IÑ1ˆˆd�G˜W 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˜Õr2   c                 ó:  — t        j                  «       }t        j                  dg|¬«      }|j	                  t        j                  d«      «      }|j                  d   \  }}}}}|j                  }	| j                  t        |	«      d«        G d„ dt        «      }
|j                  |j                  d   t        j                   |
«       «      «       | j!                  ||
«       | j#                  |j                  |	«       | j                  t        |	«      d«       y)	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.
        ri  r  r¬   r   ra   c                   ó   — e Zd Zy)úJResolverTests.test_pendingEmptiedInPlaceOnError.<locals>.SentinelExceptionNró   r6   r2   r0   rl  rˆ  '  rõ   r2   rl  N)r   r  r   rd   rm  r   rÙ   rn  Úpendingre   rf   rö   ro  rp  r   r÷   rq  rX   )r)   r|   rU   râ   r  rþ   r`  r+   rr  Ú
prePendingrl  s              r0   Ú!test_pendingEmptiedInPlaceOnErrorz/ResolverTests.test_pendingEmptiedInPlaceOnError  sí   € ô  ×-Ñ-Ó/ˆÜ—?‘?Ð,?Ð+@È'ÔRˆà×ÑœcŸi™i¨Ó6Ó7ˆà4;×4FÑ4FÀqÑ4IÑ1ˆˆd�G˜W kà×%Ñ%ˆ
Ø×Ñœ˜Z›¨!Ô,ô	¤	ô 	ð 	×&Ñ&Ø×Ñ˜qÑ!¤7§?¡?Ñ3DÓ3FÓ#Gô	
ð 	×Ñ˜QÐ 1Ô2Ø�‰�h×&Ñ&¨
Ô3Ø×Ñœ˜Z›¨!Õ,r2   N) r3   r4   r5   r=   r˜   rš   rž   r£   r°   rµ   r¸   rË   rã   rë   rî   rù   r  r  r  r  r'  r,  r7  rD  rP  rV  r^  rg  rs  r{  r…  r‹  r6   r2   r0   r–   r–   í   s˜   „ ñò(ò0ò7òCò+ò$/ò.ò òD#òJ*ò6*ò0
ò6
ò.	/ò1ò,
*ò-ò&+ò&(ò,1ò0=ò2=ò4Bò>9ò3ò*ò.)óV-r2   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„ 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„ Zy)ÚClientTestsc                 óF   — t        «       t        _        d| _        d| _        y)z:
        Replace the resolver with a FakeResolver
        ó   example.comr   N)r   r   ÚtheResolverÚhostnameÚhostnameForGetHostByNamer;   s    r0   ÚsetUpzClientTests.setUp4  s   € ô *›^ŒÔØ&ˆŒØ(<ˆÕ%r2   c                 ó   — dt         _        y)zp
        By setting the resolver to None, it will be recreated next time a name
        lookup is done.
        N)r   r�  r;   s    r0   ÚtearDownzClientTests.tearDown<  s   € ð
 "ŒÕr2   c                 ó²   — |\  }}}|d   }| j                  |j                  j                  | j                  «       | j                  |j                  |«       y)zT
        Verify that the result is the same query type as what is expected.
        r   N)re   r!   r‘  r"   )r)   r-   r*   rÜ   r.   r/   rK   s          r0   ÚcheckResultzClientTests.checkResultC  sK   € ð *1Ñ&ˆ�˜JØ˜‘ˆØ×Ñ˜Ÿ™×)Ñ)¨4¯=©=Ô9Ø×Ñ˜Ÿ™ eÕ,r2   c                 ó(   — | j                  |d«       y)zR
        Test that the getHostByName query returns the 127.0.0.1 address.
        r   NrÓ   ©r)   rK   s     r0   ÚcheckGetHostByNamezClientTests.checkGetHostByNameL  s   € ð 	×Ñ˜ Õ-r2   c                 óz   — t        j                  | j                  «      }|j                  | j                  «       |S )zM
        do a getHostByName of a value that should return 127.0.0.1.
        )r   ÚgetHostByNamer’  rÆ   rš  ©r)   râ   s     r0   Útest_getHostByNamezClientTests.test_getHostByNameR  s1   € ô × Ñ  ×!>Ñ!>Ó?ˆØ	�‰�d×-Ñ-Ô.Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S )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     r0   Útest_lookupAddresszClientTests.test_lookupAddressZ  s5   € ô × Ñ  §¡Ó/ˆØ	�‰�d×&Ñ&¬¯©Ô.Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S ©z+
        See L{test_lookupAddress}
        )r   ÚlookupIPV6Addressr‘  rÆ   r—  r   ÚAAAAr�  s     r0   Útest_lookupIPV6Addressz"ClientTests.test_lookupIPV6Addressd  s5   € ô ×$Ñ$ T§]¡]Ó3ˆØ	�‰�d×&Ñ&¬¯©Ô1Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupAddress6r‘  rÆ   r—  r   rç   r�  s     r0   Útest_lookupAddress6zClientTests.test_lookupAddress6l  s5   € ô ×!Ñ! $§-¡-Ó0ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupNameserversr‘  rÆ   r—  r   ÚNSr�  s     r0   Útest_lookupNameserversz"ClientTests.test_lookupNameserverst  s5   € ô ×$Ñ$ T§]¡]Ó3ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupCanonicalNamer‘  rÆ   r—  r   ÚCNAMEr�  s     r0   Útest_lookupCanonicalNamez$ClientTests.test_lookupCanonicalName|  s5   € ô ×&Ñ& t§}¡}Ó5ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupAuthorityr‘  rÆ   r—  r   ÚSOAr�  s     r0   Útest_lookupAuthorityz ClientTests.test_lookupAuthority„  s5   € ô ×"Ñ" 4§=¡=Ó1ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupMailBoxr‘  rÆ   r—  r   ÚMBr�  s     r0   Útest_lookupMailBoxzClientTests.test_lookupMailBoxŒ  s5   € ô × Ñ  §¡Ó/ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupMailGroupr‘  rÆ   r—  r   ÚMGr�  s     r0   Útest_lookupMailGroupz ClientTests.test_lookupMailGroup”  s5   € ô ×"Ñ" 4§=¡=Ó1ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupMailRenamer‘  rÆ   r—  r   ÚMRr�  s     r0   Útest_lookupMailRenamez!ClientTests.test_lookupMailRenameœ  s5   € ô ×#Ñ# D§M¡MÓ2ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   Ú
lookupNullr‘  rÆ   r—  r   ÚNULLr�  s     r0   Útest_lookupNullzClientTests.test_lookupNull¤  ó5   € ô ×Ñ˜dŸm™mÓ,ˆØ	�‰�d×&Ñ&¬¯©Ô1Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupWellKnownServicesr‘  rÆ   r—  r   ÚWKSr�  s     r0   Útest_lookupWellKnownServicesz(ClientTests.test_lookupWellKnownServices¬  s5   € ô ×*Ñ*¨4¯=©=Ó9ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupPointerr‘  rÆ   r—  r   ÚPTRr�  s     r0   Útest_lookupPointerzClientTests.test_lookupPointer´  ó5   € ô × Ñ  §¡Ó/ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupHostInfor‘  rÆ   r—  r   ÚHINFOr�  s     r0   Útest_lookupHostInfozClientTests.test_lookupHostInfo¼  s5   € ô ×!Ñ! $§-¡-Ó0ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupMailboxInfor‘  rÆ   r—  r   ÚMINFOr�  s     r0   Útest_lookupMailboxInfoz"ClientTests.test_lookupMailboxInfoÄ  ó5   € ô ×$Ñ$ T§]¡]Ó3ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupMailExchanger‘  rÆ   r—  r   ÚMXr�  s     r0   Útest_lookupMailExchangez#ClientTests.test_lookupMailExchangeÌ  s5   € ô ×%Ñ% d§m¡mÓ4ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   Ú
lookupTextr‘  rÆ   r—  r   ÚTXTr�  s     r0   Útest_lookupTextzClientTests.test_lookupTextÔ  s5   € ô ×Ñ˜dŸm™mÓ,ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupSenderPolicyr‘  rÆ   r—  r   ÚSPFr�  s     r0   Útest_lookupSenderPolicyz#ClientTests.test_lookupSenderPolicyÜ  s5   € ô ×%Ñ% d§m¡mÓ4ˆØ	�‰�d×&Ñ&¬¯©Ô0Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupResponsibilityr‘  rÆ   r—  r   ÚRPr�  s     r0   Útest_lookupResponsibilityz%ClientTests.test_lookupResponsibilityä  s5   € ô ×'Ñ'¨¯©Ó6ˆØ	�‰�d×&Ñ&¬¯©Ô/Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupAFSDatabaser‘  rÆ   r—  r   ÚAFSDBr�  s     r0   Útest_lookupAFSDatabasez"ClientTests.test_lookupAFSDatabaseì  rØ  r2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupServicer‘  rÆ   r—  r   ÚSRVr�  s     r0   Útest_lookupServicezClientTests.test_lookupServiceô  rÏ  r2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   Ú
lookupZoner‘  rÆ   r—  r   ÚAXFRr�  s     r0   Útest_lookupZonezClientTests.test_lookupZoneü  rÆ  r2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupAllRecordsr‘  rÆ   r—  r   ÚALL_RECORDSr�  s     r0   Útest_lookupAllRecordsz!ClientTests.test_lookupAllRecords  s5   € ô ×#Ñ# D§M¡MÓ2ˆØ	�‰�d×&Ñ&¬¯©Ô8Øˆr2   c                 ó˜   — t        j                  | j                  «      }|j                  | j                  t
        j                  «       |S r£  )r   ÚlookupNamingAuthorityPointerr‘  rÆ   r—  r   ÚNAPTRr�  s     r0   Ú!test_lookupNamingAuthorityPointerz-ClientTests.test_lookupNamingAuthorityPointer  s5   € ô ×/Ñ/°·±Ó>ˆØ	�‰�d×&Ñ&¬¯	©	Ô2Øˆr2   c                 óà   — t        j                  | j                  t         j                  «      }t	        j
                  |«      }|j                  | j                  t         j                  «       |S )a  
        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   rL   rÆ   r—  )r)   r€  râ   s      r0   Ú
test_queryzClientTests.test_query  sF   € ô �I‰I�d—m‘m¤S§U¡UÓ+ˆÜ�L‰L˜‹OˆØ	�‰�d×&Ñ&¬¯©Ô.Øˆr2   N) r3   r4   r5   r“  r•  r—  rš  rž  r¡  r¦  r©  r­  r±  rµ  r¹  r½  rÁ  rÅ  rÊ  rÎ  rÓ  r×  rÜ  rà  rä  rè  rì  rð  rô  rø  rü  rþ  r6   r2   r0   r�  r�  3  s“   „ ò=ò"ò-ò.òòòòòòòòòòòòòòòòòòòòòòòòó
r2   r�  c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚFilterAnswersTestsz|
    Test L{twisted.names.client.Resolver.filterAnswers}'s handling of various
    error conditions it might encounter.
    c                 ó<   — t        j                  dg¬«      | _        y )N)z0.0.0.0r   r²   )r   rd   rU   r;   s    r0   r“  zFilterAnswersTests.setUp'  s   € ô Ÿ™°Ð0@ÔAˆ�r2   c                 ó   ‡ ‡— t        j                  d¬«      Š‰j                  d«       ˆˆ fd„}|‰ j                  _        ‰ j                  j                  ‰«      }|j                  ‰ j                  dgdgdgf«       |S )zf
        Test that a truncated message results in an equivalent request made via
        TCP.
        T)Útruncr�  c                 ó¾   •— ‰j                  | ‰j                  «       t        j                  «       }dg|_        dg|_        dg|_        t        j                  |«      S )Nr×   r.   r/   )	re   rC   r   rÛ   rÜ   r.   r/   r   r(   )rC   rá   Úmr)   s     €€r0   rm  z:FilterAnswersTests.test_truncatedMessage.<locals>.queryTCP4  sO   ø€ Ø×Ñ˜W a§i¡iÔ0Ü—{‘{“}ˆHØ (˜zˆHÔØ"- ˆHÔØ#/ .ˆHÔÜ—=‘= Ó*Ð*r2   r×   r.   r/   )r   rÛ   ÚaddQueryrU   rm  ÚfilterAnswersrÆ   re   )r)   rm  râ   r  s   `  @r0   Útest_truncatedMessagez(FilterAnswersTests.test_truncatedMessage,  sl   ù€ ô
 �K‰K˜dÔ#ˆØ	�
‰
�>Ô"õ	+ð "*ˆ�‰ÔØ�M‰M×'Ñ'¨Ó*ˆØ	�‰�d×&Ñ&¨(¨°k°]À\ÀNÐ(SÔTØˆr2   c                 óˆ   — t        j                  |¬«      }| j                  j                  |«      }|j	                  |«       y )N)ÚrCode)r   rÛ   rU   r  r~  )r)   Úrcoder6  r  r4  s        r0   Ú
_rcodeTestzFilterAnswersTests._rcodeTestA  s/   € Ü�K‰K˜eÔ$ˆØ�m‰m×)Ñ)¨!Ó,ˆØ�‰��r2   c                 ó^   — | j                  t        j                  t        j                  «      S )z…
        Test that a message with a result code of C{EFORMAT} results in a
        failure wrapped around L{DNSFormatError}.
        )r  r   ÚEFORMATr   ÚDNSFormatErrorr;   s    r0   Útest_formatErrorz#FilterAnswersTests.test_formatErrorF  s   € ð
 �‰œsŸ{™{¬E×,@Ñ,@ÓAÐAr2   c                 ó^   — | j                  t        j                  t        j                  «      S )zP
        Like L{test_formatError} but for C{ESERVER}/L{DNSServerError}.
        )r  r   ÚESERVERr   ÚDNSServerErrorr;   s    r0   Útest_serverErrorz#FilterAnswersTests.test_serverErrorM  s   € ð �‰œsŸ{™{¬E×,@Ñ,@ÓAÐAr2   c                 ó^   — | j                  t        j                  t        j                  «      S )zL
        Like L{test_formatError} but for C{ENAME}/L{DNSNameError}.
        )r  r   ÚENAMEr   ÚDNSNameErrorr;   s    r0   Útest_nameErrorz!FilterAnswersTests.test_nameErrorS  s   € ð �‰œsŸy™y¬%×*<Ñ*<Ó=Ð=r2   c                 ó^   — | j                  t        j                  t        j                  «      S )zX
        Like L{test_formatError} but for C{ENOTIMP}/L{DNSNotImplementedError}.
        )r  r   ÚENOTIMPr   ÚDNSNotImplementedErrorr;   s    r0   Útest_notImplementedErrorz+FilterAnswersTests.test_notImplementedErrorY  s   € ð �‰œsŸ{™{¬E×,HÑ,HÓIÐIr2   c                 ó^   — | j                  t        j                  t        j                  «      S )zW
        Like L{test_formatError} but for C{EREFUSED}/L{DNSQueryRefusedError}.
        )r  r   ÚEREFUSEDr   ÚDNSQueryRefusedErrorr;   s    r0   Útest_refusedErrorz$FilterAnswersTests.test_refusedError_  s   € ð �‰œsŸ|™|¬U×-GÑ-GÓHÐHr2   c                 ód   — | j                  t        j                  dz   t        j                  «      S )zm
        Like L{test_formatError} but for an unrecognized error code and
        L{DNSUnknownError}.
        ra   )r  r   r  r   ÚDNSUnknownErrorr;   s    r0   Útest_refusedErrorUnknownz+FilterAnswersTests.test_refusedErrorUnknowne  s$   € ð
 �‰œsŸ|™|¨aÑ/´×1FÑ1FÓGÐGr2   N)r3   r4   r5   r=   r“  r  r  r  r  r  r  r   r#  r6   r2   r0   r   r   !  s:   „ ñò
Bò
ò*ò
BòBò>òJòIóHr2   r   c                   ó    — e Zd Zd„ Zdd„Zd„ Zy)ÚFakeDNSDatagramProtocolc                 ó0   — g | _         t        «       | _        y rA   rB   r;   s    r0   rE   z FakeDNSDatagramProtocol.__init__n  rF   r2   Nc                 ó�   — | j                   j                  ||||f«       t        j                  t	        j
                  |«      «      S rA   )rC   rI   r   rC  r   r   )r)   r   rC   r+   rJ   s        r0   rL   zFakeDNSDatagramProtocol.queryr  s7   € Ø�‰×Ñ˜W g¨w¸Ð;Ô<Ü�z‰zœ%×4Ñ4°WÓ=Ó>Ð>r2   c                  ó   — y rA   r6   )r)   rJ   s     r0   ÚremoveResendz$FakeDNSDatagramProtocol.removeResendv  s   € àr2   rM   )r3   r4   r5   rE   rL   r)  r6   r2   r0   r%  r%  m  s   „ ò$ó?ór2   r%  c                   ó*   — e Zd ZdZg d¢Zd„ Zd„ Zd„ Zy)ÚRetryLogicTestszE
    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                 ó"  ‡— | j                   D �cg c]  }|df‘Œ }}t        j                  d|¬«      }t        «       Šˆfd„|_        |j                  d«      j                  | j                  «      j                  | j                  ‰«      S c c}w )a  
        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)rx   rŒ   c                  ó   •— ‰ S rA   r6   )r  s   €r0   r¾   z8RetryLogicTests.test_roundRobinBackoff.<locals>.<lambda>Œ  s   ø€  u€ r2   rÑ   )
ÚtestServersr   rd   r%  rÃ   r   rÆ   Ú_cbRoundRobinBackoffr‚  Ú_ebRoundRobinBackoff)r)   ÚxÚaddrsrj   r  s       @r0   Útest_roundRobinBackoffz&RetryLogicTests.test_roundRobinBackoff‚  s{   ø€ ð #'×"2Ñ"2Ö3˜Q�!�R’Ð3ˆÐ3Ü�O‰O 4°Ô7ˆÜ'Ó)ˆÛ,ˆÔà�O‰OÐ.Ó/ß‰[˜×2Ñ2Ó3ß‰Z˜×1Ñ1°5Ó9ð	
ùò	 4s   �Bc                 ó&   — | j                  d«       y )Nz/Lookup address succeeded, should have timed out)rC  r™  s     r0   r/  z$RetryLogicTests._cbRoundRobinBackoff“  s   € Ø�	‰	ÐCÕDr2   c                 óø  —  |j                   t        j                  «       dD ]º  }|j                  d t	        | j
                  «       }|j                  d t	        | j
                  «      …= |j                  «        t        | j
                  «      }|j                  «        t        ||«      D ]0  \  \  }}}}	}
| j                  ||
df«       | j                  ||«       Œ2 Œ¼ | j                  |j                  «       y )N)ra   rÁ   é   é-   rˆ   )r~  r   ÚTimeoutErrorrC   rf   r.  ÚsortÚlistÚzipre   rO  )r)   r   Ú	fakeProtoÚtÚtriesÚexpectedÚaddrrL   r+   rJ   ÚexpectedAddrs              r0   r0  z$RetryLogicTests._ebRoundRobinBackoff–  så   € Øˆ�‰”U×'Ñ'Ô(ð
  ò 
	-ˆAØ×%Ñ%Ð&=¬¨D×,<Ñ,<Ó(=Ð>ˆEØ×!Ñ!Ð"9¤C¨×(8Ñ(8Ó$9Ð"9Ð:à�J‰JŒLÜ˜D×,Ñ,Ó-ˆHØ�M‰MŒOä<?ÀÀxÓ<Pò -Ñ8Ñ*��u˜g r¨LØ× Ñ  ¨°bÐ'9Ô:Ø× Ñ  ¨!Õ,ñ-ð
	-ð 	×Ñ˜×*Ñ*Õ+r2   N)r3   r4   r5   r=   r.  r3  r/  r0  r6   r2   r0   r+  r+  {  s   „ ñò ?€Kò
ò"Eó,r2   r+  c                   ó   — e Zd ZdZd„ Zy)ÚThreadedResolverTestsz/
    Tests for L{client.ThreadedResolver}.
    c                 ó  — t        j                  «        | j                  | j                  g¬«      }| j	                  |d   d   d«       | j	                  |d   d   t
        «       | j	                  t        |«      d«       y)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.Úcategoryra   N)r   ÚThreadedResolverÚflushWarningsÚtest_deprecatedre   ÚDeprecationWarningrf   )r)   Úwarningss     r0   rJ  z%ThreadedResolverTests.test_deprecated°  s{   € ô
 	×ÑÔ!Ø×%Ñ%¸$×:NÑ:NÐ9OÐ%ÓPˆØ×ÑØ�Q‰K˜	Ñ"ðô	
ð 	×Ñ˜ !™ ZÑ0Ô2DÔEØ×Ñœ˜X›¨Õ*r2   N)r3   r4   r5   r=   rJ  r6   r2   r0   rC  rC  «  s   „ ñó+r2   rC  )6r=   r2  Ú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   Ú	isWindowsr\   r   r8   r?   ÚTestCaserP   r_   r–   r�  r   r%  r+  rC  r6   r2   r0   ú<module>r_     s  ðñó
 ç ;å "ß LÝ 1Ý 'Ý @ß :Õ :Ý -Ý 4Ý (Ý ;Ý "Ý ,Ý +Ý &Ý "à€x×ÑÔØ�KàN€Kô?�<ô ?÷0!ñ !÷ñ ô.�x×(Ñ(ô ô4o&˜(×+Ñ+Ð->ô o&ôdC	-�H×%Ñ%ô C	-ôLk�(×#Ñ#ô kô\IH˜×*Ñ*ô IH÷Xñ ô-,�h×'Ñ'ô -,ô`+˜H×-Ñ-õ +r2   