ó
    Ö›‘hÆ$  ã                   óö   • S r SSKrSSKJr  SSKJrJr  SSKJrJ	r	  SSK
Jr  SSKJr  SSKJrJrJr  SS	KJr  SS
KJr  SSKJr   " S S\5      r " S S\R2                  5      r " S S\R6                  5      rg)z-
Test cases for L{twisted.names.srvconnect}.
é    N)ÚverifyObject)ÚdeferÚprotocol)ÚDNSLookupErrorÚServiceNameUnknownError)Ú
IConnector)ÚMemoryReactor)ÚclientÚdnsÚ
srvconnect)ÚResolverBase)ÚDNSNameError)Úunittestc                   ó(   • \ rS rSrSrSS jrS rSrg)ÚFakeResolveré   ah  
Resolver that only gives out one given result.

Either L{results} or L{failure} must be set and will be used for
the return value of L{_lookup}

@ivar results: List of L{dns.RRHeader} for the desired result.
@type results: C{list}
@ivar failure: Failure with an exception from L{twisted.names.error}.
@type failure: L{Failure<twisted.python.failure.Failure>}
Nc                 ó*   • Xl         X l        / U l        g ©N)ÚresultsÚfailureÚlookups)Úselfr   r   s      ÚfC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/names/test/test_srvconnect.pyÚ__init__ÚFakeResolver.__init__$   s   € ØŒØŒØˆ�ó    c                 óÜ   • U R                   R                  XX445        U R                  b#  [        R                  " U R                  / / 45      $ [        R
                  " U R                  5      $ )z)
