§
    Ètºf¢  ã                   óˆ  — 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#j(        ¦   «         sdZ)ndZ) G d„ de¦  «        Z* G d„ d¦  «        Z+ G d„ d¦  «        Z, G d„ de'j-        ¦  «        Z. G d„ de'j-        e¦  «        Z/ G d„ de'j-        ¦  «        Z0 G d „ d!e'j-        ¦  «        Z1 G d"„ d#e'j-        ¦  «        Z2 G d$„ d%¦  «        Z3 G d&„ d'e'j-        ¦  «        Z4 G d(„ d)e'j-        ¦  «        Z5dS )*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dS )ÚFakeResolverc           
      óê   — |dk    r8t          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	            ú]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/test/test_client.pyÚ_lookupzFakeResolver._lookup$   sŠ   € ð Ð'Ò'Ð'Ý”ØÝ”UØØÝœ¨[¸bÐAÑAÔAðñ ô ˆBˆBõ ” 4¨e¸À"ÐEÑ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dS )Ú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| _         d S )NT)Údisconnected©r)   s    r0   ÚstopListeningzStubPort.stopListeningF   s   € Ø ˆÔÐÐr2   N)r3   r4   r5   Ú__doc__r:   r<   r6   r2   r0   r8   r8   ;   s4   € € € € € ðð ð €Lð!ð !ð !ð !ð !r2   r8   c                   ó    — e Zd ZdZd„ Zdd„ZdS )Ú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                 ó:   — g | _         t          ¦   «         | _        d S ©N©Úqueriesr8   Ú	transportr;   s    r0   Ú__init__z StubDNSDatagramProtocol.__init__S   ó   € ØˆŒÝ!™œˆŒˆˆr2   é
   Nc                 ój   — t          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   s7   € õ
 ”Ñ!Ô!ˆØŒ×Ò˜W g¨w¸¸FÐCÑDÔDÐDØˆr2   ©rG   N)r3   r4   r5   r=   rE   rM   r6   r2   r0   r?   r?   J   sA   € € € € € ðð ð$ð $ð $ðð ð ð ð ð r2   r?   c                   ó"   — e Zd ZdZeZd„ Zd„ ZdS )ÚGetResolverTestsz*
    Tests for L{client.getResolver}.
    c                 óâ   — t          t          ¦   «         ¦  «        5  t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      t          t          |¦  «        ¦  «         dS )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   s›   € õ �e™gœgÑ&Ô&ð 	,ð 	,ÝÔ)Ñ+Ô+ˆHð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,à�Š�¥Y°Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:ó   œ<¼A ÁA c                 óä   — t          t          ¦   «         ¦  «        5  t          j        ¦   «         }t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      ||¦  «         dS )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   s£   € õ
 �e™gœgÑ&Ô&ð 	%ð 	%ÝÔ"Ñ$Ô$ˆAÝÔ"Ñ$Ô$ˆAð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	�Š�a˜ÑÔÐÐÐs   œ'AÁAÁAN)r3   r4   r5   r=   ÚwindowsSkipÚskiprV   r\   r6   r2   r0   rP   rP   a   sC   € € € € € ðð ð €Dð;ð ;ð ;ðð ð ð ð r2   rP   c                   óR   — 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dS )ÚCreateResolverTestsz-
    Tests for L{client.createResolver}.
    c                 ó°   — d„ |j         D ¦   «         }|                      dt          |¦  «        ¦  «         |                      |d         j        |¦  «         d S )Nc                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r6   )Ú
isinstancer   ÚResolver©Ú.0Úrs     r0   ú
<listcomp>z2CreateResolverTests._hostsTest.<locals>.<listcomp>ƒ   s)   € ÐNÐNÐN�Qµ
¸1½e¼nÑ0MÔ0MÐNˆqÐNÐNÐNr2   é   r   )Ú	resolversÚassertEqualÚlenÚfile©r)   rU   ÚfilenameÚress       r0   Ú
_hostsTestzCreateResolverTests._hostsTest‚   sV   € ØNÐN˜(Ô,ÐNÑNÔNˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ø×Ò˜˜Qœœ hÑ/Ô/Ð/Ð/Ð/r2   c                 ó¾   — t          t          ¦   «         ¦  «        5  t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      |d¦  «         dS )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   ÚcreateResolverrq   rT   s     r0   Útest_defaultHostsz%CreateResolverTests.test_defaultHosts‡   s“   € õ �e™gœgÑ&Ô&ð 	/ð 	/ÝÔ,Ñ.Ô.ˆHð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/à�Š˜ -Ñ0Ô0Ð0Ð0Ð0rW   c                 óÂ   — t          t          ¦   «         ¦  «        5  t          j        d¬¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |d¦  «         dS )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   Nrs   rT   s     r0   Útest_overrideHostsz&CreateResolverTests.test_overrideHosts‘   s©   € õ �e™gœgÑ&Ô&ð 	@ð 	@ÝÔ,°;Ð?Ñ?Ô?ˆHð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@à�Š˜ +Ñ.Ô.Ð.Ð.Ð.ó   œ>¾AÁAc                 ó°   — d„ |j         D ¦   «         }|                      dt          |¦  «        ¦  «         |                      |d         j        |¦  «         dS )z|
        Verify that C{resolver} has a L{client.Resolver} with a configuration
        filename set to C{filename}.
        c                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r6   ©rc   r   rd   re   s     r0   rh   z7CreateResolverTests._resolvConfTest.<locals>.<listcomp>    ó)   € ÐOÐOÐO�Qµ
¸1½f¼oÑ0NÔ0NÐOˆqÐOÐOÐOr2   ri   r   N)rj   rk   rl   Úresolvrn   s       r0   Ú_resolvConfTestz#CreateResolverTests._resolvConfTest›   sY   € ð
 PÐO˜(Ô,ÐOÑOÔOˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ø×Ò˜˜Qœœ¨Ñ1Ô1Ð1Ð1Ð1r2   c                 ó@  — t          ¦   «         }t          |¦  «        5  t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   d„ |j        D ¦   «         }|                      dt          |¦  «        ¦  «         |                      ||d         j        ¦  «         dS )z—
        The L{client.Resolver} included in the L{resolve.ResolverChain} returned
        by L{client.createResolver} uses the global reactor.
        Nc                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r6   r|   re   s     r0   rh   z4CreateResolverTests.test_reactor.<locals>.<listcomp>¬   r}   r2   ri   r   )	r	   r
   r   rt   rj   rk   rl   rY   Ú_reactor)r)   ÚreactorrU   rp   s       r0   Útest_reactorz CreateResolverTests.test_reactor¤   sÐ   € õ
 ‘'”'ˆÝ˜gÑ&Ô&ð 	/ð 	/ÝÔ,Ñ.Ô.ˆHð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/àOÐO˜(Ô,ÐOÑOÔOˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ø�Š�g˜s 1œvœÑ/Ô/Ð/Ð/Ð/s   ž>¾AÁAc                 ó¾   — t          t          ¦   «         ¦  «        5  t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      |d¦  «         dS )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   rt   r   rT   s     r0   Útest_defaultResolvConfz*CreateResolverTests.test_defaultResolvConf°   s–   € õ �e™gœgÑ&Ô&ð 	/ð 	/ÝÔ,Ñ.Ô.ˆHð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/à×Ò˜XÐ':Ñ;Ô;Ð;Ð;Ð;rW   c                 óÂ   — t          t          ¦   «         ¦  «        5  t          j        d¬¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |d¦  «         dS )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.
        rw   ©Ú
resolvconfNr†   rT   s     r0   Útest_overrideResolvConfz+CreateResolverTests.test_overrideResolvConfº   s«   € õ �e™gœgÑ&Ô&ð 	Eð 	EÝÔ,¸ÐDÑDÔDˆHð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eà×Ò˜X {Ñ3Ô3Ð3Ð3Ð3ry   c                 óà  — |                       ¦   «         }|                     d¦  «         t          t          ¦   «         ¦  «        5  t	          j        |j         ¬¦  «        }ddd¦  «         n# 1 swxY w Y   d„ |j        D ¦   «         }|                      dt          |¦  «        ¦  «         |                      g |d         j	        ¦  «         |                      dg|d         j
        ¦  «         dS )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‰   Nc                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r6   r|   re   s     r0   rh   z;CreateResolverTests.test_defaultServers.<locals>.<listcomp>Í   r}   r2   ri   r   ©z	127.1.2.3é5   ©ÚpathÚ
setContentr
   r	   r   rt   rj   rk   rl   ÚserversÚ
