§
    Ètºfï  ã                  óÐ   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ e	dk    rdd	lmZ ndd
lmZ  G d„ d¦  «        Z G d„ de¦  «        Z G d„ dej        ¦  «        ZdS )zK
Tests for the internal implementation details of L{twisted.internet.udp}.
é    )ÚannotationsN)Úudp)ÚDatagramProtocol)ÚplatformType)ÚunittestÚwin32)ÚWSAEWOULDBLOCK)ÚEWOULDBLOCKc                  ó*   — e Zd ZdZdd„Zdd	„Zdd„ZdS )ÚStringUDPSocketa  
    A fake UDP socket object, which returns a fixed sequence of strings and/or
    socket errors.  Useful for testing.

    @ivar retvals: A C{list} containing either strings or C{socket.error}s.

    @ivar connectedAddr: The address the socket is connected to.
    Úretvalsúlist[bytes | socket.error]ÚreturnÚNonec                ó"   — || _         d | _        d S ©N)r   ÚconnectedAddr)Úselfr   s     úg/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/test/test_udp_internals.pyÚ__init__zStringUDPSocket.__init__    s   € ØˆŒØ,0ˆÔÐÐó    ÚaddrÚobjectc                ó   — || _         d S r   )r   )r   r   s     r   ÚconnectzStringUDPSocket.connect$   s   € Ø!ˆÔÐÐr   ÚsizeÚintútuple[bytes, None]c                óv   — | j                              d¦  «        }t          |t          j        ¦  «        r|‚|dfS )zH
        Return (or raise) the next value from C{self.retvals}.
        r   N)r   ÚpopÚ
isinstanceÚsocketÚerror)r   r   Úrets      r   ÚrecvfromzStringUDPSocket.recvfrom'   s<   € ð Œl×Ò˜qÑ!Ô!ˆÝ�c�6œ<Ñ(Ô(ð 	ØˆIØ�DˆyÐr   N)r   r   r   r   )r   r   r   r   )r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   © r   r   r   r      sZ   € € € € € ðð ð1ð 1ð 1ð 1ð"ð "ð "ð "ðð ð ð ð ð r   r   c                  ó"   — e Zd ZdZdd„Zdd	„Zd
S )Ú	KeepReadsz%
    Accumulate reads in a list.
    r   r   c                ó   — g | _         d S r   )Úreads)r   s    r   r   zKeepReads.__init__6   s   € Ø"$ˆŒ
ˆ
ˆ
r   ÚdataÚbytesr   r   c                ó:   — | j                              |¦  «         d S r   )r.   Úappend)r   r/   r   s      r   ÚdatagramReceivedzKeepReads.datagramReceived9   s   € ØŒ
×Ò˜$ÑÔÐÐÐr   N©r   r   )r/   r0   r   r   r   r   )r&   r'   r(   r)   r   r3   r*   r   r   r,   r,   1   sF   € € € € € ðð ð%ð %ð %ð %ð ð  ð  ð  ð  ð  r   r,   c                  ó2   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„ZdS )
ÚErrorsTestsz/
    Error handling tests for C{udp.Port}.
    r   r   c           	     ó  — t           j                             d¦  «         |                      t           j        j        d¦  «         t          ¦   «         }t          j        d|¦  «        }t          ddt          j	        d¦  «        dt          j	        d¦  «        g¦  «        |_        | 
                    ¦   «          |                      |j        ddg¦  «         | 
                    ¦   «          |                      |j        g d¢¦  «         dS )z¤
        Socket reads with some good data followed by a socket error which can
        be ignored causes reading to stop, and no log messages to be logged.
        i¨äÿÿNó   resultó   123ó   456)r8   r9   r:   )r   Ú_sockErrReadIgnorer2   Ú
addCleanupÚremover,   ÚPortr   r"   r#   ÚdoReadÚassertEqualr.   ©r   ÚprotocolÚports      r   Útest_socketReadNormalz!ErrorsTests.test_socketReadNormalB   sâ   € õ 	Ô×%Ò% eÑ,Ô,Ð,Ø�Š�Ô.Ô5°uÑ=Ô=Ð=å‘;”;ˆÝŒx˜˜hÑ'Ô'ˆõ &Ø˜¥¤¨UÑ 3Ô 3°V½V¼\È%Ñ=PÔ=PÐQñ
ô 
ˆŒð 	�Š‰Œˆà×Ò˜œ¨)°VÐ)<Ñ=Ô=Ð=Ø�Š‰ŒˆØ×Ò˜œÐ)DÐ)DÐ)DÑEÔEÐEÐEÐEr   c                ó(  — t           j                             d¦  «         |                      t           j        j        d¦  «         t          ¦   «         }d„ |_        t          j        d|¦  «        }t          dt          j
        d¦  «        dt          j
        t          ¦  «        g¦  «        |_	        |                     ¦   «          |                      |j        dg¦  «         |                     ¦   «          |                      |j        ddg¦  «         dS )zË
        If the socket is unconnected, socket reads with an immediate
        connection refusal are ignored, and reading stops. The protocol's
        C{connectionRefused} method is not called.
        é�èÿÿc                 ó   — ddz  S )Né   r   r*   r*   r   r   ú<lambda>z5ErrorsTests.test_readImmediateError.<locals>.<lambda>e   s
   € ¨Q°©U€ r   Nó   aó   b)r   Ú_sockErrReadRefuser2   r<   r=   r,   ÚconnectionRefusedr>   r   r"   r#   r
   r?   r@   r.   rA   s      r   Útest_readImmediateErrorz#ErrorsTests.test_readImmediateErrorX   sä   € õ 	Ô×%Ò% eÑ,Ô,Ð,Ø�Š�Ô.Ô5°uÑ=Ô=Ð=å‘;”;ˆà%2 ]ˆÔ"åŒx˜˜hÑ'Ô'ˆõ &Ø•6”< Ñ&Ô&¨­f¬l½;Ñ.GÔ.GÐHñ
