+
    üÐ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Ð :ð 1¸tñ 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   € ð �l‰l×Ñ˜qÓ!ˆÜ�cœ6Ÿ<™<×(Ò(ØˆIØ�DˆyÐ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Ñ5°uÔ=ä“;ˆÜ�xŠx˜˜hÓ'ˆô &Ø˜¤§¢¨UÓ 3°V¼V¿\º\È%Ó=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Ñ5°uÔ=ä“;ˆá%2ˆÔ"ä�xŠx˜˜hÓ'ˆô &Ø”6—<’< Ó&¨¬f¯lªl¼;Ó.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Ñ5°uÔ=ä“;ˆØˆÜ%AˆÔ"ä�xŠx˜˜hÓ'ˆÜ%Ø”6—<’< Ó&¨¬f¯lªl¼;Ó.GÐHó
ˆŒð 	�‰�[ $Ô'ð 	�‰ŒØ×Ñ˜Ÿ™¨$¨Ô0Ø×Ñ˜ 4 &Ô)ð 	�‰ŒØ×Ñ˜Ÿ™¨$°¨Ô6Ø×Ñ˜ 4 &Ö)r   c               ó   € V ^8„  d   QhRR/# r7   r   )r   s   "r   r   rG   “   s   € ÷ 
4ñ 
4 tñ 
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   € ô “;ˆÜ�xŠx˜˜hÓ'ˆô & w´·²¸UÓ0CÐ&DÓEˆŒØ×Ñœ&Ÿ,™,¨¯©Ô4Ø×Ñ˜Ÿ™¨'¨Ö3r   r   N)
r.   r/   r0   r1   r2   rU   rb   ri   rn   r3   r   r   r   rE   rE   =   s!   † ñõFõ,7õ8*÷>
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   