+
    Dfj                        R t ^ RIHt ^ RIt^ RIHt ^ RIHt ^ RIH	t	 ^ RI
Ht ]	R8X  d   ^ RIHt M^ R	IHt  ! R
 R4      t ! R R]4      t ! R R]P"                  4      tR# )zK
Tests for the internal implementation details of L{twisted.internet.udp}.
)annotationsN)udp)DatagramProtocol)platformType)unittestwin32)WSAEWOULDBLOCK)EWOULDBLOCKc                  >    ] tR t^tRtR R ltR R ltR R ltRtR	# )
StringUDPSocketz
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                    V ^8  d   QhRRRR/# )   retvalszlist[bytes | socket.error]returnNone )formats   "J/usr/lib/python3/dist-packages/twisted/internet/test/test_udp_internals.py__annotate__StringUDPSocket.__annotate__    s     1 1 : 1t 1    c                	     Wn         R V n        R # N)r   connectedAddr)selfr   s   &&r   __init__StringUDPSocket.__init__    s    ,0r   c                    V ^8  d   QhRRRR/# )r   addrobjectr   r   r   )r   s   "r   r   r   $   s     " "F "t "r   c                	    Wn         R # r   )r   )r   r   s   &&r   connectStringUDPSocket.connect$   s    !r   c                    V ^8  d   QhRRRR/# )r   sizeintr   ztuple[bytes, None]r   )r   s   "r   r   r   '   s      S %7 r   c                    V P                   P                  ^ 4      p\        V\        P                  4      '       d   VhVR3# )z8
Return (or raise) the next value from C{self.retvals}.
N)r   pop
isinstancesocketerror)r   r$   rets   && r   recvfromStringUDPSocket.recvfrom'   s8     llq!c6<<((IDyr   )r   r   N)	__name__
__module____qualname____firstlineno____doc__r   r!   r,   __static_attributes__r   r   r   r   r      s    1" r   r   c                  2    ] tR t^1tRtR R ltR R ltRtR# )	KeepReadsz
Accumulate reads in a list.
c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   KeepReads.__annotate__6   s     % %$ %r   c                	    . V n         R # r   reads)r   s   &r   r   KeepReads.__init__6   s	    "$
r   c               $    V ^8  d   QhRRRRRR/# )r   databytesr   r   r   r   r   )r   s   "r   r   r8   9   s!        U  &  T  r   c                	<    V P                   P                  V4       R # r   )r;   append)r   r>   r   s   &&&r   datagramReceivedKeepReads.datagramReceived9   s    

$r   r:   N)r.   r/   r0   r1   r2   r   rB   r3   r   r   r   r5   r5   1   s    %   r   r5   c                  J    ] tR t^=tRtR R ltR R ltR R ltR R	 ltR
t	R# )ErrorsTestsz'
Error handling tests for C{udp.Port}.
c                   V ^8  d   QhRR/# r7   r   )r   s   "r   r   ErrorsTests.__annotate__B   s     F Ft Fr   c           	        \         P                  P                  R4       V P                  \         P                  P                  R4       \        4       p\         P                  ! RV4      p\        RR\        P                  ! R4      R\        P                  ! R4      .4      Vn        VP                  4        V P                  VP                  RR.4       VP                  4        V P                  VP                  . RO4       R# )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.
N   result   123   456i)rI   rJ   rK   )r   _sockErrReadIgnorerA   
addCleanupremover5   Portr   r)   r*   doReadassertEqualr;   r   protocolports   &  r   test_socketReadNormal!ErrorsTests.test_socketReadNormalB   s     	%%e,..55u=;xxh' &U 3VV\\%=PQ
 	)V)<=)DEr   c                   V ^8  d   QhRR/# r7   r   )r   s   "r   r   rG   X   s     7 7 7r   c                    \         P                  P                  R4       V P                  \         P                  P                  R4       \        4       pR Vn        \         P                  ! RV4      p\        R\        P                  ! R4      R\        P                  ! \        4      .4      Vn	        VP                  4        V P                  VP                  R.4       VP                  4        V P                  VP                  RR.4       R# )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                     ^^ ,          # )   r   r   r   r   <lambda>5ErrorsTests.test_readImmediateError.<locals>.<lambda>e   s    QUr   N   a   b)r   _sockErrReadRefuserA   rM   rN   r5   connectionRefusedrO   r   r)   r*   r	   rP   rQ   r;   rR   s   &  r   test_readImmediateError#ErrorsTests.test_readImmediateErrorX   s     	%%e,..55u=;%2"xxh' &6<<&fll;.GH
 	$0$6r   c                   V ^8  d   QhRR/# r7   r   )r   s   "r   r   rG   t   s     * *$ *r   c                  a \         P                  P                  R4       V P                  \         P                  P                  R4       \        4       p. oV3R lVn        \         P                  ! RV4      p\        R\        P                  ! R4      R\        P                  ! \        4      .4      Vn	        VP                  RR4       VP                  4        V P                  VP                  R.4       V P                  SR.4       VP                  4        V P                  VP                  RR.4       V P                  SR.4       R# )	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.
c                 &   < S P                  R 4      # )T)rA   )refuseds   r   r[   >ErrorsTests.test_connectedReadImmediateError.<locals>.<lambda>   s    W^^D-Ar   Nr]   r^   z	127.0.0.1i'  Tr_   )r   r`   rA   rM   rN   r5   ra   rO   r   r)   r*   r	   r!   rP   rQ   r;   )r   rS   rT   rg   s   &  @r    test_connectedReadImmediateError,ErrorsTests.test_connectedReadImmediateErrort   s     	%%e,..55u=;%A"xxh'%6<<&fll;.GH
 	[$' 	$04&) 	$64&)r   c                   V ^8  d   QhRR/# r7   r   )r   s   "r   r   rG      s     
4 
4t 
4r   c                "   \        4       p\        P                  ! RV4      p\        R\        P
                  ! R4      .4      Vn        V P                  \        P
                  VP                  4       V P                  VP                  R.4       R# )z7
Socket reads with an unknown socket error are raised.
Ns   goodi)
r5   r   rO   r   r)   r*   assertRaisesrP   rQ   r;   rR   s   &  r   test_readUnknownError!ErrorsTests.test_readUnknownError   se     ;xxh' &wU0C&DE&,,4'3r   r   N)
r.   r/   r0   r1   r2   rU   rb   ri   rn   r3   r   r   r   rE   rE   =   s!    F,78*>
4 
4r   rE   )r2   
__future__r   r)   twisted.internetr   twisted.internet.protocolr   twisted.python.runtimer   twisted.trialr   errnor   r	   r   r5   SynchronousTestCaserE   r   r   r   <module>rw      sW    #    6 / "73! 6	   	 `4(.. `4r   