§
    ÈtºfÆ$  ã                   óö   — d Z ddlZddlmZ ddlmZm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 ddlmZ  G d„ de¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )z-
Test cases for L{twisted.names.srvconnect}.
é    N)ÚverifyObject)ÚdeferÚprotocol)ÚDNSLookupErrorÚServiceNameUnknownError)Ú
IConnector)ÚMemoryReactor)ÚclientÚdnsÚ
srvconnect)ÚResolverBase)ÚDNSNameError)Úunittestc                   ó    — e Zd ZdZdd„Zd„ ZdS )ÚFakeResolveraˆ  
    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                 ó0   — || _         || _        g | _        d S ©N)ÚresultsÚfailureÚlookups)Úselfr   r   s      úa/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/test/test_srvconnect.pyÚ__init__zFakeResolver.__init__$   s   € ØˆŒØˆŒØˆŒˆˆó    c                 ó¶   — | j                              ||||f¦  «         | j        �t          j        | j        g g f¦  «        S t          j        | j        ¦  «        S )z9
        Return the result or failure on lookup.
        )r   Úappendr   r   ÚsucceedÚfailr   )r   ÚnameÚclsÚqtypeÚtimeouts        r   Ú_lookupzFakeResolver._lookup)   sV   € ð 	Œ×Ò˜T 3¨¨wÐ7Ñ8Ô8Ð8ØŒ<Ð#Ý”= $¤,°°BÐ!7Ñ8Ô8Ð8å”:˜dœlÑ+Ô+Ð+r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   © r   r   r   r      sA   € € € € € ð
ð 
ðð ð ð ð
,ð ,ð ,ð ,ð ,r   r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚDummyFactoryzL
    Dummy client factory that stores the reason of connection failure.
    c                 ó   — d | _         d S r   ©Úreason©r   s    r   r   zDummyFactory.__init__9   s   € ØˆŒˆˆr   c                 ó   — || _         d S r   r,   )r   Ú	connectorr-   s      r   ÚclientConnectionFailedz#DummyFactory.clientConnectionFailed<   s   € ØˆŒˆˆr   N)r$   r%   r&   r'   r   r1   r(   r   r   r*   r*   4   s<   € € € € € ðð ðð ð ðð ð ð ð r   r*   c                   ó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d„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSRVConnectorTestsz/
    Tests for L{srvconnect.SRVConnector}.
    c                 ó
  — |                       t          dt          ¦   «         ¦  «         t          ¦   «         | _        t          ¦   «         | _        t          j        | j        dd| j        ¦  «        | _	        g | _
        g | _        d S )NÚtheResolverúxmpp-serverúexample.org)Úpatchr
   r   r	   Úreactorr*   Úfactoryr   ÚSRVConnectorr0   ÚrandIntArgsÚrandIntResultsr.   s    r   ÚsetUpzSRVConnectorTests.setUpE   sk   € Ø�
Š
•6˜=­,©.¬.Ñ9Ô9Ð9Ý$‘”ˆŒÝ#‘~”~ˆŒÝ#Ô0ØŒL˜-¨¸¼ñ
ô 
ˆŒð ˆÔØ ˆÔÐÐr   c                 ón   — | j                              ||f¦  «         | j                             d¦  «        S )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   )r<   r   r=   Úpop)r   ÚminÚmaxs      r   Ú_randintzSRVConnectorTests._randintO   s6   € ð  	Ô×Ò  c 
Ñ+Ô+Ð+ØÔ"×&Ò& qÑ)Ô)Ð)r   c                 ó:   — t          t          | j        ¦  «         dS )zF
        L{srvconnect.SRVConnector} implements L{IConnector}.
        N)r   r   r0   r.   s    r   Útest_interfacez SRVConnectorTests.test_interfaceb   s   € õ 	•Z ¤Ñ0Ô0Ð0Ð0Ð0r   c                 ó’  — t          j        ddd¬¦  «        }t          j        dt           j        t           j        d|¬¦  «        gt
          j        _        | j         	                    ¦   «          |  
                    | j        j        ¦  «         |                      | j        j                             ¦   «         dd…         d	¦  «         dS )
zS
        Test connectTCP gets called with the address from the SRV record.
        é}  úhost.example.orgé<   ©ÚportÚtargetÚttlr7   ©r   Útyper    rM   ÚpayloadNé   )rH   rG   )r   Ú
