§
    ÈtºfÈ¢  ã                   ód  — d 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 ddlmZmZ ddlmZ  G d„ d	e¦  «        Zd
„ Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Z G d„ dej        ¦  «        ZdS )z)
Test cases for L{twisted.names.server}.
é    )ÚverifyClass)Údefer)ÚIProtocolFactory)ÚdnsÚerrorÚresolveÚserver)ÚfailureÚlog)Úunittestc                   ó   — e Zd ZdZd„ ZdS )ÚRaisedArgumentszD
    An exception containing the arguments raised by L{raiser}.
    c                 ó"   — || _         || _        d S ©N©ÚargsÚkwargs©Úselfr   r   s      ú]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/test/test_server.pyÚ__init__zRaisedArguments.__init__   s   € ØˆŒ	ØˆŒˆˆó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r      s-   € € € € € ðð ðð ð ð ð r   r   c                  ó"   — t          | |¦  «        ‚)z¡
    Raise a L{RaisedArguments} exception containing the supplied arguments.

    Used as a fake when testing the call signatures of  methods and functions.
    )r   r   s     r   Úraiserr      s   € õ ˜$ Ñ
'Ô
'Ð'r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚNoResponseDNSServerFactorya  
    A L{server.DNSServerFactory} subclass which does not attempt to reply to any
    received messages.

    Used for testing logged messages in C{messageReceived} without having to
    fake or patch the preceding code which attempts to deliver a response
    message.
    c                 ó   — dS )a  
        Deny all queries.

        @param message: See L{server.DNSServerFactory.allowQuery}
        @param protocol: See L{server.DNSServerFactory.allowQuery}
        @param address: See L{server.DNSServerFactory.allowQuery}

        @return: L{False}
        @rtype: L{bool}
        Fr   )r   ÚmessageÚprotocolÚaddresss       r   Ú
allowQueryz%NoResponseDNSServerFactory.allowQuery.   s	   € ð ˆur   c                 ó   — dS )zé
        A noop send reply.

        @param protocol: See L{server.DNSServerFactory.sendReply}
        @param message: See L{server.DNSServerFactory.sendReply}
        @param address: See L{server.DNSServerFactory.sendReply}
        Nr   )r   r$   r#   r%   s       r   Ú	sendReplyz$NoResponseDNSServerFactory.sendReply;   ó   € € € r   N)r   r   r   r   r&   r(   r   r   r   r!   r!   $   s<   € € € € € ðð ðð ð ðð ð ð ð r   r!   c                   ó4   — e Zd ZdZ G d„ de¦  «        Zd„ ZdS )ÚRaisingDNSServerFactoryzÚ
    A L{server.DNSServerFactory} subclass whose methods raise an exception
    containing the supplied arguments.

    Used for stopping L{messageReceived} and testing the arguments supplied to
    L{allowQuery}.
    c                   ó   — e Zd ZdZdS )ú+RaisingDNSServerFactory.AllowQueryArgumentsúG
        Contains positional and keyword arguments in C{args}.
        N©r   r   r   r   r   r   r   ÚAllowQueryArgumentsr-   N   ó   € € € € € ð	ð 	ð 	ð 	r   r0   c                 ó.   — |                       ||¦  «        ‚)aC  
        Raise the arguments supplied to L{allowQuery}.

        @param args: Positional arguments which will be recorded in the raised
            exception.
        @type args: L{tuple}

        @param kwargs: Keyword args which will be recorded in the raised
            exception.
        @type kwargs: L{dict}
        )r0   r   s      r   r&   z"RaisingDNSServerFactory.allowQueryS   s   € ð ×&Ò& t¨VÑ4Ô4Ð4r   N)r   r   r   r   Ú	Exceptionr0   r&   r   r   r   r+   r+   E   sW   € € € € € ðð ðð ð ð ð ˜iñ ô ð ð
5ð 5ð 5ð 5ð 5r   r+   c                   ó4   — e Zd ZdZ G d„ de¦  «        Zd„ ZdS )ÚRaisingProtocolzm
    A partial fake L{IProtocol} whose methods raise an exception containing the
    supplied arguments.
    c                   ó   — e Zd ZdZdS )ú%RaisingProtocol.WriteMessageArgumentsr.   Nr/   r   r   r   ÚWriteMessageArgumentsr7   h   r1   r   r8   c                 ó.   — |                       ||¦  «        ‚©z»
        Raises the supplied arguments.

        @param args: Positional arguments
        @type args: L{tuple}

        @param kwargs: Keyword args
        @type kwargs: L{dict}
        )r8   r   s      r   ÚwriteMessagezRaisingProtocol.writeMessagem   s   € ð ×(Ò(¨¨vÑ6Ô6Ð6r   N)r   r   r   r   r3   r8   r;   r   r   r   r5   r5   b   sW   € € € € € ðð ð
ð ð ð ð  	ñ ô ð ð

7ð 
7ð 
7ð 
7ð 
7r   r5   c                   ó   — e Zd ZdZd„ ZdS )ÚNoopProtocolzT
    A partial fake L{dns.DNSProtocolMixin} with a noop L{writeMessage} method.
    c                 ó   — dS )zÔ
        A noop version of L{dns.DNSProtocolMixin.writeMessage}.

        @param args: Positional arguments
        @type args: L{tuple}

        @param kwargs: Keyword args
        @type kwargs: L{dict}
        Nr   r   s      r   r;   zNoopProtocol.writeMessage   r)   r   N)r   r   r   r   r;   r   r   r   r=   r=   z   s-   € € € € € ðð ð	ð 	ð 	ð 	ð 	r   r=   c                   ó4   — e Zd ZdZ G d„ de¦  «        Zd„ ZdS )ÚRaisingResolverzm
    A partial fake L{IResolver} whose methods raise an exception containing the
    supplied arguments.
    c                   ó   — e Zd ZdZdS )úRaisingResolver.QueryArgumentsr.   Nr/   r   r   r   ÚQueryArgumentsrB   ‘   r1   r   rC   c                 ó.   — |                       ||¦  «        ‚r:   )rC   r   s      r   ÚqueryzRaisingResolver.query–   s   € ð ×!Ò! $¨Ñ/Ô/Ð/r   N)r   r   r   r   r3   rC   rE   r   r   r   r@   r@   ‹   sW   € € € € € ðð ð
ð ð ð ð ˜ñ ô ð ð

0ð 
0ð 
0ð 
0ð 
0r   r@   c                   ó4   — e Zd ZdZ G d„ de¦  «        Zd„ ZdS )ÚRaisingCachez}
    A partial fake L{twisted.names.cache.Cache} whose methods raise an exception
    containing the supplied arguments.
    c                   ó   — e Zd ZdZdS )ú!RaisingCache.CacheResultArgumentsr.   Nr/   r   r   r   ÚCacheResultArgumentsrI   ©   r1   r   rJ   c                 ó.   — |                       ||¦  «        ‚r:   )rJ   r   s      r   ÚcacheResultzRaisingCache.cacheResult®   s   € ð ×'Ò'¨¨fÑ5Ô5Ð5r   N)r   r   r   r   r3   rJ   rL   r   r   r   rG   rG   £   sW   € € € € € ðð ð
ð ð ð ð ˜yñ ô ð ð

6ð 
6ð 
6ð 
6ð 
6r   rG   c                 óÖ   — g }t          j        |j        ¦  «         |                      t           j        |j        ¦  «          ||i |¤Ž |                      d„ |D ¦   «         |¦  «         dS )a  
    Assert that the callable logs the expected messages when called.

    XXX: Put this somewhere where it can be re-used elsewhere. See #6677.

    @param testCase: The test case controlling the test which triggers the
        logged messages and on which assertions will be called.
    @type testCase: L{unittest.SynchronousTestCase}

    @param expectedMessages: A L{list} of the expected log messages
    @type expectedMessages: L{list}

    @param callable: The function which is expected to produce the
        C{expectedMessages} when called.
    @type callable: L{callable}

    @param args: Positional arguments to be passed to C{callable}.
    @type args: L{list}

    @param kwargs: Keyword arguments to be passed to C{callable}.
    @type kwargs: L{dict}
    c                 ó*   — g | ]}|d          d         ‘ŒS )r#   r   r   )Ú.0Úms     r   ú