dynServers©r)   rŠ   rU   rp   s       r0   Útest_defaultServersz'CreateResolverTests.test_defaultServersÄ   s(  € ð
 —Y’Y‘[”[ˆ
Ø×ÒÐ7Ñ8Ô8Ð8Ý�e™gœgÑ&Ô&ð 	Ið 	IÝÔ,¸
¼ÐHÑHÔHˆHð	Ið 	Ið 	Iñ 	Iô 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Iøøøð 	Ið 	Ið 	Ið 	IàOÐO˜(Ô,ÐOÑOÔOˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ø×Ò˜˜S œVœ^Ñ,Ô,Ð,Ø×ÒÐ+Ð,¨c°!¬fÔ.?Ñ@Ô@Ð@Ð@Ð@s   ÁA,Á,A0Á3A0c                 óæ  — |                       ¦   «         }|                     d¦  «         t          t          ¦   «         ¦  «        5  t	          j        dg|j         ¬¦  «        }ddd¦  «         n# 1 swxY w Y   d„ |j        D ¦   «         }|                      dt          |¦  «        ¦  «         |                      dg|d         j	        ¦  «         |                      dg|d         j
        ¦  «         dS )	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Š   Nc                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r6   r|   re   s     r0   rh   z<CreateResolverTests.test_overrideServers.<locals>.<listcomp>Ý   r}   r2   ri   r   r�   r‘   r–   s       r0   Útest_overrideServersz(CreateResolverTests.test_overrideServersÒ   s*  € ð
 —Y’Y‘[”[ˆ
Ø×ÒÐ7Ñ8Ô8Ð8Ý�e™gœgÑ&Ô&ð 	ð 	ÝÔ,Ø*Ð+¸
¼ðñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð PÐO˜(Ô,ÐOÑOÔOˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ø×ÒÐ+Ð,¨c°!¬f¬nÑ=Ô=Ð=Ø×ÒÐ+Ð,¨c°!¬fÔ.?Ñ@Ô@Ð@Ð@Ð@s   ÁA.Á.A2Á5A2c                 óú   — t          t          ¦   «         ¦  «        5  t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   d„ |j        D ¦   «         }|                      dt          |¦  «        ¦  «         dS )zy
        L{client.createResolver} returns a L{resolve.ResolverChain} including a
        L{cache.CacheResolver}.
        Nc                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r6   )rc   r   ÚCacheResolverre   s     r0   rh   z2CreateResolverTests.test_cache.<locals>.<listcomp>é   s*   € ÐSÐSÐS�Qµ
¸1½eÔ>QÑ0RÔ0RÐSˆqÐSÐSÐSr2   ri   )r
   r	   r   rt   rj   rk   rl   )r)   rU   rp   s      r0   Ú
test_cachezCreateResolverTests.test_cacheâ   s±   € õ
 �e™gœgÑ&Ô&ð 	/ð 	/ÝÔ,Ñ.Ô.ˆHð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/àSÐS˜(Ô,ÐSÑSÔSˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ð%Ð%rW   N)r3   r4   r5   r=   r]   r^   rq   ru   rx   r   r„   r‡   r‹   r—   rš   rž   r6   r2   r0   r`   r`   {   sÁ   € € € € € ðð ð €Dð0ð 0ð 0ð
1ð 1ð 1ð/ð /ð /ð2ð 2ð 2ð
0ð 
0ð 
0ð<ð <ð <ð4ð 4ð 4ðAð Að AðAð 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dS )ÚResolverTestsz'
    Tests for L{client.Resolver}.
    c                 ó:   — t          t          t          ¦  «         dS )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                 óD   — t          t          t          j        ¦  «         dS )z;
        L{client.Resolver} provides L{IResolver}.
        N)r   r   r   rd   r;   s    r0   Ú$test_clientResolverProvidesIResolverz2ResolverTests.test_clientResolverProvidesIResolverù   s   € õ 	•I�vœÑ/Ô/Ð/Ð/Ð/r2   c                 óP   — |                       t          t          j        ¦  «         dS )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Ñ6Ô6Ð6Ð6Ð6r2   c                 ó¦   — t          j        |                      ¦   «         t          ¦   «         ¬¦  «        }|                      dg|j        ¦  «         dS )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   rd   Úmktempr	   rk   r•   rT   s     r0   Útest_missingConfigurationz'ResolverTests.test_missingConfiguration  sG   € õ ”?¨$¯+ª+©-¬-ÅÁÄÐIÑIÔIˆØ×ÒÐ+Ð,¨hÔ.AÑBÔBÐBÐBÐBr2   c                 ó  ‡— t          |                      ¦   «         ¦  «        }|                     d¬¦  «        Š G ˆfd„dt          j        ¦  «        } |ddgdt          ¦   «         ¬¦  «         |                      ‰j        ¦  «         d	S )
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dS )ú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”   r~   rƒ   N)r   r¬   Úopenr   rd   r	   rS   Úclosed)r)   Úhandlerµ   r³   s      @r0   Útest_closesResolvConfz#ResolverTests.test_closesResolvConf  s¬   ø€ õ ˜$Ÿ+š+™-œ-Ñ(Ô(ˆØ—[’[ d�[Ñ+Ô+ˆ
ð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"�6œ?ñ 	"ô 	"ð 	"ð 	ˆØ" BÐ'Ð0BÍEÉGÌGð	
ñ 	
ô 	
ð 	
ð 	�Š˜
Ô)Ñ*Ô*Ð*Ð*Ð*r2   c                 ó”   — t          j        dg¬¦  «        }|                     dg¦  «         |                      d|j        ¦  «         dS )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   ÚparseConfigrk   ÚdomainrT   s     r0   Útest_domainEmptyArgumentz&ResolverTests.test_domainEmptyArgument!  sN   € õ
 ”?Ð,=Ð+>Ð?Ñ?Ô?ˆØ×Ò˜k˜]Ñ+Ô+Ð+Ø×Ò˜˜hœoÑ.Ô.Ð.Ð.Ð.r2   c                 ó”   — t          j        dg¬¦  «        }|                     dg¦  «         |                      g |j        ¦  «         dS )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½   rk   ÚsearchrT   s     r0   Útest_searchEmptyArgumentz&ResolverTests.test_searchEmptyArgument*  sN   € õ
 ”?Ð,=Ð+>Ð?Ñ?Ô?ˆØ×Ò˜k˜]Ñ+Ô+Ð+Ø×Ò˜˜Xœ_Ñ-Ô-Ð-Ð-Ð-r2   c                 ó"  ‡— t          ¦   «         Šddg}ddg}t          j        |¬¦  «        }||_        ˆfd„|_        t          ¦   «         }|                     d¦  «        }|                     | j        |¦  «         |                      t          ‰j
        ¦  «        d¦  «         |                      ‰j
        d	         d	         |d	         ¦  «         ‰j
        d	         d
                              t          d	¦  «        ¦  «         |                      t          ‰j
        ¦  «        d¦  «         |                      ‰j
        d         d	         |d         ¦  «         ‰j
        d         d
                              t          d¦  «        ¦  «         |                      t          ‰j
        ¦  «        d¦  «         |                      ‰j
        d         d	         |d	         ¦  «         ‰j
        d         d
                              t          d¦  «        ¦  «         |                      t          ‰j
        ¦  «        d¦  «         |                      ‰j
        d         d	         |d         ¦  «         ‰j
        d         d
                              |¦  «         |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   Nri   r   éÿÿÿÿé   é   é   )r?   r   rd   r•   Ú_connectedProtocolÚobjectÚqueryUDPÚaddCallbackrk   rl   rC   rY   Úerrbackr   Úcallback)r)   r”   r•   rU   ÚexpectedResultÚqueryResultrÇ   s         @r0   Útest_datagramQueryServerOrderz+ResolverTests.test_datagramQueryServerOrder3  sA  ø€ õ +Ñ,Ô,ˆà Ð,ˆØ! ;Ð/ˆ