Record_SRVÚRRHeaderÚSRVÚINr
   r5   r   r0   ÚconnectÚassertIsNoner:   r-   ÚassertEqualr9   Ú
tcpClientsr@   ©r   rP   s     r   Útest_SRVPresentz!SRVConnectorTests.test_SRVPresenth   s±   € õ ”. dÐ3EÈ2ÐNÑNÔNˆåŒLØ"­¬µc´fÀ"Ègðñ ô ð&
�ÔÔ"ð
 	Œ×ÒÑ Ô Ð à×Ò˜$œ,Ô-Ñ.Ô.Ð.Ø×Ò˜œÔ0×4Ò4Ñ6Ô6°r¸°rÔ:Ð<VÑWÔWÐWÐWÐWr   c                 ó&  — t          d¦  «        t          j        _        | j                             ¦   «          |                      | j        j        ¦  «         |  	                    | j
        j                             ¦   «         dd…         d¦  «         dS )zS
        Test connectTCP gets called with fallback parameters on NXDOMAIN.
        s   example.orgNrQ   ©r7   r6   )r   r
   r5   r   r0   rV   rW   r:   r-   rX   r9   rY   r@   r.   s    r   Útest_SRVNotPresentz$SRVConnectorTests.test_SRVNotPresentw   s†   € õ &2°.Ñ%AÔ%A�ÔÔ"ØŒ×ÒÑ Ô Ð à×Ò˜$œ,Ô-Ñ.Ô.Ð.Ø×ÒØŒLÔ#×'Ò'Ñ)Ô)¨"¨1¨"Ô-Ð/Mñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — g t           j        _        | j                             ¦   «          |                      | j        j        ¦  «         |                      | j	        j
                             ¦   «         dd…         d¦  «         dS )zW
        Test connectTCP gets called with fallback parameters on empty result.
        NrQ   r]   )r
   r5   r   r0   rV   rW   r:   r-   rX   r9   rY   r@   r.   s    r   Útest_SRVNoResultz"SRVConnectorTests.test_SRVNoResultƒ   s~   € ð &(�ÔÔ"ØŒ×ÒÑ Ô Ð à×Ò˜$œ,Ô-Ñ.Ô.Ð.Ø×ÒØŒLÔ#×'Ò'Ñ)Ô)¨"¨1¨"Ô-Ð/Mñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ót  — t          j        | j        dd| j        d¬¦  «        | _        t          ¦   «         t          j        _        | j         	                    ¦   «          |  
                    | j        j        ¦  «         |                      | j        j                             ¦   «         dd…         d¦  «         dS )zY
        connectTCP gets called with default port if the service is not defined.
        Úthisbetternotexistr7   éf  )ÚdefaultPortNrQ   )r7   rc   )r   r;   r9   r:   r0   r   r
   r5   r   rV   rW   r-   rX   rY   r@   r.   s    r   Ú)test_SRVNoResultUnknownServiceDefaultPortz;SRVConnectorTests.test_SRVNoResultUnknownServiceDefaultPort�   s§   € õ $Ô0ØŒLØ ØØŒLØð
ñ 
ô 
ˆŒõ &=Ñ%>Ô%>�ÔÔ"ØŒ×ÒÑ Ô Ð à×Ò˜$œ,Ô-Ñ.Ô.Ð.Ø×Ò˜œÔ0×4Ò4Ñ6Ô6°r¸°rÔ:Ð<QÑRÔRÐRÐRÐRr   c                 ó,  — t          j        | j        dd| j        ¦  «        | _        t          ¦   «         t          j        _        | j         	                    ¦   «          |  
                    | j        j                             t
          ¦  «        ¦  «         dS )zR
        Connect fails on no result, unknown service and no default port.
        rb   r7   N)r   r;   r9   r:   r0   r   r
   r5   r   rV   Ú
