+
    üÐjô™  ã                   óˆ  € R t ^ RIHt ^ RIHtHtHtHtHt ^ RI	H
t
 ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtHtHtHtHt ^ R	IHt  ^ R
IHt ]t^ RI H!t!H"t" ^ RI#H$t$H%t%H&t&H't'H(t( ^ RI)H*t* ^ RI+H,t,H-t-H.t. ^ RI/H0t0H1t1 ^ RI2H3t3H4t4H5t5 ^ RI6H7t7H8t8H9t9H:t: ^ RI;H<t<H=t=H>t> ^ RI?H@t@ ^ RIAHBtBHCtCHDtDHEtEHFtF ^ RIGHHtH ^ RIIHJtJHKtKHLtLHMtMHNtN ^ RIOHPtP ^ RIQHRtR ^ RISHTtT ^ RIUHVtVHWtWHXtX ^ RIYHZtZ ^ RI[H\t\H]t] ^ RI^H_t_ ^ RI`Hata ]Z! R 4      tbR!tc]Z! R 4      e   R"tc ! R# R$4      tdR% te ! R& R']D4      tf ! R( R)]B4      tg]"! ]74       ! R* R+]B4      4       th ! R, R-]d]H]C4      ti ! R. R/]d]H4      tj ! R0 R14      tk ! R2 R34      tl ! R4 R54      tm ! R6 R7]l]m]H]M4      tn ! R8 R9]k]m]H]M4      to ! R: R;]N]H4      tp]q! 4       På                  ]iPç                  4       4       ]q! 4       På                  ]jPç                  4       4       ]q! 4       På                  ]nPç                  4       4       ]q! 4       På                  ]oPç                  4       4       ]q! 4       På                  ]pPç                  4       4        ! R< R=]H]E4      tt]q! 4       På                  ]tPç                  4       4       ]! ]]R>8g  R?4       ! R@ RA]a4      4       tuR#   ] d    Rt ELfi ; i)Bz/
Tests for implementations of L{IReactorUNIX}.
)Úmd5)ÚcloseÚfstatÚstatÚunlinkÚurandom)Úpformat)ÚAF_INETÚSOCK_STREAMÚ
SOL_SOCKETÚsocket)ÚS_IMODE)Úpack)ÚmkstempÚmktemp)ÚAnyÚCallableÚOptionalÚSequenceÚType)ÚskipIf)ÚAF_UNIXN)Ú	InterfaceÚimplementer)ÚbaseÚerrorÚ
interfacesÚreactorÚtcp)ÚUNIXAddress)ÚDeferredÚfailÚgatherResults)ÚUNIXClientEndpointÚUNIXServerEndpoint)ÚCannotListenErrorÚConnectionClosedÚFileDescriptorOverrun)ÚIFileDescriptorReceiverÚIReactorFDSetÚIReactorSocketÚIReactorUNIX)ÚClientFactoryÚDatagramProtocolÚServerFactory)ÚLoopingCall)ÚConnectableProtocolÚConnectionTestsMixinÚEndpointCreatorÚStreamClientTestsMixinÚrunProtocolsWithReactor)ÚReactorBuilder)ÚClosingFactoryÚMyClientFactoryÚMyServerFactoryÚStreamTransportTestsMixinÚWriteSequenceTestsMixin)ÚnativeString)ÚFailure)Ú_coerceToFilesystemEncoding)ÚaddObserverÚerrÚremoveObserver)ÚrequireModule)ÚplatformÚplatformType©ÚAccumulatingProtocol)ÚTestCaseztwisted.python.sendmsgÚ z>sendmsg extension unavailable, extended UNIX features disabledc                   ó*   a € ] tR t^Mt o RtR tRtV tR# )ÚUNIXFamilyMixinzC
Test-helper defining mixin for things related to AF_UNIX sockets.
c                óÌ   € RpV P                  4       p\        WQ4      ! W#VR7      pVP                  4        V P                  \	        \        V4      P                  4      V4       R# )ze
Assert that the mode of the created unix socket is set to the mode
specified to the reactor method.
i€  )ÚmodeN)ÚbuildReactorÚgetattrÚstopListeningÚassertEqualr   r   Úst_mode)ÚselfÚ
methodNameÚpathÚfactoryrK   r   ÚunixPorts   &&&&   ÚA/usr/lib/python3/dist-packages/twisted/internet/test/test_unix.pyÚ	_modeTestÚUNIXFamilyMixin._modeTestR   sS   € ð
 ˆØ×#Ñ#Ó%ˆÜ˜7Ô/°ÀDÔIˆØ×ÑÔ Ø×Ñœ¤ d£×!3Ñ!3Ó4°dÖ;ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rW   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @rV   rI   rI   M   s   ø‡ € ñ÷	<ð 	<rY   rI   c                óF   € \        \        ^d4      4      P                  4       # )zA
Return a new, unique abstract namespace path to be listened on.
)r   r   Ú	hexdigest)Úcases   &rV   Ú_abstractPathrg   ^   s   € ô Œw�s‹|Ó×&Ñ&Ó(Ð(rY   c                   óV   a € ] tR t^et o Rt]P                  3tR tR t	V 3R lt
RtV tR# )ÚUNIXCreatorz 
Create UNIX socket end points.
c                ó2   € \        RRR7      p\        W4      # )z#
Construct a UNIX server endpoint.
ú.sockÚ.©ÚsuffixÚdir)r   r$   )rQ   r   rS   s   && rV   ÚserverÚUNIXCreator.serverl   s   € ô
 ˜W¨#Ô.ˆÜ! 'Ó0Ð0rY   c                ó,   € \        WP                  4      # )z#
Construct a UNIX client endpoint.
)r#   Úname)rQ   r   ÚserverAddresss   &&&rV   ÚclientÚUNIXCreator.clientt   s   € ô " '×+=Ñ+=Ó>Ð>rY   c                óV   <€ V ^8„  d   Qh/ S[ S[S[S[,          ,          ,          ;R&   # ©é   ÚrequiredInterfaces©r   r   r   r   )Úformatrc   s   "€rV   Ú__annotate__ÚUNIXCreator.__annotate__e   s    ø‡ ‚ ñ
 !¡©$©y­/Õ!:Õ;ÑXò rY   rZ   N)r[   r\   r]   r^   r_   r   r+   rz   rp   ru   Ú__annotate_func__r`   ra   rb   s   @rV   ri   ri   e   s.   ø‡ € ñð @J×?VÑ?VÐ>XÐò1ò?÷ ƒ rY   ri   c                   ó:   a € ] tR t^{t o RtRtR tR tR tRt	V t
R# )ÚSendFileDescriptorzÒ
L{SendFileDescriptorAndBytes} sends a file descriptor and optionally some
normal bytes and then closes its connection.

@ivar reason: The reason the connection was lost, after C{connectionLost}
    is called.
Nc                ó   € Wn         W n        R# )z¸
@param fd: A C{int} giving a file descriptor to send over the
    connection.

@param data: A C{str} giving data to send over the connection, or
    L{None} if no data is to be sent.
N)ÚfdÚdata)rQ   rƒ   r„   s   &&&rV   Ú__init__ÚSendFileDescriptor.__init__†   s   € ð ŒØŽ	rY   c                óò   € V P                   P                  V P                  4       V P                  '       d&   V P                   P	                  V P                  4       V P                   P                  4        R# )zV
Send C{self.fd} and, if it is not L{None}, C{self.data}.  Then close the
connection.
N)Ú	transportÚsendFileDescriptorrƒ   r„   ÚwriteÚloseConnection©rQ   s   &rV   ÚconnectionMadeÚ!SendFileDescriptor.connectionMade‘   sI   € ð
 	�‰×)Ñ)¨$¯'©'Ô2Ø�9�9ˆ9Ø�N‰N× Ñ  §¡Ô+Ø�‰×%Ñ%Ö'rY   c                ó>   € \         P                  ! W4       Wn        R # ©N)r0   ÚconnectionLostÚreason©rQ   r’   s   &&rV   r‘   Ú!SendFileDescriptor.connectionLost›   s   € Ü×*Ò*¨4Ô8ØŽrY   )r„   rƒ   r’   )r[   r\   r]   r^   r_   r’   r…   r�   r‘   r`   ra   rb   s   @rV   r�   r�   {   s%   ø‡ € ñð €Fò	ò(÷ð rY   r�   c                   óD   a € ] tR t^ t o RtRtRtR tR tR t	R t
RtV tR# )ÚReceiveFileDescriptora]  
L{ReceiveFileDescriptor} provides an API for waiting for file descriptors to
be received.

@ivar reason: The reason the connection was lost, after C{connectionLost}
    is called.

@ivar waiting: A L{Deferred} which fires with a file descriptor once one is
    received, or with a failure if the connection is lost with no descriptor
    arriving.
Nc                ó~   € V P                   f   \        4       V n        V P                  # \        V P                   4      # )z�
Return a L{Deferred} which will fire with the next file descriptor
received, or with a failure if the connection is or has already been
lost.
)r’   r    Úwaitingr!   rŒ   s   &rV   ÚwaitForDescriptorÚ'ReceiveFileDescriptor.waitForDescriptor±   s0   € ð �;‰;ÒÜ#›:ˆDŒLØ—<‘<Ðä˜Ÿ™Ó$Ð$rY   c                óJ   € V P                   P                  V4       RV n         R# )zi
Fire the waiting Deferred, initialized by C{waitForDescriptor}, with the
file descriptor just received.
N)r˜   Úcallback)rQ   Ú
descriptors   &&rV   ÚfileDescriptorReceivedÚ,ReceiveFileDescriptor.fileDescriptorReceived½   s   € ð
 	�‰×Ñ˜jÔ)ØˆŽrY   c           	     ó˜   € V P                   e<   V P                   P                  \        \        RV: R24      4      4       RV n         R# R# )a/  