<listcomp>z$assertLogMessage.<locals>.<listcomp>Ø   s    € ÐBÐBÐB¨a˜!˜Iœ, qœ/ÐBÐBÐBr   N)r   ÚaddObserverÚappendÚ
addCleanupÚremoveObserverÚassertEqual)ÚtestCaseÚexpectedMessagesÚcallabler   r   ÚloggedMessagess         r   ÚassertLogMessager[   »   sy   € ð. €NÝ„O�NÔ)Ñ*Ô*Ð*Ø×Ò�Ô*¨NÔ,AÑBÔBÐBà€HˆdÐ�fÐÐÐà×ÒÐBÐB°>ÐBÑBÔBÐDTÑUÔUÐUÐUÐUr   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„ 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.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZAd@„ ZBdA„ ZCdBS )CÚDNSServerFactoryTestsz/
    Tests for L{server.DNSServerFactory}.
    c                 ór   — |                       t          j        ¦   «         j        t          j        ¦  «         dS )zd
        L{server.DNSServerFactory.resolver} is a L{resolve.ResolverChain}
        instance
        N)ÚassertIsInstancer	   ÚDNSServerFactoryÚresolverr   ÚResolverChain©r   s    r   Útest_resolverTypez'DNSServerFactoryTests.test_resolverTypeà   s/   € ð
 	×Ò�fÔ5Ñ7Ô7Ô@Å'ÔBWÑXÔXÐXÐXÐXr   c                 óh   — |                       t          j        ¦   «         j        j        g ¦  «         dS )zn
        L{server.DNSServerFactory.resolver} is an empty L{resolve.ResolverChain}
        by default.
        N©rV   r	   r`   ra   Ú	resolversrc   s    r   Útest_resolverDefaultEmptyz/DNSServerFactoryTests.test_resolverDefaultEmptyç   s/   € ð
 	×Ò�Ô0Ñ2Ô2Ô;ÔEÀrÑJÔJÐJÐJÐJr   c                 óŒ   — t          ¦   «         }|                      t          j        |g¬¦  «        j        j        |g¦  «         dS )zÎ
        L{server.DNSServerFactory.__init__} accepts an C{authorities}
        argument. The value of this argument is a list and is used to extend the
        C{resolver} L{resolve.ResolverChain}.
        )ÚauthoritiesN©ÚobjectrV   r	   r`   ra   rg   ©r   ÚdummyResolvers     r   Útest_authoritiesz&DNSServerFactoryTests.test_authoritiesî   sM   € õ ™œˆØ×ÒÝÔ#°°Ð@Ñ@Ô@ÔIÔSØˆOñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óŒ   — t          ¦   «         }|                      t          j        |g¬¦  «        j        j        |g¦  «         dS )zÈ
        L{server.DNSServerFactory.__init__} accepts a C{caches} argument. The
        value of this argument is a list and is used to extend the C{resolver}
        L{resolve.ResolverChain}.
        ©ÚcachesNrk   rm   s     r   Útest_cachesz!DNSServerFactoryTests.test_cachesú   sM   € õ ™œˆØ×ÒÝÔ#¨M¨?Ð;Ñ;Ô;ÔDÔNØˆOñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óŒ   — t          ¦   «         }|                      t          j        |g¬¦  «        j        j        |g¦  «         dS )zÉ
        L{server.DNSServerFactory.__init__} accepts a C{clients} argument. The
        value of this argument is a list and is used to extend the C{resolver}
        L{resolve.ResolverChain}.
        ©ÚclientsNrk   rm   s     r   Útest_clientsz"DNSServerFactoryTests.test_clients  sM   € õ ™œˆØ×ÒÝÔ#¨]¨OÐ<Ñ<Ô<ÔEÔOØˆOñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óÊ   —  G d„ d¦  «        } G d„ d¦  «        } G d„ d¦  «        }|                       t          j        |g|g|g¬¦  «        j        j        |||g¦  «         dS )	zz
        L{server.DNSServerFactory.resolver} contains an ordered list of
        authorities, caches and clients.
        c                   ó   — e Zd ZdS )ú@DNSServerFactoryTests.test_resolverOrder.<locals>.DummyAuthorityN©r   r   r   r   r   r   ÚDummyAuthorityrz     ó   € € € € € ØˆDr   r|   c                   ó   — e Zd ZdS )ú<DNSServerFactoryTests.test_resolverOrder.<locals>.DummyCacheNr{   r   r   r   Ú
DummyCacher     r}   r   r€   c                   ó   — e Zd ZdS )ú=DNSServerFactoryTests.test_resolverOrder.<locals>.DummyClientNr{   r   r   r   ÚDummyClientr‚     r}   r   rƒ   )rj   rr   rv   Nrf   )r   r|   r€   rƒ   s       r   Útest_resolverOrderz(DNSServerFactoryTests.test_resolverOrder  sÐ   € ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	×ÒÝÔ#Ø+Ð,°j°\ÈKÈ=ðñ ô ä”yØ˜Z¨Ð5ñ		
ô 	
ð 	
ð 	
ð 	
r   c                 ó\   — |                       t          j        ¦   «         j        ¦  «         dS )zI
        L{server.DNSServerFactory.cache} is L{None} by default.
        N)ÚassertIsNoner	   r`   Úcacherc   s    r   Útest_cacheDefaultz'DNSServerFactoryTests.test_cacheDefault)  s*   € ð 	×Ò�&Ô1Ñ3Ô3Ô9Ñ:Ô:Ð:Ð:Ð:r   c                 óš   — t          ¦   «         }|                      t          j        t          ¦   «         |g¬¦  «        j        |¦  «         dS )z�
        L{server.DNSServerFactory.__init__} assigns the last object in the
        C{caches} list to L{server.DNSServerFactory.cache}.
        rq   N)rl   rV   r	   r`   r‡   rm   s     r   Útest_cacheOverridez(DNSServerFactoryTests.test_cacheOverride/  sO   € õ
 ™œˆØ×ÒÝÔ#­F©H¬H°mÐ+DÐEÑEÔEÔKØñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó\   — |                       t          j        ¦   «         j        ¦  «         dS )z¶
        L{server.DNSServerFactory.canRecurse} is a flag indicating that this
        server is capable of performing recursive DNS lookups. It defaults to
        L{False}.
        N)ÚassertFalser	   r`   Ú
canRecurserc   s    r   Útest_canRecurseDefaultz,DNSServerFactoryTests.test_canRecurseDefault:  s*   € ð 	×Ò�Ô0Ñ2Ô2Ô=Ñ>Ô>Ð>Ð>Ð>r   c                 ód   — |                       t          j        dg¬¦  «        j        d¦  «         dS )z~
        L{server.DNSServerFactory.__init__} sets C{canRecurse} to L{True} if it
        is supplied with C{clients}.
        Nru   T)rV   r	   r`   r�   rc   s    r   Útest_canRecurseOverridez-DNSServerFactoryTests.test_canRecurseOverrideB  s3   € ð
 	×Ò�Ô0¸$¸Ð@Ñ@Ô@ÔKÈTÑRÔRÐRÐRÐRr   c                 ó\   — |                       t          j        ¦   «         j        ¦  «         dS )zJ
        L{server.DNSServerFactory.verbose} defaults to L{False}.
        N)rŒ   r	   r`   Úverboserc   s    r   Útest_verboseDefaultz)DNSServerFactoryTests.test_verboseDefaultI  s*   € ð 	×Ò�Ô0Ñ2Ô2Ô:Ñ;Ô;Ð;Ð;Ð;r   c                 ó`   — |                       t          j        d¬¦  «        j        ¦  «         dS )z�
        L{server.DNSServerFactory.__init__} accepts a C{verbose} argument which
        overrides L{server.DNSServerFactory.verbose}.
        T©r’   N)Ú
assertTruer	   r`   r’   rc   s    r   Útest_verboseOverridez*DNSServerFactoryTests.test_verboseOverrideO  s-   € ð
 	�Š�Ô/¸Ð=Ñ=Ô=ÔEÑFÔFÐFÐFÐFr   c                 ój   — |                       t          t          t          j        ¦  «        ¦  «         dS )zL
        L{server.DNSServerFactory} implements L{IProtocolFactory}.
        N)r–   r   r   r	   r`   rc   s    r   Útest_interfacez$DNSServerFactoryTests.test_interfaceV  s*   € ð 	�Š�Õ$4µfÔ6MÑNÔNÑOÔOÐOÐOÐOr   c                 ód   — |                       t          j        j        t          j        ¦  «         dS )zU
        L{server.DNSServerFactory.protocol} defaults to L{dns.DNSProtocol}.
        N)ÚassertIsr	   r`   r$   r   ÚDNSProtocolrc   s    r   Útest_defaultProtocolz*DNSServerFactoryTests.test_defaultProtocol\  s&   € ð 	�Š•fÔ-Ô6½¼ÑHÔHÐHÐHÐHr   c                 óî   ‡—  G d„ d¦  «        } |¦   «         Šˆfd„}t          j        ¦   «         }||_        |                     d¬¦  «        }|                      ‰|fi f||j        |j        f¦  «         dS )z³
        L{server.DNSServerFactory.buildProtocol} builds a protocol by calling
        L{server.DNSServerFactory.protocol} with its self as a positional
        argument.
        c                   ó   — e Zd ZdZdZdZdS )úNDNSServerFactoryTests.test_buildProtocolProtocolOverride.<locals>.FakeProtocolN)r   r   r   Úfactoryr   r   r   r   r   ÚFakeProtocolr    i  s   € € € € € ØˆGØˆDØˆFˆFˆFr   r¢   c                  ó$   •— | ‰_         |‰_        ‰S r   r   )r   r   ÚstubProtocols     €r   ÚfakeProtocolFactoryzUDNSServerFactoryTests.test_buildProtocolProtocolOverride.<locals>.fakeProtocolFactoryp  s   ø€ Ø $ˆLÔØ"(ˆLÔØÐr   N)Úaddr)r	   r`   r$   ÚbuildProtocolrV   r   r   )r   r¢   r¥   ÚfÚpr¤   s        @r   Ú"test_buildProtocolProtocolOverridez8DNSServerFactoryTests.test_buildProtocolProtocolOverrideb  s«   ø€ ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð
 $�|‘~”~ˆð	 ð 	 ð 	 ð 	 ð 	 õ
 Ô#Ñ%Ô%ˆØ(ˆŒ