Return the result or failure on lookup.
)r   Úappendr   r   ÚsucceedÚfailr   )r   ÚnameÚclsÚqtypeÚtimeouts        r   Ú_lookupÚFakeResolver._lookup)   sR   € ð 	�‰×Ñ˜T¨Ð7Ô8Ø�<‰<Ñ#Ü—=’= $§,¡,°°BÐ!7Ó8Ð8ä—:’:˜dŸl™lÓ+Ð+r   )r   r   r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r%   Ú__static_attributes__© r   r   r   r      s   † ñ
ôõ
,r   r   c                   ó$   • \ rS rSrSrS rS rSrg)ÚDummyFactoryé4   zD
Dummy client factory that stores the reason of connection failure.
c                 ó   • S U l         g r   ©Úreason©r   s    r   r   ÚDummyFactory.__init__9   s	   € Øˆ�r   c                 ó   • X l         g r   r2   )r   Ú	connectorr3   s      r   ÚclientConnectionFailedÚ#DummyFactory.clientConnectionFailed<   s   € Ø�r   r2   N)r'   r(   r)   r*   r+   r   r8   r,   r-   r   r   r/   r/   4   s   † ñòõr   r/   c                   ór   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)ÚSRVConnectorTestsé@   z'
Tests for L{srvconnect.SRVConnector}.
c                 óþ   • U R                  [        S[        5       5        [        5       U l        [        5       U l        [        R                  " U R                  SSU R                  5      U l	        / U l
        / U l        g )NÚtheResolverúxmpp-serverúexample.org)Úpatchr
   r   r	   Úreactorr/   Úfactoryr   ÚSRVConnectorr7   ÚrandIntArgsÚrandIntResultsr4   s    r   ÚsetUpÚSRVConnectorTests.setUpE   s[   € Ø�
‰
”6˜=¬,«.Ô9Ü$“ˆŒÜ#“~ˆŒÜ#×0Ò0Ø�L‰L˜-¨¸¿¹ó
ˆŒð ˆÔØ ˆÕr   c                 óp   • U R                   R                  X45        U R                  R                  S5      $ )a@  
Fake randint.

Returns the first element of L{randIntResults} and records the
arguments passed to it in L{randIntArgs}.

@param min: Lower bound of the random number.
@type min: L{int}

@param max: Higher bound of the random number.
@type max: L{int}

@return: Fake random number from L{randIntResults}.
@rtype: L{int}
r   )rE   r   rF   Úpop)r   ÚminÚmaxs      r   Ú_randintÚSRVConnectorTests._randintO   s1   € ð  	×Ñ×Ñ  
Ô+Ø×"Ñ"×&Ñ& qÓ)Ð)r   c                 ó8   • [        [        U R                  5        g)z6
L{srvconnect.SRVConnector} implements L{IConnector}.
N)r   r   r7   r4   s    r   Útest_interfaceÚ SRVConnectorTests.test_interfaceb   s   € ô 	”Z §¡Õ0r   c                 ó¬  • [         R                  " SSSS9n[         R                  " S[         R                  [         R                  SUS9/[
        R                  l        U R                  R                  5         U R                  U R                  R                  5        U R                  U R                  R                  R!                  5       SS S	5        g)
zC
Test connectTCP gets called with the address from the SRV record.
é}  úhost.example.orgé<   ©ÚportÚtargetÚttlr@   ©r!   Útyper"   rY   ÚpayloadNé   )rT   rS   )r   Ú
Record_SRVÚRRHeaderÚSRVÚINr
   r>   r   r7   ÚconnectÚassertIsNonerC   r3   ÚassertEqualrB   Ú
tcpClientsrJ   ©r   r\   s     r   Útest_SRVPresentÚ!SRVConnectorTests.test_SRVPresenth   s›   € ô —.’. dÐ3EÈ2ÑNˆä�LŠLØ"¬¯©´c·f±fÀ"Ègñð&
Œ×ÑÔ"ð
 	�‰×ÑÔ à×Ñ˜$Ÿ,™,×-Ñ-Ô.Ø×Ñ˜Ÿ™×0Ñ0×4Ñ4Ó6°r¸Ð:Ð<VÕWr   c                 ó,  • [        S5      [        R                  l        U R                  R                  5         U R                  U R                  R                  5        U R                  U R                  R                  R                  5       SS S5        g)zC
Test connectTCP gets called with fallback parameters on NXDOMAIN.
s   example.orgNr]   ©r@   r?   )r   r
   r>   r   r7   rb   rc   rC   r3   rd   rB   re   rJ   r4   s    r   Útest_SRVNotPresentÚ$SRVConnectorTests.test_SRVNotPresentw   sm   € ô &2°.Ó%AŒ×ÑÔ"Ø�‰×ÑÔ à×Ñ˜$Ÿ,™,×-Ñ-Ô.Ø×ÑØ�L‰L×#Ñ#×'Ñ'Ó)¨"¨1Ð-Ð/Mõ	
r   c                 ó  • / [         R                  l        U R                  R	                  5         U R                  U R                  R                  5        U R                  U R                  R                  R                  5       SS S5        g)zG
Test connectTCP gets called with fallback parameters on empty result.
Nr]   rj   )r
   r>   r   r7   rb   rc   rC   r3   rd   rB   re   rJ   r4   s    r   Útest_SRVNoResultÚ"SRVConnectorTests.test_SRVNoResultƒ   sh   € ð &(Œ×ÑÔ"Ø�‰×ÑÔ à×Ñ˜$Ÿ,™,×-Ñ-Ô.Ø×ÑØ�L‰L×#Ñ#×'Ñ'Ó)¨"¨1Ð-Ð/Mõ	
r   c                 óŒ  • [         R                  " U R                  SSU R                  SS9U l        [        5       [        R                  l        U R                  R                  5         U R                  U R                  R                  5        U R                  U R                  R                  R                  5       SS S5        g)zI
connectTCP gets called with default port if the service is not defined.
Úthisbetternotexistr@   éf  )ÚdefaultPortNr]   )r@   rr   )r   rD   rB   rC   r7   r   r
   r>   r   rb   rc   r3   rd   re   rJ   r4   s    r   Ú)test_SRVNoResultUnknownServiceDefaultPortÚ;SRVConnectorTests.test_SRVNoResultUnknownServiceDefaultPort�   s“   € ô $×0Ò0Ø�L‰LØ ØØ�L‰LØñ