Ý”?¨7Ð3Ñ3Ô3ˆØ(ˆÔØ&@Ð&@Ð&@Ð&@ˆÔ#å™œˆØ×'Ò'¨Ñ-Ô-ˆØ×Ò Ô 0°.ÑAÔAÐAà×Ò�˜XÔ-Ñ.Ô.°Ñ2Ô2Ð2Ø�Š�hÔ& qÔ)¨!Ô,¨g°a¬jÑ9Ô9Ð9ØÔ˜Ô˜BÔ×'Ò'Õ(<¸QÑ(?Ô(?Ñ@Ô@Ð@Ø×Ò�˜XÔ-Ñ.Ô.°Ñ2Ô2Ð2Ø�Š�hÔ& qÔ)¨!Ô,¨g°a¬jÑ9Ô9Ð9ØÔ˜Ô˜BÔ×'Ò'Õ(<¸QÑ(?Ô(?Ñ@Ô@Ð@Ø×Ò�˜XÔ-Ñ.Ô.°Ñ2Ô2Ð2Ø�Š�hÔ& qÔ)¨!Ô,¨j¸¬mÑ<Ô<Ð<ØÔ˜Ô˜BÔ×'Ò'Õ(<¸QÑ(?Ô(?Ñ@Ô@Ð@Ø×Ò�˜XÔ-Ñ.Ô.°Ñ2Ô2Ð2Ø�Š�hÔ& qÔ)¨!Ô,¨j¸¬mÑ<Ô<Ð<ØÔ˜Ô˜BÔ×(Ò(¨Ñ8Ô8Ð8àÐr2   c                 óÜ  ‡ ‡	‡
— t          ¦   «         Š
t          j        dg¬¦  «        }ˆ
fd„|_        ‰
j        }t          j        dt
          j        t
          j        ¦  «        }| 	                    |¦  «        }‰  
                    t          |¦  «        d¦  «         | 	                    |¦  «        }‰  
                    t          |¦  «        d¦  «         t          ¦   «         Š	t          j        ¦   «         }|j                             ‰	¦  «         |                     ¦   «         d                              |¦  «         t%          j        ||g¦  «        }ˆ	ˆ fd„}|                     |¦  «         |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.comri   rÉ   c                 óz   •— | \  }}‰                      |‰gg g f¦  «         ‰                      |‰gg g f¦  «         d S rA   ©rk   )Ú	responsesÚfirstResponseÚsecondResponseÚanswerr)   s      €€r0   Ú