Fail the waiting Deferred, if it has not already been fired by
C{fileDescriptorReceived}.  The bytes sent along with a file descriptor
are guaranteed to be delivered to the protocol's C{dataReceived} method
only after the file descriptor has been delivered to the protocol's
C{fileDescriptorReceived}.
NzReceived bytes (z) before descriptor.)r˜   Úerrbackr<   Ú	Exception©rQ   r„   s   &&rV   ÚdataReceivedÚ"ReceiveFileDescriptor.dataReceivedÅ   sF   € ð �<‰<Ò#Ø�L‰L× Ñ Üœ	Ð$4°T±HÐ<PÐ"QÓRÓSôð  ˆDŽLñ	 $rY   c                óž   € \         P                  ! W4       V P                  e#   V P                  P                  V4       RV n        Wn        R# )zR
Fail the waiting Deferred, initialized by C{waitForDescriptor}, if there
is one.
N)r0   r‘   r˜   r¡   r’   r“   s   &&rV   r‘   Ú$ReceiveFileDescriptor.connectionLostÓ   s:   € ô
 	×*Ò*¨4Ô8Ø�<‰<Ò#Ø�L‰L× Ñ  Ô(ØˆDŒLØŽrY   )r’   r˜   )r[   r\   r]   r^   r_   r’   r˜   r™   rž   r¤   r‘   r`   ra   rb   s   @rV   r–   r–       s/   ø‡ € ñ
ð €FØ€Gò
%òò ÷	ð 	rY   r–   c                   óH  a € ] tR t^ßt o Rt]3t]! 4       tR t	]
! ]P                  ! 4       '       * R4      R 4       tR t]
! ]P                  ! 4       '       * R4      R 4       tR t]
! ]'       * ]4      R 4       t]
! R	R
4      R 4       t]
! ]'       * ]4      R 4       tR t]
! ]'       * ]4      R 4       t]
! ]P0                  ! 4       R4      ]
! ]'       * ]4      R 4       4       t]
! ]'       * ]4      R 4       t]
! ]'       * ]4      R 4       t]
! ]'       * ]4      R 4       tRtV tR# )ÚUNIXTestsBuilderz5
Builder defining tests relating to L{IReactorUNIX}.
c                óX   € V P                  RV P                  4       \        4       4       R# )z[
The UNIX socket created by L{IReactorUNIX.listenUNIX} is created with
the mode specified.
Ú
listenUNIXN)rW   r   r.   rŒ   s   &rV   Ú	test_modeÚUNIXTestsBuilder.test_modeè   s   € ð
 	�‰�| T§[¡[£]´M³OÖDrY   ú8Abstract namespace UNIX sockets only supported on Linux.c                óà   € \        V 4      pV P                  4       pVP                  ! RV,           \        4       4      pV P	                  VP                  4       \        RV,           4      4       R# )z•
On Linux, a UNIX socket path may begin with C{' '} to indicate
a socket in the abstract namespace.  L{IReactorUNIX.listenUNIX}
accepts such a path.
Ú N)rg   rL   r«   r.   rO   ÚgetHostr   ©rQ   rS   r   Úports   &   rV   Ú#test_listenOnLinuxAbstractNamespaceÚ4UNIXTestsBuilder.test_listenOnLinuxAbstractNamespaceï   sS   € ô ˜TÓ"ˆØ×#Ñ#Ó%ˆØ×!Ò! $¨¥+¬}«Ó?ˆØ×Ñ˜Ÿ™›¬°T¸Dµ[Ó)AÖBrY   c                ó  € R pV P                  \        P                  RV4       V P                  4       pV P	                  \
        4      ;_uu_ 4        VP                  ! R\        4       4       RRR4       R#   + '       g   i     R# ; i)z}
L{IReactorUNIX.listenUNIX} raises L{CannotListenError} if the
underlying port's createInternetSocket raises a socket error.
c                 ó   € \        R 4      h)z FakeBasePort forced socket.error)ÚOSErrorrŒ   s   &rV   ÚraiseSocketErrorÚ=UNIXTestsBuilder.test_listenFailure.<locals>.raiseSocketError  s   € ÜÐ<Ó=Ð=rY   ÚcreateInternetSocketznot-usedN)Úpatchr   ÚBasePortrL   ÚassertRaisesr%   r«   r.   )rQ   r¹   r   s   &  rV   Útest_listenFailureÚ#UNIXTestsBuilder.test_listenFailureÿ   s`   € ò	>ð 	�
‰
”4—=‘=Ð"8Ð:JÔKØ×#Ñ#Ó%ˆØ×ÑÔ0×1Õ1Ø×Ò˜z¬=«?Ô;÷ 2×1×1Ò1ús   ÁA8Á8B		c                óà   € \        V 4      pV P                  4       pVP                  ! RV,           \        4       4      pV P	                  VP                  4       \        RV,           4      4       R# )zK
L{IReactorUNIX.connectUNIX} also accepts a Linux abstract namespace
path.
r°   N)rg   rL   ÚconnectUNIXr,   rO   ÚgetDestinationr   )rQ   rS   r   Ú	connectors   &   rV   Ú$test_connectToLinuxAbstractNamespaceÚ5UNIXTestsBuilder.test_connectToLinuxAbstractNamespace  sV   € ô ˜TÓ"ˆØ×#Ñ#Ó%ˆØ×'Ò'¨¨t­´]³_ÓEˆ	Ø×Ñ˜×1Ñ1Ó3´[ÀÈÅÓ5MÖNrY   c                ó<  €  ! R R\         4      pV! 4       pV! 4       p\        WW0P                  4       V P                  VP                  R,          VP                  R,          4       V P                  VP                  R,          VP                  R,          4       R# )zž
A client's transport's C{getHost} and C{getPeer} return L{UNIXAddress}
instances which have the filesystem path of the host and peer ends of
the connection.
c                   ó&   a € ] tR tRt o R tRtV tR# )Ú4UNIXTestsBuilder.test_addresses.<locals>.SaveAddressi"  c                ó‚   € \        VP                  4       VP                  4       R 7      V n        VP	                  4        R# ))ÚhostÚpeerN)Údictr±   ÚgetPeerÚ	addressesr‹   )rQ   rˆ   s   &&rV   ÚmakeConnectionÚCUNIXTestsBuilder.test_addresses.<locals>.SaveAddress.makeConnection#  s3   € Ü!%Ø"×*Ñ*Ó,°9×3DÑ3DÓ3Fô"�”ð ×(Ñ(Ö*rY   )rÏ   N)r[   r\   r]   r^   rÐ   r`   ra   rb   s   @rV   ÚSaveAddressrÉ   "  s   ø‡ € ÷+ð +rY   rÒ   rË   rÌ   N)r0   r4   Ú	endpointsrO   rÏ   )rQ   rÒ   rp   ru   s   &   rV   Útest_addressesÚUNIXTestsBuilder.test_addresses  sy   € ô	+Ô-ô 	+ñ “ˆÙ“ˆä ¨f·n±nÔEà×Ñ˜×)Ñ)¨&Õ1°6×3CÑ3CÀFÕ3KÔLØ×Ñ˜×)Ñ)¨&Õ1°6×3CÑ3CÀFÕ3KÖLrY   c                óp  a aaa€ ^ RI Ho \        4       oSP                  R4       \        SP	                  4       R4      o\        4       pVP                  4       pVVV 3R lpVP                  V4       VP                  \        R4       VP                  V3R l4       \        S SVS P                  4       R# )zŒ
L{IUNIXTransport.sendFileDescriptor} accepts an integer file descriptor
and sends a copy of it to the process reading from the connection.
)Úfromfdó   junkc                 óú   <€ S! V \         \        4      p\        V 4       SP                  SP	                  4       VP	                  4       4       SP                  SP                  4       VP                  4       4       R # r�   )r	   r
   r   rO   ÚgetsocknameÚassertNotEqualÚfileno)r�   Úreceivedr×   ÚsrQ   s   & €€€rV   ÚcheckDescriptorÚAUNIXTestsBuilder.test_sendFileDescriptor.<locals>.checkDescriptor@  sY   ø€ Ù˜j¬'´;Ó?ˆHä�*Ôð ×Ñ˜QŸ]™]›_¨h×.BÑ.BÓ.DÔEð
 ×Ñ §¡£
