ó
    Ö›‘hï  ã                  óÆ   • S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  \	S:X  a  SS	KJr  OSS
KJr   " S S5      r " S S\5      r " S S\R"                  5      rg)zK
Tests for the internal implementation details of L{twisted.internet.udp}.
é    )ÚannotationsN)Úudp)ÚDatagramProtocol)ÚplatformType)ÚunittestÚwin32)ÚWSAEWOULDBLOCK)ÚEWOULDBLOCKc                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)ÚStringUDPSocketé   z÷
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.
c                ó   • Xl         S U l        g ©N)ÚretvalsÚconnectedAddr)Úselfr   s     ÚlC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/test/test_udp_internals.pyÚ__init__ÚStringUDPSocket.__init__    s   € ØŒØ,0ˆÕó    c                ó   • Xl         g r   )r   )r   Úaddrs     r   ÚconnectÚStringUDPSocket.connect$   s   € Ø!Õr   c                ó‚   • U R                   R                  S5      n[        U[        R                  5      (       a  UeUS4$ )z8
Return (or raise) the next value from C{self.retvals}.
r   N)r   ÚpopÚ
isinstanceÚsocketÚerror)r   ÚsizeÚrets      r   ÚrecvfromÚStringUDPSocket.recvfrom'   s8   € ð �l‰l×Ñ˜qÓ!ˆÜ�cœ6Ÿ<™<×(Ñ(ØˆIØ�DˆyÐr   )r   r   N)r   zlist[bytes | socket.error]ÚreturnÚNone)r   Úobjectr$   r%   )r    Úintr$   ztuple[bytes, None])	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r"   Ú__static_attributes__© r   r   r   r      s   † ñô1ô"÷r   r   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	Ú	KeepReadsé1   z
Accumulate reads in a list.
c                ó   • / U l         g r   ©Úreads)r   s    r   r   ÚKeepReads.__init__6   s	   € Ø"$ˆ�
r   c                ó:   • U R                   R                  U5        g r   )r4   Úappend)r   Údatar   s      r   ÚdatagramReceivedÚKeepReads.datagramReceived9   s   € Ø�
‰
×Ñ˜$Õr   r3   N©r$   r%   )r8   Úbytesr   r&   r$   r%   )r(   r)   r*   r+   r,   r   r9   r-   r.   r   r   r0   r0   1   s   † ñô%÷ r   r0   c                  ó@   • \ rS rSrSrS	S jrS	S jrS	S jrS	S jrSr	g)
ÚErrorsTestsé=   z'
Error handling tests for C{udp.Port}.
c           	     ó
  • [         R                  R                  S5        U R                  [         R                  R                  S5        [        5       n[         R                  " SU5      n[        SS[        R                  " S5      S[        R                  " S5      /5      Ul        UR                  5         U R                  UR                  SS/5        UR                  5         U R                  UR                  / SQ5        g)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)rA   rB   rC   )r   Ú_sockErrReadIgnorer7   Ú
addCleanupÚremover0   ÚPortr   r   r   ÚdoReadÚassertEqualr4   ©r   ÚprotocolÚports      r   Útest_socketReadNormalÚ!ErrorsTests.test_socketReadNormalB   s¹   € ô 	×Ñ×%Ñ% eÔ,Ø�‰œ×.Ñ.×5Ñ5°uÔ=ä“;ˆÜ�xŠx˜˜hÓ'ˆô &Ø˜¤§¢¨UÓ 3°V¼V¿\º\È%Ó=PÐQó
ˆŒð 	�‰Œà×Ñ˜Ÿ™¨)°VÐ)<Ô=Ø�‰ŒØ×Ñ˜Ÿ™Ò)DÕEr   c                ó  • [         R                  R                  S5        U R                  [         R                  R                  S5        [        5       nS Ul        [         R                  " SU5      n[        S[        R                  " S5      S[        R                  " [        5      /5      Ul	        UR                  5         U R                  UR                  S/5        UR                  5         U R                  UR                  SS/5        g)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                 ó   • SS-  $ )Né   r   r.   r.   r   r   Ú<lambda>Ú5ErrorsTests.test_readImmediateError.<locals>.<lambda>e   s   € ¨Q°ªUr   Nó   aó   b)r   Ú_sockErrReadRefuser7   rE   rF   r0   ÚconnectionRefusedrG   r   r   r   r
   rH   rI   r4   rJ   s      r   Útest_readImmediateErrorÚ#ErrorsTests.test_readImmediateErrorX   s¿   € ô 	×Ñ×%Ñ% eÔ,Ø�‰œ×.Ñ.×5Ñ5°uÔ=ä“;ˆá%2ˆÔ"ä�xŠx˜˜hÓ'ˆô &Ø”6—<’< Ó&¨¬f¯lªl¼;Ó.GÐHó
ˆŒð 	�‰Œà×Ñ˜Ÿ™¨$¨Ô0à�‰ŒØ×Ñ˜Ÿ™¨$°¨Õ6r   c                óš  ^• [         R                  R                  S5        U R                  [         R                  R                  S5        [        5       n/ mU4S jUl        [         R                  " SU5      n[        S[        R                  " S5      S[        R                  " [        5      /5      Ul	        UR                  SS5        UR                  5         U R                  UR                  S/5        U R                  TS/5        UR                  5         U R                  UR                  SS/5        U R                  TS/5        g)	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.
rP   c                 ó&   >• T R                  S5      $ )NT)r7   )Úrefuseds   €r   rS   Ú>ErrorsTests.test_connectedReadImmediateError.<locals>.<lambda>�   s   ø€ ¨W¯^©^¸DÔ-Ar   NrU   rV   z	127.0.0.1i'  T)r   rW   r7   rE   rF   r0   rX   rG   r   r   r   r
   r   rH   rI   r4   )r   rK   rL   r]   s      @r   Ú test_connectedReadImmediateErrorÚ,ErrorsTests.test_connectedReadImmediateErrort   sù   ø€ ô 	×Ñ×%Ñ% eÔ,Ø�‰œ×.Ñ.×5Ñ5°uÔ=ä“;ˆØˆÜ%AˆÔ"ä�xŠx˜˜hÓ'ˆÜ%Ø”6—<’< Ó&¨¬f¯lªl¼;Ó.GÐHó
ˆŒð 	�‰�[ $Ô'ð 	�‰ŒØ×Ñ˜Ÿ™¨$¨Ô0Ø×Ñ˜ 4 &Ô)ð 	�‰ŒØ×Ñ˜Ÿ™¨$°¨Ô6Ø×Ñ˜ 4 &Õ)r   c                ó   • [        5       n[        R                  " SU5      n[        S[        R
                  " S5      /5      Ul        U R                  [        R
                  UR                  5        U R                  UR                  S/5        g)z7
Socket reads with an unknown socket error are raised.
Ns   goodiÇúÿÿ)
r0   r   rG   r   r   r   ÚassertRaisesrH   rI   r4   rJ   s      r   Útest_readUnknownErrorÚ!ErrorsTests.test_readUnknownError“   se   € ô “;ˆÜ�xŠx˜˜hÓ'ˆô & w´·²¸UÓ0CÐ&DÓEˆŒØ×Ñœ&Ÿ,™,¨¯©Ô4Ø×Ñ˜Ÿ™¨'¨Õ3r   r.   Nr;   )
r(   r)   r*   r+   r,   rM   rY   r_   rc   r-   r.   r   r   r>   r>   =   s   † ñôFô,7ô8*÷>
4r   r>   )r,   Ú
__future__r   r   Útwisted.internetr   Útwisted.internet.protocolr   Útwisted.python.runtimer   Útwisted.trialr   Úerrnor	   r
   r   r0   ÚSynchronousTestCaser>   r.   r   r   Ú<module>rl      sW   ðñõ #ã å  Ý 6Ý /Ý "à�7ÓÞ3å!÷ñ ô6	 Ð ô 	 ô`4�(×.Ñ.õ `4r   