Ø�OŠO ˆOÑ&Ô&ˆà×Ò˜,¨¨¨bÐ1°A°q´v¸q¼xÐ3HÑIÔIÐIÐIÐIr   c                 óZ   — t          j        ¦   «         }t          | g |j        d¦  «         dS )zm
        L{server.DNSServerFactory._verboseLog} does not log messages unless
        C{verbose > 0}.
        úFoo BarN©r	   r`   r[   Ú_verboseLog©r   r¨   s     r   Útest_verboseLogQuietz*DNSServerFactoryTests.test_verboseLogQuiet{  s.   € õ
 Ô#Ñ%Ô%ˆÝ˜˜r 1¤=°)Ñ<Ô<Ð<Ð<Ð<r   c                 ó`   — t          j        d¬¦  «        }t          | dg|j        d¦  «         dS )zZ
        L{server.DNSServerFactory._verboseLog} logs a message if C{verbose > 0}.
        é   r•   r¬   Nr­   r¯   s     r   Útest_verboseLogVerbosez,DNSServerFactoryTests.test_verboseLogVerboseƒ  s5   € õ Ô#¨AÐ.Ñ.Ô.ˆÝ˜ 	˜{¨A¬M¸9ÑEÔEÐEÐEÐEr   c                 ó‚   — t          j        ¦   «         }t          d¬¦  «        }t          | dg|j        |dd¬¦  «         dS )z•
        L{server.DNSServerFactory.messageReceived} logs about an empty query if
        the message had no queries and C{verbose} is C{>0}.
        r²   r•   z$Empty query from ('192.0.2.100', 53)N©z192.0.2.100é5   ©r#   Úprotor%   )r   ÚMessager!   r[   ÚmessageReceived©r   rP   r¨   s      r   Ú"test_messageReceivedLoggingNoQueryz8DNSServerFactoryTests.test_messageReceivedLoggingNoQueryŠ  sX   € õ
 ŒK‰MŒMˆÝ&¨qÐ1Ñ1Ô1ˆåØØ3Ð4ØÔØØØ'ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          j        ¦   «         }|                     dt           j        ¬¦  «         |                     dt           j        ¬¦  «         t          d¬¦  «        }t          | dg|j        |dd¬¦  «         dS )	z•
        L{server.DNSServerFactory.messageReceived} logs the query types of all
        queries in the message if C{verbose} is set to C{1}.
        úexample.com©ÚnameÚtyper²   r•   z&MX AAAA query from ('192.0.2.100', 53)Nrµ   r·   ©r   r¹   ÚaddQueryÚMXÚAAAAr!   r[   rº   r»   s      r   Útest_messageReceivedLogging1z2DNSServerFactoryTests.test_messageReceivedLogging1›  sˆ   € õ
 ŒK‰MŒMˆØ	�
Š
˜­C¬Fˆ
Ñ3Ô3Ð3Ø	�
Š
˜­C¬Hˆ
Ñ5Ô5Ð5Ý&¨qÐ1Ñ1Ô1ˆåØØ5Ð6ØÔØØØ'ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          j        ¦   «         }|                     dt           j        ¬¦  «         |                     dt           j        ¬¦  «         t          d¬¦  «        }t          | dg|j        |dd¬¦  «         dS )	zŽ
        L{server.DNSServerFactory.messageReceived} logs the repr of all queries
        in the message if C{verbose} is set to C{2}.
        r¾   r¿   é   r•   zT<Query example.com MX IN> <Query example.com AAAA IN> query from ('192.0.2.100', 53)Nrµ   r·   rÂ   r»   s      r   Útest_messageReceivedLogging2z2DNSServerFactoryTests.test_messageReceivedLogging2®  s�   € õ
 ŒK‰MŒMˆØ	�
Š
˜­C¬Fˆ
Ñ3Ô3Ð3Ø	�
Š
˜­C¬Hˆ
Ñ5Ô5Ð5Ý&¨qÐ1Ñ1Ô1ˆåØðMðð ÔØØØ'ð
	
ñ 
	
ô 
	
ð 
	
ð 
	
ð 
	
r   c                 ó  ‡— t          j        ¦   «         }t          ¦   «         }t          ¦   «         Š|                      t
          j        dˆfd„¦  «         |                     |dd¬¦  «         |                      |j	        ‰¦  «         dS )zv
        L{server.DNSServerFactory.messageReceived} assigns a unix timestamp to
        the received message.
        Útimec                  ó   •— ‰ S r   r   )Úts   €r   ú<lambda>zEDNSServerFactoryTests.test_messageReceivedTimestamp.<locals>.<lambda>Ì  s   ø€ °€ r   Nr·   )
r   r¹   r!   rl   Úpatchr	   rË   rº   rV   ÚtimeReceived)r   rP   r¨   rÍ   s      @r   Útest_messageReceivedTimestampz3DNSServerFactoryTests.test_messageReceivedTimestampÄ  s{   ø€ õ
 ŒK‰MŒMˆÝ&Ñ(Ô(ˆÝ‰HŒHˆØ�
Š
•6”; ¨	¨	¨	¨	Ñ2Ô2Ð2Ø	×Ò !¨4¸ÐÑ>Ô>Ð>à×Ò˜œ¨Ñ+Ô+Ð+Ð+Ð+r   c                 óD  — t          j        ¦   «         }t          ¦   «         }t          ¦   «         }t          ¦   «         }|                      t          j        |j        |||¬¦  «        }|j        \  }}|                      ||||f¦  «         |                      |i ¦  «         dS )z¿
        L{server.DNSServerFactory.messageReceived} passes all messages to
        L{server.DNSServerFactory.allowQuery} along with the receiving protocol
        and origin address.
        r·   N)	r   r¹   rl   r+   ÚassertRaisesr0   rº   r   rV   )r   r#   ÚdummyProtocolÚdummyAddressr¨   Úer   r   s           r   Útest_messageReceivedAllowQueryz4DNSServerFactoryTests.test_messageReceivedAllowQueryÑ  s¡   € õ ”+‘-”-ˆÝ™œˆÝ‘x”xˆå#Ñ%Ô%ˆØ×ÒÝ#Ô7ØÔØØØ ð ñ 
ô 
ˆð ”v‰ˆˆfØ×Ò˜ ¨¸ÐEÑFÔFÐFØ×Ò˜ Ñ$Ô$Ð$Ð$Ð$r   c                 ó<  ‡—  G d„ dt           ¦  «        Š G ˆfd„dt          j        ¦  «        } |¦   «         }|                      ‰|j        t          j        ¦   «         dd¬¦  «        }|j        \  \  }}}}|                      |j	        t
          j
        ¦  «         dS )z»
        If C{allowQuery} returns C{False},
        L{server.DNSServerFactory.messageReceived} calls L{server.sendReply}
        with a message whose C{rCode} is L{dns.EREFUSED}.
        c                   ó   — e Zd ZdS )úFDNSServerFactoryTests.test_allowQueryFalse.<locals>.SendReplyExceptionNr{   r   r   r   ÚSendReplyExceptionrÚ   î  r}   r   rÛ   c                   ó    •— e Zd Zd„ Zˆ fd„ZdS )úKDNSServerFactoryTests.test_allowQueryFalse.<locals>.RaisingDNSServerFactoryc                 ó   — dS )NFr   r   s      r   r&   zVDNSServerFactoryTests.test_allowQueryFalse.<locals>.RaisingDNSServerFactory.allowQueryò  s   € Ø�ur   c                 ó   •—  ‰||¦  «        ‚r   r   )r   r   r   rÛ   s      €r   r(   zUDNSServerFactoryTests.test_allowQueryFalse.<locals>.RaisingDNSServerFactory.sendReplyõ  s   ø€ Ø(Ð(¨¨vÑ6Ô6Ð6r   N)r   r   r   r&   r(   )rÛ   s   €r   r+   rÝ   ñ  s=   ø€ € € € € ðð ð ð7ð 7ð 7ð 7ð 7ð 7ð 7r   r+   Nr·   )r3   r	   r`   rÓ   rº   r   r¹   r   rV   ÚrCodeÚEREFUSED)	r   r+   r¨   rÖ   r¸   r#   r%   r   rÛ   s	           @r   Útest_allowQueryFalsez*DNSServerFactoryTests.test_allowQueryFalseç  sÛ   ø€ ð	ð 	ð 	ð 	ð 	¥ñ 	ô 	ð 	ð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7¥fÔ&=ñ 	7ô 	7ð 	7ð $Ð#Ñ%Ô%ˆØ×ÒØØÔÝ”K‘M”MØØð ñ 
ô 
ˆð -.¬FÑ)Ñ!ˆ�˜ 6à×Ò˜œ­¬Ñ5Ô5Ð5Ð5Ð5r   c                 óì   ‡— dg|_         g Šˆfd„}t          ¦   «         }t          j        d¦  «        }t	          |||¦  «         |                     ||¦  «         |                      ‰||dfg¦  «         dS )a¤  
        Assert that the named method is called with the given message when it is
        passed to L{DNSServerFactory.messageReceived}.

        @param methodName: The name of the method which is expected to be
            called.
        @type methodName: L{str}

        @param message: The message which is expected to be passed to the
            C{methodName} method.
        @type message: L{dns.Message}
        Nc                 ó8   •— ‰                      | ||f¦  «         d S r   ©rS   )r#   r$   r%   ÚreceivedMessagess      €r   ÚfakeHandlerz?DNSServerFactoryTests._messageReceivedTest.<locals>.fakeHandler  s$   ø€ Ø×#Ò# W¨h¸Ð$@ÑAÔAÐAÐAÐAr   )Úqueriesr=   r	   r`   Úsetattrrº   rV   )r   Ú