¨H¯O©OÓ,=Ö>rY   z-Sending file descriptor encountered a problemc                 ó8   <€ SP                   P                  4       # r�   ©rˆ   r‹   ©Úignoredrp   s   &€rV   Ú<lambda>Ú:UNIXTestsBuilder.test_sendFileDescriptor.<locals>.<lambda>P  ó   ø€  &×"2Ñ"2×"AÑ"AÔ"CrY   N)rG   é    )r   r×   Úbindr�   rÜ   r–   r™   ÚaddCallbackÚ
addErrbackr?   ÚaddBothr4   rÓ   )rQ   ru   Údrß   r×   rÞ   rp   s   f   @@@rV   Útest_sendFileDescriptorÚ(UNIXTestsBuilder.test_sendFileDescriptor1  sƒ   û€ õ 	"ä‹HˆØ	�‰ˆwŒÜ# A§H¡H£J°Ó8ˆä&Ó(ˆØ×$Ñ$Ó&ˆ÷	?ð 	
�‰�oÔ&Ø	�‰”SÐIÔJØ	�	‰	ÔCÔDä  f¨f°d·n±nÖErY   Tzfails under LXC in Debian CIc                óÎ   €  ! R R\         4      p ! R R\         4      pV! 4       pV! 4       pWCn        \        WW@P                  4       V P	                  VP
                  R4       R# )zm
If a L{IUNIXTransport.sendFileDescriptor} call fills up
the send buffer, any registered producer is paused.
c                   ó&   a € ] tR tRt o R tRtV tR# )ÚSUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.DoesNotReadi[  c                ó:   € V P                   P                  4        R # r�   )rˆ   ÚpauseProducingrŒ   s   &rV   r�   ÚbUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.DoesNotRead.connectionMade\  s   € Ø—‘×-Ñ-Ö/rY   rZ   N©r[   r\   r]   r^   r�   r`   ra   rb   s   @rV   ÚDoesNotReadrò   [  s   ø‡ € ÷0ð 0rY   r÷   c                   óB   a € ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
Ú`UNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptorsi_  Fc                ó2  a € \        4       S n         S P                  P                  S R 4       V 3R lp\        V4      S n        S P                  P
                  S P                  n        S P                  P                  ^ 4      P                  \        R4       R# )Tc                  ó¤   <€ S P                   P                  S P                  P                  4       4       S P                   P	                  R 4       R# )ó   xN)rˆ   r‰   r   rÜ   rŠ   rŒ   s   €rV   ÚsenderÚUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.connectionMade.<locals>.senderf  s4   ø€ Ø—N‘N×5Ñ5°d·k±k×6HÑ6HÓ6JÔKØ—N‘N×(Ñ(¨Ö.rY   zSend loop failureN)
r   rˆ   ÚregisterProducerr/   Útaskr   ÚclockÚstartrë   r?   )rQ   rý   s   f rV   r�   ÚoUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.connectionMadeb  sf   ø€ Ü$›h�”Ø—‘×/Ñ/°°dÔ;õ/ô (¨Ó/�”	Ø"&§.¡.×"8Ñ"8�—	‘	”Ø—	‘	—‘ Ó"×-Ñ-¬cÐ3FÖGrY   c                ó&   € V P                  4        R # r�   ©Ú_disconnectrŒ   s   &rV   ÚstopProducingÚnUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.stopProducingn  ó   € Ø× Ñ Ö"rY   c                ó&   € V P                  4        R # r�   r  rŒ   s   &rV   ÚresumeProducingÚpUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.resumeProducingq  r	  rY   c                óh   € R V n         V P                  P                  4        V P                  4        R# )TN)Úpausedrˆ   ÚunregisterProducerr  rŒ   s   &rV   rô   ÚoUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.pauseProducingt  s%   € Ø"�”Ø—‘×1Ñ1Ô3Ø× Ñ Ö"rY   c                ó¶   € V P                   P                  4        V P                  P                  4        V P                  P                  P                  4        R # r�   )r   Ústoprˆ   ÚabortConnectionÚotherrŒ   s   &rV   r  ÚlUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors._disconnecty  s6   € Ø—	‘	—‘Ô Ø—‘×.Ñ.Ô0Ø—
‘
×$Ñ$×4Ñ4Ö6rY   )r  r   r   N)r[   r\   r]   r^   r  r�   r  r  rô   r  r`   ra   rb   s   @rV   ÚSendsManyFileDescriptorsrù   _  s)   ø‡ € ØˆFò
Hò#ò#ò#÷
7ð 7rY   r  z*sendFileDescriptor producer was not pausedN)r0   r  r4   rÓ   Ú
assertTruer  )rQ   r÷   r  rp   ru   s   &    rV   Ú-test_sendFileDescriptorTriggersPauseProducingÚ>UNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducingT  sS   € ô	0Ô-ô 	0ô	7Ô':ô 	7ñ> *Ó+ˆÙ“ˆØŒÜ ¨f·n±nÔEà�‰˜Ÿ™Ð'SÖTrY   c                óÜ  a€ \        4       p\        VP                  4       R4      o\        4       p. pVP	                  4       pVP                  VP                  4       VP                  V3R l4       \        V SW P                  4       V P                  V^ ,          \        4       V^ ,          P                  \        4       V P                  SP                  P                  \        4       R# )a7  
If L{IUNIXTransport.sendFileDescriptor} is used to queue a greater
number of file descriptors than the number of bytes sent using
L{ITransport.write}, the connection is closed and the protocol connected
to the transport has its C{connectionLost} method called with a failure
wrapping L{FileDescriptorOverrun}.
Nc                 ó8   <€ SP                   P                  4       # r�   râ   rã   s   &€rV   rå   Ú=UNIXTestsBuilder.test_fileDescriptorOverrun.<locals>.<lambda>•  rç   rY   )r   r�   rÜ   r–   r™   rì   Úappendr4   rÓ   ÚassertIsInstancer<   Útrapr&   r’   Úvaluer'   )rQ   Úcargoru   Úresultrí   rp   s   &    @rV   Útest_fileDescriptorOverrunÚ+UNIXTestsBuilder.test_fileDescriptorOverrun…  s¦   ø€ ô “ˆÜ# E§L¡L£N°DÓ9ˆä&Ó(ˆØˆØ×$Ñ$Ó&ˆØ	�	‰	�&—-‘-Ô Ø	�	‰	ÔCÔDä  f¨f·n±nÔEà×Ñ˜f Q�i¬Ô1Øˆq�	�‰Ô'Ô(Ø×Ñ˜fŸm™m×1Ñ1Ô3HÖIrY   c                ót  a€ ^ RI Hp ^ RIHp ^ RIHp R o\        \        4       ! V3R lR\        4      4       p ! R RV4      pV! \        \        4      w  rxV P                  VP                  4       V P                  VP                  4       V! 4       p	V! W‰4      p
\        4       w  r¼\        4       w  rÞV P                  \        V4       V P                  \        V4       R	pW½.pV! V4      w  ppV! WV4       V
P                  4        V P!                  \#        V	P$                  4      V4       V P'                  \)        V4      P+                  \)        V	P$                  4      4      4       V	P$                  '       d6   V Uu. uF  pS! V4      NK  	  ppV P!                  VV	P,                  4       R
# R
# u upi )a9  
Drive _SendmsgMixin via sendmsg socket calls to check that
L{IFileDescriptorReceiver.fileDescriptorReceived} is called once
for each file descriptor received in the ancillary messages.

@param ancillaryPacker: A callable that will be given a list of
    two file descriptors and should return a two-tuple where:
    The first item is an iterable of zero or more (cmsg_level,
    cmsg_type, cmsg_data) tuples in the same order as the given
    list for actual sending via sendmsg; the second item is an
    integer indicating the expected number of FDs to be received.