assertTruer-   Úcheckr.   s    r   Ú+test_SRVNoResultUnknownServiceNoDefaultPortz=SRVConnectorTests.test_SRVNoResultUnknownServiceNoDefaultPort¡   sy   € õ $Ô0ØŒLÐ.°¸t¼|ñ
ô 
ˆŒõ &=Ñ%>Ô%>�ÔÔ"ØŒ×ÒÑ Ô Ð à�Š˜œÔ+×1Ò1Õ2IÑJÔJÑKÔKÐKÐKÐKr   c                 ód  — t          j        dt           j        t           j        dd¬¦  «        gt          j        _        | j                             ¦   «          |  	                    | j
        j        ¦  «         |                      | j        j                             ¦   «         dd…         d¦  «         dS )zU
        Test connectTCP gets called with fallback parameters on bad result.
        r7   rI   NrN   rQ   r]   )r   rS   ÚCNAMErU   r
   r5   r   r0   rV   rW   r:   r-   rX   r9   rY   r@   r.   s    r   Útest_SRVBadResultz#SRVConnectorTests.test_SRVBadResult®   s¦   € õ
 ŒLØ"­¬½¼ÀBÐPTðñ ô ð&
�ÔÔ"ð
 	Œ×ÒÑ Ô Ð à×Ò˜$œ,Ô-Ñ.Ô.Ð.Ø×ÒØŒLÔ#×'Ò'Ñ)Ô)¨"¨1¨"Ô-Ð/Mñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó¦  — t          j        ddd¬¦  «        }t          j        dt           j        t           j        d|¬¦  «        gt
          j        _        | j         	                    ¦   «          |  
                    | j        j        ¦  «         | j        j                             t          ¦  «         |                      | j        j        g ¦  «         dS )zH
        Test that connecting fails when no service is present.
        i•  ó   .rI   rJ   r7   rN   N)r   rR   rS   rT   rU   r
   r5   r   r0   rV   ÚassertIsNotNoner:   r-   Útrapr   rX   r9   rY   rZ   s     r   Útest_SRVNoServicez#SRVConnectorTests.test_SRVNoService¾   s³   € õ ”. d°4¸RÐ@Ñ@Ô@ˆåŒLØ"­¬µc´fÀ"Ègðñ ô ð&
�ÔÔ"ð
 	Œ×ÒÑ Ô Ð à×Ò˜Tœ\Ô0Ñ1Ô1Ð1ØŒÔ× Ò ¥Ñ0Ô0Ð0Ø×Ò˜œÔ0°"Ñ5Ô5Ð5Ð5Ð5r   c                 óÀ   — g t           j        _        | j                             ¦   «          t           j        j        d         d         }|                      d|¦  «         dS )zW
        The lookup name is a native string from service, protocol and domain.
        éÿÿÿÿr   s   _xmpp-server._tcp.example.orgN)r
   r5   r   r0   rV   r   rX   )r   r   s     r   Útest_SRVLookupNamez$SRVConnectorTests.test_SRVLookupNameÎ   sU   € ð &(�ÔÔ"ØŒ×ÒÑ Ô Ð åÔ!Ô)¨"Ô-¨aÔ0ˆØ×ÒÐ9¸4Ñ@Ô@Ð@Ð@Ð@r   c                 ó’   — t          j        | j        dd| j        ¦  «        | _        |                      d| j        j        ¦  «         dS )zq
        L{srvconnect.SRVConnector} automatically encodes unicode domain using
        C{idna} encoding.
        zxmpp-clientu   Ã©chec.example.orgs   xn--chec-9oa.example.orgN)r   r;   r9   r:   r0   rX   Údomainr.   s    r   Útest_unicodeDomainz$SRVConnectorTests.test_unicodeDomainØ   sJ   € õ
 $Ô0ØŒL˜-Ð)AÀ4Ä<ñ
ô 
ˆŒð 	×ÒÐ4°d´nÔ6KÑLÔLÐLÐLÐLr   c                 óÌ  — t          j        dddd¦  «        }t          j        dddd¦  «        }||g| j        _        g | j        _        |                      t          d| j        ¦  «         ddg| _        | j         	                    ¦   «          |  
                    | j        d         d	¦  «         | j         	                    ¦   «          |  
                    | j        d
         d¦  «         ddg| _        | j         	                    ¦   «          |  
                    | j        d         d	¦  «         | j         	                    ¦   «          |  
                    | j        d         d¦  «         dS )a  
        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.
        é
   rc   úhost1.example.orgé   úhost2.example.orgÚrandinté   r   )r   é   é   )r   ry   rQ   é   )r   r{   N)r   rR   r0   ÚorderedServersÚserversr8   ÚrandomrC   r=   Ú