methodNamer#   rç   r$   r¡   ræ   s         @r   Ú_messageReceivedTestz*DNSServerFactoryTests._messageReceivedTest  sœ   ø€ ð  ˜&ˆŒàÐð	Bð 	Bð 	Bð 	Bð 	Bõ  ‘>”>ˆÝÔ)¨$Ñ/Ô/ˆÝ�˜ [Ñ1Ô1Ð1Ø×Ò ¨Ñ2Ô2Ð2Ø×ÒÐ)¨W°hÀÐ,EÐ+FÑGÔGÐGÐGÐGr   c                 ól   — |                       dt          j        t          j        ¬¦  «        ¦  «         dS )z’
        L{DNSServerFactory.messageReceived} passes messages with an opcode of
        C{OP_QUERY} on to L{DNSServerFactory.handleQuery}.
        ÚhandleQuery©ÚopCodeN)rë   r   r¹   ÚOP_QUERYrc   s    r   Útest_queryMessageReceivedz/DNSServerFactoryTests.test_queryMessageReceived   s/   € ð
 	×!Ò! -µ´ÅCÄLÐ1QÑ1QÔ1QÑRÔRÐRÐRÐRr   c                 ól   — |                       dt          j        t          j        ¬¦  «        ¦  «         dS )z›
        L{DNSServerFactory.messageReceived} passes messages with an opcode of
        C{OP_INVERSE} on to L{DNSServerFactory.handleInverseQuery}.
        ÚhandleInverseQueryrî   N)rë   r   r¹   Ú
OP_INVERSErc   s    r   Ú test_inverseQueryMessageReceivedz6DNSServerFactoryTests.test_inverseQueryMessageReceived'  s:   € ð
 	×!Ò!Ø ¥#¤+µS´^Ð"DÑ"DÔ"Dñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ól   — |                       dt          j        t          j        ¬¦  «        ¦  «         dS )z”
        L{DNSServerFactory.messageReceived} passes messages with an opcode of
        C{OP_STATUS} on to L{DNSServerFactory.handleStatus}.
        ÚhandleStatusrî   N)rë   r   r¹   Ú	OP_STATUSrc   s    r   Útest_statusMessageReceivedz0DNSServerFactoryTests.test_statusMessageReceived0  ó/   € ð
 	×!Ò! .µ#´+ÅSÄ]Ð2SÑ2SÔ2SÑTÔTÐTÐTÐTr   c                 ól   — |                       dt          j        t          j        ¬¦  «        ¦  «         dS )z”
        L{DNSServerFactory.messageReceived} passes messages with an opcode of
        C{OP_NOTIFY} on to L{DNSServerFactory.handleNotify}.
        ÚhandleNotifyrî   N)rë   r   r¹   Ú	OP_NOTIFYrc   s    r   Útest_notifyMessageReceivedz0DNSServerFactoryTests.test_notifyMessageReceived7  rú   r   c                 ól   — |                       dt          j        t          j        ¬¦  «        ¦  «         dS )zß
        L{DNSServerFactory.messageReceived} passes messages with an opcode of
        C{OP_UPDATE} on to L{DNSServerFactory.handleOther}.

        This may change if the implementation ever covers update messages.
        ÚhandleOtherrî   N)rë   r   r¹   Ú	OP_UPDATErc   s    r   Útest_updateMessageReceivedz0DNSServerFactoryTests.test_updateMessageReceived>  s/   € ð 	×!Ò! -µ´ÅCÄMÐ1RÑ1RÔ1RÑSÔSÐSÐSÐSr   c                 óì  — t          ¦   «         t          ¦   «         }}t          j        ¦   «         }|                     |¦  «         |                      |j        |g¦  «         |                     |¦  «         |                      |j        ||g¦  «         |                     |¦  «         |                      |j        |g¦  «         |                     |¦  «         |                      |j        g ¦  «         dS )zÌ
        The C{connectionMade} and C{connectionLost} methods of
        L{DNSServerFactory} cooperate to keep track of all L{DNSProtocol}
        objects created by a factory which are connected.
        N)rl   r	   r`   ÚconnectionMaderV   ÚconnectionsÚconnectionLost)r   ÚprotoAÚprotoBr¡   s       r   Útest_connectionTrackingz-DNSServerFactoryTests.test_connectionTrackingG  sæ   € õ  ™œ¥6¡8¤8�ˆÝÔ)Ñ+Ô+ˆØ×Ò˜vÑ&Ô&Ð&Ø×Ò˜Ô,¨v¨hÑ7Ô7Ð7Ø×Ò˜vÑ&Ô&Ð&Ø×Ò˜Ô,¨v°vÐ.>Ñ?Ô?Ð?Ø×Ò˜vÑ&Ô&Ð&Ø×Ò˜Ô,¨v¨hÑ7Ô7Ð7Ø×Ò˜vÑ&Ô&Ð&Ø×Ò˜Ô,¨bÑ1Ô1Ð1Ð1Ð1r   c                 ó�  — t          j        ¦   «         }|                     d¦  «         |                     d¦  «         t          j        ¦   «         }t          ¦   «         |_        |                      t
          j        |j	        |t          ¦   «         d¬¦  «        }|j        \  \  }}|                      ||j        d         ¦  «         dS )z¸
        L{server.DNSServerFactory.handleQuery} takes the first query from the
        supplied message and dispatches it to
        L{server.DNSServerFactory.resolver.query}.
        ó   one.example.coms   two.example.comN©r#   r$   r%   r   )r   r¹   rÃ   r	   r`   r@   ra   rÓ   rC   rí   r=   r   rV   rè   )r   rP   r¨   rÖ   rE   r   s         r   Útest_handleQueryz&DNSServerFactoryTests.test_handleQueryX  s´   € õ ŒK‰MŒMˆØ	�
Š
Ð%Ñ&Ô&Ð&Ø	�
Š
Ð%Ñ&Ô&Ð&ÝÔ#Ñ%Ô%ˆÝ$Ñ&Ô&ˆŒ
à×ÒÝÔ*ØŒMØÝ!‘^”^Øð ñ 
ô 
ˆð œ6Ñ‰ˆ�&Ø×Ò˜ ¤	¨!¤Ñ-Ô-Ð-Ð-Ð-r   c                 óæ  ‡‡	— t          j        ¦   «         }t          j        ¦   «         Š G ˆfd„d¦  «        } |¦   «         |_        g Š	ˆ	fd„}||_        t          j        ¦   «         }|                     d¦  «         t          ¦   «         }t          ¦   «         }|                     |||¬¦  «         t          ¦   «         }‰                     |¦  «         |                      ‰	||||fi fg¦  «         dS )aC  
        L{server.DNSServerFactory.handleQuery} adds
        L{server.DNSServerFactory.resolver.gotResolverResponse} as a callback to
        the deferred returned by L{server.DNSServerFactory.resolver.query}. It
        is called with the query response, the original protocol, message and
        origin address.
        c                   ó   •— e Zd Zˆ fd„ZdS )úDDNSServerFactoryTests.test_handleQueryCallback.<locals>.FakeResolverc                 ó   •— ‰S r   r   ©r   r   r   Úds      €r   rE   zJDNSServerFactoryTests.test_handleQueryCallback.<locals>.FakeResolver.query{  ó   ø€ Ø�r   N©r   r   r   rE   ©r  s   €r   ÚFakeResolverr  z  ó.   ø€ € € € € ðð ð ð ð ð ð r   r  c                  ó6   •— ‰                      | |f¦  «         d S r   rå   )r   r   ÚgotResolverResponseArgss     €r   ÚfakeGotResolverResponsezODNSServerFactoryTests.test_handleQueryCallback.<locals>.fakeGotResolverResponse‚  s!   ø€ Ø#×*Ò*¨D°&¨>Ñ:Ô:Ð:Ð:Ð:r   r  r  N)r	   r`   r   ÚDeferredra   ÚgotResolverResponser   r¹   rÃ   r=   rl   rí   ÚcallbackrV   )
r   r¨   r  r  rP   r¤   rÕ   ÚdummyResponser  r  s
           @@r   Útest_handleQueryCallbackz.DNSServerFactoryTests.test_handleQueryCallbackn  s'  øø€ õ Ô#Ñ%Ô%ˆåŒNÑÔˆð	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð "�\‘^”^ˆŒ