©Ú
socketpair)Ú_SendmsgMixin©Úsendmsgc                 óH   € \        V 4      pVP                  VP                  3# r�   )r   Úst_devÚst_ino)rƒ   Úfss   & rV   ÚdeviceInodeTupleÚTUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.deviceInodeTuple¿  s   € Ü�r“ˆBØ—I‘I˜rŸy™yÐ)Ð)rY   c                   ó4   <a € ] tR tRt o R tV3R ltRtV tR# )ÚPUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeProtocoliÃ  c                ó"   € . V n         . V n        R # r�   )ÚfdsÚdeviceInodesReceivedrŒ   s   &rV   r…   ÚYUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeProtocol.__init__Å  s   € Ø�”Ø,.�Ö)rY   c                ó–   <€ V P                   P                  V4       V P                  P                  S! V4      4       \        V4       R # r�   )r4  r  r5  r   )rQ   rƒ   r/  s   &&€rV   rž   ÚgUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeProtocol.fileDescriptorReceivedÉ  s4   ø€ Ø—‘—‘ Ô#Ø×)Ñ)×0Ñ0Ñ1AÀ"Ó1EÔFÜ�b–	rY   )r5  r4  N)r[   r\   r]   r^   r…   rž   r`   ra   )rc   r/  s   @€rV   ÚFakeProtocolr2  Ã  s   ù‡ € ò/÷ó rY   r9  c                   óB   a € ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
ÚPUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiveriÎ  é   c                ó   € Wn         W n        R # r�   )r   Úprotocol)rQ   ÚsktÚprotos   &&&rV   r…   ÚYUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver.__init__Ñ  s   € Ø!”Ø %–rY   c                ó   € R # r�   rZ   r£   s   &&rV   Ú_dataReceivedÚ^UNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver._dataReceivedÕ  ó   € ÙrY   c                ó   € R # r�   rZ   rŒ   s   &rV   r±   ÚXUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver.getHostØ  rE  rY   c                ó   € R # r�   rZ   rŒ   s   &rV   rÎ   ÚXUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver.getPeerÛ  rE  rY   c                ó   € R # r�   rZ   )rQ   Úos   &&rV   Ú_getLogPrefixÚ^UNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver._getLogPrefixÞ  rE  rY   )r>  r   N)r[   r\   r]   r^   Ú
bufferSizer…   rC  r±   rÎ   rL  r`   ra   rb   s   @rV   ÚFakeReceiverr;  Î  s(   ø‡ € ØˆJò&òòò÷ð rY   rO  s   some data needs to be sentN)r   r'  Útwisted.internet.unixr(  Útwisted.python.sendmsgr*  r   r(   r0   r   r
   Ú
addCleanupr   r   r   ÚdoReadrO   Úlenr4  ÚassertFalseÚsetÚintersectionr5  )rQ   ÚancillaryPackerr'  r(  r*  r9  rO  Ú
sendSocketÚ
recvSocketr@  ÚreceiverÚ	fileOneFDÚfileOneNameÚ	fileTwoFDÚfileTwoNameÚ
dataToSendÚ	fdsToSendÚ	ancillaryÚexpectedCountrƒ   ÚdeviceInodesSentr/  s   &&                   @rV   Ú)_sendmsgMixinFileDescriptorReceivedDriverÚ:UNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver�  so  ø€ õ: 	&å7Ý2ò	*ô 
Ô,Ó	-÷	Ô.ó 	ó 
.ð	ô	˜=ô 	ñ& ",¬G´[Ó!AÑˆ
Ø�‰˜
×(Ñ(Ô)Ø�‰˜
×(Ñ(Ô)á“ˆÙ 
Ó2ˆô ")£Ñˆ	Ü!(£Ñˆ	Ø�‰œ Ô,Ø�‰œ Ô,à2ˆ
ØÐ*ˆ	Ù#2°9Ó#=Ñ ˆ	�=Ù�
¨	Ô2à�‰Ôð 	×Ñœ˜UŸY™Y›¨Ô7ð 	×Ñœ˜Y›×4Ñ4´S¸¿¹³^ÓDÔEð �9�9ˆ9Ù?HÓI¹y¸Ñ 0°Ö 4¹yÐÐIØ×ÑÐ-¨u×/IÑ/IÖJñ ùÚIs   ÆF5c                óB   a€ ^ RI Ho V3R lpV P                  V4       R# )z¿
_SendmsgMixin handles multiple file descriptors per recvmsg, calling
L{IFileDescriptorReceiver.fileDescriptorReceived} once per received
file descriptor. Scenario: single CMSG with two FDs.
©Ú
SCM_RIGHTSc                 ó8   <€ \         S\        R .V O5!  3.p^pW3# )Úii©r   r   )ra  rb  rc  ri  s   &  €rV   rX  Ú[UNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgOneCMSG.<locals>.ancillaryPacker	  s*   ø€ Ü$ j´$°tÐ2H¸iÓ2HÐIÐJˆIØˆMØÐ+Ð+rY   N©rQ  ri  re  ©rQ   rX  ri  s   & @rV   Ú1test_multiFileDescriptorReceivedPerRecvmsgOneCMSGÚBUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgOneCMSG   s   ø€ õ 	6õ	,ð
 	×6Ñ6°ÖGrY   z=Multi control message ancillary sendmsg not supported on Mac.c                óB   a€ ^ RI Ho V3R lpV P                  V4       R# )zÁ
_SendmsgMixin handles multiple file descriptors per recvmsg, calling
L{IFileDescriptorReceiver.fileDescriptorReceived} once per received
file descriptor. Scenario: two CMSGs with one FD each.
rh  c           	      ó\   <€ V  Uu. uF  p\         S\        R V4      3NK  	  pp^pW#3# u upi )Úirl  )ra  rƒ   rb  rc  ri  s   &   €rV   rX  Ú\UNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGs.<locals>.ancillaryPacker  s8   ø€ ÙKTÓUÉ9ÀRœ* j´$°s¸B³-Ó@É9ˆIÐUØˆMØÐ+Ð+ùò Vs   †)Nrn  ro  s   & @rV   Ú2test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGsÚCUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGs  s   ø€ õ 	6õ	,ð
 	×6Ñ6°ÖGrY   c                óz  aa€ ^ RI Ho R pV3R lp. p\        VP                  4       V P	                  \
        VP                  4       V P                  SRV4       V P                  V4       Ro\        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      pV P                  VR	4       R
# )z¸
_SendmsgMixin handles multiple file descriptors per recvmsg, calling
L{IFileDescriptorReceiver.fileDescriptorReceived} once per received
file descriptor. Scenario: unsupported CMSGs.
r)  c                 ó   € . p^ pW3# )rè   rZ   )ra  rb  rc  s   &  rV   rX  Ú[UNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG.<locals>.ancillaryPacker3  s   € ØˆIØˆMØÐ+Ð+rY   c                 ó6   <€ R pR.p^ pSP                  W4V4      # )s	   some data)NNrY   )ÚReceivedMessage)r?  ÚargsÚkwargsr„   rb  Úflagsr*  s   &*,   €rV   ÚfakeRecvmsgUnsupportedAncillaryÚkUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG.<locals>.fakeRecvmsgUnsupportedAncillary8  s(   ø€ ØˆDØ*Ð+ˆIØˆEØ×*Ñ*¨4¸EÓBÐBrY   Úrecvmsgz#received unsupported ancillary datac              3   ó<   <"  € T F  pSVR ,          9   x € K  	  R# 5i)r|   NrZ   )Ú.0ÚeÚexpectedMessages   & €rV   Ú	<genexpr>ÚUUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG.<locals>.<genexpr>G  s   øé € ÐC¹F°q�O q¨¥{Ö2»Fùs   ƒTFz+Expected message not found in logged eventsN)
Útwisted.pythonr*  r>   r  rR  r@   r¼   re  Úanyr  )rQ   rX  r€  ÚeventsÚfoundr†  r*  s   &    @@rV   Ú1test_multiFileDescriptorReceivedPerRecvmsgBadCMSGÚBUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG$  sŽ   ù€ õ 	+ò	,õ
	Cð ˆÜ�F—M‘MÔ"Ø�‰œ¨¯©Ô6à�
‰
�7˜IÐ'FÔGØ×6Ñ6°ÔGð @ˆß“ÔC¹FÓC——’ÔC¹FÓCÓCˆØ�‰˜ÐLÖMrY   c                ó¬  € ^ RI Hp V! 4       w  r#. p\        VP                  4       V P	                  \
        VP                  4        ! R R\        4      pV! VP                  4       R4      p\        4       p\        WWpP                  4       VP                  4        VP                  R4       V P                  RVP                  R4      4       RpR	p	\        VP                   VP"                  V	VR
7      p
V F5  pV
P%                  4        F  w  rÍWÛP'                  V4      8w  g   K   K2  	   R# 	  V P)                  RV
: R\+        V4      : R24       R# )z¹
If associated with a protocol which does not provide
L{IFileDescriptorReceiver}, file descriptors received by the
L{IUNIXTransport} implementation are closed and a warning is emitted.
r&  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚRUNIXTestsBuilder.test_avoidLeakingFileDescriptors.<locals>.RecordEndpointAddressesi^  c                ó¬   € V P                   P                  4       V n        V P                   P                  4       V n        \
        P                  V 4       R # r�   )rˆ   r±   ÚhostAddressrÎ   ÚpeerAddressr�   r�   rŒ   s   &rV   r�   ÚaUNIXTestsBuilder.test_avoidLeakingFileDescriptors.<locals>.RecordEndpointAddresses.connectionMade_  s:   € Ø#'§>¡>×#9Ñ#9Ó#;�Ô Ø#'§>¡>×#9Ñ#9Ó#;�Ô Ü"×1Ñ1°$Ö7rY   )r“  r”  Nrö   rb   s   @rV   ÚRecordEndpointAddressesr‘  ^  s   ø‡ € ÷8ð 8rY   r–  rØ   FrY   r<  zˆ%(protocolName)s (on %(hostAddress)r) does not provide IFileDescriptorReceiver; closing file descriptor received (from %(peerAddress)r).r0   )r“  r”  ÚprotocolNamer|   zExpected event (z) not found in logged events (Ú)N)r   r'  r>   r  rR  r@   r�   rÜ   r0   r4   rÓ   r   ÚsetblockingrO   ÚrecvrÍ   r”  r“  ÚitemsÚgetr!   r   )rQ   r'  ÚprobeClientÚprobeServerr‹  r–  rp   ru   r|   ÚclsNameÚexpectedEventÚlogEventÚkÚvs   &             rV   Ú test_avoidLeakingFileDescriptorsÚ1UNIXTestsBuilder.test_avoidLeakingFileDescriptorsJ  s6  € õ 	&á#-£<Ñ ˆàˆÜ�F—M‘MÔ"Ø�‰œ¨¯©Ô6ô	8Ô&8ô 	8ñ )¨×);Ñ);Ó)=¸wÓGˆÜ$Ó&ˆä ¨f·n±nÔEð 	×ÑÔð 	×Ñ Ô&Ø×Ñ˜˜k×.Ñ.¨tÓ4Ô5ð:ð 	ð
 (ˆô Ø×*Ñ*Ø×*Ñ*Ø Øô	
ˆó ˆHØ%×+Ñ+Ö-‘�ØŸ™ Q›Ö'Úñ .ò
 ñ ð �IŠIó "ÜØöðörY   c                óz  a € \        \        4       ! V 3R lR\        4      4       p\        4       p\	        VP                  4       R4      pV! 4       p\        S W4S P                  4       S P                  \        VP                  ^ ,          4       S P                  R\        VP                  R,          4      4       R# )zl
L{IUNIXTransport.sendFileDescriptor} sends file descriptors before
L{ITransport.write} sends normal bytes.
c                   ó:   <a € ] tR tRt o R tV3R ltR tRtV tR# )ÚJUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEventsiž  c                ó@   € \         P                  ! V 4       . V n        R # r�   )r0   r�   r‹  rŒ   s   &rV   r�   ÚYUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEvents.connectionMade   s   € Ü#×2Ò2°4Ô8Ø �–rY   c                ó|   <€ SP                  \        V4       V P                  P                  \	        V4      4       R # r�   )rR  r   r‹  r  Útype)Ú	innerSelfr�   rQ   s   &&€rV   rž   ÚaUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEvents.fileDescriptorReceived¤  s*   ø€ Ø—‘¤ zÔ2Ø× Ñ ×'Ñ'¬¨ZÓ(8Ö9rY   c                ó<   € V P                   P                  V4       R # r�   )r‹  Úextendr£   s   &&rV   r¤   ÚWUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEvents.dataReceived¨  s   € Ø—‘×"Ñ" 4Ö(rY   )r‹  N)	r[   r\   r]   r^   r�   rž   r¤   r`   ra   )rc   rQ   s   @€rV   ÚRecordEventsr¨  ž  s   ù‡ € ò!õ:÷)ð )rY   r²  rØ   :é   NNN)r   r(   r0   r   r�   rÜ   r4   rÓ   rO   Úintr‹  Úbytes)rQ   r²  r!  rp   ru   s   f    rV   Ú#test_descriptorDeliveredBeforeBytesÚ4UNIXTestsBuilder.test_descriptorDeliveredBeforeBytes—  sŽ   ø€ ô 
Ô,Ó	-÷
	)Ô.ó 
	)ó 