ˆŒô &=Ó%>Œ×ÑÔ"Ø�‰×ÑÔ à×Ñ˜$Ÿ,™,×-Ñ-Ô.Ø×Ñ˜Ÿ™×0Ñ0×4Ñ4Ó6°r¸Ð:Ð<QÕRr   c                 óF  • [         R                  " U R                  SSU R                  5      U l        [        5       [        R                  l        U R                  R                  5         U R                  U R                  R                  R                  [
        5      5        g)zB
Connect fails on no result, unknown service and no default port.
rq   r@   N)r   rD   rB   rC   r7   r   r
   r>   r   rb   Ú
assertTruer3   Úcheckr4   s    r   Ú+test_SRVNoResultUnknownServiceNoDefaultPortÚ=SRVConnectorTests.test_SRVNoResultUnknownServiceNoDefaultPort¡   sm   € ô $×0Ò0Ø�L‰LÐ.°¸t¿|¹|ó
ˆŒô &=Ó%>Œ×ÑÔ"Ø�‰×ÑÔ à�‰˜Ÿ™×+Ñ+×1Ñ1Ô2IÓJÕKr   c                 ó€  • [         R                  " S[         R                  [         R                  SSS9/[        R
                  l        U R                  R                  5         U R                  U R                  R                  5        U R                  U R                  R                  R                  5       SS S5        g)zE
Test connectTCP gets called with fallback parameters on bad result.
r@   rU   NrZ   r]   rj   )r   r_   ÚCNAMEra   r
   r>   r   r7   rb   rc   rC   r3   rd   rB   re   rJ   r4   s    r   Útest_SRVBadResultÚ#SRVConnectorTests.test_SRVBadResult®   sŒ   € ô
 �LŠLØ"¬¯©¼¿¹ÀBÐPTñð&
Œ×ÑÔ"ð
 	�‰×ÑÔ à×Ñ˜$Ÿ,™,×-Ñ-Ô.Ø×ÑØ�L‰L×#Ñ#×'Ñ'Ó)¨"¨1Ð-Ð/Mõ	
r   c                 óÜ  • [         R                  " SSSS9n[         R                  " S[         R                  [         R                  SUS9/[
        R                  l        U R                  R                  5         U R                  U R                  R                  5        U R                  R                  R                  [        5        U R                  U R                   R"                  / 5        g)z8
Test that connecting fails when no service is present.
i•  ó   .rU   rV   r@   rZ   N)r   r^   r_   r`   ra   r
   r>   r   r7   rb   ÚassertIsNotNonerC   r3   Útrapr   rd   rB   re   rf   s     r   Útest_SRVNoServiceÚ#SRVConnectorTests.test_SRVNoService¾   s¡   € ô —.’. d°4¸RÑ@ˆä�LŠLØ"¬¯©´c·f±fÀ"Ègñð&
Œ×ÑÔ"ð
 	�‰×ÑÔ à×Ñ˜TŸ\™\×0Ñ0Ô1Ø�‰×Ñ× Ñ ¤Ô0Ø×Ñ˜Ÿ™×0Ñ0°"Õ5r   c                 óÆ   • / [         R                  l        U R                  R	                  5         [         R                  R
                  S   S   nU R                  SU5        g)zG
The lookup name is a native string from service, protocol and domain.
éÿÿÿÿr   s   _xmpp-server._tcp.example.orgN)r
   r>   r   r7   rb   r   rd   )r   r!   s     r   Útest_SRVLookupNameÚ$SRVConnectorTests.test_SRVLookupNameÎ   sN   € ð &(Œ×ÑÔ"Ø�‰×ÑÔ ä×!Ñ!×)Ñ)¨"Ñ-¨aÑ0ˆØ×ÑÐ9¸4Õ@r   c                 ó´   • [         R                  " U R                  SSU R                  5      U l        U R                  SU R                  R                  5        g)zY
L{srvconnect.SRVConnector} automatically encodes unicode domain using
C{idna} encoding.
zxmpp-clientu   Ã©chec.example.orgs   xn--chec-9oa.example.orgN)r   rD   rB   rC   r7   rd   Údomainr4   s    r   Útest_unicodeDomainÚ$SRVConnectorTests.test_unicodeDomainØ   sE   € ô
 $×0Ò0Ø�L‰L˜-Ð)AÀ4Ç<Á<ó
ˆŒð 	×ÑÐ4°d·n±n×6KÑ6KÕLr   c                 óÜ  • [         R                  " SSSS5      n[         R                  " SSSS5      nX/U R                  l        / U R                  l        U R                  [        SU R                  5        SS/U l        U R                  R                  5         U R                  U R                  S   S	5        U R                  R                  5         U R                  U R                  S
   S5        SS/U l        U R                  R                  5         U R                  U R                  S   S	5        U R                  R                  5         U R                  U R                  S   S5        g)zÞ
pickServer calculates running sum of weights and calls randint.

This exercises the server selection algorithm specified in RFC 2782 by
preparing fake L{random.randint} results and checking the values it was
called with.
é
   rr   úhost1.example.orgé   úhost2.example.orgÚrandinté   r   )r   é   é   )r   rŽ   r]   é   )r   r�   N)r   r^   r7   ÚorderedServersÚserversrA   ÚrandomrM   rF   Ú
pickServerrd   rE   ©r   Úrecord1Úrecord2s      r   Útest_pickServerWeightsÚ(SRVConnectorTests.test_pickServerWeightsâ   s%  € ô —.’.  R¨Ð/BÓCˆÜ—.’.  R¨Ð/BÓCˆà)0Ð(:ˆ�‰Ô%Ø!#ˆ�‰ÔØ�
‰
”6˜9 d§m¡mÔ4ð  " 1˜gˆÔà�‰×!Ñ!Ô#Ø×Ñ˜×)Ñ)¨!Ñ,¨gÔ6à�‰×!Ñ!Ô#Ø×Ñ˜×)Ñ)¨!Ñ,¨gÔ6ð  " 1˜gˆÔà�‰×!Ñ!Ô#Ø×Ñ˜×)Ñ)¨!Ñ,¨gÔ6à�‰×!Ñ!Ô#Ø×Ñ˜×)Ñ)¨!Ñ,¨gÕ6r   c                 óª  • [         R                  " SSSS5      n[         R                  " SSSS5      nX!/U R                  l        / U R                  l        U R                  [        SU R                  5        SS/U l        U R                  SU R                  R                  5       5        U R                  S	U R                  R                  5       5        g
)zB
Two records with equal priorities compare on weight (ascending).
rŽ   rr   r�   r�   r‘   r’   r   ©r�   rr   ©r‘   rr   N©r   r^   r7   r—   r˜   rA   r™   rM   rF   rd   rš   r›   s      r   Útest_pickServerSamePrioritiesÚ/SRVConnectorTests.test_pickServerSamePriorities  s¥   € ô —.’.  R¨Ð/BÓCˆÜ—.’.  R¨Ð/BÓCˆà)0Ð(:ˆ�‰Ô%Ø!#ˆ�‰ÔØ�
‰
”6˜9 d§m¡mÔ4Ø  !˜fˆÔà×ÑÐ4°d·n±n×6OÑ6OÓ6QÔRà×ÑÐ4°d·n±n×6OÑ6OÓ6QÕRr   c                 óª  • [         R                  " SSSS5      n[         R                  " SSSS5      nX!/U R                  l        / U R                  l        U R                  [        SU R                  5        SS/U l        U R                  SU R                  R                  5       5        U R                  S	U R                  R                  5       5        g
)zH
Two records with differing priorities compare on priority (ascending).
rŽ   r   rr   r�   r�   r‘   r’   r¡   r¢   Nr£   r›   s      r   Útest_srvDifferentPrioritiesÚ-SRVConnectorTests.test_srvDifferentPriorities  s¥   € ô —.’.  Q¨Ð.AÓBˆÜ—.’.  Q¨Ð.AÓBˆà)0Ð(:ˆ�‰Ô%Ø!#ˆ�‰ÔØ�
‰
”6˜9 d§m¡mÔ4Ø  !˜fˆÔà×ÑÐ4°d·n±n×6OÑ6OÓ6QÔRà×ÑÐ4°d·n±n×6OÑ6OÓ6QÕRr   )r7   rC   rE   rF   rB   N)r'   r(   r)   r*   r+   rG   rM   rP   rg   rk   rn   rt   ry   r}   rƒ   r‡   r‹   rž   r¤   r§   r,   r-   r   r   r;   r;   @   sZ   † ñò!ò*ò&1òXò

ò

òSò$Lò
ò 6ò AòMò7òBSõ Sr   r;   )r+   r™   Úzope.interface.verifyr   Útwisted.internetr   r   Útwisted.internet.errorr   r   Útwisted.internet.interfacesr   Útwisted.internet.testingr	   Útwisted.namesr
   r   r   Útwisted.names.commonr   Útwisted.names.errorr   Útwisted.trialr   r   ÚClientFactoryr/   ÚTestCaser;   r-   r   r   Ú<module>r´      sa   ðñó
 å .ç ,ß JÝ 2Ý 2ß 1Ñ 1Ý -Ý ,Ý "ô,�<ô ,ô:	�8×)Ñ)ô 	ôaS˜×)Ñ)õ aSr   