à"$Ðð	;ð 	;ð 	;ð 	;ð 	;ð !8ˆÔåŒK‰MŒMˆØ	�
Š
Ð%Ñ&Ô&Ð&Ý#‘~”~ˆÝ‘x”xˆà	�Š˜a¨,ÀˆÑMÔMÐMå™œˆØ	�
Š
�=Ñ!Ô!Ð!à×ÒØ#Ø˜l¨A¨|Ð<¸bÐAÐBñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó
  ‡‡	— t          j        ¦   «         }t          j        ¦   «         Š G ˆfd„d¦  «        } |¦   «         |_        g Š	ˆ	fd„}||_        t          j        ¦   «         }|                     d¦  «         t          ¦   «         }t          ¦   «         }|                     |||¬¦  «         t          j        t          ¦   «         ¦  «        }‰                     |¦  «         |                      ‰	||||fi fg¦  «         dS )a?  
        L{server.DNSServerFactory.handleQuery} adds
        L{server.DNSServerFactory.resolver.gotResolverError} as an errback to
        the deferred returned by L{server.DNSServerFactory.resolver.query}. It
        is called with the query failure, the original protocol, message and
        origin address.
        c                   ó   •— e Zd Zˆ fd„ZdS )úCDNSServerFactoryTests.test_handleQueryErrback.<locals>.FakeResolverc                 ó   •— ‰S r   r   r  s      €r   rE   zIDNSServerFactoryTests.test_handleQueryErrback.<locals>.FakeResolver.query£  r  r   Nr  r  s   €r   r  r#  ¢  r  r   r  c                  ó6   •— ‰                      | |f¦  «         d S r   rå   )r   r   ÚgotResolverErrorArgss     €r   ÚfakeGotResolverErrorzKDNSServerFactoryTests.test_handleQueryErrback.<locals>.fakeGotResolverErrorª  s!   ø€ Ø ×'Ò'¨¨v¨Ñ7Ô7Ð7Ð7Ð7r   r  r  N)r	   r`   r   r  ra   ÚgotResolverErrorr   r¹   rÃ   r=   rl   rí   r
   ÚFailurer3   ÚerrbackrV   )
r   r¨   r  r'  rP   r¤   rÕ   ÚstubFailurer  r&  s
           @@r   Útest_handleQueryErrbackz-DNSServerFactoryTests.test_handleQueryErrback–  s1  øø€ õ Ô#Ñ%Ô%ˆåŒNÑÔˆð	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð "�\‘^”^ˆŒ
à!Ðð	8ð 	8ð 	8ð 	8ð 	8ð 2ˆÔåŒK‰MŒMˆØ	�
Š
Ð%Ñ&Ô&Ð&Ý#‘~”~ˆÝ‘x”xˆà	�Š˜a¨,ÀˆÑMÔMÐMå”o¥i¡k¤kÑ2Ô2ˆØ	�	Š	�+ÑÔÐà×ÒØ  [°,ÀÀ<Ð$PÐRTÐ#UÐ"Vñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó†  — t          j        ¦   «         }g }g }g }|                      t          j        |j        |||ft          ¦   «         t          j        ¦   «         d¬¦  «        }|j        \  \  }}|  	                    |j
        |¦  «         |  	                    |j        |¦  «         |  	                    |j        |¦  «         dS )zÁ
        L{server.DNSServerFactory.gotResolverResponse} accepts a tuple of
        resource record lists and triggers a response message containing those
        resource record lists.
        N©r$   r#   r%   )r	   r`   rÓ   r5   r8   r  r   r¹   r   r›   ÚanswersÚ	authorityÚ
additional)r   r¨   r/  r0  r1  rÖ   r#   r   s           r   Útest_gotResolverResponsez.DNSServerFactoryTests.test_gotResolverResponse½  sÀ   € õ Ô#Ñ%Ô%ˆØˆØˆ	Øˆ
Ø×ÒÝÔ1ØÔ!Ø�i Ð,Ý$Ñ&Ô&Ý”K‘M”MØð ñ 
ô 
ˆð œVÑ‰
ˆ�Fà�Š�g”o wÑ/Ô/Ð/Ø�Š�gÔ'¨Ñ3Ô3Ð3Ø�Š�gÔ(¨*Ñ5Ô5Ð5Ð5Ð5r   c           
      ó>  — t          ¦   «         }t          |_        t          j        ¦   «         }d|_        |                      t          |j        g g g fd|d¬¦  «        }|  	                    dt          |t          j        g g g ¬¦  «        f|j        |j        f¦  «         dS )z–
        L{server.DNSServerFactory.gotResolverResponse} calls
        L{server.DNSServerFactory._responseFromMessage} to generate a response.
        r²   Nr.  r   )r#   rà   r/  r0  r1  )r!   r   Ú_responseFromMessager   r¹   rÐ   rÓ   r   r  rV   ÚdictÚOKr   r   ©r   r¡   ÚrequestrÖ   s       r   Ú0test_gotResolverResponseCallsResponseFromMessagezFDNSServerFactoryTests.test_gotResolverResponseCallsResponseFromMessageÕ  s¼   € õ
 -Ñ.Ô.ˆÝ'-ˆÔ$å”+‘-”-ˆØ ˆÔà×ÒÝØÔ'Ø��RˆLØØØð ñ 
ô 
ˆð 	×ÒàÝØ#Ýœ&ØØ Ø!ðñ ô ð	ð ŒV�Q”XÐñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó²   — t          j        ¦   «         }t          j        dd¬¦  «        }|                     |¬¦  «        f}|                      ||¦  «         dS )zŽ
        L{server.DNSServerFactory._responseFromMessage} generates a response
        message which is a copy of the request message.
        F)ÚanswerÚrecAv©r#   N)r	   r`   r   r¹   r4  ÚassertIsNot©r   r¡   r8  Úresponses       r   Ú"test_responseFromMessageNewMessagez8DNSServerFactoryTests.test_responseFromMessageNewMessageö  s[   € õ
 Ô)Ñ+Ô+ˆÝ”+ U°%Ð8Ñ8Ô8ˆØ×0Ò0¸Ð0ÑAÔAÐCˆà×Ò˜ (Ñ+Ô+Ð+Ð+Ð+r   c                 ó0  — t          j        ¦   «         }d|_        |                     t	          j        d¬¦  «        ¬¦  «        }d|_        |                     t	          j        d¬¦  «        ¬¦  «        }|                      d|j        |j        f¦  «         dS )zÇ
        L{server.DNSServerFactory._responseFromMessage} generates a response
        message whose C{recAV} attribute is L{True} if
        L{server.DNSServerFactory.canRecurse} is L{True}.
        TF)r<  r=  ©TFN)r	   r`   r�   r4  r   r¹   rV   r<  ©r   r¡   Ú	response1Ú	response2s       r   Ú*test_responseFromMessageRecursionAvailablez@DNSServerFactoryTests.test_responseFromMessageRecursionAvailable  s�   € õ Ô)Ñ+Ô+ˆØ!ˆÔØ×0Ò0½¼È5Ð9QÑ9QÔ9QÐ0ÑRÔRˆ	Ø"ˆÔØ×0Ò0½¼È4Ð9PÑ9PÔ9PÐ0ÑQÔQˆ	Ø×Ò˜¨¬¸)¼/Ð(JÑKÔKÐKÐKÐKr   c                 óÌ   — t          j        ¦   «         }t          j        ¦   «         }d|_        |                     |¬¦  «        }|                      |j        |j        ¦  «         dS )z¿
        L{server.DNSServerFactory._responseFromMessage} generates a response
        message whose C{timeReceived} attribute has the same value as that found
        on the request.
        iÒ  r=  N)r	   r`   r   r¹   rÐ   r4  rV   r?  s       r   Ú$test_responseFromMessageTimeReceivedz:DNSServerFactoryTests.test_responseFromMessageTimeReceived  s]   € õ Ô)Ñ+Ô+ˆÝ”+‘-”-ˆØ#ˆÔØ×/Ò/¸Ð/Ñ@Ô@ˆà×Ò˜Ô-¨xÔ/DÑEÔEÐEÐEÐEr   c                 óÌ   — t          j        ¦   «         }t          j        ¦   «         }d|_        |                     |¬¦  «        }|                      |j        |j        ¦  «         dS )zº
        L{server.DNSServerFactory._responseFromMessage} generates a response
        message whose C{maxSize} attribute has the same value as that found
        on the request.
        r   r=  N)r	   r`   r   r¹   ÚmaxSizer4  rV   r?  s       r   Útest_responseFromMessageMaxSizez5DNSServerFactoryTests.test_responseFromMessageMaxSize  s[   € õ Ô)Ñ+Ô+ˆÝ”+‘-”-ˆØˆŒØ×/Ò/¸Ð/Ñ@Ô@ˆà×Ò˜œ¨(Ô*:Ñ;Ô;Ð;Ð;Ð;r   c                 ód   — |                       t          j        t          j        j        ¦  «         dS )z{
        L{server.DNSServerFactory} has a C{_messageFactory} attribute which is
        L{dns.Message} by default.
        N)r›   r   r¹   r	   r`   Ú_messageFactoryrc   s    r   Útest_messageFactoryz)DNSServerFactoryTests.test_messageFactory(  s&   € ð
 	�Š•c”k¥6Ô#:Ô#JÑKÔKÐKÐKÐKr   c           
      ó‚  — t          j        ¦   «         }|                      t          dt          ¦  «         t          j        ¦   «         }|                      t          |j        |t          j	        ¬¦  «        }|  
                    dt          |j        |t          j	        |j        d¬¦  «        f|j        |j        f¦  «         dS )a4  
        L{server.DNSServerFactory._responseFromMessage} calls
        C{dns._responseFromMessage} to generate a response
        message from the request message. It supplies the request message and
        other keyword arguments which should be passed to the response message
        initialiser.
        r4  ©r#   rà   r   F)ÚresponseConstructorr#   rà   r<  ÚauthN)r	   r`   rÏ   r   r   r¹   rÓ   r   r4  r6  rV   r5  rN  r�   r   r   r7  s       r   Ú+test_responseFromMessageCallsMessageFactoryzADNSServerFactoryTests.test_responseFromMessageCallsMessageFactory/  sÁ   € õ Ô)Ñ+Ô+ˆØ�
Š
•3Ð.µÑ7Ô7Ð7å”+‘-”-ˆØ×ÒÝ˜WÔ9À7ÕRUÔRXð ñ 
ô 
ˆð 	×ÒàÝØ(/Ô(?Ø#Ýœ&Ø!Ô,Øðñ ô ð	ð ŒV�Q”XÐñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó`  — t          j        ¦   «         }|                     t          j        ¦   «         t          j        d¬¦  «        g¬¦  «        }|                     t          j        ¦   «         t          j        d¬¦  «        g¬¦  «        }|                      d|j        |j        f¦  «         dS )z¥
        L{server.DNSServerFactory._responseFromMessage} marks the response
        message as authoritative if any of the answer records are authoritative.
        T)rS  )r#   r/  FrC  N)r	   r`   r4  r   r¹   ÚRRHeaderrV   rS  rD  s       r   Ú,test_responseFromMessageAuthoritativeMessagezBDNSServerFactoryTests.test_responseFromMessageAuthoritativeMessageL  s±   € õ
 Ô)Ñ+Ô+ˆØ×0Ò0Ý”K‘M”M­C¬L¸dÐ,CÑ,CÔ,CÐ+Dð 1ñ 
ô 
ˆ	ð ×0Ò0Ý”K‘M”M­C¬L¸eÐ,DÑ,DÔ,DÐ+Eð 1ñ 
ô 
ˆ	ð 	×ÒØØŒ^˜Yœ^Ð,ñ	
ô 	
ð 	
ð 	
ð 	
r   c           	      ó  — t          d¬¦  «        }t          j        ¦   «         g}t          j        ¦   «         g}t          j        ¦   «         g}t          | dg|j        |||ft          ¦   «         t          j        ¦   «         d¬¦  «         dS )zŒ
        L{server.DNSServerFactory.gotResolverResponse} logs the total number of
        records in the response if C{verbose > 0}.
        r²   r•   zLookup found 3 recordsNr.  )r!   r   rV  r[   r  r=   r¹   )r   r¨   r/  r0  r1  s        r   Útest_gotResolverResponseLoggingz5DNSServerFactoryTests.test_gotResolverResponseLogging]  s‹   € õ
 '¨qÐ1Ñ1Ô1ˆÝ”<‘>”>Ð"ˆÝ”\‘^”^Ð$ˆ	Ý”l‘n”nÐ%ˆ
åØØ%Ð&ØÔ!Ø�i Ð,Ý!‘^”^Ý”K‘M”MØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          t          ¦   «         g¬¦  «        }t          j        ¦   «         }|                     d¦  «         t          j        ¦   «         g}g }g }|                      t          j        |j        |||ft          ¦   «         |d¬¦  «        }|j
        \  \  }\  }}	}
}|                      |j        j        d¦  «         |                      ||¦  «         |                      |	|¦  «         |                      |
|¦  «         dS )z“
        L{server.DNSServerFactory.gotResolverResponse} caches the response if at
        least one cache was provided in the constructor.
        rq   s   example.comNr.  )r!   rG   r   r¹   rÃ   rV  rÓ   rJ   r  r=   r   rV   rÀ   r›   )r   r¨   rP   ÚexpectedAnswersÚexpectedAuthorityÚexpectedAdditionalrÖ   rE   r/  r0  r1  r   s               r   Útest_gotResolverResponseCachingz5DNSServerFactoryTests.test_gotResolverResponseCachingq  s	  € õ
 '­|©~¬~Ð.>Ð?Ñ?Ô?ˆåŒK‰MŒMˆØ	�
Š
�>Ñ"Ô"Ð"Ýœ<™>œ>Ð*ˆØÐØÐà×ÒÝÔ-ØÔ!ØÐ/Ð1CÐDÝ!‘^”^ØØð ñ 
ô 
ˆð =>¼FÑ9Ñ1ˆÑ0�˜) Z°6à×Ò˜œœ¨.Ñ9Ô9Ð9Ø�Š�g˜Ñ/Ô/Ð/Ø�Š�iÐ!2Ñ3Ô3Ð3Ø�Š�jÐ"4Ñ5Ô5Ð5Ð5Ð5r   c                 óx  — t          ¦   «         }t          |_        t          j        ¦   «         }d|_        |                      t          |j        t          j
        t          j        ¦   «         ¦  «        d|d¬¦  «        }|                      dt          |t          j        ¬¦  «        f|j        |j        f¦  «         dS )z“
        L{server.DNSServerFactory.gotResolverError} calls
        L{server.DNSServerFactory._responseFromMessage} to generate a response.
        r²   Nr.  r   rQ  )r!   r   r4  r   r¹   rÐ   rÓ   r   r(  r
   r)  r   ÚDomainErrorrV   r5  ÚENAMEr   r   r7  s       r   Ú-test_gotResolverErrorCallsResponseFromMessagezCDNSServerFactoryTests.test_gotResolverErrorCallsResponseFromMessage�  s²   € õ
 -Ñ.Ô.ˆÝ'-ˆÔ$å”+‘-”-ˆØ ˆÔà×ÒÝØÔ$ÝŒO�EÔ-Ñ/Ô/Ñ0Ô0ØØØð ñ 