.ð
	)ô “ˆÜ# E§L¡L£N°GÓ<ˆÙ“ˆä  f°d·n±nÔEà×Ñœ˜fŸm™m¨AÕ.Ô/Ø×Ñ˜¤%¨¯©°bÕ(9Ó":Ö;rY   rZ   N)r[   r\   r]   r^   r_   r+   rz   ri   rÓ   r¬   r   rB   ÚisLinuxr´   r¿   rÅ   rÔ   r*  ÚsendmsgSkipReasonrî   r  r#  re  rp  ÚisMacOSXrv  r�  r¤  r¶  r`   ra   rb   s   @rV   r©   r©   ß   s¬  ø‡ € ñð '˜Ðá“€IòEñ Ø×ÒÓÔØEóñ
Có	ð
Cò<ñ Ø×ÒÓÔØEóñOó	ðOòMñ, �ŒKÐ*Ó+ñ Fó ,ð FñD ˆDÐ0Ó1ñ.Uó 2ð.Uñ` �ŒKÐ*Ó+ñJó ,ðJò.aKñF �ŒKÐ*Ó+ñHó ,ðHñ Ø×ÒÓØGóñ �ŒKÐ*Ó+ñHó ,ó	ð
Hñ �ŒKÐ*Ó+ñ#Nó ,ð#NñJ �ŒKÐ*Ó+ñJó ,ðJñX �ŒKÐ*Ó+ñ<ó ,ö<rY   r©   c                   óŠ   a € ] tR tRt o Rt]P                  3tR t]	! ]
P                  ! 4       '       * R4      R 4       tRtV tR# )ÚUNIXDatagramTestsBuilderiµ  z=
Builder defining tests relating to L{IReactorUNIXDatagram}.
c                óX   € V P                  RV P                  4       \        4       4       R# )zk
The UNIX socket created by L{IReactorUNIXDatagram.listenUNIXDatagram}
is created with the mode specified.
ÚlistenUNIXDatagramN)rW   r   r-   rŒ   s   &rV   Útest_listenModeÚ(UNIXDatagramTestsBuilder.test_listenMode¿  s   € ð
 	�‰Ð+¨T¯[©[«]Ô<LÓ<NÖOrY   r®   c                óà   € \        V 4      pV P                  4       pVP                  ! RV,           \        4       4      pV P	                  VP                  4       \        RV,           4      4       R# )z�
On Linux, a UNIX socket path may begin with C{' '} to indicate a
socket in the abstract namespace.  L{IReactorUNIX.listenUNIXDatagram}
accepts such a path.
r°   N)rg   rL   r¾  r-   rO   r±   r   r²   s   &   rV   r´   Ú<UNIXDatagramTestsBuilder.test_listenOnLinuxAbstractNamespaceÆ  sU   € ô ˜TÓ"ˆØ×#Ñ#Ó%ˆØ×)Ò)¨$°­+Ô7GÓ7IÓJˆØ×Ñ˜Ÿ™›¬°T¸Dµ[Ó)AÖBrY   rZ   N)r[   r\   r]   r^   r_   r   ÚIReactorUNIXDatagramrz   r¿  r   rB   r¸  r´   r`   ra   rb   s   @rV   r¼  r¼  µ  sN   ø‡ € ñð %×9Ñ9Ð;Ðò
Pñ Ø×ÒÓÔØEóñ	Có	ö	CrY   r¼  c                   óD   a € ] tR tRt o Rt]]3tR tR t	V 3R lt
RtV tR# )ÚSocketUNIXMixiniÖ  zV
Mixin which uses L{IReactorSocket.adoptStreamPort} to hand out listening
UNIX ports.
c                óD  € \        \        4      p\        RRR7      pVP                  V4       VP	                  ^4       VP                  R4        VP                  ! VP                  4       VP                  V4      VP                  4        #   TP                  4        i ; i)zR
Get a UNIX port from a reactor, wrapping an already-initialized file
descriptor.
rk   rl   rm   F)
r   r   r   ré   Úlistenr™  ÚadoptStreamPortrÜ   Úfamilyr   )rQ   r   rT   ÚportSockrS   s   &&&  rV   ÚgetListeningPortÚ SocketUNIXMixin.getListeningPortá  sv   € ô
 œ'“?ˆä˜W¨#Ô.ˆØ�‰�dÔØ�‰˜ÔØ×Ñ˜UÔ#ð	Ø×*Ò*¨8¯?©?Ó+<¸h¿o¹oÈwÓWà�N‰NÕøˆH�N‰NÕús   Á+B ÂBc                ó<   € VP                   ! VP                  V4      # ©a  
