Ë
    oj\¿  ã                   óÈ  — d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZ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mZm Z m!Z!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„ Z/ G d„ dej`                  «      Z1 ejD                  dddddddd¬«      Z2 ejD                  ddddd d!d"d#¬«      Z3 ejD                  d$d%d&d'dd(d¬)«      Z4 e1de2fe2 ejB                  d*«       ejj                  d+«       ejl                  d,«       ejl                  d-d.«       ejn                  d/d0«       ejp                  d1d2¬3«       ejr                  d4«       ejt                  d5«       ejv                  d6«       ejx                  d7d8«       ejz                  dd9d:«       ejz                  d;d<d=«       ejz                  d>d?d@«       ejx                  dA«       ej|                  dB«       ej~                  dCdD¬E«       ej€                  ddF¬G«       ej‚                  dHdI¬J«       ej„                  dKej†                  dL«       ejˆ                  dd/dMdNdO«       ejŠ                  dP«      g ejŒ                  dQdRdSdT«      g ejB                  dU«       ejB                  dV«      g ejB                  dW«       ejB                  dX«      g ejr                  d«      g ejB                  dY«      gdZœ¬[«      ZG e1de3fd\ ej�                  d]«      e3gi¬[«      ZI e1d^e4fd^e4 ejB                  dYd_¬`«       ejj                  dadb¬`«       ejj                  dcdd¬`«       ejŒ                  dQdRdSdTde¬`«      gi¬[«      ZJ G df„ dge.j–                  «      ZL G dh„ die.j–                  «      ZM G dj„ dke.j–                  «      ZN G dl„ dme.j–                  «      ZO G dn„ doe.j–                  «      ZP G dp„ dqe.j–                  «      ZQ G dr„ dse.j–                  «      ZR G dt„ due.j–                  «      ZS G dv„ dwe.j–                  «      ZTdxZU G dy„ dze.j–                  «      ZVd{ZW G d|„ d}e.j–                  «      ZXy)~z
Test cases for twisted.names.
é    N)ÚpartialÚreduce)ÚBytesIO)Úpack)ÚdeferÚerrorÚreactor)Úsucceed)ÚMemoryReactorClockÚStringTransportÚwaitUntilAllDisconnected)Ú	authorityÚclientÚcommonÚdnsÚserver)ÚResolver)ÚSOAÚMessageÚQueryÚRecord_AÚ
Record_SOAÚRRHeader)ÚDomainError)ÚSecondaryAuthorityÚSecondaryAuthorityService)ÚnativeString)ÚFilePath)Úunittestc                 óF   — | d   D �cg c]  }|j                   ‘Œ c}S c c}w ©Nr   ©Úpayload)ÚresultsÚrs     ú?/usr/lib/python3/dist-packages/twisted/names/test/test_names.pyÚjustPayloadr'   !   s   € Ø& q™zÖ*˜!ˆA�I‹IÒ*Ð*ùÒ*s   ˆc                   ó   — e Zd Zd„ Zy)ÚNoFileAuthorityc                 ó`   — t         j                  j                  | «       ||c| _        | _        y ©N)r   ÚResolverBaseÚ__init__ÚsoaÚrecords)Úselfr.   r/   s      r&   r-   zNoFileAuthority.__init__&   s&   € ä×Ñ×$Ñ$ TÔ*Ø!$ gÐˆŒ�$•,ó    N)Ú__name__Ú
__module__Ú__qualname__r-   © r1   r&   r)   r)   %   s   „ ó.r1   r)   ó   test-domain.comzroot.test-domain.coméd   éÒ  iæ  éH?&é   é   ©ÚmnameÚrnameÚserialÚrefreshÚminimumÚexpireÚretryÚttls   93.84.28.in-addr.arpaéx   i1Ô  i~  éÎª é   é   úmy-domain.coms   postmaster.test-domain.comé‚   i90  i?B )r=   r>   r?   r@   rA   rB   rC   s	   127.0.0.1s   39.28.189.39ó#   v=spf1 mx/30 mx:example.org/30 -alló   v=spf1 +mx a: coloó   .example.com/28 -all not validé
   úhost.test-domain.comó   Linuxó   A Fast One, Dontcha know)ÚosÚcpus   canonical.name.coms   mailbox.test-domain.coms   mail.group.someplaceó   A First piece of Textó   a SecoNd pieces
   ABCD::4321r1   é   s	   0:0069::0s   some.network.tldé   s$   0:5634:1294:AFCB:56AC:48EF:34C3:01FFs   tra.la.la.netó+   Some more text, haha!  Yes.     Still here?s   mail.redirect.or.whatevers
   r mail boxs
   e mail box)ÚrmailbxÚemailbxs   afsdb.test-domain.com)ÚsubtypeÚhostnames   whatever.i.dunnos   some.more.text)ÚmboxÚtxts   12.54.78.12ó   þÁ ó   uó   sip+E2Uó!   !^.*$!sip:information@domain.tld!s'   AF43:5634:1294:AFCB:56AC:48EF:34C3:01FFé  éÿ?  éªª  s   some.other.place.fooló   123.242.1.5ó   0.255.0.255s   255.255.255.254s   0.0.0.0s   1.2.3.4)r6   s   http.tcp.test-domain.comó   host.test-domain.coms   host-two.test-domain.coms   cname.test-domain.coms   anothertest-domain.com©r.   r/   s   123.93.84.28.in-addr.arpas   test.host-reverse.lookup.coms   my-domain.comÚ1S©rD   s
   ns1.domains   2Ms
   ns2.domainÚ3HÚ4Dc                   ó¾   — 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 y) ÚServerDNSTestsz/
    Test cases for DNS server and client.
    c                 ó>  — t        j                  t        t        t        gd¬«      | _        t        j                  | j
                  «      }	 t        j                  d| j
                  d¬«      }| j                  |j                  «       |j                  «       j                  }	 t        j                  ||d¬«      }| j                  |j                  «       	 || _        || _        t'        j(                  d|fg¬«      | _        y # t        j                   $ r Y nw xY wŒÓ)Né   )Úverboser   ú	127.0.0.1)Ú	interface©Úservers)r   ÚDNSServerFactoryÚtest_domain_comÚreverse_domainÚmy_domain_comÚfactoryr   ÚDNSDatagramProtocolr	   Ú	listenTCPÚ
addCleanupÚstopListeningÚgetHostÚportÚ	listenUDPr   ÚCannotListenErrorÚlistenerTCPÚlistenerUDPr   r   Úresolver)r0   Úpr„   r�   r…   s        r&   ÚsetUpzServerDNSTests.setUp�   sð   € Ü×.Ñ.Üœn¬mÐ<Àaô
ˆŒô ×#Ñ# D§L¡LÓ1ˆàÜ!×+Ñ+¨A¨t¯|©|À{ÔSˆKð �O‰O˜K×5Ñ5Ô6Ø×&Ñ&Ó(×-Ñ-ˆDðÜ%×/Ñ/°°aÀ;ÔO�ð —‘ × 9Ñ 9Ô:Øà&ˆÔØ&ˆÔÜŸ™°+¸tÐ1DÐ0EÔFˆ�øô ×*Ñ*ò Ùðúð s   Â$D ÄDÄDc                 óÀ   — | j                   j                  dd D ]  }|j                  j                  «        Œ t	        t
        | j                   j                  dd «      S )zu
        Clean up any server connections associated with the
        L{DNSServerFactory} created in L{setUp}
        N)r{   ÚconnectionsÚ	transportÚloseConnectionr   r	   )r0   Úconns     r&   ÚtearDownzServerDNSTests.tearDown»   sP   € ð —L‘L×,Ñ,©QÐ/ò 	,ˆDØ�N‰N×)Ñ)Õ+ð	,ô (¬°·±×1IÑ1IÉ!Ð1LÓMÐMr1   c                 ó8   ‡ ‡— ˆˆ fd„}|j                  |«       |S )aD  
        Assert that the DNS response C{querying} will eventually fire with
        contains exactly a certain collection of records.

        @param querying: A L{Deferred} returned from one of the DNS client
            I{lookup} methods.

        @param expectedRecords: A L{list} of L{IRecord} providers which must be
            in the response or the test will be failed.

        @return: A L{Deferred} that fires when the assertion has been made.  It
            fires with a success result if the assertion succeeds and with a
            L{Failure} if it fails.
        c                 ód   •— t        | «      }‰j                  t        ‰«      t        |«      «       y r+   )r'   ÚassertEqualÚset)ÚresponseÚreceivedRecordsÚexpectedRecordsr0   s     €€r&   ÚcheckResultsz.ServerDNSTests.namesTest.<locals>.checkResultsØ   s'   ø€ Ü)¨(Ó3ˆOØ×ÑœS Ó1´3°Ó3GÕHr1   )ÚaddCallback)r0   Úqueryingr•   r–   s   ` ` r&   Ú	namesTestzServerDNSTests.namesTestÈ   s   ù€ õ 	Ið 	×Ñ˜\Ô*Øˆr1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )z"Test simple DNS 'A' record queriesútest-domain.comrs   r9   rk   ©r™   r†   ÚlookupAddressr   r   ©r0   s    r&   Útest_addressRecord1z"ServerDNSTests.test_addressRecord1ß   s7   € à�~‰~Ø�M‰M×'Ñ'Ð(9Ó:Ü�\‰\˜+¨8Ô4Ð5ó
ð 	
r1   c                 ó°   — | j                  | j                  j                  d«      t        j                  dd¬«      t        j                  dd¬«      g«      S )z1Test DNS 'A' record queries with multiple answersrO   z123.242.1.5r9   rk   z0.255.0.255rœ   rž   s    r&   Útest_addressRecord2z"ServerDNSTests.test_addressRecord2æ   sG   € à�~‰~Ø�M‰M×'Ñ'Ð(>Ó?ä—‘˜]°Ô9Ü—‘˜]°Ô9ðó
ð 	
r1   c                 ó°   — | j                  | j                  j                  d«      t        j                  dd¬«      t        j                  dd¬«      g«      S )z+Test DNS 'A' record queries with edge caseszhost-two.test-domain.comz255.255.255.254r9   rk   ú0.0.0.0rœ   rž   s    r&   Útest_addressRecord3z"ServerDNSTests.test_addressRecord3ð   sH   € à�~‰~Ø�M‰M×'Ñ'Ð(BÓCä—‘Ð.°HÔ=Ü—‘˜Y¨HÔ5ðó
ð 	
r1   c                 ób   — | j                  | j                  j                  d«      t        g«      S )zTest DNS 'SOA' record queriesr›   )r™   r†   ÚlookupAuthorityÚ
soa_recordrž   s    r&   Útest_authorityzServerDNSTests.test_authorityú   s*   € à�~‰~Ø�M‰M×)Ñ)Ð*;Ó<¼z¸ló
ð 	
r1   c           	      óÞ   — | j                  | j                  j                  d«      t        j                  ddd¬«      t        j
                  dd¬«      t        j
                  dd¬«      g«      S )z‹
        The DNS client can issue an MX query and receive a response including
        an MX record as well as any A record hints.
        r6   rN   rh   r9   rk   rf   rg   )r™   r†   ÚlookupMailExchanger   Ú	Record_MXr   rž   s    r&   Útest_mailExchangeRecordz&ServerDNSTests.test_mailExchangeRecord   sZ   € ð
 �~‰~Ø�M‰M×,Ñ,Ð-?Ó@ä—‘˜bÐ"9¸xÔHÜ—‘˜^°Ô:Ü—‘˜^°Ô:ðó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )zTest DNS 'NS' record queriesr›   z39.28.189.39r9   rk   )r™   r†   ÚlookupNameserversr   Ú	Record_NSrž   s    r&   Útest_nameserverzServerDNSTests.test_nameserver  s7   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>Ü�]‰]˜>¨xÔ8Ð9ó