ô 
ˆð 	×ÒØ•˜g­S¬YÐ7Ñ7Ô7Ð8¸1¼6À1Ä8Ð:Lñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó,  — t          j        ¦   «         }|                      t          j        |j        t          j        |¦  «        t          ¦   «         t          j	        ¦   «         d¬¦  «        }|j
        \  \  }}|                      |j        |¦  «         dS )a{  
        L{server.DNSServerFactory.gotResolver} accepts a L{failure.Failure} and
        triggers a response message whose rCode corresponds to the DNS error
        contained in the C{Failure}.

        @param responseError: The L{Exception} instance which is expected to
            trigger C{expectedMessageCode} when it is supplied to
            C{gotResolverError}
        @type responseError: L{Exception}

        @param expectedMessageCode: The C{rCode} which is expected in the
            message returned by C{gotResolverError} in response to
            C{responseError}.
        @type expectedMessageCode: L{int}
        Nr.  )r	   r`   rÓ   r5   r8   r(  r
   r)  r   r¹   r   rV   rà   )r   ÚresponseErrorÚexpectedMessageCoder¨   rÖ   r#   r   s          r   Ú_assertMessageRcodeForErrorz1DNSServerFactoryTests._assertMessageRcodeForError¤  s‰   € õ  Ô#Ñ%Ô%ˆØ×ÒÝÔ1ØÔÝŒO˜MÑ*Ô*Ý$Ñ&Ô&Ý”K‘M”MØð ñ 
ô 
ˆð œVÑ‰
ˆ�Fà×Ò˜œÐ(;Ñ<Ô<Ð<Ð<Ð<r   c                 óh   — |                       t          j        ¦   «         t          j        ¦  «         dS )z¦
        L{server.DNSServerFactory.gotResolver} triggers a response message with
        an C{rCode} of L{dns.ENAME} if supplied with a L{error.DomainError}.
        N)rf  r   r`  r   ra  rc   s    r   Ú test_gotResolverErrorDomainErrorz6DNSServerFactoryTests.test_gotResolverErrorDomainErrorÁ  s+   € ð
 	×(Ò(­Ô):Ñ)<Ô)<½c¼iÑHÔHÐHÐHÐHr   c                 óh   — |                       t          j        ¦   «         t          j        ¦  «         dS )z»
        L{server.DNSServerFactory.gotResolver} triggers a response message with
        an C{rCode} of L{dns.ENAME} if supplied with a
        L{error.AuthoritativeDomainError}.
        N)rf  r   ÚAuthoritativeDomainErrorr   ra  rc   s    r   Ú-test_gotResolverErrorAuthoritativeDomainErrorzCDNSServerFactoryTests.test_gotResolverErrorAuthoritativeDomainErrorÈ  s+   € ð 	×(Ò(­Ô)GÑ)IÔ)IÍ3Ì9ÑUÔUÐUÐUÐUr   c                 óØ   — |                       t          ¦   «         t          j        ¦  «         |                      t          ¦  «        }|                      t          |¦  «        d¦  «         dS )zÂ
        L{server.DNSServerFactory.gotResolver} triggers a response message with
        an C{rCode} of L{dns.ESERVER} if supplied with another type of error and
        logs the error.
        r²   N)rf  ÚKeyErrorr   ÚESERVERÚflushLoggedErrorsrV   Úlen)r   rÖ   s     r   Útest_gotResolverErrorOtherErrorz5DNSServerFactoryTests.test_gotResolverErrorOtherErrorÐ  sU   € ð 	×(Ò(­©¬µS´[ÑAÔAÐAØ×"Ò"¥8Ñ,Ô,ˆØ×Ò�˜Q™œ Ñ#Ô#Ð#Ð#Ð#r   c           	      óÞ   — t          d¬¦  «        }t          | dg|j        t          j        t          j        ¦   «         ¦  «        t          ¦   «         t          j	        ¦   «         d¬¦  «         dS )zZ
        L{server.DNSServerFactory.gotResolver} logs a message if C{verbose > 0}.
        r²   r•   zLookup failedNr.  )
r!   r[   r(  r
   r)  r   r`  r=   r   r¹   r¯   s     r   Útest_gotResolverErrorLoggingz2DNSServerFactoryTests.test_gotResolverErrorLoggingÚ  sm   € õ '¨qÐ1Ñ1Ô1ˆÝØØÐØÔÝŒO�EÔ-Ñ/Ô/Ñ0Ô0Ý!‘^”^Ý”K‘M”MØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  ‡— t          j        ¦   «         }g Šˆfd„|_        t          j        dd¬¦  «        }t          ¦   «         t          ¦   «         g|_        t          ¦   «         t          ¦   «         g|_        t          ¦   «         t          ¦   «         g|_        | 	                    t          j        t          j        ¦   «         ¦  «        d|d¬¦  «         |                      t          j        dd¬¦  «        g‰¦  «         dS )zÙ
        L{server.DNSServerFactory.gotResolverError} does not allow request
        attributes to leak into the response ie it sends a response with AD, CD
        set to 0 and empty response record sections.
        c                 ó.   •— ‰                      |¦  «        S r   rå   ©r$   r@  r%   Ú	responsess      €r   rÎ   zUDNSServerFactoryTests.test_gotResolverErrorResetsResponseAttributes.<locals>.<lambda>ñ  ó   ø€ À	×@PÒ@PØñA
ô A
€ r   T©ÚauthenticDataÚcheckingDisabledNr.  é   ©rà   r;  )r	   r`   r(   r   r¹   rl   r/  r0  r1  r(  r
   r)  r   r`  rV   ©r   r¡   r8  rw  s      @r   Ú-test_gotResolverErrorResetsResponseAttributeszCDNSServerFactoryTests.test_gotResolverErrorResetsResponseAttributesé  sñ   ø€ õ Ô)Ñ+Ô+ˆØˆ	ð
ð 
ð 
ð 
ˆÔõ ”+¨DÀ4ÐHÑHÔHˆÝ!™8œ8¥V¡X¤XÐ.ˆŒÝ#™XœX¥v¡x¤xÐ0ˆÔÝ$™hœh­©¬Ð1ˆÔØ× Ò ÝŒO�EÔ-Ñ/Ô/Ñ0Ô0ØØØð	 	!ñ 	
ô 	
ð 	
ð 	×Ò�#œ+¨A°dÐ;Ñ;Ô;Ð<¸iÑHÔHÐHÐHÐHr   c                 óÆ  ‡— t          j        ¦   «         }g Šˆfd„|_        t          j        dd¬¦  «        }t          ¦   «         t          ¦   «         g|_        t          ¦   «         t          ¦   «         g|_        t          ¦   «         t          ¦   «         g|_        | 	                    g g g fd|d¬¦  «         |  
                    t          j        dd¬¦  «        g‰¦  «         dS )a  
        L{server.DNSServerFactory.gotResolverResponse} does not allow request
        attributes to leak into the response ie it sends a response with AD, CD
        set to 0 and none of the records in the request answer sections are
        copied to the response.
        c                 ó.   •— ‰                      |¦  «        S r   rå   rv  s      €r   rÎ   zXDNSServerFactoryTests.test_gotResolverResponseResetsResponseAttributes.<locals>.<lambda>
  rx  r   Try  Nr.  r   r}  )r	   r`   r(   r   r¹   rl   r/  r0  r1  r  rV   r~  s      @r   Ú0test_gotResolverResponseResetsResponseAttributeszFDNSServerFactoryTests.test_gotResolverResponseResetsResponseAttributes  sá   ø€ õ Ô)Ñ+Ô+ˆØˆ	ð
ð 
ð 
ð 
ˆÔõ ”+¨DÀ4ÐHÑHÔHˆÝ!™8œ8¥V¡X¤XÐ.ˆŒÝ#™XœX¥v¡x¤xÐ0ˆÔÝ$™hœh­©¬Ð1ˆÔà×#Ò#Ø��RˆL 4°À$ð 	$ñ 	
ô 	
ð 	
ð 	×Ò�#œ+¨A°dÐ;Ñ;Ô;Ð<¸iÑHÔHÐHÐHÐHr   c                 óH  — t          j        ¦   «         }t          ¦   «         }t          j        ¦   «         }|                      t          j        |j        t          ¦   «         ||¬¦  «        }|j	        \  }}|  
                    |||f¦  «         |  
                    |i ¦  «         dS )zµ
        If L{server.DNSServerFactory.sendReply} is supplied with a protocol
        *and* an address tuple it will supply that address to
        C{protocol.writeMessage}.
        r.  N)r   r¹   rl   r	   r`   rÓ   r5   r8   r(   r   rV   )r   rP   rÕ   r¨   rÖ   r   r   s          r   Útest_sendReplyWithAddressz/DNSServerFactoryTests.test_sendReplyWithAddress  sž   € õ ŒK‰MŒMˆÝ‘x”xˆÝÔ#Ñ%Ô%ˆØ×ÒÝÔ1ØŒKÝ$Ñ&Ô&ØØ ð ñ 
ô 
ˆð ”v‰ˆˆfØ×Ò˜  <Ð0Ñ1Ô1Ð1Ø×Ò˜ Ñ$Ô$Ð$Ð$Ð$r   c                 ó*  — t          j        ¦   «         }t          j        ¦   «         }|                      t
          j        |j        t          ¦   «         |d¬¦  «        }|j        \  }}|  	                    ||f¦  «         |  	                    |i ¦  «         dS )zµ
        If L{server.DNSServerFactory.sendReply} is supplied with a protocol but
        no address tuple it will supply only a message to
        C{protocol.writeMessage}.
        Nr.  )
r   r¹   r	   r`   rÓ   r5   r8   r(   r   rV   )r   rP   r¨   rÖ   r   r   s         r   Útest_sendReplyWithoutAddressz2DNSServerFactoryTests.test_sendReplyWithoutAddress,  s’   € õ ŒK‰MŒMˆÝÔ#Ñ%Ô%ˆØ×ÒÝÔ1ØŒKÝ$Ñ&Ô&ØØð ñ 
ô 
ˆð ”v‰ˆˆfØ×Ò˜ ˜tÑ$Ô$Ð$Ø×Ò˜ Ñ$Ô$Ð$Ð$Ð$r   c                 óø   — |                       t          j        dd„ ¦  «         t          j        ¦   «         }d|_        t          j        d¬¦  «        }t          | ddg|j        t          ¦   «         |d¬	¦  «         dS )
z…
        If L{server.DNSServerFactory.sendReply} logs a "no answers" message if
        the supplied message has no answers.
        rË   c                  ó   — dS ©Ni‚Q r   r   r   r   rÎ   zFDNSServerFactoryTests.test_sendReplyLoggingNoAnswers.<locals>.<lambda>D  ó   € °€ r   é�Q rÈ   r•   zReplying with no answersú Processed query in 1.000 secondsNr.  )