Connect to a listening UNIX socket.

@param reactor: The reactor under test.
@type reactor: L{IReactorUNIX}

@param address: The listening's address.
@type address: L{UNIXAddress}

@param factory: The client factory.
@type factory: L{ClientFactory}

@return: The connector
©rÂ   rs   ©rQ   r   ÚaddressrT   s   &&&&rV   ÚconnectToListenerÚ!SocketUNIXMixin.connectToListenerñ  ó   € ð ×"Ò" 7§<¡<°Ó9Ð9rY   c                óV   <€ V ^8„  d   Qh/ S[ S[S[S[,          ,          ,          ;R&   # rx   r{   )r|   rc   s   "€rV   r}   ÚSocketUNIXMixin.__annotate__Ö  s"   ø‡ ‚ ñ !¡©$©y­/Õ!:Õ;ñ ò rY   rZ   N)r[   r\   r]   r^   r_   r+   r*   rz   rË  rÒ  r   r`   ra   rb   s   @rV   rÅ  rÅ  Ö  s+   ø‡ € ñð 	Øð?Ðò
ò :÷7 ƒ rY   rÅ  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚListenUNIXMixini  zN
Mixin which uses L{IReactorTCP.listenUNIX} to hand out listening UNIX
ports.
c                ó@   € \        RRR7      pVP                  ! W24      # )z 
Get a UNIX port from a reactor
rk   rl   rm   )r   r«   )rQ   r   rT   rS   s   &&& rV   rË  Ú ListenUNIXMixin.getListeningPort	  s!   € ô
 ˜W¨#Ô.ˆØ×!Ò! $Ó0Ð0rY   c                ó<   € VP                   ! VP                  V4      # rÎ  rÏ  rÐ  s   &&&&rV   rÒ  Ú!ListenUNIXMixin.connectToListener  rÔ  rY   rZ   N)	r[   r\   r]   r^   r_   rË  rÒ  r`   ra   rb   s   @rV   rØ  rØ    s   ø‡ € ñò
1÷:ð :rY   rØ  c                   ó>   a € ] tR tRt o ]3tR tR tV 3R ltRt	V t
R# )ÚUNIXPortTestsMixini#  c                óT   € V R\        VP                  4       P                  4      : 2# )zJ
Get the message expected to be logged when a UNIX port starts listening.
z starting on ©r;   r±   rs   )rQ   r³   rT   s   &&&rV   Ú#getExpectedStartListeningLogMessageÚ6UNIXPortTestsMixin.getExpectedStartListeningLogMessage&  s'   € ð �˜-¬°T·\±\³^×5HÑ5HÓ(IÑ'LÐMÐMrY   c                óP   € R\        VP                  4       P                  4       R2# )z:
Get the expected connection lost message for a UNIX port
z(UNIX Port z Closed)rà  )rQ   r³   s   &&rV   ÚgetExpectedConnectionLostLogMsgÚ2UNIXPortTestsMixin.getExpectedConnectionLostLogMsg,  s%   € ð œ\¨$¯,©,«.×*=Ñ*=Ó>Ð?¸xÐHÐHrY   c                óV   <€ V ^8„  d   Qh/ S[ S[S[S[,          ,          ,          ;R&   # rx   r{   )r|   rc   s   "€rV   r}   ÚUNIXPortTestsMixin.__annotate__#  s   ø‡ ‚ Ù ¡©$©y­/Õ!:Õ;ÑMò rY   rZ   N)r[   r\   r]   r^   r+   rz   rá  rä  r   r`   ra   rb   s   @rV   rÞ  rÞ  #  s    ø‡ € Ø?K¸oÐòNòI÷ ƒ rY   rÞ  c                   ó   € ] tR tRtRtRtR# )ÚUNIXPortTestsBuilderi3  z&
Tests for L{IReactorUNIX.listenUnix}
rZ   N©r[   r\   r]   r^   r_   r`   rZ   rY   rV   ré  ré  3  ó   † õrY   ré  c                   ó   € ] tR tRtRtRtR# )ÚUNIXFDPortTestsBuilderi>  z+
Tests for L{IReactorUNIX.adoptStreamPort}
rZ   Nrê  rZ   rY   rV   rí  rí  >  rë  rY   rí  c                   ó<   a € ] tR tRt o ]]]3tR tR t	R t
RtV tR# )Ú%UNIXAdoptStreamConnectionTestsBuilderiI  c                ó„  € V P                  4       p^ RIHp  ! R R\        4      pV! \        \
        4      w  rEVP                  R4       V P                  VP                  4       V P                  VP                  4       VP                  4       pV! 4       pVP                  ! V\        V4      pV P                  V4       R# )zh
{IReactorSocket.adoptStreamConnection} returns None if the given
factory's buildProtocol returns None.
r&  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚXUNIXAdoptStreamConnectionTestsBuilder.test_buildProtocolReturnsNone.<locals>.NoneFactoryi^  c                ó   € R # r�   rZ   )rQ   rÑ  s   &&rV   ÚbuildProtocolÚfUNIXAdoptStreamConnectionTestsBuilder.test_buildProtocolReturnsNone.<locals>.NoneFactory.buildProtocol_  s   € ÙrY   rZ   N)r[   r\   r]   r^   rô  r`   ra   rb   s   @rV   ÚNoneFactoryrò  ^  s   ø‡ € ÷ð rY   rö  FN)rL   r   r'  r.   r   r
   r™  rR  r   rÜ   ÚadoptStreamConnectionÚassertIsNone)	rQ   r   r'  rö  Ús1Ús2Ús1FDrT   r"  s	   &        rV   Útest_buildProtocolReturnsNoneÚCUNIXAdoptStreamConnectionTestsBuilder.test_buildProtocolReturnsNoneP  s‘   € ð ×#Ñ#Ó%ˆå%ô	œ-ô 	ñ œG¤[Ó1‰ˆØ
�‰�uÔØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!à�y‰y‹{ˆÙ“-ˆØ×.Ò.¨t´W¸gÓFˆØ×Ñ˜&Ö!rY   c                ó    a € V 3R lpS P                  4       pS P                  VRRR7      pVP                  V4       S P                  V4       R# )z.
Helper method to test UNIX server addresses.
c                 ó<  <€ V w  rp \        R VP                  4       P                  4      pSP                  RVP                  P
                  : RV: R2\        VP                  4      4       SP                  RVP                  P
                  : RV: 2VP                  P                  4       VP                  P                  ^ ,          pSP                  V\        4       VP                  P                  4        R#   TP                  P                  4        i ; i)rG   z<AccumulatingProtocol #z on Ú>zAccumulatingProtocol,Ú,N)r=   r±   rs   rO   rˆ   Ú	sessionnoÚstrÚlogstrrT   ÚpeerAddressesr  r   r‹   )Ú	protocolsru   rp   r³   ÚportPathr”  rQ   s   &     €rV   Ú	connectedÚOUNIXAdoptStreamConnectionTestsBuilder.test_ServerAddressUNIX.<locals>.connectedq  sÞ   ø€ Ø#,Ñ ˆF˜Dð2Ü6°r¸4¿<¹<»>×;NÑ;NÓO�Ø× Ò à×'Ñ'×1Ô1³8ð=ä˜×(Ñ(Ó)ôð × Ò à×'Ñ'×1Ô1²8ð=à×$Ñ$×+Ñ+ôð %Ÿn™n×:Ñ:¸1Õ=�Ø×%Ñ% k´;Ô?ð × Ñ ×/Ñ/Ö1ø�× Ñ ×/Ñ/Õ1ús   ˆCC? Ã?DN)Ú	interfaceÚaddressFamily)rL   ÚgetConnectedClientAndServerrê   Ú
runReactor)rQ   r  r   rí   s   f   rV   Útest_ServerAddressUNIXÚ<UNIXAdoptStreamConnectionTestsBuilder.test_ServerAddressUNIXl  sN   ø€ õ
	2ð, ×#Ñ#Ó%ˆØ×,Ñ,Ø˜t°4ð -ó 
ˆð 	
�‰�iÔ Ø�‰˜Ö rY   c                óÐ  aaaa€ \        4       p\        4       Vn        \        4       o\        4       Sn        \        4       Sn        \	        4       p\        4       Vn        \        4       Vn        \        RRR7      pSP                  ! Wd4      oVV3R lpVP                  P                  V4       \        VP                  SP                  .4      pV3R lp	VP                  V	4       \        4       oSP                  V	4       \        VP                  SP                  .4      p
VV3R lpV
P                  V4       SP                  ! SP                  4       P                  V4       S# )a  
Return a L{Deferred} firing with a L{MyClientFactory} and
L{MyServerFactory} connected pair, and the listening C{Port}. The
particularity is that the server protocol has been obtained after doing
a C{adoptStreamConnection} against the original server connection.
rk   rl   rm   c                 óØ   <€ SP                   ! V P                  4       SP                  ! V P                  4       SP                  ! V P                  P	                  4       \
        S4       R # r�   )ÚremoveReaderrˆ   ÚremoveWriterr÷  rÜ   r   )r@  r   rp   s   &€€rV   ÚfirstServerConnectedÚ_UNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer.<locals>.firstServerConnected¤  sF   ø€ Ø× Ò  §¡Ô1Ø× Ò  §¡Ô1Ø×)Ò)¨%¯/©/×*@Ñ*@Ó*BÄGÈVÖTrY   c                 óN   <€ SP                   '       d   SP                  ! 4        V # r�   )Úrunningr  )r"  r   s   &€rV   r  ÚOUNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer.<locals>.stop¯  s   ø€ Ø��ˆØ—’”ØˆMrY   c                 ó6   <€ V w  rSP                  WS34       R # r�   )rœ   )r  ru   rp   Údeferredr³   s   &  €€rV   r  ÚPUNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer.<locals>.start½  s   ø€ Ø&‰NˆFØ×Ñ˜v¨tÐ4Ö5rY   )r8   r    ÚprotocolConnectionMadeÚprotocolConnectionLostr7   r   r«   rê   r"   rì   rë   rÂ   r±   rs   )rQ   r   r
  r  ÚfirstServerru   rS   r  ÚlostDeferredr  ÚstartDeferredr  r  r³   rp   s   &f&&        @@@rV   r  ÚAUNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServerŽ  s&  û€ ô &Ó'ˆÜ-5«ZˆÔ*ä Ó"ˆÜ(0«
ˆÔ%Ü(0«
ˆÔ%ä Ó"ˆÜ(0«
ˆÔ%Ü(0«
ˆÔ%ô ˜W¨#Ô.ˆØ×!Ò! $Ó4ˆö	Uð
 	×*Ñ*×6Ñ6Ð7KÔLä$Ø×*Ñ*¨F×,IÑ,IÐJó
ˆõ	ð
 	×Ñ˜TÔ"ä“:ˆØ×Ñ˜DÔ!ä%Ø×*Ñ*¨F×,IÑ,IÐJó
ˆö	6ð 	×!Ñ! %Ô(à×Ò˜DŸL™L›N×/Ñ/°Ô8ØˆrY   rZ   N)r[   r\   r]   r^   r)   r*   r+   rz   rü  r  r  r`   ra   rb   s   @rV   rï  rï  I  s+   ø‡ € àØØðÐò"ò8 !÷D6ð 6rY   rï  c                   óJ   a € ] tR tRt o Rt]3tRt]R 4       t	R t
R tRtV tR# )ÚUnixClientTestsBuilderiÎ  z/
Define tests for L{IReactorUNIX.connectUNIX}.
Nc                óV   € V P                   f   \        V 4      V n         V P                   # )zs
Return a path usable by C{connectUNIX} and C{listenUNIX}.

@return: A path instance, built with C{_abstractPath}.
)Ú_pathrg   rŒ   s   &rV   rS   ÚUnixClientTestsBuilder.path×  s$   € ð �:‰:ÒÜ& tÓ,ˆDŒJØ�z‰zÐrY   c                ó<   € VP                   ! V P                  V4      # )z¯
Start an UNIX server with the given C{factory}.

@param reactor: The reactor to create the UNIX port in.

@param factory: The server factory.

@return: A UNIX port instance.
)r«   rS   ©rQ   r   rT   s   &&&rV   rÇ  ÚUnixClientTestsBuilder.listenâ  s   € ð ×!Ò! $§)¡)¨WÓ5Ð5rY   c                ó<   € VP                   ! V P                  V4      # )zµ
Start an UNIX client with the given C{factory}.

@param reactor: The reactor to create the connection in.

@param factory: The client factory.

@return: A UNIX connector instance.
)rÂ   rS   r(  s   &&&rV   ÚconnectÚUnixClientTestsBuilder.connectî  s   € ð ×"Ò" 4§9¡9¨gÓ6Ð6rY   )r%  )r[   r\   r]   r^   r_   r+   rz   r%  ÚpropertyrS   rÇ  r+  r`   ra   rb   s   @rV   r#  r#  Î  s:   ø‡ € ñð '˜Ðà€Eàñó ðò
6÷
7ð 
7rY   r#  Úposixz%UNIX sockets only supported on POSIX.c                   óR   a € ] tR tRt o RtRtR tV 3R lR ltR tR t	R	 t
R
tV tR# )ÚRealSocketTestsiþ  z$
Test real UNIX socket connections.
Úunixpathc              ƒ  ó¼  "  € \         P                  P                  \        4      '       g   Q h\	        4       p\        P
                  ! V P                  V4      p\        V\        P                  4      '       g   Q hW!n
        V P                  VP                  4       \        4       p\        P                  ! V P                  V4       VP                  G Rj  x€L
  VP                   '       g   Q hV P#                  VP                   P$                  4       V P#                  VP&                  4       VP(                  P+                  \,        P.                  4       R#  Lƒ5i)zd
A port created with L{IReactorTCP.listenUNIX} can be connected to with
L{IReactorTCP.connectUNIX}.
N)r   r+   Ú
providedByr   r6   r«   rS   Ú
isinstancer   ÚPortr³   rR  ÚcleanUpr7   rÂ   r  ÚlastProtocolr  ÚmadeÚdisconnectedÚ
lostReasonr  r   ÚConnectionDone)rQ   Úfr³   ÚclientFs   &   rV   Útest_closePortInProtocolFactoryÚ/RealSocketTests.test_closePortInProtocolFactory  sô   é € ô
 ×&Ñ&×1Ñ1´'×:Ò:Ð:Ð:äÓˆÜ×!Ò! $§)¡)¨QÓ/ˆÜ˜$¤§¡×)Ò)Ð)Ð)ØŒØ�‰˜Ÿ	™	Ô"Ü!Ó#ˆÜ×Ò˜DŸI™I wÔ/à×Ñ×Ðà×#×#Ð#Ð#Ð#Ø�‰˜×,Ñ,×1Ñ1Ô2Ø�‰˜×)Ñ)Ô*Ø×Ñ×Ñ¤× 4Ñ 4Ö5ñ 	ùs   ‚CEÃEÃEÃ-A.Ec                ó>   <€ V ^8„  d   QhRS[ S[S[.R3,          RR/# )ry   rœ   NÚreturn)r   rE   )r|   rc   s   "€rV   r}   ÚRealSocketTests.__annotate__  s.   ø€ ÷ 2ñ 2Ù Ñ"6Ñ8LÐ!MÈtÐ!SÕTð2à	ñ2rY   c              ƒ  ó~  "  € \         P                  P                  \        4      '       g   Q h\	        4       p\        4       pW2n        \        P                  ! V P                  V4      pV P                  VP                  4       \        4       p\        4       pWen        \        P                  ! V P                  V4       \        W6.4      G Rj  x€L
 w  rxV! Wx4       VP                  '       g   Q hVP                  '       g   Q hVP                  P                  4        VP                  P                  4        R#  Ll5i)zq
Invoke the given callback with a client protocol and a server protocol
which have been connected to each other.
N)r   r+   r3  r   r8   r    r  r«   rS   rR  rN   r7   rÂ   r"   rˆ   r‹   )	rQ   rœ   ÚserverFactoryÚserverConnMader³   r=  ÚclientConnMadeÚserverProtocolÚclientProtocols	   &&       rV   Ú_connectedClientAndServerTestÚ-RealSocketTests._connectedClientAndServerTest  sù   é € ô ×&Ñ&×1Ñ1´'×:Ò:Ð:Ð:ä'Ó)ˆÜ9A»ˆØ/=Ô,Ü×!Ò! $§)¡)¨]Ó;ˆØ�‰˜×*Ñ*Ô+ä!Ó#ˆÜ(0«
ˆØ)7Ô&Ü×Ò˜DŸI™I wÔ/ä/<ØÐ,ó0
÷ *
Ñ&ˆñ 	�Ô0Ø×'×'Ð'Ð'Ð'Ø×'×'Ð'Ð'Ð'Ø× Ñ ×/Ñ/Ô1Ø× Ñ ×/Ñ/Ö1ñ*
ùs   ‚CD=ÃD;Ã3D=Ä9D=c              ƒ  óX   a "  € R V 3R llpS P                  V4      G Rj  x€L
  R#  L5i)zÅ