cbFinishedz>ResolverTests.test_singleConcurrentRequest.<locals>.cbFinishedr  sQ   ø€ Ø,5Ñ)ˆM˜>Ø×Ò˜]¨f¨X°r¸2Ð,>Ñ?Ô?Ð?Ø×Ò˜^¨v¨h¸¸BÐ-?Ñ@Ô@Ð@Ð@Ð@r2   )r?   r   rd   rÍ   rC   r   ÚQueryr&   ÚINrM   rk   rl   rÎ   ÚMessageÚanswersrJ   ÚpoprÒ   r   ÚgatherResultsrÐ   )r)   rU   rC   rM   ÚfirstResultÚsecondResultÚresponseÚdrâ   rá   rÇ   s   `        @@r0   Útest_singleConcurrentRequestz*ResolverTests.test_singleConcurrentRequestU  sU  øøø€ õ +Ñ,Ô,ˆÝ”?Ð,?Ð+@ÐAÑAÔAˆØ&6Ð&6Ð&6Ð&6ˆÔ#ØÔ"ˆå”	Ð,­c¬eµS´VÑ<Ô<ˆà—n’n UÑ+Ô+ˆØ×Ò�˜W™œ qÑ)Ô)Ð)ð  —~’~ eÑ,Ô,ˆØ×Ò�˜W™œ qÑ)Ô)Ð)õ ‘”ˆÝ”;‘=”=ˆØÔ×Ò Ñ'Ô'Ð'Ø�Š‰Œ�bÔ×"Ò" 8Ñ,Ô,Ð,åÔ ¨lÐ ;Ñ<Ô<ˆð	Að 	Að 	Að 	Að 	Að 	Að
 	
�Š�jÑ!Ô!Ð!Øˆr2   c                 ó|  ‡— t          ¦   «         Št          j        dg¬¦  «        }ˆfd„|_        ‰j        }t          j        dt
          j        ¦  «        }|                     |¦  «         |  	                    t          |¦  «        d¦  «         t          j        dt
          j        ¦  «        }|                     |¦  «         |  	                    t          |¦  «        d¦  «         t          j        dt
          j        ¦  «        }|                     |¦  «         |  	                    t          |¦  «        d¦  «         d	S )
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Û   ri   ó   bar.example.comrÊ   rË   N)r?   r   rd   rÍ   rC   r   rã   r&   rM   rk   rl   ÚA6)r)   rU   rC   Ú
firstQueryÚsecondQueryÚ
thirdQueryrÇ   s         @r0   Útest_multipleConcurrentRequestsz-ResolverTests.test_multipleConcurrentRequestsz  s  ø€ õ
 +Ñ,Ô,ˆÝ”?Ð,?Ð+@ÐAÑAÔAˆØ&6Ð&6Ð&6Ð&6ˆÔ#ØÔ"ˆõ ”YÐ1µ3´5Ñ9Ô9ˆ
Ø�Š�zÑ"Ô"Ð"Ø×Ò�˜W™œ qÑ)Ô)Ð)õ ”iÐ 2µC´EÑ:Ô:ˆØ�Š�{Ñ#Ô#Ð#Ø×Ò�˜W™œ qÑ)Ô)Ð)õ ”YÐ1µ3´6Ñ:Ô:ˆ
Ø�Š�zÑ"Ô"Ð"Ø×Ò�˜W™œ qÑ)Ô)Ð)Ð)Ð)r2   c                 ó  ‡— t          ¦   «         Št          j        dg¬¦  «        }ˆfd„|_        ‰j        }t          j        dt
          j        ¦  «        }|                     |¦  «         |  	                    t          |¦  «        d¦  «         |                     ¦   «         d                              t          j        ¦   «         ¦  «         |                     |¦  «         |  	                    t          |¦  «        d¦  «         dS )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Û   ri   rÉ   N)r?   r   rd   rÍ   rC   r   rã   r&   rM   rk   rl   rç   rÒ   rå   )r)   rU   rC   rM   rÇ   s       @r0   Útest_multipleSequentialRequestsz-ResolverTests.test_multipleSequentialRequests•  sâ   ø€ õ +Ñ,Ô,ˆÝ”?Ð,?Ð+@ÐAÑAÔAˆØ&6Ð&6Ð&6Ð&6ˆÔ#ØÔ"ˆå”	Ð,­c¬eÑ4Ô4ˆð 	�Š�uÑÔÐØ×Ò�˜W™œ qÑ)Ô)Ð)ð 	�Š‰Œ�bÔ×"Ò"¥3¤;¡=¤=Ñ1Ô1Ð1ð 	�Š�uÑÔÐØ×Ò�˜W™œ qÑ)Ô)Ð)Ð)Ð)r2   c                 ó0  ‡— t          ¦   «         Št          j        dg¬¦  «        }ˆfd„|_        ‰j        }t          j        dt
          j        ¦  «        }|                     |¦  «        }|                     |¦  «        } G d„ dt          ¦  «        }| 
                    ¦   «         d                              t          j         |¦   «         ¦  «        ¦  «         t          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dS )úGResolverTests.test_multipleConcurrentFailure.<locals>.ExpectedExceptionN©r3   r4   r5   r6   r2   r0   ÚExpectedExceptionrü   ¼  ó   € € € € € ØˆDr2   rþ   rÉ   )r?   r   rd   rÍ   rC   r   rã   r&   rM   Ú	Exceptionrç   rÑ   r   ÚFailurer   rè   ÚassertFailure)r)   rU   rC   rM   ré   rê   rþ   rÇ   s          @r0   Útest_multipleConcurrentFailurez,ResolverTests.test_multipleConcurrentFailure­  s  ø€ õ +Ñ,Ô,ˆÝ”?Ð,?Ð+@ÐAÑAÔAˆØ&6Ð&6Ð&6Ð&6ˆÔ#ØÔ"ˆå”	Ð,­c¬eÑ4Ô4ˆØ—n’n UÑ+Ô+ˆØ—~’~ eÑ,Ô,ˆð	ð 	ð 	ð 	ð 	¥	ñ 	ô 	ð 	ð 	�Š‰Œ�bÔ×!Ò!¥'¤/Ð2CÐ2CÑ2EÔ2EÑ"FÔ"FÑGÔGÐGåÔ"à×"Ò" ;Ð0AÑBÔBØ×"Ò" <Ð1BÑCÔCðñ
ô 
ð 	
r2   c                 ó  — t          j        dg¬¦  «        }|                     ¦   «         }|                     ¦   «         }|                      |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ÑAÔAˆØ×0Ò0Ñ2Ô2ˆ
Ø×1Ò1Ñ3Ô3ˆà×Ò˜ZÔ1Ñ2Ô2Ð2Ø×Ò˜[Ô2Ñ3Ô3Ð3Ø×ÒØÔ ×(Ò(Ñ*Ô*Ô/°Ô1F×1NÒ1NÑ1PÔ1PÔ1Uñ	
ô 	
ð 	
õ Ô"åÔ# JÔ$8Ô$FÑGÔGÝÔ# KÔ$9Ô$GÑHÔHðñ
ô 
ð 	
r2   c                 óÚ   — t          j        ¦   «         }t          j        |                      ¦   «         |¬¦  «        }|                     ¦   «         }|                      |j        |¦  «         dS )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Í   rY   r‚   )r)   rƒ   rU   Úprotos       r0   Ú)test_resolverUsesOnlyParameterizedReactorz7ResolverTests.test_resolverUsesOnlyParameterizedReactorß  s[   € õ Ô)Ñ+Ô+ˆÝ”?¨$¯+ª+©-¬-ÀÐIÑIÔIˆØ×+Ò+Ñ-Ô-ˆØ�Š�e”n gÑ.Ô.Ð.Ð.Ð.r2   c                 ó`  ‡— t          j        dg¬¦  «        }g Š G ˆfd„d¦  «        }||_        |                     t	          j        d¦  «        ¦  «         |                     t	          j        d¦  «        ¦  «         |                      t          t          ‰¦  «        ¦  «        d¦  «         dS )	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dS )ú:ResolverTests.test_differentProtocol.<locals>.FakeProtocolc                 ó,   — t          ¦   «         | _        d S rA   ©r8   rD   r;   s    r0   rE   zCResolverTests.test_differentProtocol.<locals>.FakeProtocol.__init__ô  ó   € Ý!)¡¤�”��r2   rG   Nc                 óx   •— ‰                      | ¦  «         t          j        t          j        ¦   «         ¦  «        S rA   )rJ   r   r(   r   rå   )r)   r   rM   r+   rK   Ú	protocolss        €r0   rM   z@ResolverTests.test_differentProtocol.<locals>.FakeProtocol.query÷  s-   ø€ Ø× Ò  Ñ&Ô&Ð&Ý”}¥S¤[¡]¤]Ñ3Ô3Ð3r2   rN   ©r3   r4   r5   rE   rM   )r  s   €r0   ÚFakeProtocolr  ó  sB   ø€ € € € € ð,ð ,ð ,ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r2   r  rÛ   rð   rÊ   N)	r   rd   rÍ   rM   r   rã   rk   rl   Úset)r)   rU   r  r  s      @r0   Útest_differentProtocolz$ResolverTests.test_differentProtocolê  sÀ   ø€ õ ”?Ð,?Ð+@ÐAÑAÔAˆØˆ	ð	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð '3ˆÔ#Ø�Š•s”yÐ!3Ñ4Ô4Ñ5Ô5Ð5Ø�Š•s”yÐ!3Ñ4Ô4Ñ5Ô5Ð5Ø×Ò��S ™^œ^Ñ,Ô,¨aÑ0Ô0Ð0Ð0Ð0r2   c                 óB  — t          j        ¦   «         }t          j        dg|¬¦  «        }|                     t          j        d¦  «        ¦  «         |j                             ¦   «         \  \  }}| 	                    ¦   «         j
        }|                      d|¦  «         dS )z<
        If the resolver is ipv6, open a ipv6 port.
        rÄ   ©r”   rƒ   rÛ   z::N)r   r  r   rd   rM   r   rã   ÚudpPortsÚitemsr  Úhostrk   )r)   ÚfakerU   r  rD   rÆ   s         r0   Útest_ipv6ResolverzResolverTests.test_ipv6Resolver   s�   € õ
 Ô&Ñ(Ô(ˆÝ”?¨K¨=À$ÐGÑGÔGˆØ�Š•s”yÐ!3Ñ4Ô4Ñ5Ô5Ð5Ø#œ}×2Ò2Ñ4Ô4ÑÑ	ˆ%�Ø×%Ò%Ñ'Ô'Ô,ˆ	Ø×Ò˜˜yÑ)Ô)Ð)Ð)Ð)r2   c                 óü   ‡— g Š G ˆfd„d¦  «        }t          j        dg¬¦  «        } |¦   «         |_        |                     ¦   «          |                      t          t          ‰¦  «        ¦  «        d¦  «         dS )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dS )ú6ResolverTests.test_disallowedPort.<locals>.FakeReactorc                 óz   •— ‰                      |¦  «         t          ‰¦  «        dk    rt          d |d ¦  «        ‚d S )Nri   )rJ   rl   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Í   rk   rl   r  ©r)   r/  rU   r+  s      @r0   Útest_disallowedPortz!ResolverTests.test_disallowedPort  sœ   ø€ ð
 ˆð	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ñ 	>ô 	>ð 	>õ ”?Ð,?Ð+@ÐAÑAÔAˆØ'˜K™MœMˆÔà×#Ò#Ñ%Ô%Ð%Ø×Ò��S ™ZœZ™œ¨!Ñ,Ô,Ð,Ð,Ð,r2   c                 óú   ‡— g Š G ˆfd„d¦  «        }t          j        dg¬¦  «        } |¦   «         |_        |                      t          |j        ¦  «         |                      t          ‰¦  «        d¦  «         dS )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dS )ú@ResolverTests.test_disallowedPortRepeatedly.<locals>.FakeReactorc                 óP   •— ‰                      |¦  «         t          d |d ¦  «        ‚rA   )rJ   r   r(  s       €r0   r,  zJResolverTests.test_disallowedPortRepeatedly.<locals>.FakeReactor.listenUDP'  s'   ø€ Ø—’˜TÑ"Ô"Ð"Ý'¨¨d°DÑ9Ô9Ð9r2   Nr-  r.  s   €r0   r/  r4  &  s.   ø€ € € € € ð:ð :ð :ð :ð :ð :ð :r2   r/  r×   r¼   iè  N)r   rd   r‚   r¦   r   rÍ   rk   rl   r0  s      @r0   Útest_disallowedPortRepeatedlyz+ResolverTests.test_disallowedPortRepeatedly  sž   ø€ ð
 ˆð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ñ 	:ô 	:ð 	:õ
 ”?Ð,?Ð+@ÐAÑAÔAˆØ'˜K™MœMˆÔà×ÒÕ+¨XÔ-HÑIÔIÐIà×Ò�˜U™œ TÑ*Ô*Ð*Ð*Ð*r2   c                 óN  ‡— g Š G ˆfd„d¦  «        }t          j        dg¬¦  «        } |¦   «         |_        |                      t          |j        ¦  «        }|                      |j        j        t          j	        ¦  «         |                      t          ‰¦  «        d¦  «         dS )zf
        If the process is out of files, L{Resolver._connectedProtocol}
        will give up.
        c                   ó   •— e Zd Zˆ fd„ZdS )ú5ResolverTests.test_runOutOfFiles.<locals>.FakeReactorc                 ó„   •— ‰                      |¦  «         t          t          j        d¦  «        }t	          d ||¦  «        ‚)NzOut of files :()rJ   ÚOSErrorÚerrnoÚEMFILEr   )r)   r  r)  r*  Úerrr+  s        €r0   r,  z?ResolverTests.test_runOutOfFiles.<locals>.FakeReactor.listenUDP:  s9   ø€ Ø—’˜TÑ"Ô"Ð"Ý�eœlÐ,=Ñ>Ô>�Ý'¨¨d°CÑ8Ô8Ð8r2   Nr-  r.  s   €r0   r/  r9  9  s.   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð 9ð 9r2   r/  r×   r¼   ri   N)r   rd   r‚   r¦   r   rÍ   rk   ÚsocketErrorr<  r=  rl   )r)   r/  rU   Úexcr+  s       @r0   Útest_runOutOfFilesz ResolverTests.test_runOutOfFiles2  s¼   ø€ ð
 ˆð	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ñ 	9ô 	9ð 	9õ ”?Ð,?Ð+@ÐAÑAÔAˆØ'˜K™MœMˆÔà×ÒÕ 1°8Ô3NÑOÔ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¦  «        }||_
        |                     t          j        d¦  «        ¦  «         |                      t          t          ‰¦  «        ¦  «        d¦  «         dS )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dS )úFResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocolc                 ó,   — t          ¦   «         | _        d S rA   r  r;   s    r0   rE   zOResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocol.__init__U  r  r2   rG   Nc                 óX   •— ‰                      | ¦  «         ‰                     d¦  «        S ©Nr   ©rJ   rç   ©r)   r   rM   r+   rK   r  r-   s        €€r0   rM   zLResolverTests.test_differentProtocolAfterTimeout.<locals>.FakeProtocol.queryX  ó'   ø€ Ø× Ò  Ñ&Ô&Ð&Ø—{’{ 1‘~”~Ð%r2   rN   r  ©r  r-   s   €€r0   r  rD  T  óG   ø€ € € € € ð,ð ,ð ,ð&ð &ð &ð &ð &ð &ð &ð &ð &r2   r  rÛ   rÊ   )r   rd   r   Úfailr   r  r   r(   r   rå   rÍ   rM   rã   rk   rl   r  )r)   rU   r  r  r-   s      @@r0   Ú"test_differentProtocolAfterTimeoutz0ResolverTests.test_differentProtocolAfterTimeoutH  sã   øø€ õ
 ”?Ð,?Ð+@ÐAÑAÔAˆØˆ	åŒJ•w”Õ';¸DÑ'AÔ'AÑBÔBÑCÔCÝŒM�#œ+™-œ-Ñ(Ô(ð