rÏ   r	   rË   r   r¹   rÐ   r`   r[   r(   r=   r»   s      r   Útest_sendReplyLoggingNoAnswersz4DNSServerFactoryTests.test_sendReplyLoggingNoAnswers?  s‚   € ð
 	�
Š
•6”; ¨¨Ñ6Ô6Ð6ÝŒK‰MŒMˆØˆŒÝÔ#¨AÐ.Ñ.Ô.ˆÝØØ'Ð)KÐLØŒKÝ!‘^”^ØØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ór  — |                       t          j        dd„ ¦  «         t          j        ¦   «         }|j                             t          j        t          j        d¦  «        ¬¦  «        ¦  «         |j	                             t          j        t          j        d¦  «        ¬¦  «        ¦  «         |j
                             t          j        t          j        d¦  «        ¬¦  «        ¦  «         d|_        t          j        d¬¦  «        }t          | g d¢|j        t          ¦   «         |d	¬
¦  «         d	S )z»
        If L{server.DNSServerFactory.sendReply} logs a message for answers,
        authority, additional if the supplied a message has records in any of
        those sections.
        rË   c                  ó   — dS r‰  r   r   r   r   rÎ   zHDNSServerFactoryTests.test_sendReplyLoggingWithAnswers.<locals>.<lambda>W  rŠ  r   z	127.0.0.1)Úpayloadr‹  rÈ   r•   )z*Answers are <A address=127.0.0.1 ttl=None>z+Authority is <A address=127.0.0.1 ttl=None>z,Additional is <A address=127.0.0.1 ttl=None>rŒ  Nr.  )rÏ   r	   rË   r   r¹   r/  rS   rV  ÚRecord_Ar0  r1  rÐ   r`   r[   r(   r=   r»   s      r   Ú test_sendReplyLoggingWithAnswersz6DNSServerFactoryTests.test_sendReplyLoggingWithAnswersQ  s  € ð 	�
Š
•6”; ¨¨Ñ6Ô6Ð6ÝŒK‰MŒMˆØ	Œ	×Ò�œ­c¬l¸;Ñ.GÔ.GÐHÑHÔHÑIÔIÐIØ	Œ×Ò�3œ<µ´¸[Ñ0IÔ0IÐJÑJÔJÑKÔKÐKØ	Œ×Ò�CœLµ´¸kÑ1JÔ1JÐKÑKÔKÑLÔLÐLØˆŒÝÔ#¨AÐ.Ñ.Ô.ˆÝØðð ð ð ŒKÝ!‘^”^ØØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          j        ¦   «         }|                      t          j        |j        t          j        ¦   «         t          ¦   «         d¬¦  «        }|j        \  \  }}|  	                    |j
        t          j        ¦  «         dS )z—
        L{server.DNSServerFactory.handleInverseQuery} triggers the sending of a
        response message with C{rCode} set to L{dns.ENOTIMP}.
        Nr  )r	   r`   rÓ   r5   r8   ró   r   r¹   r   rV   rà   ÚENOTIMP©r   r¨   rÖ   r#   r   s        r   Útest_handleInverseQueryz-DNSServerFactoryTests.test_handleInverseQueryl  s}   € õ
 Ô#Ñ%Ô%ˆØ×ÒÝÔ1ØÔ Ý”K‘M”MÝ$Ñ&Ô&Øð ñ 
ô 
ˆð œVÑ‰
ˆ�Fà×Ò˜œ­¬Ñ4Ô4Ð4Ð4Ð4r   c                 ó–   — t          d¬¦  «        }t          | dg|j        t          j        ¦   «         t          ¦   «         d¬¦  «         dS )zz
        L{server.DNSServerFactory.handleInverseQuery} logs the message origin
        address if C{verbose > 0}.
        r²   r•   zInverse query from ('::1', 53)©z::1r¶   r  N)r!   r[   ró   r   r¹   r=   r¯   s     r   Útest_handleInverseQueryLoggingz4DNSServerFactoryTests.test_handleInverseQueryLogging}  sW   € õ
 '¨qÐ1Ñ1Ô1ˆÝØØ-Ð.ØÔ Ý”K‘M”MÝ!‘^”^Øð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          j        ¦   «         }|                      t          j        |j        t          j        ¦   «         t          ¦   «         d¬¦  «        }|j        \  \  }}|  	                    |j
        t          j        ¦  «         dS )z‘
        L{server.DNSServerFactory.handleStatus} triggers the sending of a
        response message with C{rCode} set to L{dns.ENOTIMP}.
        Nr  )r	   r`   rÓ   r5   r8   r÷   r   r¹   r   rV   rà   r”  r•  s        r   Útest_handleStatusz'DNSServerFactoryTests.test_handleStatusŒ  ó|   € õ
 Ô#Ñ%Ô%ˆØ×ÒÝÔ1ØŒNÝ”K‘M”MÝ$Ñ&Ô&Øð ñ 
ô 
ˆð œVÑ‰
ˆ�Fà×Ò˜œ­¬Ñ4Ô4Ð4Ð4Ð4r   c                 ó–   — t          d¬¦  «        }t          | dg|j        t          j        ¦   «         t          ¦   «         d¬¦  «         dS )zt
        L{server.DNSServerFactory.handleStatus} logs the message origin address
        if C{verbose > 0}.
        r²   r•   zStatus request from ('::1', 53)r˜  r  N)r!   r[   r÷   r   r¹   r=   r¯   s     r   Útest_handleStatusLoggingz.DNSServerFactoryTests.test_handleStatusLogging�  óV   € õ
 '¨qÐ1Ñ1Ô1ˆÝØØ.Ð/ØŒNÝ”K‘M”MÝ!‘^”^Øð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          j        ¦   «         }|                      t          j        |j        t          j        ¦   «         t          ¦   «         d¬¦  «        }|j        \  \  }}|  	                    |j
        t          j        ¦  «         dS )z‘
        L{server.DNSServerFactory.handleNotify} triggers the sending of a
        response message with C{rCode} set to L{dns.ENOTIMP}.
        Nr  )r	   r`   rÓ   r5   r8   rü   r   r¹   r   rV   rà   r”  r•  s        r   Útest_handleNotifyz'DNSServerFactoryTests.test_handleNotify¬  rœ  r   c                 ó–   — t          d¬¦  «        }t          | dg|j        t          j        ¦   «         t          ¦   «         d¬¦  «         dS )zt
        L{server.DNSServerFactory.handleNotify} logs the message origin address
        if C{verbose > 0}.
        r²   r•   zNotify message from ('::1', 53)r˜  r  N)r!   r[   rü   r   r¹   r=   r¯   s     r   Útest_handleNotifyLoggingz.DNSServerFactoryTests.test_handleNotifyLogging½  rŸ  r   c                 ó  — t          j        ¦   «         }|                      t          j        |j        t          j        ¦   «         t          ¦   «         d¬¦  «        }|j        \  \  }}|  	                    |j
        t          j        ¦  «         dS )z�
        L{server.DNSServerFactory.handleOther} triggers the sending of a
        response message with C{rCode} set to L{dns.ENOTIMP}.
        Nr  )r	   r`   rÓ   r5   r8   r   r   r¹   r   rV   rà   r”  r•  s        r   Útest_handleOtherz&DNSServerFactoryTests.test_handleOtherÌ  s|   € õ
 Ô#Ñ%Ô%ˆØ×ÒÝÔ1ØŒMÝ”K‘M”MÝ$Ñ&Ô&Øð ñ 
ô 
ˆð œVÑ‰
ˆ�Fà×Ò˜œ­¬Ñ4Ô4Ð4Ð4Ð4r   c                 ó–   — t          d¬¦  «        }t          | dg|j        t          j        ¦   «         t          ¦   «         d¬¦  «         dS )zs
        L{server.DNSServerFactory.handleOther} logs the message origin address
        if C{verbose > 0}.
        r²   r•   z$Unknown op code (0) from ('::1', 53)r˜  r  N)r!   r[   r   r   r¹   r=   r¯   s     r   Útest_handleOtherLoggingz-DNSServerFactoryTests.test_handleOtherLoggingÝ  sV   € õ
 '¨qÐ1Ñ1Ô1ˆÝØØ3Ð4ØŒMÝ”K‘M”MÝ!‘^”^Øð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   N)Dr   r   r   r   rd   rh   ro   rs   rw   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,  r2  r9  rA  rG  rI  rL  rO  rT  rW  rY  r^  rb  rf  rh  rk  rq  rs  r  r‚  r„  r†  r�  r’  r–  r™  r›  rž  r¡  r£  r¥  r§  r   r   r   r]   r]   Û   s  € € € € € ðð ðYð Yð YðKð Kð Kð

ð 

ð 

ð

ð 

ð 

ð

ð 

ð 

ð
ð 
ð 
ð.;ð ;ð ;ð	
ð 	
ð 	
ð?ð ?ð ?ðSð Sð Sð<ð <ð <ðGð Gð GðPð Pð PðIð Ið IðJð Jð Jð2=ð =ð =ðFð Fð Fð
ð 
ð 
ð"
ð 
ð 
ð&
ð 
ð 
ð,,ð ,ð ,ð%ð %ð %ð,6ð 6ð 6ð:Hð Hð Hð8Sð Sð Sð
ð 
ð 
ðUð Uð UðUð Uð UðTð Tð Tð2ð 2ð 2ð".ð .ð .ð,&
ð &
ð &
ðP%
ð %
ð %
ðN6ð 6ð 6ð0
ð 
ð 
ðB	,ð 	,ð 	,ðLð Lð LðFð Fð Fð<ð <ð <ðLð Lð Lð
ð 
ð 
ð:
ð 
ð 
ð"
ð 
ð 
ð(6ð 6ð 6ð8
ð 
ð 
ð.=ð =ð =ð:Ið Ið IðVð Vð Vð$ð $ð $ð
ð 
ð 
ðIð Ið Ið0Ið Ið Ið.%ð %ð %ð(%ð %ð %ð&
ð 
ð 
ð$
ð 
ð 
ð65ð 5ð 5ð"
ð 
ð 
ð5ð 5ð 5ð"
ð 
ð 
ð5ð 5ð 5ð"
ð 
ð 
ð5ð 5ð 5ð"
ð 
ð 
ð 
ð 
r   r]   N)r   Úzope.interface.verifyr   Útwisted.internetr   Útwisted.internet.interfacesr   Útwisted.namesr   r   r   r	   Útwisted.pythonr
   r   Útwisted.trialr   r3   r   r   r`   r!   r+   r5   r=   r@   rG   r[   ÚTestCaser]   r   r   r   ú<module>r¯     s  ððð ð .Ð -Ð -Ð -Ð -Ð -à "Ð "Ð "Ð "Ð "Ð "Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð �iñ ô ð ð(ð (ð (ðð ð ð ð  Ô!8ñ ô ð ðB5ð 5ð 5ð 5ð 5˜fÔ5ñ 5ô 5ð 5ð:7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð0ð ð ð ð ñ ô ð ð"0ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ð06ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ð0Vð Vð Vð@O
ð O
ð O
ð O
ð O
˜HÔ-ñ O
ô O
ð O
ð O
ð O
r   