The transport of a protocol connected with L{IReactorTCP.connectUNIX} or
L{IReactor.TCP.listenUNIX} can have L{ITCPTransport.getTcpNoDelay} or
L{ITCPTransport.setTcpNoDelay} called without error.
c                ó4   € V ^8„  d   QhR\         R\         RR/# ©ry   rG  rH  rA  NrD   )r|   s   "rV   r}   Ú5RealSocketTests.test_tcpNoDelay.<locals>.__annotate__A  s$   € ÷ 
	?ñ 
	?Ü0ð
	?ÜBVð
	?àñ
	?rY   c                 óš  <€ W3 FÂ  p\         P                  P                  VP                  4      '       g   Q hVP                  pSP	                  VP                  4       ^ 4       VP                  R4       SP	                  VP                  4       ^ 4       VP                  R4       SP	                  VP                  4       ^ 4       KÄ  	  R# )rè   TFN)r   ÚITCPTransportr3  rˆ   rO   ÚgetTcpNoDelayÚsetTcpNoDelay©rG  rH  Úprˆ   rQ   s   &&  €rV   ÚcheckÚ.RealSocketTests.test_tcpNoDelay.<locals>.checkA  s£   ø€ ð %Ó5�Ü!×/Ñ/×:Ñ:¸1¿;¹;×GÒGÐGÐGØŸK™K�	Ø× Ñ  ×!8Ñ!8Ó!:¸AÔ>Ø×'Ñ'¨Ô-Ø× Ñ  ×!8Ñ!8Ó!:¸AÔ>Ø×'Ñ'¨Ô.Ø× Ñ  ×!8Ñ!8Ó!:¸AÖ>ó 6rY   N©rI  ©rQ   rU  s   f rV   Útest_tcpNoDelayÚRealSocketTests.test_tcpNoDelay:  s&   øé € ÷
	?ð 
	?ð ×0Ñ0°Ó7×7Ô7ùó   ƒ*¡(¢*c              ƒ  óX   a "  € R V 3R llpS P                  V4      G Rj  x€L
  R#  L5i)zî
The transport of a protocol connected with L{IReactorTCP.connectUNIX} or
L{IReactor.TCP.listenUNIX} can have its I{SO_KEEPALIVE} state inspected
and manipulated with L{ITCPTransport.getTcpKeepAlive} and
L{ITCPTransport.setTcpKeepAlive}.
c                ó4   € V ^8„  d   QhR\         R\         RR/# rM  rD   )r|   s   "rV   r}   Ú7RealSocketTests.test_tcpKeepAlive.<locals>.__annotate__W  s)   € ÷ 
	Eñ 
	EÜ0ð
	EÜBVð
	Eàñ
	ErY   c                 óš  <€ W3 FÂ  p\         P                  P                  VP                  4      '       g   Q hVP                  pSP	                  VP                  4       R 4       VP                  R4       SP	                  VP                  4       R4       VP                  R 4       SP	                  VP                  4       R 4       KÄ  	  R# )FTN)r   rP  r3  rˆ   rO   ÚgetTcpKeepAliveÚsetTcpKeepAliverS  s   &&  €rV   rU  Ú0RealSocketTests.test_tcpKeepAlive.<locals>.checkW  s£   ø€ ð %Ó5�Ü!×/Ñ/×:Ñ:¸1¿;¹;×GÒGÐGÐGØŸK™K�	Ø× Ñ  ×!:Ñ!:Ó!<¸eÔDØ×)Ñ)¨$Ô/Ø× Ñ  ×!:Ñ!:Ó!<¸dÔCØ×)Ñ)¨%Ô0Ø× Ñ  ×!:Ñ!:Ó!<¸eÖDó 6rY   NrW  rX  s   f rV   Útest_tcpKeepAliveÚ!RealSocketTests.test_tcpKeepAliveO  s(   øé € ÷
	Eð 
	Eð ×0Ñ0°Ó7×7Ô7ùr[  c              ƒ  ó(  "  € \         P                  P                  \        4      '       g   Q h\	        4       p\        P
                  ! RV^R7       VP                  G Rj  x€L
  VP                  P                  \        P                  4       R#  L/5i)zR
Tests whether attempting to establish connection to non-existing UNIX path fails
znon-existing)ÚtimeoutN)r   r+   r3  r   r7   rÂ   ÚfailDeferredr’   r  r   ÚConnectError)rQ   r=  s   & rV   Útest_FailingÚRealSocketTests.test_Failinge  sj   é € ô ×&Ñ&×1Ñ1´'×:Ò:Ð:Ð:ä!Ó#ˆÜ×Ò˜N¨G¸QÕ?à×"Ñ"×"Ð"Ø�‰×ÑœE×.Ñ.Ö/ñ 	#ùs   ‚ABÁ BÁ!0BrZ   N)r[   r\   r]   r^   r_   rS   r>  rI  rY  rc  ri  r`   ra   rb   s   @rV   r0  r0  þ  s4   ø‡ € ñð €Dò6÷,2ð 2ò<8ò*8÷,
0ð 
0rY   r0  )vr_   Úhashlibr   Úosr   r   r   r   r   Úpprintr   r   r	   r
   r   r   Ústructr   Útempfiler   r   Útypingr   r   r   r   r   Úunittestr   r   Ú_AF_UNIXÚImportErrorÚzope.interfacer   r   Útwisted.internetr   r   r   r   r   Útwisted.internet.addressr   Útwisted.internet.deferr    r!   r"   Útwisted.internet.endpointsr#   r$   Útwisted.internet.errorr%   r&   r'   Útwisted.internet.interfacesr(   r)   r*   r+   Útwisted.internet.protocolr,   r-   r.   Útwisted.internet.taskr/   Ú&twisted.internet.test.connectionmixinsr0   r1   r2   r3   r4   Ú#twisted.internet.test.reactormixinsr5   Útwisted.internet.test.test_tcpr6   r7   r8   r9   r:   Útwisted.python.compatr;   Útwisted.python.failurer<   Útwisted.python.filepathr=   Útwisted.python.logr>   r?   r@   Útwisted.python.reflectrA   Útwisted.python.runtimerB   rC   Útwisted.test.test_tcprE   Útwisted.trial.unittestrF   r*  r¹  rI   rg   ri   r�   r–   r©   r¼  rÅ  rØ  rÞ  ré  rí  rï  ÚglobalsÚupdateÚmakeTestCaseClassesr#  r0  rZ   rY   rV   Ú<module>r‹     s“  ðñõ
 ß 2Õ 2Ý ß ;Ó ;Ý Ý ß $ß :Õ :Ý ðÝ*ð €Gç 1ç BÕ BÝ 0ß @Ñ @ß M÷ñ ÷