ð 	
r1   c                 ó†   — | j                  | j                  j                  d«      t        j                  ddd¬«      g«      S )zTest DNS 'HINFO' record queriesr›   rP   rQ   r9   )rR   rS   rD   )r™   r†   ÚlookupHostInfor   ÚRecord_HINFOrž   s    r&   Ú
test_HINFOzServerDNSTests.test_HINFO  sA   € à�~‰~Ø�M‰M×(Ñ(Ð):Ó;ä× Ñ ØÐ%@Àhôðó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )zTest DNS 'PTR' record queriesz123.93.84.28.in-addr.arpaztest.host-reverse.lookup.comrF   rk   )r™   r†   ÚlookupPointerr   Ú
Record_PTRrž   s    r&   Útest_PTRzServerDNSTests.test_PTR   s8   € à�~‰~Ø�M‰M×'Ñ'Ð(CÓDÜ�^‰^Ð:ÀÔIÐJó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )zTest DNS 'CNAME' record queriesr›   zcanonical.name.comr9   rk   )r™   r†   ÚlookupCanonicalNamer   ÚRecord_CNAMErž   s    r&   Ú
test_CNAMEzServerDNSTests.test_CNAME'  s:   € à�~‰~Ø�M‰M×-Ñ-Ð.?Ó@Ü×ÑÐ2¸ÔAÐBó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )zTest DNS 'MB' record queriesr›   zmailbox.test-domain.comr9   rk   )r™   r†   ÚlookupMailBoxr   Ú	Record_MBrž   s    r&   Útest_MBzServerDNSTests.test_MB.  s8   € à�~‰~Ø�M‰M×'Ñ'Ð(9Ó:Ü�]‰]Ð4¸(ÔCÐDó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )zTest DNS 'MG' record queriesr›   zmail.group.someplacer9   rk   )r™   r†   ÚlookupMailGroupr   Ú	Record_MGrž   s    r&   Útest_MGzServerDNSTests.test_MG5  s8   € à�~‰~Ø�M‰M×)Ñ)Ð*;Ó<Ü�]‰]Ð1°xÔ@ÐAó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )zTest DNS 'MR' record queriesr›   zmail.redirect.or.whateverr9   rk   )r™   r†   ÚlookupMailRenamer   Ú	Record_MRrž   s    r&   Útest_MRzServerDNSTests.test_MR<  s8   € à�~‰~Ø�M‰M×*Ñ*Ð+<Ó=Ü�]‰]Ð6¸HÔEÐFó
ð 	
r1   c                 ó†   — | j                  | j                  j                  d«      t        j                  ddd¬«      g«      S )zTest DNS 'MINFO' record queriesr›   z
r mail boxz
e mail boxr9   )rY   rZ   rD   )r™   r†   ÚlookupMailboxInfor   ÚRecord_MINFOrž   s    r&   Ú
test_MINFOzServerDNSTests.test_MINFOC  s@   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>ä× Ñ Ø(°,ÀHôðó
ð 	
r1   c           
      óŠ   — | j                  | j                  j                  d«      t        j                  ddddd¬«      g«      S )zTest DNS 'SRV' record querieszhttp.tcp.test-domain.comrc   rd   re   úsome.other.place.foolr9   rk   )r™   r†   ÚlookupServicer   Ú