ô 
ˆŒð 	�Š‰Œˆà×Ò˜œ¨$¨Ñ0Ô0Ð0à�Š‰ŒˆØ×Ò˜œ¨$°¨Ñ6Ô6Ð6Ð6Ð6r   c                óº  ‡— t           j                             d¦  «         |                      t           j        j        d¦  «         t          ¦   «         }g Šˆfd„|_        t          j        d|¦  «        }t          dt          j
        d¦  «        dt          j
        t          ¦  «        g¦  «        |_	        |                     dd¦  «         |                     ¦   «          |                      |j        dg¦  «         |                      ‰dg¦  «         |                     ¦   «          |                      |j        ddg¦  «         |                      ‰dg¦  «         dS )	zÂ
        If the socket connected, socket reads with an immediate
        connection refusal are ignored, and reading stops. The protocol's
        C{connectionRefused} method is called.
        rF   c                 ó.   •— ‰                       d¦  «        S )NT)r2   )Úrefuseds   €r   rI   z>ErrorsTests.test_connectedReadImmediateError.<locals>.<lambda>�   s   ø€ ¨W¯^ª^¸DÑ-AÔ-A€ r   NrJ   rK   z	127.0.0.1i'  T)r   rL   r2   r<   r=   r,   rM   r>   r   r"   r#   r
   r   r?   r@   r.   )r   rB   rC   rQ   s      @r   Ú test_connectedReadImmediateErrorz,ErrorsTests.test_connectedReadImmediateErrort   s7  ø€ õ 	Ô×%Ò% eÑ,Ô,Ð,Ø�Š�Ô.Ô5°uÑ=Ô=Ð=å‘;”;ˆØˆØ%AÐ%AÐ%AÐ%AˆÔ"åŒx˜˜hÑ'Ô'ˆÝ%Ø•6”< Ñ&Ô&¨­f¬l½;Ñ.GÔ.GÐHñ
ô 
ˆŒð 	�Š�[ $Ñ'Ô'Ð'ð 	�Š‰ŒˆØ×Ò˜œ¨$¨Ñ0Ô0Ð0Ø×Ò˜ 4 &Ñ)Ô)Ð)ð 	�Š‰ŒˆØ×Ò˜œ¨$°¨Ñ6Ô6Ð6Ø×Ò˜ 4 &Ñ)Ô)Ð)Ð)Ð)r   c                ó  — t          ¦   «         }t          j        d|¦  «        }t          dt	          j        d¦  «        g¦  «        |_        |                      t          j        |j        ¦  «         |                      |j	        dg¦  «         dS )zG
        Socket reads with an unknown socket error are raised.
        Ns   goodiÇúÿÿ)
r,   r   r>   r   r"   r#   ÚassertRaisesr?   r@   r.   rA   s      r   Útest_readUnknownErrorz!ErrorsTests.test_readUnknownError“   sx   € õ ‘;”;ˆÝŒx˜˜hÑ'Ô'ˆõ & wµ´¸UÑ0CÔ0CÐ&DÑEÔEˆŒØ×Ò�&œ,¨¬Ñ4Ô4Ð4Ø×Ò˜œ¨'¨Ñ3Ô3Ð3Ð3Ð3r   Nr4   )r&   r'   r(   r)   rD   rN   rR   rU   r*   r   r   r6   r6   =   sr   € € € € € ðð ðFð Fð Fð Fð,7ð 7ð 7ð 7ð8*ð *ð *ð *ð>
4ð 
4ð 
4ð 
4ð 
4ð 
4r   r6   )r)   Ú
__future__r   r"   Útwisted.internetr   Útwisted.internet.protocolr   Útwisted.python.runtimer   Útwisted.trialr   Úerrnor	   r
   r   r,   ÚSynchronousTestCaser6   r*   r   r   ú<module>r]      s:  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€à  Ð  Ð  Ð  Ð  Ð  Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø /Ð /Ð /Ð /Ð /Ð /Ø "Ð "Ð "Ð "Ð "Ð "à�7ÒÐØ3Ð3Ð3Ð3Ð3Ð3Ð3à!Ð!Ð!Ð!Ð!Ð!ðð ð ð ð ñ ô ð ð6	 ð 	 ð 	 ð 	 ð 	 Ð ñ 	 ô 	 ð 	 ð`4ð `4ð `4ð `4ð `4�(Ô.ñ `4ô `4ð `4ð `4ð `4r   