+
    üÐjÝ$  ã                   óî  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
Ht ^ RIHtHt ^ RIHt ^ RIHt  ! R	 R
]4      t ! R R]4      t ! R R]4      t ! R R]4      t]! 4       P1                  ]P3                  4       4       ]! 4       P1                  ]P3                  4       4       ]! 4       P1                  ]P3                  4       4       ]! 4       P1                  ]P3                  4       4       R# )aD  
Tests for implementations of L{IReactorSocket}.

Generally only tests for failure cases are found here.  Success cases for
this interface are tested elsewhere.  For example, the success case for
I{AF_INET} is in L{twisted.internet.test.test_tcp}, since that case should
behave exactly the same as L{IReactorTCP.listenTCP}.
N)Úverify)ÚUnsupportedAddressFamily)ÚIReactorSocket)ÚDatagramProtocolÚServerFactory)ÚReactorBuilderÚneedsRunningReactor)Úerr)Úplatformc                   ó0   a € ] tR t^t o Rt].tR tRtV t	R# )Ú&IReactorSocketVerificationTestsBuildera#  
Builder for testing L{IReactorSocket} implementations for required
methods and method signatures.

L{ReactorBuilder} already runs L{IReactorSocket.providedBy} to
ensure that these tests will only be run on reactor classes that
claim to implement L{IReactorSocket}.

These tests ensure that reactors which claim to provide the
L{IReactorSocket} interface actually have all the required methods
and that those methods have the expected number of arguments.

These tests will be skipped for reactors which do not claim to
provide L{IReactorSocket}.
c                óz   € V P                  4       pV P                  \        P                  ! \        V4      4       R# )zN
The reactor instance returned by C{buildReactor} provides
L{IReactorSocket}.
N)ÚbuildReactorÚ
assertTruer   ÚverifyObjectr   )ÚselfÚreactors   & ÚC/usr/lib/python3/dist-packages/twisted/internet/test/test_socket.pyÚtest_providerÚ4IReactorSocketVerificationTestsBuilder.test_provider-   s+   € ð
 ×#Ñ#Ó%ˆØ�‰œ×+Ò+¬N¸GÓDÖEó    © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚrequiredInterfacesr   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s!   ø‡ € ñð  )Ð)Ð÷Fð Fr   r   c                   ó<   a € ] tR t^6t o Rt].tR tR tR t	Rt
V tR# )Ú!AdoptStreamPortErrorsTestsBuildera[  
Builder for testing L{IReactorSocket.adoptStreamPort} implementations.

Generally only tests for failure cases are found here.  Success cases for
this interface are tested elsewhere.  For example, the success case for
I{AF_INET} is in L{twisted.internet.test.test_tcp}, since that case should
behave exactly the same as L{IReactorTCP.listenTCP}.
c                ó  € V P                  4       p\        P                  ! 4       pVP                  4       pVP                  4        V P	                  \        P
                  VP                  V\        P                  \        4       4      p\        P                  ! 4       '       d4   V P                  VP                  ^ ,          \        P                  4       R# V P                  VP                  ^ ,          \        P                  4       R# )z‹
An implementation of L{IReactorSocket.adoptStreamPort} raises
L{socket.error} if passed an integer which is not associated with a
socket.
N)r   ÚsocketÚfilenoÚcloseÚassertRaisesÚerrorÚadoptStreamPortÚAF_INETr   r
   Ú	isWindowsÚassertEqualÚargsÚerrnoÚWSAENOTSOCKÚEBADF©r   r   Úprober&   Úexcs   &    r   Útest_invalidDescriptorÚ8AdoptStreamPortErrorsTestsBuilder.test_invalidDescriptorB   s«   € ð ×#Ñ#Ó%ˆä—’“ˆØ—‘“ˆØ�‰Œà×ÑÜ�L‰LØ×#Ñ#ØÜ�N‰NÜ‹Oó