Record_SRVrž   s    r&   Útest_SRVzServerDNSTests.test_SRVN  s>   € à�~‰~Ø�M‰M×'Ñ'Ð(BÓCÜ�^‰^˜C ¨Ð/FÈHÔUÐVó
ð 	
r1   c                 ó†   — | j                  | j                  j                  d«      t        j                  ddd¬«      g«      S )zTest DNS 'AFSDB' record queriesr›   r;   zafsdb.test-domain.comr9   )r[   r\   rD   )r™   r†   ÚlookupAFSDatabaser   ÚRecord_AFSDBrž   s    r&   Ú
test_AFSDBzServerDNSTests.test_AFSDBU  sA   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>ä× Ñ ØÐ(?ÀXôðó
ð 	
r1   c                 ó†   — | j                  | j                  j                  d«      t        j                  ddd¬«      g«      S )zTest DNS 'RP' record queriesr›   zwhatever.i.dunnozsome.more.textr9   )r]   r^   rD   )r™   r†   ÚlookupResponsibilityr   Ú	Record_RPrž   s    r&   Útest_RPzServerDNSTests.test_RP`  s?   € à�~‰~Ø�M‰M×.Ñ.Ð/@ÓAä—‘Ø+Ð1AÀxôðó
ð 	
r1   c                 ó²   — | j                  | j                  j                  d«      t        j                  ddd¬«      t        j                  dd¬«      g«      S )zTest DNS 'TXT' record queriesr›   rT   rU   r9   rk   rX   )r™   r†   Ú
lookupTextr   Ú
Record_TXTrž   s    r&   Útest_TXTzServerDNSTests.test_TXTk  sR   € à�~‰~Ø�M‰M×$Ñ$Ð%6Ó7ä—‘Ø,Ð.?ÀXôô —‘ØCÈôð	ó

ð 
	
r1   c           	      ó²   — | j                  | j                  j                  d«      t        j                  dd¬«      t        j                  ddd¬«      g«      S )zH
        L{DNSServerFactory} can serve I{SPF} resource records.
        r›   rK   r9   rk   rL   rM   )r™   r†   ÚlookupSenderPolicyr   Ú
Record_SPFrž   s    r&   Útest_spfzServerDNSTests.test_spfy  sQ   € ð �~‰~Ø�M‰M×,Ñ,Ð->Ó?ä—‘ÐEÈ8ÔTÜ—‘Ø*Ø5Ø ôðó

ð 
	
r1   c           	      ó¤   — | j                  | j                  j                  d«      t        j                  dt
        j                  dd¬«      g«      S )zTest DNS 'WKS' record queriesr›   z12.54.78.12r_   r9   rk   )r™   r†   ÚlookupWellKnownServicesr   Ú
Record_WKSÚsocketÚIPPROTO_TCPrž   s    r&   Útest_WKSzServerDNSTests.test_WKS‰  sI   € à�~‰~Ø�M‰M×1Ñ1Ð2CÓDä—‘Ø!Ü×&Ñ&Ø3Ø ô	ðó

ð 
	
r1   c                 ól  — t        j                   t        «      }t        j                  |_        | j	                  | j
                  j                  d«      |t        j                  dd¬«      t        j                  dd¬«      t        j                  dd¬«      t        j                  d	d
ddd¬«      g«      S )NrI   ú1.2.3.4rj   rk   z
ns1.domainÚ2Mz
ns2.domainrl   rc   rd   re   rÎ   rm   )ÚcopyÚmy_soarB   rD   r™   r†   ÚlookupAllRecordsr   r   r¯   rÐ   )r0   Ú
result_soas     r&   Útest_someRecordsWithTTLsz'ServerDNSTests.test_someRecordsWithTTLs—  s…   € Ü—Y‘YœvÓ&ˆ
ÜŸ™ˆ
ŒØ�~‰~Ø�M‰M×*Ñ*¨?Ó;àÜ—‘˜Y¨DÔ1Ü—‘˜l°Ô5Ü—‘˜l°Ô5Ü—‘˜s E¨5Ð2IÈtÔTðó	
ð 		
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )z%Test DNS 'AAAA' record queries (IPv6)r›   z'AF43:5634:1294:AFCB:56AC:48EF:34C3:01FFr9   rk   )r™   r†   ÚlookupIPV6Addressr   ÚRecord_AAAArž   s    r&   Ú	test_AAAAzServerDNSTests.test_AAAA¥  s8   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>Ü�_‰_ÐFÈHÔUÐVó
ð 	
r1   c                 óè   — | j                  | j                  j                  d«      t        j                  dddd¬«      t        j                  ddd	d¬«      t        j                  d
ddd¬«      g«      S )z#Test DNS 'A6' record queries (IPv6)r›   r   z
ABCD::4321Ú r9   rk   rV   z	0:0069::0zsome.network.tldrW   z$0:5634:1294:AFCB:56AC:48EF:34C3:01FFztra.la.la.net)r™   r†   ÚlookupAddress6r   Ú	Record_A6rž   s    r&   Útest_A6zServerDNSTests.test_A6¬  sh   € à�~‰~Ø�M‰M×(Ñ(Ð):Ó;ä—‘˜a ¨r°xÔ@Ü—‘˜b +Ð/AÀxÔPÜ—‘ØØ:Ø#Ø ô	ð	ó
ð 	
r1   c                 ó„  — t         j                  }t        t        j                  t
        j                  j                  «       «      D �cg c]  }t        j                  |«      ‘Œ }}|D ]  }|j                  �Œ||_	        Œ | j                  | j                  j                  d«      j                  d„ «      |«      S c c}w )z9
        Test DNS 'AXFR' queries (Zone transfer)
        r›   c                 ó   — | d   d d fS )Nr   éÿÿÿÿr5   )r%   s    r&   ú<lambda>z2ServerDNSTests.test_zoneTransfer.<locals>.<lambda>É  s   € ˜1˜Q™4  ˜9˜,€ r1   )r§   rB   r   ÚoperatorÚaddrx   r/   Úvaluesrë   rD   r™   r†   Ú
lookupZoner—   )r0   Údefault_ttlr%   r$   s       r&   Útest_zoneTransferz ServerDNSTests.test_zoneTransfer¼  sª   € ô !×'Ñ'ˆä"(¬¯©´×7NÑ7N×7UÑ7UÓ7WÓ"Xö
ØŒD�I‰I�a�Lð
ˆð 
ð ò 	$ˆAØ�u‰u‰}Ø#�•ð	$ð �~‰~Ø�M‰M×$Ñ$Ð%6Ó7×CÑCÙ&óð ó	
ð 	
ùò
s   Á	B=c                 óz   — t        dg¬«      }| j                  |j                  d«      t        j                  «      S )zu
        A failed AXFR TCP connection errbacks the L{Deferred} returned
        from L{Resolver.lookupZone}.
        )znameserver.invalidé5   ru   zimpossible.invalid)r   ÚassertFailurer   r   ÚDNSLookupError)r0   r†   s     r&   Ú test_zoneTransferConnectionFailsz/ServerDNSTests.test_zoneTransferConnectionFailsÎ  s<   € ô
 Ð%?Ð$@ÔAˆØ×!Ñ!Ø×ÑÐ 4Ó5´u×7KÑ7Kó
ð 	
r1   c                 ó„   — | j                  | j                  j                  d«      t        j                  dd¬«      g«      S )z6Tests that unrelated zones don't mess with each other.zanothertest-domain.comré   r9   rk   rœ   rž   s    r&   Útest_similarZonesDontInterferez-ServerDNSTests.test_similarZonesDontInterfereØ  s7   € à�~‰~Ø�M‰M×'Ñ'Ð(@ÓAÜ�\‰\˜)¨Ô2Ð3ó
ð 	
r1   c                 óŒ   — | j                  | j                  j                  d«      t        j                  dddddd¬«      g«      S )	z2
        Test DNS 'NAPTR' record queries.
        r›   r7   rN   r`   ra   rb   r9   rk   )r™   r†   ÚlookupNamingAuthorityPointerr   ÚRecord_NAPTRrž   s    r&   Ú
test_NAPTRzServerDNSTests.test_NAPTRß  sM   € ð �~‰~Ø�M‰M×6Ñ6Ð7HÓIä× Ñ ØØØØØ8Ø ôð	ó
ð 	
r1   N)!r2   r3   r4   Ú__doc__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  r5   r1   r&   ro   ro   ˜   sš   „ ñòGò<Nòò.
ò
ò
ò
ò
ò
ò	
ò
ò
ò
ò
ò
ò	
ò
ò	
ò	
ò
ò
ò 
ò
ò
ò
ò 
ò$
ò
ó
r1   ro   c                   ó   — e Zd Zd„ Zy)ÚHelperTestsc                 óÄ   — | j                  «       }t        j                  |«      }t        d«      D ]-  }t        j                  |«      }| j	                  ||k  «       |}Œ/ y )Né   )Úmktempr   Ú	getSerialÚrangeÚ
assertTrue)r0   ÚfÚaÚiÚbs        r&   Útest_serialGeneratorz HelperTests.test_serialGeneratoró  sU   € Ø�K‰K‹MˆÜ×Ñ Ó"ˆÜ�r“ò 	ˆAÜ×#Ñ# AÓ&ˆAØ�O‰O˜A ™EÔ"Ø‰Añ	r1   N)r2   r3   r4   r  r5   r1   r&   r  r  ò  s   „ ór1   r  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú	AXFRTestsc                 ó„  — d | _         t        j                  «       | _        | j                  j	                  | j
                  «       t        j                  d| j                  «      | _        t        j                  dt        j                  t        j                  ddt        j                  ddddddd	d
¬«      ¬«      | _        | j                  t        j                  dt        j                  t        j                  ddt        j                   dd¬«      ¬«      t        j                  dt        j"                  t        j                  ddt        j$                  ddd¬«      ¬«      t        j                  dt        j&                  t        j                  ddt        j(                  dd¬«      ¬«      | j                  g| _        y )Nú	fooby.comi€Q Fzhooj.fooby.comr7   éÈ   i,  i�  iô  iX  )r=   r>   r?   r@   rC   rB   rA   rD   ©ÚnameÚtypeÚclsrD   Úauthr#   é¼  úns.twistedmatrix.com©r"  rD   rN   zmail.mv3d.com)Ú
preferenceÚexchangerD   z64.123.27.105)ÚaddressrD   )r$   r   ÚDeferredÚdr—   Ú_gotResultsr   ÚAXFRControllerÚ
controllerr   r   r   ÚINr   r.   ÚNSr¯   ÚMXr«   ÚAr   r/   rž   s    r&   rˆ   zAXFRTests.setUpý  sH  € ØˆŒÜ—‘Ó!ˆŒØ�‰×Ñ˜4×+Ñ+Ô,Ü ×/Ñ/°¸T¿V¹VÓDˆŒä—<‘<ØÜ—‘Ü—‘ØØÜ—N‘NØ!Ø&ØØØØØØô	ô
ˆŒð& �H‰HÜ�L‰LØ Ü—V‘VÜ—F‘FØØÜŸ™Ð+AÀsÔKôô �L‰LØ Ü—V‘VÜ—F‘FØØÜŸ™°¸oÐSVÔWôô �L‰LØ Ü—U‘UÜ—F‘FØØÜŸ™¨_À#ÔFôð �H‰Hð5
ˆ�r1   c                 ó>   — t        j                  ddddddddd¬«	      S )Néç  r;   r   ©	ÚidÚanswerÚopCodeÚrecDesÚrecAvr%  ÚrCodeÚtruncÚmaxSize)r   r   rž   s    r&   Ú_makeMessagezAXFRTests._makeMessage2  s.   € ä�{‰{ØØØØØØØØØô

ð 
	
r1   c                 ó<  — | j                  «       }t        j                  dt        j                  t        j                  «      g|_        | j                  |_        | j                  j                  |d «       | j                  | j                  | j                  «       y )Nr  )r@  r   r   ÚAXFRr1  Úqueriesr/   Úanswersr0  ÚmessageReceivedr‘   r$   )r0   Úms     r&   Útest_bindAndTNamesStylez!AXFRTests.test_bindAndTNamesStyle@  sf   € à×ÑÓˆÜ—Y‘Y˜{¬C¯H©H´c·f±fÓ=Ð>ˆŒ	Ø—L‘LˆŒ	Ø�‰×'Ñ'¨¨4Ô0Ø×Ñ˜Ÿ™ t§|¡|Õ4r1   c                 ó   — || _         y r+   )r$   )r0   Úresults     r&   r.  zAXFRTests._gotResultsH  s	   € Øˆ�r1   c                 ó  — | j                   d d  }|rM| j                  «       }g |_        |j                  d«      g|_        | j
                  j                  |d «       |rŒM| j                  | j                  | j                   «       y r!   )	r/   r@  rC  ÚpoprD  r0  rE  r‘   r$   )r0   r/   rF  s      r&   Útest_DJBStylezAXFRTests.test_DJBStyleK  sl   € à—,‘,™q�/ˆÙØ×!Ñ!Ó#ˆAØˆAŒIØ Ÿ™ Q›Ð(ˆAŒIØ�O‰O×+Ñ+¨A¨tÔ4ò	 ð
 	×Ñ˜Ÿ™ t§|¡|Õ4r1   N)r2   r3   r4   rˆ   r@  rG  r.  rL  r5   r1   r&   r  r  ü  s   „ ò3