ˆð
	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð '3ˆÔ#Ø�Š•s”yÐ!3Ñ4Ô4Ñ5Ô5Ð5Ø×Ò��S ™^œ^Ñ,Ô,¨aÑ0Ô0Ð0Ð0Ð0r2   c                 ó¼  ‡‡— t          j        dg¬¦  «        }g Št          j        ¦   «         Š G ˆˆfd„d¦  «        }||_        |                     t          j        d¦  «        ¦  «         |                      ‰d         j	        j
        ¦  «         ‰                     t          j        ¦   «         ¦  «         |                      ‰d         j	        j
        ¦  «         dS )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dS )ú9ResolverTests.test_protocolShutDown.<locals>.FakeProtocolc                 ó,   — t          ¦   «         | _        d S rA   r  r;   s    r0   rE   zBResolverTests.test_protocolShutDown.<locals>.FakeProtocol.__init__k  r  r2   rG   Nc                 ó2   •— ‰                      | ¦  «         ‰S rA   ©rJ   ©r)   r   rM   r+   rK   r  rL   s        €€r0   rM   z?ResolverTests.test_protocolShutDown.<locals>.FakeProtocol.queryn  ó   ø€ Ø× Ò  Ñ&Ô&Ð&Ø�r2   rN   r  ©r  rL   s   €€r0   r  rQ  j  óG   ø€ € € € € ð,ð ,ð ,ðð ð ð ð ð ð ð ð r2   r  rÛ   r   N)r   rd   r   rI   rÍ   rM   r   rã   ÚassertFalserD   r:   rÒ   rå   rS   )r)   rU   r  r  rL   s      @@r0   Útest_protocolShutDownz#ResolverTests.test_protocolShutDown`  sä   øø€ õ ”?Ð,?Ð+@ÐAÑAÔAˆØˆ	Ý”Ñ!Ô!ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð '3ˆÔ#Ø�Š•s”yÐ!3Ñ4Ô4Ñ5Ô5Ð5à×Ò˜ 1œÔ/Ô<Ñ=Ô=Ð=Ø�Š�œ™œÑ&Ô&Ð&Ø�Š˜	 !œÔ.Ô;Ñ<Ô<Ð<Ð<Ð<r2   c                 ó&  ‡‡— t          j        dg¬¦  «        }g Št          j        ¦   «         }t          j        t          j        t          d¦  «        ¦  «        ¦  «        |gŠ G ˆˆfd„d¦  «        }||_        | 	                    t          j        d¦  «        ¦  «         |                      ‰d         j        j        ¦  «         |                     t          j        ¦   «         ¦  «         |                      ‰d         j        j        ¦  «         dS )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dS )úEResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocolc                 ó,   — t          ¦   «         | _        d S rA   r  r;   s    r0   rE   zNResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocol.__init__…  r  r2   rG   Nc                 óX   •— ‰                      | ¦  «         ‰                     d¦  «        S rG  rH  rI  s        €€r0   rM   zKResolverTests.test_protocolShutDownAfterTimeout.<locals>.FakeProtocol.queryˆ  rJ  r2   rN   r  rK  s   €€r0   r  r]  „  rL  r2   r  rÛ   ri   )r   rd   r   rI   rM  r   r  r   rÍ   rM   r   rã   rY  rD   r:   rÒ   rå   rS   )r)   rU   rL   r  r  r-   s       @@r0   Ú!test_protocolShutDownAfterTimeoutz/ResolverTests.test_protocolShutDownAfterTimeouty  s  øø€ õ ”?Ð,?Ð+@ÐAÑAÔAˆØˆ	Ý”Ñ!Ô!ˆÝ”:�gœoÕ.BÀ4Ñ.HÔ.HÑIÔIÑJÔJÈFÐSˆð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð '3ˆÔ#Ø�Š•s”yÐ!3Ñ4Ô4Ñ5Ô5Ð5à×Ò˜ 1œÔ/Ô<Ñ=Ô=Ð=Ø�Š�œ™œÑ&Ô&Ð&Ø�Š˜	 !œÔ.Ô;Ñ<Ô<Ð<Ð<Ð<r2   c                 ó  ‡‡—  G d„ dt           ¦  «        }t          j        dg¬¦  «        }g Št          j        ¦   «         Š G ˆˆfd„d¦  «        }||_        |                     t          j        d¦  «        ¦  «        }|  	                    ‰d         j
        j        ¦  «         ‰                     t          j         |¦   «         ¦  «        ¦  «         |                      ‰d         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dS )úJResolverTests.test_protocolShutDownAfterFailure.<locals>.ExpectedExceptionNrý   r6   r2   r0   rþ   rc  š  rÿ   r2   rþ   r×   r¼   c                   ó$   •— e Zd Zd„ Zdˆ ˆfd„	ZdS )úEResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocolc                 ó,   — t          ¦   «         | _        d S rA   r  r;   s    r0   rE   zNResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocol.__init__¢  r  r2   rG   Nc                 ó2   •— ‰                      | ¦  «         ‰S rA   rT  rU  s        €€r0   rM   zKResolverTests.test_protocolShutDownAfterFailure.<locals>.FakeProtocol.query¥  rV  r2   rN   r  rW  s   €€r0   r  re  ¡  rX  r2   r  rÛ   r   )r   r   rd   r   rI   rÍ   rM   r   rã   rY  rD   r:   rÑ   r   r  rS   r  )r)   rþ   rU   r  rÔ   r  rL   s        @@r0   Ú!test_protocolShutDownAfterFailurez/ResolverTests.test_protocolShutDownAfterFailure“  s,  øø€ ð	ð 	ð 	ð 	ð 	¥	ñ 	ô 	ð 	õ ”?Ð,?Ð+@ÐAÑAÔAˆØˆ	Ý”Ñ!Ô!ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð '3ˆÔ#Ø—n’n¥S¤YÐ/AÑ%BÔ%BÑCÔCˆà×Ò˜ 1œÔ/Ô<Ñ=Ô=Ð=Ø�Š•w”Ð'8Ð'8Ñ':Ô':Ñ;Ô;Ñ<Ô<Ð<Ø�Š˜	 !œÔ.Ô;Ñ<Ô<Ð<à×!Ò! +Ð/@ÑAÔAÐAr2   c                 ó&  — t          j        dg¬¦  «        }|j                             d¦  «        }|                     d¦  «         |                      ||j        ¦  «         |                     d¦  «         |                      ||j        ¦  «         dS )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²  s�   € õ
 ”?Ð,?Ð+@ÐAÑAÔAˆØÔ#×1Ò1°$Ñ7Ô7ˆØ×Ò Ñ%Ô%Ð%Ø�Š�h Ô 4Ñ5Ô5Ð5ð 	×Ò Ñ%Ô%Ð%Ø×Ò˜ 8Ô#7Ñ8Ô8Ð8Ð8Ð8r2   c                 ó–  — t          j        ¦   «         }t          j        dg|¬¦  «        }|                     t          j        d¦  «        ¦  «        }|j        d         \  }}}}} G d„ dt          ¦  «        }	| 	                    |j
        d         t          j         |	¦   «         ¦  «        ¦  «         |                      ||	¦  «         dS )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dS )úVResolverTests.test_singleTCPQueryErrbackOnConnectionFailure.<locals>.SentinelExceptionNrý   r6   r2   r0   ÚSentinelExceptionru  Ì  rÿ   r2   rv  N)r   r  r   rd   ÚqueryTCPr   rã   Ú
tcpClientsr   ÚclientConnectionFailedÚ
connectorsr   r  ÚfailureResultOf)
r)   rƒ   rU   rì   r!  r  rj  r+   ÚbindAddressrv  s
             r0   Ú-test_singleTCPQueryErrbackOnConnectionFailurez;ResolverTests.test_singleTCPQueryErrbackOnConnectionFailureÀ  sã   € õ  Ô-Ñ/Ô/ˆÝ”?Ð,?Ð+@È'ÐRÑRÔRˆà×Ò�cœi¨Ñ6Ô6Ñ7Ô7ˆØ4;Ô4FÀqÔ4IÑ1ˆˆd�G˜W kð	ð 	ð 	ð 	ð 	¥	ñ 	ô 	ð 	ð 	×&Ò&ØÔ˜qÔ!¥7¤?Ð3DÐ3DÑ3FÔ3FÑ#GÔ#Gñ	