pickServerrX   r<   ©r   Úrecord1Úrecord2s      r   Útest_pickServerWeightsz(SRVConnectorTests.test_pickServerWeightsâ   sK  € õ ”.  R¨Ð/BÑCÔCˆÝ”.  R¨Ð/BÑCÔCˆà)0°'Ð(:ˆŒÔ%Ø!#ˆŒÔØ�
Š
•6˜9 d¤mÑ4Ô4Ð4ð  " 1˜gˆÔàŒ×!Ò!Ñ#Ô#Ð#Ø×Ò˜Ô)¨!Ô,¨gÑ6Ô6Ð6àŒ×!Ò!Ñ#Ô#Ð#Ø×Ò˜Ô)¨!Ô,¨gÑ6Ô6Ð6ð  " 1˜gˆÔàŒ×!Ò!Ñ#Ô#Ð#Ø×Ò˜Ô)¨!Ô,¨gÑ6Ô6Ð6àŒ×!Ò!Ñ#Ô#Ð#Ø×Ò˜Ô)¨!Ô,¨gÑ6Ô6Ð6Ð6Ð6r   c                 óž  — t          j        dddd¦  «        }t          j        dddd¦  «        }||g| j        _        g | j        _        |                      t          d| j        ¦  «         ddg| _        |  	                    d| j         
                    ¦   «         ¦  «         |  	                    d	| j         
                    ¦   «         ¦  «         d
S )zR
        Two records with equal priorities compare on weight (ascending).
        ry   rc   rz   r{   r|   r}   r   ©rz   rc   ©r|   rc   N©r   rR   r0   r‚   rƒ   r8   r„   rC   r=   rX   r…   r†   s      r   Útest_pickServerSamePrioritiesz/SRVConnectorTests.test_pickServerSamePriorities  s½   € õ ”.  R¨Ð/BÑCÔCˆÝ”.  R¨Ð/BÑCÔCˆà)0°'Ð(:ˆŒÔ%Ø!#ˆŒÔØ�
Š
•6˜9 d¤mÑ4Ô4Ð4Ø  !˜fˆÔà×ÒÐ4°d´n×6OÒ6OÑ6QÔ6QÑRÔRÐRà×ÒÐ4°d´n×6OÒ6OÑ6QÔ6QÑRÔRÐRÐRÐRr   c                 óž  — t          j        dddd¦  «        }t          j        dddd¦  «        }||g| j        _        g | j        _        |                      t          d| j        ¦  «         ddg| _        |  	                    d| j         
                    ¦   «         ¦  «         |  	                    d	| j         
                    ¦   «         ¦  «         d
S )zX
        Two records with differing priorities compare on priority (ascending).
        ry   r   rc   rz   r{   r|   r}   r‹   rŒ   Nr�   r†   s      r   Útest_srvDifferentPrioritiesz-SRVConnectorTests.test_srvDifferentPriorities  s½   € õ ”.  Q¨Ð.AÑBÔBˆÝ”.  Q¨Ð.AÑBÔBˆà)0°'Ð(:ˆŒÔ%Ø!#ˆŒÔØ�
Š
•6˜9 d¤mÑ4Ô4Ð4Ø  !˜fˆÔà×ÒÐ4°d´n×6OÒ6OÑ6QÔ6QÑRÔRÐRà×ÒÐ4°d´n×6OÒ6OÑ6QÔ6QÑRÔRÐRÐRÐRr   N)r$   r%   r&   r'   r>   rC   rE   r[   r^   r`   re   ri   rl   rq   rt   rw   r‰   rŽ   r�   r(   r   r   r3   r3   @   s  € € € € € ðð ð!ð !ð !ð*ð *ð *ð&1ð 1ð 1ðXð Xð Xð

ð 

ð 

ð

ð 

ð 

ðSð Sð Sð$Lð Lð Lð
ð 
ð 
ð 6ð 6ð 6ð Að Að AðMð Mð Mð7ð 7ð 7ðBSð Sð Sð Sð Sð Sð Sð Sr   r3   )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*   ÚTestCaser3   r(   r   r   ú<module>rœ      sv  ððð ð
 €€€à .Ð .Ð .Ð .Ð .Ð .à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "ð,ð ,ð ,ð ,ð ,�<ñ ,ô ,ð ,ð:	ð 	ð 	ð 	ð 	�8Ô)ñ 	ô 	ð 	ðaSð aSð aSð aSð aS˜Ô)ñ aSô aSð aSð aSð aSr   