òj
ò5òó5r1   r  c                   ó   — e Zd Zd„ Zd„ Zy)ÚResolvConfHandlingTestsc                 ó¾   — | j                  «       }t        j                  |¬«      }| j                  |j                  dg«       |j
                  j                  «        y )N©Úresolv©rs   r  )r  r   r   r‘   Ú
dynServersÚ
_parseCallÚcancel©r0   Ú
resolvConfr%   s      r&   Útest_missingz$ResolvConfHandlingTests.test_missingW  sC   € Ø—[‘[“]ˆ
Ü�O‰O :Ô.ˆØ×Ñ˜Ÿ™Ð(9Ð':Ô;Ø	�‰×ÑÕr1   c                 óò   — | j                  «       }t        |d«      j                  «        t        j                  |¬«      }| j                  |j                  dg«       |j                  j                  «        y )NÚwrP  rR  )	r  ÚopenÚcloser   r   r‘   rS  rT  rU  rV  s      r&   Ú
test_emptyz"ResolvConfHandlingTests.test_empty]  sV   € Ø—[‘[“]ˆ
ÜˆZ˜Ó×#Ñ#Ô%Ü�O‰O :Ô.ˆØ×Ñ˜Ÿ™Ð(9Ð':Ô;Ø	�‰×ÑÕr1   N)r2   r3   r4   rX  r]  r5   r1   r&   rN  rN  V  s   „ òór1   rN  c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚAuthorityTestszs
    Tests for the basic response record selection code in L{FileAuthority}
    (independent of its fileness).
    c                 ó´   — t         }d|j                  d   z   }| j                  |j                  |«      «      }| j	                  |j
                  t        «       y)aJ  
        L{FileAuthority} lookup methods errback with L{DomainError} if
        the requested C{name} shares a common suffix with its zone but
        is not actually a descendant of its zone, in terms of its
        sequence of DNS name labels. eg www.the-example.com has
        nothing to do with the zone example.com.
        ó   nonexistent.prefix-r   N)rx   r.   ÚfailureResultOfr�   ÚassertIsInstanceÚvaluer   )r0   Ú
testDomainÚtestDomainNamer  s       r&   Ú'test_domainErrorForNameWithCommonSuffixz6AuthorityTests.test_domainErrorForNameWithCommonSuffixk  sK   € ô %ˆ
Ø/°*·.±.ÀÑ2CÑCˆØ× Ñ  ×!9Ñ!9¸.Ó!IÓJˆØ×Ñ˜aŸg™g¤{Õ3r1   c           
      óH  — t        t        j                  j                  t        ft        j                  j                  t        t	        j
                  d«      gi¬«      }| j                   |j                  t        j                  j                  «      «      \  }}}| j                  |g «       | j                  |t	        j                  t        j                  j                  t        j                  t        j                  t        d¬«      g«       | j                  |g «       y)a!  
        If a L{FileAuthority} has a zone which includes an I{NS} record for a
        particular name and that authority is asked for another record for the
        same name which does not exist, the I{NS} record is not included in the
        authority section of the response.
        ré   ri   T©rD   r#   r%  N)r)   r§   r=   r"  r   r¯   ÚsuccessResultOfr�   r‘   r   ÚTYPErB   )r0   r   r9  Ú
additionals       r&   Útest_recordMissingz!AuthorityTests.test_recordMissingx  sê   € ô $Ü×!Ñ!×&Ñ&¬
Ð3ä× Ñ ×%Ñ%ÜÜ—M‘M )Ó,ð(ðô
ˆ	ð )-×(<Ñ(<Ø#ˆI×#Ñ#¤J×$4Ñ$4×$9Ñ$9Ó:ó)
Ñ%ˆ�	˜:ð 	×Ñ˜ Ô$Ø×ÑØä—‘Ü×$Ñ$×)Ñ)Ü—O‘OÜ"×)Ñ)Ü&Øôðô	
ð 	×Ñ˜ RÕ(r1   c                 ó  — t         }d|j                  d   z   }t        t        j                  «      dz   }| j                  |j                  t        ||¬«      «      «      }| j                  |j                  t        «       y)zˆ
        Requesting a record of unknown type where no records exist for the name
        in question results in L{DomainError}.
        ra  r   r;   ©r"  r#  N)rx   r.   Úmaxr   ÚtypeToMethodrb  Úqueryr   rc  rd  r   )r0   re  rf  ÚunknownTyper  s        r&   Útest_unknownTypeNXDOMAINz'AuthorityTests.test_unknownTypeNXDOMAINš  sl   € ô
 %ˆ
Ø/°*·.±.ÀÑ2CÑCˆÜœ&×-Ñ-Ó.°Ñ2ˆØ× Ñ Ø×ÑœU¨¸[ÔIÓJó
ˆð 	×Ñ˜aŸg™g¤{Õ3r1   c                 óÆ   — t        t        j                  «      dz   }| j                  t        j                  t        d|¬«      «      «      \  }}}| j                  |g «       y)z�
        Requesting a record of unknown type where other records exist for the
        name in question results in an empty answer set.
        r;   rI   ro  N)rp  r   rq  rj  rz   rr  r   r‘   )r0   rs  r9  r   rl  s        r&   Útest_unknownTypeMissingz&AuthorityTests.test_unknownTypeMissing§  sW   € ô
 œ&×-Ñ-Ó.°Ñ2ˆØ(,×(<Ñ(<Ü×Ñ¤¨?ÀÔ MÓNó)
Ñ%ˆ�	˜:ð 	×Ñ˜ Õ$r1   c           
      óè  — dt         j                  j                  z   }t        j                  d«      }t        t         j                  j                  t         f||gi¬«      } t        ||«      |«      }| j                  |«      \  }}}| j                  |g «       | j                  |t        j                  |t        j                  t         j                  |d¬«      g«       | j                  |g «       y)zï
        Create an authority and make a request against it.  Then verify that the
        result is a referral, including no records in the answers or additional
        sections, but with an I{NS} record in the authority section.
        s   example.ré   ri   Fri  N)r§   r=   r"  r   r¯   r)   Úgetattrrj  r‘   r   r2  rB   )r0   ÚmethodÚ	subdomainÚ
nameserverr   r-  r9  rl  s           r&   Ú_referralTestzAuthorityTests._referralTest²  sß   € ð  ¤*×"2Ñ"2×"7Ñ"7Ñ7ˆ	Ü—]‘] 9Ó-ˆ
Ü#Ü×!Ñ!×&Ñ&¬
Ð3àØððô
ˆ	ð 'ŒG�I˜vÓ& yÓ1ˆØ(,×(<Ñ(<¸QÓ(?Ñ%ˆ�	˜:Ø×Ñ˜ Ô$Ø×ÑØä—‘ØÜ—F‘FÜ"×)Ñ)Ø&Øôðô	
ð 	×Ñ˜ RÕ(r1   c                 ó&   — | j                  d«       y)a  
        When an I{NS} record is found for a child zone, it is included in the
        authority section of the response. It is marked as non-authoritative if
        the authority is not also authoritative for the child zone (RFC 2181,
        section 6.1).
        r�   N©r|  rž   s    r&   Útest_referralzAuthorityTests.test_referralÓ  s   € ð 	×Ñ˜?Õ+r1   c                 ó&   — | j                  d«       y)zT
        A referral is also generated for a request of type C{ALL_RECORDS}.
        rí   Nr~  rž   s    r&   Útest_allRecordsReferralz&AuthorityTests.test_allRecordsReferralÜ  s   € ð 	×ÑÐ-Õ.r1   N)r2   r3   r4   r  rg  rm  rt  rv  r|  r  r�  r5   r1   r&   r_  r_  e  s,   „ ñò
4ò )òD4ò	%ò)òB,ó/r1   r_  c                   ó²   — e Zd ZdZ ej
                  d«      Z ej                  d«      Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚAdditionalProcessingTestszz
    Tests for L{FileAuthority}'s additional processing for those record types
    which require it (MX, CNAME, etc).
    s   10.0.0.1s   f080::1c                 óÚ   — t        |j                  j                  |f|j                  j                   ||«      g||i¬«      } t        ||«      t        j                  j                  «      S )a  
        Perform a DNS lookup against a L{FileAuthority} configured with records
        as defined by C{makeRecord} and C{addresses}.

        @param method: The name of the lookup method to use; for example,
            C{"lookupNameservers"}.
        @type method: L{str}

        @param soa: A L{Record_SOA} for the zone for which the L{FileAuthority}
            is authoritative.

        @param makeRecord: A one-argument callable which accepts a name and
            returns an L{IRecord} provider.  L{FileAuthority} is constructed
            with this record.  The L{FileAuthority} is queried for a record of
            the resulting type with the given name.

        @param target: The extra name which the record returned by
            C{makeRecord} will be pointed at; this is the name which might
            require extra processing by the server so that all the available,
            useful information is returned.  For example, this is the target of
            a CNAME record or the mail exchange host pointed to by an MX record.
        @type target: L{bytes}

        @param addresses: A L{list} of records giving addresses of C{target}.

        @return: A L{Deferred} that fires with the result of the resolver
            method give by C{method}.
        ri   )r)   r=   r"  rx  r§   )r0   ry  r.   Ú