ˆô ×Ò×ÒØ×Ñ˜SŸX™X a�[¬%×*;Ñ*;Ö<à×Ñ˜SŸX™X a�[¬%¯+©+Ö6r   c                ó@  € V P                  4       p\        P                  ! 4       pVP                  R4       VP                  ^4       V P	                  VP
                  4       RpV P                  \        VP                  VP                  4       V\        4       4       R# )zŒ
An implementation of L{IReactorSocket.adoptStreamPort} raises
L{UnsupportedAddressFamily} if passed an address family it does not
support.
N©z	127.0.0.1é    é  )r   r%   ÚbindÚlistenÚ
addCleanupr'   r(   r   r*   r&   r   ©r   r   ÚportÚ	arbitrarys   &   r   Útest_invalidAddressFamilyÚ;AdoptStreamPortErrorsTestsBuilder.test_invalidAddressFamilyZ   su   € ð ×#Ñ#Ó%ˆä�}Š}‹ˆØ�	‰	Ð"Ô#Ø�‰�AŒØ�‰˜Ÿ
™
Ô#àˆ	à×ÑÜ$Ø×#Ñ#Ø�K‰K‹MØÜ‹Oö	
r   c                ó  a aaa€ S P                  4       o\        P                  ! 4       oS P                  SP                  4       SP	                  R4       SP                  ^4       SP                  R4       SP                  SP                  4       SP                  \        4       4      pVP                  4       oVV 3R lpSP                  V4       SP                  \        R4       \        SVV3R l4       SP!                  4        R# )a	  
When the L{IListeningPort} returned by
L{IReactorSocket.adoptStreamPort} is stopped using
C{stopListening}, the underlying socket is closed but not
shutdown.  This allows another process which still has a
reference to it to continue accepting connections over it.
Fc                 óZ  <€ SP                  \        P                  SP                  4      p\        P
                  ! 4       '       d4   SP                  VP                  ^ ,          \        P                  4       R# SP                  VP                  ^ ,          \        P                  4       R# )r9   N)r(   r%   r)   Úacceptr
   r,   r-   r.   r/   ÚWSAEWOULDBLOCKÚEAGAIN©Úignoredr4   Ú
portSocketr   s   & €€r   ÚstoppedÚFAdoptStreamPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.stoppedˆ   sj   ø€ ð ×#Ñ#¤F§L¡L°*×2CÑ2CÓDˆCÜ×!Ò!×#Ò#Ø× Ñ  §¡¨!¥¬e×.BÑ.BÖCà× Ñ  §¡¨!¥¬e¯l©lÖ;r   z"Failed to accept on original port.c                  ó.   <€ S P                  V3R  l4      # )c                 ó$   <€ SP                  4       # ©N©Ústop©rI   r   s   &€r   Ú<lambda>ÚYAdoptStreamPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>.<locals>.<lambda>–   ó   ø€ ¸7¿<¹<¼>r   ©ÚaddCallback©Údr   s   €€r   rS   ÚGAdoptStreamPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>–   ó   ø€ ˜QŸ]™]Ô+IÔJr   Nr8   )r   r%   r=   r'   r;   r<   Úsetblockingr*   r&   Úfamilyr   ÚstopListeningrW   Ú
addErrbackr	   r   Úrun©r   r?   rK   rY   rJ   r   s   f  @@@r   Útest_stopOnlyClosesÚ5AdoptStreamPortErrorsTestsBuilder.test_stopOnlyClosesq   sÎ   û€ ð ×#Ñ#Ó%ˆä—]’]“_ˆ
Ø�‰˜
×(Ñ(Ô)à�‰Ð(Ô)Ø×Ñ˜!ÔØ×Ñ˜uÔ%ð ×&Ñ&Ø×ÑÓ ×!2Ñ!2´M³Oó
ˆð ×ÑÓ ˆö	<ð 	
�‰�gÔØ	�‰”SÐ>Ô?äØÕJô	
ð 	�‰Žr   r   N©r   r   r   r   r   r   r   r5   rA   rb   r   r   r    s   @r   r#   r#   6   s)   ø‡ € ñð )Ð)Ðò7ò0
÷.(ð (r   r#   c                   ó0   a € ] tR t^œt o Rt].tR tRtV t	R# )Ú'AdoptStreamConnectionErrorsTestsBuilderaa  
Builder for testing L{IReactorSocket.adoptStreamConnection}
implementations.

Generally only tests for failure cases are found here.  Success cases for
this interface are tested elsewhere.  For example, the success case for
I{AF_INET} is in L{twisted.internet.test.test_tcp}, since that case should
behave exactly the same as L{IReactorTCP.listenTCP}.
c                óü   € V P                  4       p\        P                  ! 4       pV P                  VP                  4       RpV P	                  \
        VP                  VP                  4       V\        4       4       R# )z’
An implementation of L{IReactorSocket.adoptStreamConnection} raises
L{UnsupportedAddressFamily} if passed an address family it does not
support.
Nr:   )	r   r%   r=   r'   r(   r   ÚadoptStreamConnectionr&   r   )r   r   Ú
connectionr@   s   &   r   rA   ÚAAdoptStreamConnectionErrorsTestsBuilder.test_invalidAddressFamily©   sb   € ð ×#Ñ#Ó%ˆä—]’]“_ˆ
Ø�‰˜
×(Ñ(Ô)àˆ	à×ÑÜ$Ø×)Ñ)Ø×ÑÓØÜ‹Oö	
r   r   N)
r   r   r   r   r   r   r   rA   r   r   r    s   @r   rf   rf   œ   s   ø‡ € ñð )Ð)Ð÷
ð 
r   rf   c                   ó<   a € ] tR t^¿t o Rt].tR tR tR t	Rt
V tR# )Ú#AdoptDatagramPortErrorsTestsBuilderzJ
Builder for testing L{IReactorSocket.adoptDatagramPort} implementations.
c                ó  € V P                  4       p\        P                  ! 4       pVP                  4       pVP                  4        V P	                  \        P
                  VP                  V\        P                  \        4       4      p\        P                  ! 4       '       d4   V P                  VP                  ^ ,          \        P                  4       R# V P                  VP                  ^ ,          \        P                  4       R# )z�
An implementation of L{IReactorSocket.adoptDatagramPort} raises
L{socket.error} if passed an integer which is not associated with a
socket.
N)r   r%   r&   r'   r(   r)   ÚadoptDatagramPortr+   r   r
   r,   r-   r.   r/   r0   r1   r2   s   &    r   r5   Ú:AdoptDatagramPortErrorsTestsBuilder.test_invalidDescriptorÆ   s¬   € ð ×#Ñ#Ó%ˆä—’“ˆØ—‘“ˆØ�‰Œà×ÑÜ�L‰LØ×%Ñ%ØÜ�N‰NÜÓó
ˆô ×Ò×ÒØ×Ñ˜SŸX™X a�[¬%×*;Ñ*;Ö<à×Ñ˜SŸX™X a�[¬%¯+©+Ö6r   c                ó8  € V P                  4       p\        P                  ! \        P                  \        P                  4      pV P	                  VP
                  4       RpV P                  \        VP                  VP                  4       V\        4       4       R# )zŽ
An implementation of L{IReactorSocket.adoptDatagramPort} raises
L{UnsupportedAddressFamily} if passed an address family it does not
support.
Nr:   )r   r%   r+   Ú
SOCK_DGRAMr=   r'   r(   r   rn   r&   r   r>   s   &   r   rA   Ú=AdoptDatagramPortErrorsTestsBuilder.test_invalidAddressFamilyÞ   sm   € ð ×#Ñ#Ó%ˆä�}Š}œVŸ^™^¬V×->Ñ->Ó?ˆØ�‰˜Ÿ
™
Ô#àˆ	à×ÑÜ$Ø×%Ñ%Ø�K‰K‹MØÜÓö	
r   c                ó2  a aaa€ S P                  4       o\        P                  ! \        P                  \        P                  4      oS P	                  SP
                  4       SP                  R4       SP                  R4       SP                  SP                  4       SP                  \        4       4      pVP                  4       oVV 3R lpSP                  V4       SP                  \        R4       \!        SVV3R l4       SP#                  4        R# )a  
When the L{IListeningPort} returned by
L{IReactorSocket.adoptDatagramPort} is stopped using
C{stopListening}, the underlying socket is closed but not
shutdown.  This allows another process which still has a
reference to it to continue reading and writing to it.
Fc                 ó\  <€ SP                  \        P                  SP                  ^4      p\        P
                  ! 4       '       d4   SP                  VP                  ^ ,          \        P                  4       R# SP                  VP                  ^ ,          \        P                  4       R# )é   N)r(   r%   r)   Úrecvfromr
   r,   r-   r.   r/   rF   rG   rH   s   & €€r   rK   ÚHAdoptDatagramPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.stopped	  sl   ø€ ð ×#Ñ#¤F§L¡L°*×2EÑ2EÀqÓIˆCÜ×!Ò!×#Ò#Ø× Ñ  §¡¨!¥¬e×.BÑ.BÖCà× Ñ  §¡¨!¥¬e¯l©lÖ;r   z Failed to read on original port.c                  ó.   <€ S P                  V3R  l4      # )c                 ó$   <€ SP                  4       # rO   rP   rR   s   &€r   rS   Ú[AdoptDatagramPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>.<locals>.<lambda>  rU   r   rV   rX   s   €€r   rS   ÚIAdoptDatagramPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>  r[   r   Nr8   )r   r%   r+   rq   r=   r'   r;   r\   rn   r&   r]   r   r^   rW   r_   r	   r   r`   ra   s   f  @@@r   rb   Ú7AdoptDatagramPortErrorsTestsBuilder.test_stopOnlyClosesó   sÑ   û€ ð ×#Ñ#Ó%ˆä—]’]¤6§>¡>´6×3DÑ3DÓEˆ
Ø�‰˜
×(Ñ(Ô)à�‰Ð(Ô)Ø×Ñ˜uÔ%ð ×(Ñ(Ø×ÑÓ ×!2Ñ!2Ô4DÓ4Fó
ˆð ×ÑÓ ˆö	<ð 	
�‰�gÔØ	�‰”SÐ<Ô=äØÕJô	
ð 	�‰Žr   r   Nrd   r    s   @r   rl   rl   ¿   s)   ø‡ € ñð )Ð)Ðò7ò0
÷*&ð &r   rl   )r   r/   r%   Úzope.interfacer   Útwisted.internet.errorr   Útwisted.internet.interfacesr   Útwisted.internet.protocolr   r   Ú#twisted.internet.test.reactormixinsr   r   Útwisted.python.logr	   Útwisted.python.runtimer
   r   r#   rf   rl   ÚglobalsÚupdateÚmakeTestCaseClassesr   r   r   Ú<module>r‡      sÊ   ðñó Û å !å ;Ý 6ß Eß SÝ "Ý +ôF¨^ô Fô8c¨ô côL 
¨nô  
ôFZ¨.ô Zñz ƒ	× Ñ Ð7×KÑKÓMÔ NÙ ƒ	× Ñ Ð2×FÑFÓHÔ IÙ ƒ	× Ñ Ð8×LÑLÓNÔ OÙ ƒ	× Ñ Ð4×HÑHÓJÖ Kr   