ó ÷ UÑ TÝ -÷õ õ ?÷õ õ /Ý *Ý ?ß ?Ñ ?Ý 0ß 9Ý 6Ý +á
Ð0Ó
1€ØÐ ÙÐ)Ó*Ò6àKð ÷
<ñ <ò")ô?�/ô ?ô,"Ð,ô "ñJ Ð$Ó%ô;Ð/ó ;ó &ð;ô|S<�¨Ð8Lô S<ôlC˜°ô C÷B*:ñ *:÷Z:ñ :÷@Iñ Iô ØØØØô	ôØØØØô	ô{Ð,CÀ^ô {ñ| ƒ	× Ñ Ð!×5Ñ5Ó7Ô 8Ù ƒ	× Ñ Ð)×=Ñ=Ó?Ô @Ù ƒ	× Ñ Ð%×9Ñ9Ó;Ô <Ù ƒ	× Ñ Ð'×;Ñ;Ó=Ô >Ù ƒ	× Ñ Ð6×JÑJÓLÔ Mô*7˜^Ð-Cô *7ñZ ƒ	× Ñ Ð'×;Ñ;Ó=Ô >ñ ˆ˜ÑÐ!HÓIôp0�hó p0ó Jòp0øðU ô ØƒGðús   ÁJ4 Ê4	KË K