makeRecordÚtargetÚ	addressesr   s          r&   Ú_lookupSomeRecordsz,AdditionalProcessingTests._lookupSomeRecordsì  s_   € ô: $Ø—‘—‘ Ð%à—	‘	—‘¡¨FÓ!3Ð 4Ø˜	ðô
ˆ	ð *Œw�y &Ó)¬*×*:Ñ*:×*?Ñ*?Ó@Ð@r1   c                 óZ   — d„ }| j                  t        ||¬«      t        ||¬«      «       y)a  
        Assert that the L{RRHeader} instances given by C{expected} and
        C{computed} carry all the same information but without requiring the
        records appear in the same order.

        @param expected: A L{list} of L{RRHeader} instances giving the expected
            records.

        @param computed: A L{list} of L{RRHeader} instances giving the records
            computed by the scenario under test.

        @raise self.failureException: If the two collections of records
            disagree.
        c                 ó   — | j                   S r+   )r#  )Úrrs    r&   rü   z>AdditionalProcessingTests.assertRecordsMatch.<locals>.<lambda>$  s
   € ˜Ÿ™€ r1   )ÚkeyN)r‘   Úsorted)r0   ÚexpectedÚcomputedrŒ  s       r&   ÚassertRecordsMatchz,AdditionalProcessingTests.assertRecordsMatch  s'   € ñ$ !ˆØ×Ñœ ¨cÔ2´F¸8ÈÔ4MÕNr1   c                 óD  — dt         j                  j                  z   }| j                  |t         |||«      }| j	                  |«      \  }}}| j                  |D �	cg c]4  }	t        j                  ||	j                  t         j                  |	d¬«      ‘Œ6 c}	|«       yc c}	w )aT  
        Verify that certain address records are included in the I{additional}
        section of a response generated by L{FileAuthority}.

        @param method: See L{_lookupSomeRecords}

        @param makeRecord: See L{_lookupSomeRecords}

        @param addresses: A L{list} of L{IRecord} providers which the
            I{additional} section of the response is required to match
            (ignoring order).

        @raise self.failureException: If the I{additional} section of the
            response consists of different records than those given by
            C{addresses}.
        s   mail.Tri  N)
r§   r=   r"  rˆ  rj  r�  r   r   rk  rB   )
r0   ry  r…  r‡  r†  r-  r9  r   rl  r+  s
             r&   Ú_additionalTestz)AdditionalProcessingTests._additionalTest'  s�   € ð" œJ×,Ñ,×1Ñ1Ñ1ˆØ×#Ñ# F¬J¸
ÀFÈIÓVˆØ(,×(<Ñ(<¸QÓ(?Ñ%ˆ�	˜:à×Ñð  )ö	ð ô —‘ØØ—L‘LÜ"×)Ñ)Ø#Øöò	ð õ	
ùò	s   Á9Bc                 óZ   — | j                  dt        t        j                  d«      |«       y)z£
        Verify that a response to an MX query has certain records in the
        I{additional} section.

        @param addresses: See C{_additionalTest}
        rª   rN   N)r’  r   r   r«   ©r0   r‡  s     r&   Ú_additionalMXTestz+AdditionalProcessingTests._additionalMXTestJ  s$   € ð 	×ÑØ ¤'¬#¯-©-¸Ó"<¸iõ	
r1   c                 ó<   — | j                  | j                  g«       y)z„
        If the name of the MX response has A records, they are included in the
        additional section of the response.
        N)r•  Ú_Arž   s    r&   Útest_mailExchangeAdditionalAz6AdditionalProcessingTests.test_mailExchangeAdditionalAU  ó   € ð
 	×Ñ §¡˜yÕ)r1   c                 ó<   — | j                  | j                  g«       y)z‡
        If the name of the MX response has AAAA records, they are included in
        the additional section of the response.
        N)r•  Ú_AAAArž   s    r&   Útest_mailExchangeAdditionalAAAAz9AdditionalProcessingTests.test_mailExchangeAdditionalAAAA\  ó   € ð
 	×Ñ §
¡
˜|Õ,r1   c                 óR   — | j                  | j                  | j                  g«       y)z–
        If the name of the MX response has both A and AAAA records, they are
        all included in the additional section of the response.
        N)r•  r—  r›  rž   s    r&   Útest_mailExchangeAdditionalBothz9AdditionalProcessingTests.test_mailExchangeAdditionalBothc  ó   € ð
 	×Ñ §¡¨¯©Ð4Õ5r1   c                 óF   — | j                  dt        j                  |«       y)z£
        Verify that a response to an NS query has certain records in the
        I{additional} section.

        @param addresses: See C{_additionalTest}
        r®   N)r’  r   r¯   r”  s     r&   Ú_additionalNSTestz+AdditionalProcessingTests._additionalNSTestj  s   € ð 	×ÑÐ0´#·-±-ÀÕKr1   c                 ó<   — | j                  | j                  g«       y)z„
        If the name of the NS response has A records, they are included in the
        additional section of the response.
        N)r¢  r—  rž   s    r&   Útest_nameserverAdditionalAz4AdditionalProcessingTests.test_nameserverAdditionalAs  r™  r1   c                 ó<   — | j                  | j                  g«       y)z‡
        If the name of the NS response has AAAA records, they are included in
        the additional section of the response.
        N)r¢  r›  rž   s    r&   Útest_nameserverAdditionalAAAAz7AdditionalProcessingTests.test_nameserverAdditionalAAAAz  r�  r1   c                 óR   — | j                  | j                  | j                  g«       y)z–
        If the name of the NS response has both A and AAAA records, they are
        all included in the additional section of the response.
        N)r¢  r—  r›  rž   s    r&   Útest_nameserverAdditionalBothz7AdditionalProcessingTests.test_nameserverAdditionalBoth�  r   r1   c                 ó*  — dt         j                  j                  z   }| j                  dt         t        j
                  ||«      }| j                  |«      \  }}}t	        j                  t         j                  j                  t        j                  t         j                  t	        j
                  |«      d¬«      }| j                  |D �cg c]4  }t	        j                  ||j                  t         j                  |d¬«      ‘Œ6 c}|gz   |«       yc c}w )z¡
        Verify that a response to a CNAME query has certain records in the
        I{answer} section.

        @param addresses: See C{_additionalTest}
        s   www.rº   Tri  N)r§   r=   r"  rˆ  r   r»   rj  r   ÚCNAMErB   r�  rk  )	r0   r‡  r†  r-  r9  r   rl  Úaliasr+  s	            r&   Ú_answerCNAMETestz*AdditionalProcessingTests._answerCNAMETestˆ  sô   € ð œ:×+Ñ+×0Ñ0Ñ0ˆØ×#Ñ#Ø!¤:¬s×/?Ñ/?ÀÈó
ˆð )-×(<Ñ(<¸QÓ(?Ñ%ˆ�	˜:ä—‘Ü×Ñ×!Ñ!Ü�I‰IÜ×!Ñ!Ü×$Ñ$ VÓ,Øô
ˆð 	×Ñð  )ö	ð ô —‘ØØ—L‘LÜ"×)Ñ)Ø#Øöò	ð ˆgñ
ð õ	
ùò	s   Ã
9Dc                 ó<   — | j                  | j                  g«       y)zƒ
        If the name of the CNAME response has A records, they are included in
        the answer section of the response.
        N)r¬  r—  rž   s    r&   Útest_canonicalNameAnswerAz3AdditionalProcessingTests.test_canonicalNameAnswerA«  s   € ð
 	×Ñ˜tŸw™w˜iÕ(r1   c                 ó<   — | j                  | j                  g«       y)z†
        If the name of the CNAME response has AAAA records, they are included
        in the answer section of the response.
        N)r¬  r›  rž   s    r&   Útest_canonicalNameAnswerAAAAz6AdditionalProcessingTests.test_canonicalNameAnswerAAAA²  s   € ð
 	×Ñ˜tŸz™z˜lÕ+r1   c                 óR   — | j                  | j                  | j                  g«       y)z•
        If the name of the CNAME response has both A and AAAA records, they are
        all included in the answer section of the response.
        N)r¬  r—  r›  rž   s    r&   Útest_canonicalNameAnswerBothz6AdditionalProcessingTests.test_canonicalNameAnswerBoth¹  s   € ð
 	×Ñ˜tŸw™w¨¯
©
Ð3Õ4r1   N)r2   r3   r4   r  r   r   r—  rò   r›  rˆ  r�  r’  r•  r˜  rœ  rŸ  r¢  r¤  r¦  r¨  r¬  r®  r°  r²  r5   r1   r&   rƒ  rƒ  ã  sz   „ ñð
 
ˆ�‰�kÓ	"€BØˆC�O‰O˜JÓ'€Eò$AòLOò*!
òF	
ò*ò-ò6òLò*ò-ò6ò!
òF)ò,ó5r1   rƒ  c                   ó   — e Zd Zd„ Zy)ÚNoInitialResponseTestsc                 óæ  ‡— ˆfd„}d„ }t        dg¬«      }||_        g Š| j                  t        j                  d|«       t        j
                  dt        j                  t        j                  ddt        j                  d	d¬