ô 	
ð 	
ð 	×Ò˜QÐ 1Ñ2Ô2Ð2Ð2Ð2r2   c                 ó<  — t          j        ¦   «         }t          j        dg|¬¦  «        }|                     t          j        d¦  «        ¦  «        }|                     t          j        d¦  «        ¦  «        }|j        d         \  }}}}}	 G d„ dt          ¦  «        }
| 	                    |j
        d         t          j         |
¦   «         ¦  «        ¦  «         |                      ||
¦  «        }|                      ||
¦  «        }|                      ||¦  «         dS )	z‘
        All pending L{resolver.queryTCP} C{deferred}s will C{errback}
        with the same C{Failure} if the connection attempt fails.
        rs  r  r¶   zexample.netr   c                   ó   — e Zd ZdS )úXResolverTests.test_multipleTCPQueryErrbackOnConnectionFailure.<locals>.SentinelExceptionNrý   r6   r2   r0   rv  r€  á  rÿ   r2   rv  N)r   r  r   rd   rw  r   rã   rx  r   ry  rz  r   r  r{  rY   )r)   rƒ   rU   Úd1Úd2r!  r  rj  r+   r|  rv  Úf1Úf2s                r0   Ú/test_multipleTCPQueryErrbackOnConnectionFailurez=ResolverTests.test_multipleTCPQueryErrbackOnConnectionFailureÕ  s)  € õ
  Ô-Ñ/Ô/ˆÝ”?Ð,?Ð+@È'ÐRÑRÔRˆà×Ò�sœy¨Ñ7Ô7Ñ8Ô8ˆØ×Ò�sœy¨Ñ7Ô7Ñ8Ô8ˆØ4;Ô4FÀqÔ4IÑ1ˆˆd�G˜W kð	ð 	ð 	ð 	ð 	¥	ñ 	ô 	ð 	ð 	×&Ò&ØÔ˜qÔ!¥7¤?Ð3DÐ3DÑ3FÔ3FÑ#GÔ#Gñ	
ô 	
ð 	
ð ×!Ò! "Ð&7Ñ8Ô8ˆØ×!Ò! "Ð&7Ñ8Ô8ˆØ�Š�b˜"ÑÔÐÐÐr2   c                 óÜ  ‡‡— t          j        ¦   «         }t          j        dg|¬¦  «        Št	          j        d¦  «        Š‰                     ‰¦  «        }ˆˆfd„}|                     |¦  «         |                      t          |j
        ¦  «        d¦  «         |                      t          |j        ¦  «        d¦  «         |j
        d         \  }}}}}t          j        t          ¦   «         ¦  «        }	|                     |j        d         |	¦  «         |                      t          |j
        ¦  «        d¦  «         |                      t          |j        ¦  «        d¦  «         |                      |¦  «         t          j        t          ¦   «         ¦  «        }
|                     |j        d         |
¦  «         |                      |t          ¦  «        }|                      ||
¦  «         dS )	z{
        An errback on the deferred returned by
        L{client.Resolver.queryTCP} may trigger another TCP query.
        )r   iE'  r  r¶   c                 ób   •— |                       t          ¦  «         ‰                     ‰¦  «        S rA   )Útrapr   rw  )ÚeÚqrU   s    €€r0   ÚreissuezOResolverTests.test_reentrantTCPQueryErrbackOnConnectionFailure.<locals>.reissueú  s*   ø€ Ø�FŠFÕ)Ñ*Ô*Ð*Ø×$Ò$ QÑ'Ô'Ð'r2   ri   r   rÊ   N)r   r  r   rd   r   rã   rw  Ú
addErrbackrk   rl   rx  rz  r   r  r   ry  ÚassertNoResultr{  rY   )r)   rƒ   rì   r‹  r!  r  rj  r+   r|  rƒ  r„  ÚfrŠ  rU   s               @@r0   Ú0test_reentrantTCPQueryErrbackOnConnectionFailurez>ResolverTests.test_reentrantTCPQueryErrbackOnConnectionFailureì  sÒ  øø€ õ
  Ô-Ñ/Ô/ˆÝ”?Ð,@Ð+AÈ7ÐSÑSÔSˆåŒI�mÑ$Ô$ˆð ×Ò˜aÑ Ô ˆð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	
�Š�WÑÔÐà×Ò�˜WÔ/Ñ0Ô0°!Ñ4Ô4Ð4Ø×Ò�˜WÔ/Ñ0Ô0°!Ñ4Ô4Ð4à4;Ô4FÀqÔ4IÑ1ˆˆd�G˜W kõ Œ_Õ3Ñ5Ô5Ñ6Ô6ˆØ×&Ò& wÔ'9¸!Ô'<¸bÑAÔAÐAð 	×Ò�˜WÔ/Ñ0Ô0°!Ñ4Ô4Ð4Ø×Ò�˜WÔ/Ñ0Ô0°!Ñ4Ô4Ð4à×Ò˜AÑÔÐõ Œ_Õ3Ñ5Ô5Ñ6Ô6ˆØ×&Ò& wÔ'9¸!Ô'<¸bÑAÔAÐAð × Ò  Õ$:Ñ;Ô;ˆØ�Š�a˜ÑÔÐÐÐr2   c                 óf  — t          j        ¦   «         }t          j        dg|¬¦  «        }|                     t          j        d¦  «        ¦  «        }|j        d         \  }}}}}|j        }	|  	                    t          |	¦  «        d¦  «          G d„ dt          ¦  «        }
|                     |j        d         t          j         |
¦   «         ¦  «        ¦  «         |                      ||
¦  «         |                      |j        |	¦  «         |  	                    t          |	¦  «        d¦  «         dS )	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.
        rs  r  r¶   r   ri   c                   ó   — e Zd ZdS )úJResolverTests.test_pendingEmptiedInPlaceOnError.<locals>.SentinelExceptionNrý   r6   r2   r0   rv  r’  '  rÿ   r2   rv  N)r   r  r   rd   rw  r   rã   rx  Úpendingrk   rl   r   ry  rz  r   r  r{  rY   )r)   rƒ   rU   rì   r!  r  rj  r+   r|  Ú