«      ¬«      g}t        j                  ddddddddd¬«	      }||_
        ‰j                  |«       | j                  |j                  d«      t        j                  «      S )z§
        If a request returns a L{dns.NS} response, but we can't connect to the
        given server, the request fails with the error returned at connection.
        c                 ó8   •— t        ‰j                  d«      «      S r!   )r
   rK  )r0   ÚargsÚmessagess     €r&   rr  z3NoInitialResponseTests.test_noAnswer.<locals>.queryÈ  s   ø€ ô ˜8Ÿ<™<¨›?Ó+Ð+r1   c                 óR   — t        j                  t        j                  d«      «      S )NzCouldn't connect)r   Úfailrå   Úgaierror)r0   r·  Úkwargss      r&   ÚqueryProtocolz;NoInitialResponseTests.test_noAnswer.<locals>.queryProtocolÍ  s   € Ü—:‘:œfŸo™oÐ.@ÓAÓBÐBr1   )r£   r   ru   rr  z	fooba.comr&  Fr'  r(  r!  r6  r;   r   r7  r  )r   Ú_queryÚpatchr   r|   r   r2  r1  r¯   r   rD  Úappendr  ÚgetHostByNamerå   r»  )r0   rr  r½  r†   r/   rF  r¸  s         @r&   Útest_noAnswerz$NoInitialResponseTests.test_noAnswerÂ  sÞ   ø€ ô	,ò
	Cô  ^Ð$4Ô5ˆØˆŒØˆð 	�
‰
”3×*Ñ*¨G°]ÔCô �L‰LØ Ü—V‘VÜ—F‘FØØÜŸ™Ð+AÀsÔKôð	
ˆô �K‰KØØØØØØØØØô

ˆð ˆŒ	Ø�‰˜ÔØ×!Ñ! (×"8Ñ"8¸Ó"EÄvÇÁÓWÐWr1   N)r2   r3   r4   rÂ  r5   r1   r&   r´  r´  Á  s   „ ó,Xr1   r´  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚSecondaryAuthorityServiceTestsz•
    Tests for L{SecondaryAuthorityService}, a service which keeps one or more
    authorities up to date by doing zone transfers from a master.
    c                 ó€  — d}t        |ddg«      }| j                  |j                  |«       | j                  |j                  d«       | j                  |j                  d   j                  |«       | j                  |j                  d   j                  d«       | j                  |j                  d   j
                  d«       | j                  |j                  d   j                  |«       | j                  |j                  d   j                  d«       | j                  |j                  d   j
                  d«       y)	a  
        L{SecondaryAuthorityService} can be constructed with a C{str} giving a
        master server address and several domains, causing the creation of a
        secondary authority for each domain and that master server address and
        the default DNS port.
        ú192.168.1.2ó   example.comzexample.orgr  r   r;   s   example.orgN)r   r‘   ÚprimaryÚ_portÚdomainsÚdomain©r0   rÈ  Úservices      r&   Útest_constructAuthorityFromHostz>SecondaryAuthorityServiceTests.test_constructAuthorityFromHost÷  sü   € ð  ˆÜ+¨G°nÀmÐ5TÓUˆØ×Ñ˜Ÿ™¨'Ô2Ø×Ñ˜Ÿ™¨Ô+à×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°2Ô6Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÔCà×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°2Ô6Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÕCr1   c                 óœ  — d}d}t        j                  ||fddg«      }| j                  |j                  |«       | j                  |j                  d«       | j                  |j
                  d   j                  |«       | j                  |j
                  d   j                  |«       | j                  |j
                  d   j                  d«       | j                  |j
                  d   j                  |«       | j                  |j
                  d   j                  |«       | j                  |j
                  d   j                  d«       y)	a\  
        L{SecondaryAuthorityService.fromServerAddressAndDomains} constructs a
        new L{SecondaryAuthorityService} from a C{str} giving a master server
        address and DNS port and several domains, causing the creation of a secondary
        authority for each domain and that master server address and the given
        DNS port.
        ú192.168.1.3i×  zexample.netó   example.edur   ó   example.netr;   N)r   ÚfromServerAddressAndDomainsr‘   rÈ  rÉ  rÊ  rË  )r0   rÈ  r�   rÍ  s       r&   Ú&test_constructAuthorityFromHostAndPortzESecondaryAuthorityServiceTests.test_constructAuthorityFromHostAndPort  s  € ð  ˆØˆÜ+×GÑGØ�dˆO˜m¨^Ð<ó
ˆð 	×Ñ˜Ÿ™¨'Ô2Ø×Ñ˜Ÿ™¨Ô-à×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°4Ô8Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÔCà×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°4Ô8Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÕCr1   c                 óÀ  — d}t        |j                  «       ddg«      }| j                  |j                  |«       | j                  |j                  d   j                  |«       | j                  |j                  d   j
                  d«       | j                  |j                  d   j                  |«       | j                  |j                  d   j
                  d«       y)aQ  
        L{SecondaryAuthorityService.fromServerAddressAndDomains} constructs a
        new L{SecondaryAuthorityService} from a C{bytes} giving a master server
        address and several domains, causing the creation of a secondary
        authority for each domain and that master server address and the given
        DNS port.
        rÐ  rÒ  zexample.edur   r;   rÑ  N)r   Úencoder‘   rÈ  rÊ  rË  rÌ  s      r&   Ú test_constructAuthorityFromBytesz?SecondaryAuthorityServiceTests.test_constructAuthorityFromBytes#  s·   € ð  ˆÜ+Ø�N‰NÓØ˜]Ð+ó
ˆð 	×Ñ˜Ÿ™¨'Ô2à×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÔCà×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÕCr1   N)r2   r3   r4   r  rÎ  rÔ  r×  r5   r1   r&   rÄ  rÄ  ñ  s   „ ñò
Dò(Dó0Dr1   rÄ  c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚSecondaryAuthorityTestsz—
    L{twisted.names.secondary.SecondaryAuthority} correctly constructs objects
    with a specified IP address and optionally specified DNS port.
    c                 óÄ   — t        dd«      }| j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       y)zp
        When constructed using L{SecondaryAuthority.__init__}, the default port
        of 53 is used.
        ú192.168.1.1ú
inside.comr  ó
   inside.comN)r   r‘   rÈ  rÉ  rË  ©r0   Ú	secondarys     r&   Útest_defaultPortz(SecondaryAuthorityTests.test_defaultPort?  sP   € ô
 ' }°lÓCˆ	Ø×Ñ˜×*Ñ*¨MÔ:Ø×Ñ˜Ÿ™¨"Ô-Ø×Ñ˜×)Ñ)¨=Õ9r1   c                 óØ   — t        j                  dd«      }| j                  |j                  d«       | j                  |j                  d«       | j                  |j
                  d«       y)z~
        When constructed using L{SecondaryAuthority.fromServerAddressAndDomain},
        the specified port is used.
        )rÛ  éé  rÜ  rÛ  râ  rÝ  N)r   ÚfromServerAddressAndDomainr‘   rÈ  rÉ  rË  rÞ  s     r&   Útest_explicitPortz)SecondaryAuthorityTests.test_explicitPortI  s[   € ô
 '×AÑAØ! <ó
ˆ	ð 	×Ñ˜×*Ñ*¨MÔ:Ø×Ñ˜Ÿ™¨$Ô/Ø×Ñ˜×)Ñ)¨=Õ9r1   c                 ó^  — t        j                  dd«      }t        «       x|_        }|j	                  «        |j
                  j                  d«      \  }}}}}| j                  |d«       | j                  |d«       |j                  ||f«      }t        «       }	|j                  |	«       t        «       }
|
j                  t        |	j                  «       dd «      «       | j                  t        j                   dt        j"                  t        j$                  «      g|
j&                  «       y)zæ
        An attempt is made to transfer the zone for the domain the
        L{SecondaryAuthority} was constructed with from the server address it
        was constructed with when L{SecondaryAuthority.transfer} is called.
        ©rÆ  r8   úexample.comr   rÆ  r8   rq   N)r   rã  r   Ú_reactorÚtransferÚ
tcpClientsrK  r‘   ÚbuildProtocolr   ÚmakeConnectionr   Údecoder   rd  r   r   rB  r1  rC  )r0   rß  r	   Úhostr�   r{   ÚtimeoutÚbindAddressÚprotor‹   Úmsgs              r&   Útest_transferz%SecondaryAuthorityTests.test_transferU  sú   € ô '×AÑAØ! =ó
ˆ	ô (:Ó';Ð;ˆ	Ô˜Wà×ÑÔð 5<×4FÑ4F×4JÑ4JÈ1Ó4MÑ1ˆˆd�G˜W kØ×Ñ˜˜}Ô-Ø×Ñ˜˜tÔ$ð ×%Ñ% t¨T lÓ3ˆÜ#Ó%ˆ	Ø×Ñ˜YÔ'ä‹iˆð 	�
‰
”7˜9Ÿ?™?Ó,¨Q¨RÐ0Ó1Ô2à×Ñœ#Ÿ)™) M´3·8±8¼S¿V¹VÓDÐEÀsÇ{Á{ÕSr1   c           
      ót  — t        j                  dd«      }t        «       x|_        }|j	                  «        |j
                  j                  d«      \  }}}}}|j                  ||f«      }t        «       }	|j                  |	«       t        dd¬«      }
|
j                  t        |	j                  «       dd «      «       t        dd	d
ddddd¬«      }t        dd¬«      }t        |
j                   dd¬«      }|j"                  j%                  t'        dt(        |¬«      t'        d|¬«      t'        dt(        |¬«      g«       |j+                  «       }|j-                  t/        dt1        |«      «      |z   «       | j3                  |j5                  d«      «      }| j7                  t'        d|d¬«      gg g f|«       y)zŸ
        L{SecondaryAuthority.lookupAddress} returns a L{Deferred} that fires
        with the I{A} records the authority has cached from the primary.
        ræ  rÇ  r   r;   )r9  r%  rq   Ns   ns1.example.comzadmin.example.comi@â i  iÀ  i   i€%  ià.  r<   s   192.168.1.2rk   )r8  r9  r%  )r#  r#   r"   z!Hrç  T)r#   r%  )r   rã  r   rè  ré  rê  rK  rë  r   rì  r   rí  r   rd  r   r   r8  rD  Úextendr   r   ÚtoStrÚdataReceivedr   Úlenrj  r�   r‘   )r0   rß  r	   rî  r�   r{   rï  rð  rñ  r‹   rr  r.   r  r9  ÚdatarI  s                   r&   Útest_lookupAddressz*SecondaryAuthorityTests.test_lookupAddresss  s–  € ô
 '×AÑAØ! >ó
ˆ	ô (:Ó';Ð;ˆ	Ô˜Wà×ÑÔà4;×4FÑ4F×4JÑ4JÈ1Ó4MÑ1ˆˆd�G˜W kà×%Ñ% t¨T lÓ3ˆÜ#Ó%ˆ	Ø×Ñ˜YÔ'ä˜q qÔ)ˆØ�‰”W˜YŸ_™_Ó.¨q¨rÐ2Ó3Ô4ô Ø$Ø%ØØØØØØô	
ˆô �^¨Ô+ˆÜ˜EŸH™H¨Q°QÔ7ˆØ�‰×Ñä˜¬c¸3Ô?Ü˜°Ô3Ü˜¬c¸3Ô?ðô	
ð �|‰|‹~ˆØ×Ñœ4 ¤c¨$£iÓ0°4Ñ7Ô8à×%Ñ% i×&=Ñ&=¸mÓ&LÓMˆØ×ÑÜ�~¨q°tÔ<Ð=¸rÀ2ÐFÈõ	
r1   N)r2   r3   r4   r  rà  rä  ró  rú  r5   r1   r&   rÙ  rÙ  9  s   „ ñò
:ò
:òTó<0
r1   rÙ  sY  $ORIGIN example.com.
$TTL    1w
example.com. IN SOA dns.example.com (
            2013120201 ; serial number of this zone file
            1d         ; slave refresh
            2h         ; slave retry time in case of a problem
            4w         ; slave expiration time
            1h         ; maximum caching time in case of failed lookups
            )

; A comment.
@                  IN AAAA 2001:db8:10::1
example.com.       IN A 10.0.0.1
no-in.example.com. A 10.0.0.2  ; technically wrong but used to work
not-fqdn           IN MX 10 mx.example.com
www                IN CNAME example.comc                   óL   — 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y)ÚBindAuthorityTestsz=
    Tests for L{twisted.names.authority.BindAuthority}.
    c                 ó²   — t        | j                  «       j                  d«      «      }|j                  |«       t	        j
                  |j                  «      S )zú
        Create a new L{twisted.names.authority.BindAuthority} from C{s}.

        @param s: A string with BIND zone data.
        @type s: bytes

        @return: a new bind authority
        @rtype: L{twisted.names.authority.BindAuthority}
        Úascii)r   r  rÖ  Ú
setContentr   ÚBindAuthorityÚpath)r0   ÚsÚfps      r&   ÚloadBindStringz!BindAuthorityTests.loadBindString¾  s@   € ô �d—k‘k“m×*Ñ*¨7Ó3Ó4ˆØ
�‰�aÔä×&Ñ& r§w¡wÓ/Ð/r1   c                 ó8   — | j                  t        «      | _        y r+   )r  ÚsampleBindZoner%  rž   s    r&   rˆ   zBindAuthorityTests.setUpÍ  s   € Ø×'Ñ'¬Ó7ˆ�	r1   c                 óÎ   — | j                   j                  j                  «       D ]>  }| j                   j                  |   D ]   }| j                  d|j                  k(  «       Œ" Œ@ y)zG
        Loads the default $TTL and applies it to all records.
        é€:	 N)r%  r/   Úkeysr  rD   )r0   ÚdomÚrecs      r&   Útest_ttlzBindAuthorityTests.test_ttlÐ  sY   € ð —9‘9×$Ñ$×)Ñ)Ó+ò 	3ˆCØ—y‘y×(Ñ(¨Ñ-ò 3�Ø—‘ ¨#¯'©'Ñ 1Õ2ñ3ñ	3r1   c                 óœ   — | j                  d| j                  j                  «       | j                  d| j                  j                  «       y)z,
        Loads the default $ORIGIN.
        s   example.com.ó   not-fqdn.example.comN)r‘   r%  ÚoriginÚassertInr/   rž   s    r&   Útest_originFromFilez&BindAuthorityTests.test_originFromFileØ  s@   € ð 	×ÑØØ�I‰I×Ñô	
ð 	�‰Ø#Ø�I‰I×Ñõ	
r1   c                 óÜ   — dD ]g  \  }}| j                  | j                  j                  |«      «      \  \  }\   \   | j                  t	        j
                  |d«      |j                  «       Œi y)ú'
        A records are loaded.
        ©)rÇ  z10.0.0.1)ó   no-in.example.comz10.0.0.2r  N©rj  r%  r�   r‘   r   r   r#   ©r0   r
  Úipr‹  s       r&   Útest_aRecordsz BindAuthorityTests.test_aRecordså  si   € ð
ò 	‰GˆC�ð "×1Ñ1°$·)±)×2IÑ2IÈ#Ó2NÓO‰N‰Tˆb‘2‘rØ×ÑÜ—‘ØØóð —
‘
õñ	r1   c                 óÈ   — | j                  | j                  j                  d«      «      \  \  }\   \   | j                  t	        j
                  dd«      |j                  «       y)ú*
        AAAA records are loaded.
        rÇ  ú2001:db8:10::1r  N©rj  r%  rñ   r‘   r   rò   r#   ©r0   r‹  s     r&   Útest_aaaaRecordsz#BindAuthorityTests.test_aaaaRecordsö  sY   € ð ×-Ñ-Ø�I‰I×'Ñ'¨Ó7ó
‰‰ˆ"‰r‘2ð 	×ÑÜ�O‰OØ Øóð �J‰Jõ	
r1   c                 óÌ   — | j                  | j                  j                  d«      «      \  \  }\   \   | j                  t	        j
                  ddd¬«      |j                  «       y)ú(
        MX records are loaded.
        r  rN   zmx.example.comr  )r)  r"  rD   N©rj  r%  rª   r‘   r   r«   r#   r  s     r&   Útest_mxRecordsz!BindAuthorityTests.test_mxRecords  s]   € ð ×-Ñ-Ø�I‰I×(Ñ(Ð)@ÓAó
‰‰ˆ"‰r‘2ð 	×ÑÜ�M‰MØØ%Øôð
 �J‰Jõ	
r1   c                 óÐ   — | j                  | j                  j                  d«      «      \  }\   \   |d   }| j                  t	        j
                  dd¬«      |j                  «       y)ú+
        CNAME records are loaded.
        ó   www.example.comr   rç  r  r(  N©rj  r%  rñ   r‘   r   r»   r#   ©r0   rD  r‹  s      r&   Útest_cnameRecordsz$BindAuthorityTests.test_cnameRecords  sd   € ð !×0Ñ0Ø�I‰I×'Ñ'Ð(:Ó;ó
Ñˆ‘"‘bð �Q‰ZˆØ×ÑÜ×ÑØ"Øôð �J‰Jõ	
r1   c                 óÌ   — | j                  t        «      5 }| j                  d«       ddd«       | j                  dj                  j
                  d   «       y# 1 sw Y   Œ3xY w)zO
        loadBindString raises NotImplementedError on invalid records.
        s   example.com. IN LOL 192.168.0.1NzRecord type 'LOL' not supportedr   )ÚassertRaisesÚNotImplementedErrorr  r‘   Ú	exceptionr·  )r0   Úes     r&   Útest_invalidRecordClassz*BindAuthorityTests.test_invalidRecordClass%  s]   € ð ×ÑÔ2Ó3ð 	D°qØ×ÑÐ BÔC÷	Dà×ÑÐ:¸A¿K¹K×<LÑ<LÈQÑ<OÕP÷	Dð 	Dús   –AÁA#c                 óø   — dD ]i  }| j                  t        «      5 }| j                  |dz   «       ddd«       | j                  t	        |dz   «      j
                  j                  d   «       Œk y# 1 sw Y   ŒAxY w)zC
        $INCLUDE and $GENERATE raise NotImplementedError.
        )s   $INCLUDEs	   $GENERATEs    doesNotMatterNs    directive not implementedr   )r+  r,  r  r‘   r   r-  r·  )r0   Ú	directiver.  s      r&   Útest_invalidDirectivesz)BindAuthorityTests.test_invalidDirectives-  s   € ð 5ò 	ˆIØ×"Ñ"Ô#6Ó7ð C¸1Ø×#Ñ# IÐ0AÑ$AÔB÷Cà×ÑÜ˜YÐ)FÑFÓGØ—‘× Ñ  Ñ#õñ	÷Cð Cús   ›A0Á0A9	N)r2   r3   r4   r  r  rˆ   r  r  r  r  r#  r)  r/  r2  r5   r1   r&   rü  rü  ¹  s:   „ ñò0ò8ò3ò