prePendingrv  s              r0   Ú!test_pendingEmptiedInPlaceOnErrorz/ResolverTests.test_pendingEmptiedInPlaceOnError  s:  € õ  Ô-Ñ/Ô/ˆÝ”?Ð,?Ð+@È'ÐRÑRÔRˆà×Ò�cœi¨Ñ6Ô6Ñ7Ô7ˆà4;Ô4FÀqÔ4IÑ1ˆˆd�G˜W kàÔ%ˆ
Ø×Ò�˜Z™œ¨!Ñ,Ô,Ð,ð	ð 	ð 	ð 	ð 	¥	ñ 	ô 	ð 	ð 	×&Ò&ØÔ˜qÔ!¥7¤?Ð3DÐ3DÑ3FÔ3FÑ#GÔ#Gñ	
ô 	
ð 	
ð 	×Ò˜QÐ 1Ñ2Ô2Ð2Ø�Š�hÔ&¨
Ñ3Ô3Ð3Ø×Ò�˜Z™œ¨!Ñ,Ô,Ð,Ð,Ð,r2   N) r3   r4   r5   r=   r¢   r¤   r¨   r­   rº   r¿   rÂ   rÕ   rí   rõ   rø   r  r  r  r  r#  r1  r6  rA  rN  rZ  r`  rh  rq  r}  r…  r�  r•  r6   r2   r0   r    r    í   sË  € € € € € ðð ð(ð (ð (ð0ð 0ð 0ð7ð 7ð 7ðCð Cð Cð+ð +ð +ð$/ð /ð /ð.ð .ð .ð ð  ð  ðD#ð #ð #ðJ*ð *ð *ð6*ð *ð *ð0
ð 
ð 
ð6
ð 
ð 
ð.	/ð 	/ð 	/ð1ð 1ð 1ð,
*ð 
*ð 
*ð-ð -ð -ð&+ð +ð +ð&(ð (ð (ð,1ð 1ð 1ð0=ð =ð =ð2=ð =ð =ð4Bð Bð Bð>9ð 9ð 9ð3ð 3ð 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dS )ÚClientTestsc                 óR   — t          ¦   «         t          _        d| _        d| _        dS )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           _        dS )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        |¦  «         dS )zT
        Verify that the result is the same query type as what is expected.
        r   N)rk   r!   r›  r"   )r)   r-   r*   ræ   r.   r/   rL   s          r0   ÚcheckResultzClientTests.checkResultC  sT   € ð *1Ñ&ˆ�˜JØ˜”ˆØ×Ò˜œÔ)¨4¬=Ñ9Ô9Ð9Ø×Ò˜œ eÑ,Ô,Ð,Ð,Ð,r2   c                 ó2   — |                       |d¦  «         dS )zR
        Test that the getHostByName query returns the 127.0.0.1 address.
        r   NrÝ   ©r)   rL   s     r0   ÚcheckGetHostByNamezClientTests.checkGetHostByNameL  s    € ð 	×Ò˜ Ñ-Ô-Ð-Ð-Ð-r2   c                 ól   — t          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        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  s4   € õ Ô  ¤Ñ/Ô/ˆØ	�Š�dÔ&­¬Ñ.Ô.Ð.Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S ©z+
        See L{test_lookupAddress}
        )r   ÚlookupIPV6Addressr›  rÐ   r¡  r   ÚAAAAr§  s     r0   Útest_lookupIPV6Addressz"ClientTests.test_lookupIPV6Addressd  s4   € õ Ô$ T¤]Ñ3Ô3ˆØ	�Š�dÔ&­¬Ñ1Ô1Ð1Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupAddress6r›  rÐ   r¡  r   rñ   r§  s     r0   Útest_lookupAddress6zClientTests.test_lookupAddress6l  s4   € õ Ô! $¤-Ñ0Ô0ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupNameserversr›  rÐ   r¡  r   ÚNSr§  s     r0   Útest_lookupNameserversz"ClientTests.test_lookupNameserverst  s4   € õ Ô$ T¤]Ñ3Ô3ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupCanonicalNamer›  rÐ   r¡  r   ÚCNAMEr§  s     r0   Útest_lookupCanonicalNamez$ClientTests.test_lookupCanonicalName|  s4   € õ Ô& t¤}Ñ5Ô5ˆØ	�Š�dÔ&­¬	Ñ2Ô2Ð2Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupAuthorityr›  rÐ   r¡  r   ÚSOAr§  s     r0   Útest_lookupAuthorityz ClientTests.test_lookupAuthority„  s4   € õ Ô" 4¤=Ñ1Ô1ˆØ	�Š�dÔ&­¬Ñ0Ô0Ð0Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupMailBoxr›  rÐ   r¡  r   ÚMBr§  s     r0   Útest_lookupMailBoxzClientTests.test_lookupMailBoxŒ  s4   € õ Ô  ¤Ñ/Ô/ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupMailGroupr›  rÐ   r¡  r   ÚMGr§  s     r0   Útest_lookupMailGroupz ClientTests.test_lookupMailGroup”  s4   € õ Ô" 4¤=Ñ1Ô1ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupMailRenamer›  rÐ   r¡  r   ÚMRr§  s     r0   Útest_lookupMailRenamez!ClientTests.test_lookupMailRenameœ  s4   € õ Ô# D¤MÑ2Ô2ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   Ú
lookupNullr›  rÐ   r¡  r   ÚNULLr§  s     r0   Útest_lookupNullzClientTests.test_lookupNull¤  ó4   € õ Ô˜dœmÑ,Ô,ˆØ	�Š�dÔ&­¬Ñ1Ô1Ð1Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupWellKnownServicesr›  rÐ   r¡  r   ÚWKSr§  s     r0   Útest_lookupWellKnownServicesz(ClientTests.test_lookupWellKnownServices¬  s4   € õ Ô*¨4¬=Ñ9Ô9ˆØ	�Š�dÔ&­¬Ñ0Ô0Ð0Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupPointerr›  rÐ   r¡  r   ÚPTRr§  s     r0   Útest_lookupPointerzClientTests.test_lookupPointer´  ó4   € õ Ô  ¤Ñ/Ô/ˆØ	�Š�dÔ&­¬Ñ0Ô0Ð0Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupHostInfor›  rÐ   r¡  r   ÚHINFOr§  s     r0   Útest_lookupHostInfozClientTests.test_lookupHostInfo¼  s4   € õ Ô! $¤-Ñ0Ô0ˆØ	�Š�dÔ&­¬	Ñ2Ô2Ð2Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupMailboxInfor›  rÐ   r¡  r   ÚMINFOr§  s     r0   Útest_lookupMailboxInfoz"ClientTests.test_lookupMailboxInfoÄ  ó4   € õ Ô$ T¤]Ñ3Ô3ˆØ	�Š�dÔ&­¬	Ñ2Ô2Ð2Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupMailExchanger›  rÐ   r¡  r   ÚMXr§  s     r0   Útest_lookupMailExchangez#ClientTests.test_lookupMailExchangeÌ  s4   € õ Ô% d¤mÑ4Ô4ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   Ú
lookupTextr›  rÐ   r¡  r   ÚTXTr§  s     r0   Útest_lookupTextzClientTests.test_lookupTextÔ  s4   € õ Ô˜dœmÑ,Ô,ˆØ	�Š�dÔ&­¬Ñ0Ô0Ð0Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupSenderPolicyr›  rÐ   r¡  r   ÚSPFr§  s     r0   Útest_lookupSenderPolicyz#ClientTests.test_lookupSenderPolicyÜ  s4   € õ Ô% d¤mÑ4Ô4ˆØ	�Š�dÔ&­¬Ñ0Ô0Ð0Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupResponsibilityr›  rÐ   r¡  r   ÚRPr§  s     r0   Útest_lookupResponsibilityz%ClientTests.test_lookupResponsibilityä  s4   € õ Ô'¨¬Ñ6Ô6ˆØ	�Š�dÔ&­¬Ñ/Ô/Ð/Øˆr2   c                 ó‚   — t          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        t
          j        ¦  «         |S r­  )r   ÚlookupServicer›  rÐ   r¡  r   ÚSRVr§  s     r0   Útest_lookupServicezClientTests.test_lookupServiceô  rÙ  r2   c                 ó‚   — t          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        t
          j        ¦  «         |S r­  )r   ÚlookupAllRecordsr›  rÐ   r¡  r   ÚALL_RECORDSr§  s     r0   Útest_lookupAllRecordsz!ClientTests.test_lookupAllRecords  s4   € õ Ô# D¤MÑ2Ô2ˆØ	�Š�dÔ&­¬Ñ8Ô8Ð8Øˆr2   c                 ó‚   — t          j        | j        ¦  «        }|                     | j        t
          j        ¦  «         |S r­  )r   ÚlookupNamingAuthorityPointerr›  rÐ   r¡  r   ÚNAPTRr§  s     r0   Ú!test_lookupNamingAuthorityPointerz-ClientTests.test_lookupNamingAuthorityPointer  s4   € õ Ô/°´Ñ>Ô>ˆØ	�Š�dÔ&­¬	Ñ2Ô2Ð2Øˆr2   c                 óÀ   — t          j        | j        t           j        ¦  «        }t	          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   rM   rÐ   r¡  )r)   rŠ  rì   s      r0   Ú
test_queryzClientTests.test_query  sD   € õ ŒI�d”m¥S¤UÑ+Ô+ˆÝŒL˜‰OŒ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                   óH   — 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S )ÚFilterAnswersTestsz|
    Test L{twisted.names.client.Resolver.filterAnswers}'s handling of various
    error conditions it might encounter.
    c                 ó<   — t          j        dg¬¦  «        | _        d S )N)z0.0.0.0r   r¼   )r   rd   rU   r;   s    r0   r�  zFilterAnswersTests.setUp'  s   € õ œ°Ð0@ÐAÑAÔAˆŒˆˆr2   c                 óø   ‡ ‡— t          j        d¬¦  «        Š‰                     d¦  «         ˆˆ fd„}|‰ 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        ¦  «         t          j        ¦   «         }dg|_        dg|_        dg|_        t          j        |¦  «        S )Nrá   r.   r/   )	rk   rC   r   rå   ræ   r.   r/   r   r(   )rC   rë   Úmr)   s     €€r0   rw  z:FilterAnswersTests.test_truncatedMessage.<locals>.queryTCP4  sT   ø€ Ø×Ò˜W a¤iÑ0Ô0Ð0Ý”{‘}”}ˆHØ (˜zˆHÔØ"- ˆHÔØ#/ .ˆHÔÝ”= Ñ*Ô*Ð*r2   rá   r.   r/   )r   rå   ÚaddQueryrU   rw  ÚfilterAnswersrÐ   rk   )r)   rw  rì   r  s   `  @r0   Útest_truncatedMessagez(FilterAnswersTests.test_truncatedMessage,  s’   øø€ õ
 ŒK˜dÐ#Ñ#Ô#ˆØ	�
Š
�>Ñ"Ô"Ð"ð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð "*ˆŒÔØŒM×'Ò'¨Ñ*Ô*ˆØ	�Š�dÔ&¨(¨°k°]À\ÀNÐ(SÑTÔTÐTØˆr2   c                 óŽ   — t          j        |¬¦  «        }| j                             |¦  «        }|                     |¦  «         d S )N)ÚrCode)r   rå   rU   r  rˆ  )r)   Úrcoder@  r  r>  s        r0   Ú
_rcodeTestzFilterAnswersTests._rcodeTestA  s<   € ÝŒK˜eÐ$Ñ$Ô$ˆØŒm×)Ò)¨!Ñ,Ô,ˆØ�Š�‰Œˆˆˆr2   c                 óV   — |                       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ÔAÐAr2   c                 óV   — |                       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ÔAÐAr2   c                 óV   — |                       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­%Ô*<Ñ=Ô=Ð=r2   c                 óV   — |                       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ÑIÔIÐIr2   c                 óV   — |                       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ÑHÔHÐHr2   c                 ó\   — |                       t          j        dz   t          j        ¦  «        S )zm
        Like L{test_formatError} but for an unrecognized error code and
        L{DNSUnknownError}.
        ri   )r  r   r(  r   ÚDNSUnknownErrorr;   s    r0   Útest_refusedErrorUnknownz+FilterAnswersTests.test_refusedErrorUnknowne  s"   € ð
 �Š�sœ|¨aÑ/µÔ1FÑGÔ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ð
ð ð ð*ð ð ð
Bð Bð BðBð Bð Bð>ð >ð >ðJð Jð JðIð Ið IðHð Hð Hð Hð Hr2   r
  c                   ó"   — e Zd Zd„ Zdd„Zd„ ZdS )ÚFakeDNSDatagramProtocolc                 ó:   — g | _         t          ¦   «         | _        d S rA   rB   r;   s    r0   rE   z FakeDNSDatagramProtocol.__init__n  rF   r2   rG   Nc                 óŠ   — | j                              ||||f¦  «         t          j        t	          j        |¦  «        ¦  «        S rA   )rC   rJ   r   rM  r   r   )r)   r   rC   r+   rK   s        r0   rM   zFakeDNSDatagramProtocol.queryr  s<   € ØŒ×Ò˜W g¨w¸Ð;Ñ<Ô<Ð<ÝŒz�%Ô4°WÑ=Ô=Ñ>Ô>Ð>r2   c                 ó   — d S rA   r6   )r)   rK   s     r0   ÚremoveResendz$FakeDNSDatagramProtocol.removeResendv  s   € àˆr2   rN   )r3   r4   r5   rE   rM   r3  r6   r2   r0   r/  r/  m  sF   € € € € € ð$ð $ð $ð?ð ?ð ?ð ?ðð ð ð ð r2   r/  c                   ó,   — e Zd ZdZg d¢Zd„ Zd„ Zd„ ZdS )Ú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                 ó  ‡— d„ | j         D ¦   «         }t          j        d|¬¦  «        }t          ¦   «         Šˆfd„|_        |                     d¦  «                             | j        ¦  «                             | j	        ‰¦  «        S )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.
        c                 ó   — g | ]}|d f‘ŒS )r�   r6   )rf   Úxs     r0   rh   z:RetryLogicTests.test_roundRobinBackoff.<locals>.<listcomp>‰  s   € Ð3Ð3Ð3˜Q�!�R�Ð3Ð3Ð3r2   N)r~   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)   Úaddrsrg   r  s      @r0   Útest_roundRobinBackoffz&RetryLogicTests.test_roundRobinBackoff‚  s   ø€ ð 4Ð3 $Ô"2Ð3Ñ3Ô3ˆÝŒO 4°Ð7Ñ7Ô7ˆÝ'Ñ)Ô)ˆØ,˜}˜}˜}ˆÔà�OŠOÐ.Ñ/Ô/ßŠ[˜Ô2Ñ3Ô3ßŠZ˜Ô1°5Ñ9Ô9ð	
r2   c                 ó0   — |                       d¦  «         d S )Nz/Lookup address succeeded, should have timed out)rM  r£  s     r0   r;  z$RetryLogicTests._cbRoundRobinBackoff“  s   € Ø�	Š	ÐCÑDÔDÐDÐDÐDr2   c                 óü  —  |j         t          j        ¦  «         dD ]Ä}|j        d t	          | j        ¦  «        …         }|j        d t	          | j        ¦  «        …= |                     ¦   «          t          | j        ¦  «        }|                     ¦   «          t          ||¦  «        D ]8\  \  }}}}	}
|  	                    ||
df¦  «         |  	                    ||¦  «         Œ9ŒÅ|  
                    |j        ¦  «         d S )N)ri   rË   é   é-   r�   )rˆ  r   ÚTimeoutErrorrC   rl   r:  ÚsortÚlistÚziprk   rY  )r)   r   Ú	fakeProtoÚtÚtriesÚexpectedÚaddrrM   r+   rK   ÚexpectedAddrs              r0   r<  z$RetryLogicTests._ebRoundRobinBackoff–  s  € ØˆŒ•UÔ'Ñ(Ô(Ð(ð
  ð 
	-ð 
	-ˆAØÔ%Ð&=­¨DÔ,<Ñ(=Ô(=Ð&=Ô>ˆEØÔ!Ð"9¥C¨Ô(8Ñ$9Ô$9Ð"9Ð:à�JŠJ‰LŒLˆLÝ˜DÔ,Ñ-Ô-ˆHØ�MŠM‰OŒOˆOå<?ÀÀxÑ<PÔ<Pð -ð -Ñ8Ñ*��u˜g r¨LØ× Ò  ¨°bÐ'9Ñ:Ô:Ð:Ø× Ò  ¨!Ñ,Ô,Ð,Ð,ð-ð 	×Ò˜Ô*Ñ+Ô+Ð+Ð+Ð+r2   N)r3   r4   r5   r=   r:  r>  r;  r<  r6   r2   r0   r5  r5  {  s[   € € € € € ðð ð ?Ð>Ð>€Kð
ð 
ð 
ð"Eð Eð Eð,ð ,ð ,ð ,ð ,r2   r5  c                   ó   — e Zd ZdZd„ ZdS )ÚThreadedResolverTestsz/
    Tests for L{client.ThreadedResolver}.
    c                 ó<  — t          j        ¦   «          |                      | j        g¬¦  «        }|                      |d         d         d¦  «         |                      |d         d         t
          ¦  «         |                      t          |¦  «        d¦  «         dS )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.Úcategoryri   N)r   ÚThreadedResolverÚflushWarningsÚtest_deprecatedrk   ÚDeprecationWarningrl   )r)   Úwarningss     r0   rU  z%ThreadedResolverTests.test_deprecated°  sœ   € õ
 	ÔÑ!Ô!Ð!Ø×%Ò%¸$Ô:NÐ9OÐ%ÑPÔPˆØ×ÒØ�QŒK˜	Ô"ðñ	
ô 	
ð 	
ð 	×Ò˜ !œ ZÔ0Õ2DÑEÔEÐEØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ð*Ð*r2   N)r3   r4   r5   r=   rU  r6   r2   r0   rN  rN  «  s-   € € € € € ðð ð+ð +ð +ð +ð +r2   rN  )6r=   r<  Ú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/  r5  rN  r6   r2   r0   ú<module>rj     s•  ððð ð
 €€€à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à "Ð "Ð "Ð "Ð "Ð "Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø @Ð @Ð @Ð @Ð @Ð @Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø -Ð -Ð -Ð -Ð -Ð -Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø (Ð (Ð (Ð (Ð (Ð (Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø "Ð "Ð "Ð "Ð "Ð "Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "à€xÔÑÔð OØ€K€KàN€Kð?ð ?ð ?ð ?ð ?�<ñ ?ô ?ð ?ð0!ð !ð !ð !ð !ñ !ô !ð !ðð ð ð ð ñ ô ð ð.ð ð ð ð �xÔ(ñ ô ð ð4o&ð o&ð o&ð o&ð o&˜(Ô+Ð->ñ o&ô o&ð o&ðdC	-ð C	-ð C	-ð C	-ð C	-�HÔ%ñ C	-ô C	-ð C	-ðLkð kð kð kð k�(Ô#ñ kô kð kð\IHð IHð IHð IHð IH˜Ô*ñ IHô IHð IHðXð ð ð ð ñ ô ð ð-,ð -,ð -,ð -,ð -,�hÔ'ñ -,ô -,ð -,ð`+ð +ð +ð +ð +˜HÔ-ñ +ô +ð +ð +ð +r2   