òò"
ò
ò 
ò Qó
r1   rü  aÊ  zone = [
    SOA(
        # For whom we are the authority
        'example.com',

        # This nameserver's name
        mname = "dns.example.com",

        # Mailbox of individual who handles this
        rname = "root.example.com",

        # Unique serial identifying this SOA data
        serial = 86400,

        # Time interval before zone should be refreshed
        refresh = "2H",

        # Interval before failed refresh should be retried
        retry = "1H",

        # Upper limit on time interval before expiry
        expire = "1H",

        # Minimum TTL
        minimum = "3H"

    ),

    AAAA('example.com', '2001:db8:10::1'),
    A('example.com', '10.0.0.1'),
    NS('example.com', 'dns.example.com'),
    A('no-in.example.com', '10.0.0.2'),
    PTR('2.0.0.10.in-addr.arpa', 'no-in.example.com'),

    CNAME('www.example.com', 'example.com'),
    CNAME('ftp.example.com', 'example.com'),

    MX('not-fqdn.example.com', 10, 'mail.example.com'),
]
c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚPySourceAuthorityTestszA
    Tests for L{twisted.names.authority.PySourceAuthority}.
    c                 óê   — t        | j                  «       «      }t        |j                  d«      5 }|j	                  |«       ddd«       t        j                  |j                  «      S # 1 sw Y   Œ(xY w)a  
        Create a new L{twisted.names.authority.PySourceAuthority} from C{s}.

        @param s: A string with BIND zone data in a Python source file.
        @type s: L{str}

        @return: a new bind authority
        @rtype: L{twisted.names.authority.PySourceAuthority}
        rZ  N)r   r  r[  r  Úwriter   ÚPySourceAuthority)r0   r  r  r  s       r&   ÚloadPySourceStringz)PySourceAuthorityTests.loadPySourceStringj  s[   € ô �d—k‘k“mÓ$ˆÜ�"—'‘'˜3Óð 	 1Ø�G‰G�AŒJ÷	ô ×*Ñ*¨2¯7©7Ó3Ð3÷	ð 	ús   °A)Á)A2c                 ó8   — | j                  t        «      | _        y r+   )r8  ÚsamplePySourcer%  rž   s    r&   rˆ   zPySourceAuthorityTests.setUpz  s   € Ø×+Ñ+¬NÓ;ˆ�	r1   c                 óÚ   — dD ]f  \  }}| j                  | j                  j                  |«      «      \  \  }\   \   | j                  t	        j
                  |«      |j                  «       Œh y)r  r  Nr  r  s       r&   r  z$PySourceAuthorityTests.test_aRecords}  sa   € ð
ò 	‰GˆC�ð "×1Ñ1°$·)±)×2IÑ2IÈ#Ó2NÓO‰N‰Tˆb‘2‘rØ×ÑÜ—‘˜RÓ Ø—
‘
õñ	r1   c                 óÆ   — | j                  | j                  j                  d«      «      \  \  }\   \   | j                  t	        j
                  d«      |j                  «       y)r  rÇ  r  Nr  r  s     r&   r  z'PySourceAuthorityTests.test_aaaaRecords‹  sR   € ð ×-Ñ-Ø�I‰I×'Ñ'¨Ó7ó
‰‰ˆ"‰r‘2ð 	×ÑÜ�O‰OÐ,Ó-Ø�J‰Jõ	
r1   c                 óÊ   — | j                  | j                  j                  d«      «      \  \  }\   \   | j                  t	        j
                  dd¬«      |j                  «       y)r!  r  rN   zmail.example.com)r)  r"  Nr"  r  s     r&   r#  z%PySourceAuthorityTests.test_mxRecords—  sZ   € ð ×-Ñ-Ø�I‰I×(Ñ(Ð)@ÓAó
‰‰ˆ"‰r‘2ð 	×ÑÜ�M‰MØØ'ôð �J‰Jõ	
r1   c                 óÎ   — | j                  | j                  j                  d«      «      \  }\   \   |d   }| j                  t	        j
                  d¬«      |j                  «       y)r%  r&  r   rç  ©r"  Nr'  r(  s      r&   r)  z(PySourceAuthorityTests.test_cnameRecords¦  sa   € ð !×0Ñ0Ø�I‰I×'Ñ'Ð(:Ó;ó
Ñˆ‘"‘bð �Q‰ZˆØ×ÑÜ×ÑØ"ôð �J‰Jõ		
r1   c                 óÎ   — | j                  | j                  j                  d«      «      \  }\   \   |d   }| j                  t	        j
                  d¬«      |j                  «       y)z)
        PTR records are loaded.
        s   2.0.0.10.in-addr.arpar   r  r?  N)rj  r%  r¶   r‘   r   r·   r#   r(  s      r&   r¸   zPySourceAuthorityTests.test_PTRµ  s_   € ð !×0Ñ0Ø�I‰I×#Ñ#Ð$<Ó=ó
Ñˆ‘"‘bð �Q‰ZˆØ×ÑÜ�N‰NØ)ôð �J‰Jõ		
r1   c                 óJ   — d}| j                  t        | j                  |«       y)z1
        Input file has no zone variable
        znothing = []N)r+  Ú
ValueErrorr8  )r0   ÚbadPySources     r&   Útest_badInputNoZonez*PySourceAuthorityTests.test_badInputNoZoneÄ  s!   € ð %ˆØ×Ñœ* d×&=Ñ&=¸{ÕKr1   N)r2   r3   r4   r  r8  rˆ   r  r  r#  r)  r¸   rD  r5   r1   r&   r4  r4  e  s0   „ ñò4ò <òò

ò
ò
ò
óLr1   r4  )Yr  rë   rý   rå   Ú	functoolsr   r   Úior   Ústructr   Útwisted.internetr   r   r	   Útwisted.internet.deferr
   Útwisted.internet.testingr   r   r   Útwisted.namesr   r   r   r   r   Útwisted.names.clientr   Útwisted.names.dnsr   r   r   r   r   r   Útwisted.names.errorr   Útwisted.names.secondaryr   r   Útwisted.python.compatr   Útwisted.python.filepathr   Útwisted.trialr   r'   ÚFileAuthorityr)   r§   Úreverse_soarì   r¯   rà   r«   r³   r»   r¿   rÃ   rÜ   r÷   rÇ   rË   rÔ   rØ   rä   ræ   r  rò   rÐ   rx   r·   ry   rz   ÚTestCasero   r  r  rN  r_  rƒ  r´  rÄ  rÙ  r  rü  r:  r4  r5   r1   r&   ú<module>rV     sŸ  ðñó
 Û Û ß %Ý Ý ç 2Ñ 2Ý *÷ñ ÷
 AÕ @Ý )ß Q× QÝ +ß QÝ .Ý ,Ý "ò+ô.�i×-Ñ-ô .ð ˆS�^‰^Ø
Ø
 ØØØØØ
Ø	ô	€
ð ˆc�n‰nØ
"Ø
"ØØØØØ
Ø	ô	€ð 
ˆ�‰Ø
Ø
'ØØØØØ
ô
€ñ "Ø	˜ZÐ(ð ØˆC�L‰L˜Ó&ØˆC�M‰M˜/Ó*ØˆC�N‰NÐAÓBØˆC�N‰NÐ1Ð3TÓUØˆC�M‰M˜"Ð4Ó5ØˆC×Ñ Ð.IÔJØˆC×ÑÐ2Ó3ØˆC�M‰MÐ4Ó5ØˆC�M‰MÐ1Ó2ØˆC�N‰NÐ3Ð5FÓGØˆC�M‰M˜!˜]¨CÓ0ØˆC�M‰M˜"˜lÐ,?Ó@ØˆC�M‰M˜!ÐDÐFVÓWØˆC�N‰NÐJÓKØˆC�M‰MÐ6Ó7ØˆC×Ñ ]¸MÔJØˆC×Ñ QÐ1IÔJØˆC�M‰MÐ2Ð8IÔJØˆC�N‰NØ × 2Ñ 2Ð4Sóð ˆC×ÑØ�R˜˜zÐ+Oóð ˆC�O‰OÐFÓGð5
ð: ˆC�N‰N˜3  uÐ.FÓGð&
ð ˆC�L‰L˜Ó(ØˆC�L‰L˜Ó(ð"
ð ˆC�L‰LÐ+Ó,ØˆC�L‰L˜Ó$ð&
ð $4 3×#3Ñ#3Ð4FÓ#GÐ"HØ$0 C§L¡L°Ó$<Ð#=ñ[.ô1€ñf !Ø	! ;Ð/à$ØˆC�N‰NÐ:Ó;Øð'
ðô€ñ  Ø	˜6Ð"àØØˆC�L‰L˜¨Ô.ØˆC�M‰M˜-¨UÔ3ØˆC�M‰M˜-¨TÔ2ØˆC�N‰N˜3  uÐ.FÈDÔQð
ðô€ôW
�X×&Ñ&ô W
ôt
�(×#Ñ#ô ôW5�×!Ñ!ô W5ôt˜h×/Ñ/ô ô{/�X×&Ñ&ô {/ô|[5 × 1Ñ 1ô [5ô|-X˜X×.Ñ.ô -Xô`ED X×%6Ñ%6ô EDôPj
˜h×/Ñ/ô j
ðZ+€ô&~˜×*Ñ*ô ~ðB(€ôVdL˜X×.Ñ.õ dLr1   