§
    Ètºf&ˆ  ã                   ó  — d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZ 	 ddlmZ eZn# e$ r dZY nw xY wddlmZm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC ddlDmEZEmFZFmGZGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZPmQZQmRZR ddlSmTZT ddlUmVZV  eTd¦  «        ZWd ZX eTd¦  «        �d!ZX G d"„ d#¦  «        ZYd$„ ZZ G d%„ d&e?¦  «        Z[ G d'„ d(e=¦  «        Z\ e e2¦  «         G d)„ d*e=¦  «        ¦   «         Z] G d+„ d,eYeCe>¦  «        Z^ G d-„ d.eYeC¦  «        Z_ G d/„ d0¦  «        Z` G d1„ d2¦  «        Za G d3„ d4¦  «        Zb G d5„ d6eaebeCeG¦  «        Zc G d7„ d8e`ebeCeG¦  «        Zd G d9„ d:eHeC¦  «        Ze ef¦   «          g                    e^ h                    ¦   «         ¦  «          ef¦   «          g                    e_ h                    ¦   «         ¦  «          ef¦   «          g                    ec h                    ¦   «         ¦  «          ef¦   «          g                    ed h                    ¦   «         ¦  «          ef¦   «          g                    ee h                    ¦   «         ¦  «          G d;„ d<eCe@¦  «        Zi ef¦   «          g                    ei h                    ¦   «         ¦  «         dS )=z/
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)ÚOptionalÚSequenceÚType)ÚskipIf)ÚAF_UNIXN)Ú	InterfaceÚimplementer)ÚbaseÚ
interfaces)ÚUNIXAddress)ÚDeferredÚfailÚgatherResults)ÚUNIXClientEndpointÚUNIXServerEndpoint)ÚCannotListenErrorÚConnectionClosedÚFileDescriptorOverrun)ÚIFileDescriptorReceiverÚIReactorFDSetÚIReactorSocketÚIReactorUNIX)ÚClientFactoryÚDatagramProtocolÚServerFactory)ÚLoopingCall)ÚConnectableProtocolÚConnectionTestsMixinÚEndpointCreatorÚStreamClientTestsMixinÚrunProtocolsWithReactor)ÚReactorBuilder)ÚMyClientFactoryÚMyServerFactoryÚStreamTransportTestsMixinÚWriteSequenceTestsMixin)ÚnativeString)ÚFailure)Ú_coerceToFilesystemEncoding)ÚaddObserverÚerrÚremoveObserver)ÚrequireModule)Úplatformztwisted.python.sendmsgÚ z>sendmsg extension unavailable, extended UNIX features disabledc                   ó   — e Zd ZdZd„ ZdS )ÚUNIXFamilyMixinzK
    Test-helper defining mixin for things related to AF_UNIX sockets.
    c                 óü   — d}|                       ¦   «         } t          ||¦  «        |||¬¦  «        }|                     ¦   «          |                      t	          t          |¦  «        j        ¦  «        |¦  «         dS )z}
        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ÚfactoryrB   ÚreactorÚunixPorts          ú^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/test/test_unix.pyÚ	_modeTestzUNIXFamilyMixin._modeTestO   sy   € ð
 ˆØ×#Ò#Ñ%Ô%ˆØ/•7˜7 JÑ/Ô/°°gÀDÐIÑIÔIˆØ×ÒÑ Ô Ð Ø×Ò�¥ d¡¤Ô!3Ñ4Ô4°dÑ;Ô;Ð;Ð;Ð;ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rO   © rP   rN   r@   r@   J   s-   € € € € € ðð ð	<ð 	<ð 	<ð 	<ð 	<rP   r@   c                 ó^   — t          t          d¦  «        ¦  «                             ¦   «         S )zI
    Return a new, unique abstract namespace path to be listened on.
    éd   )r   r   Ú	hexdigest)Úcases    rN   Ú_abstractPathrZ   [   s$   € õ �w�s‰|Œ|ÑÔ×&Ò&Ñ(Ô(Ð(rP   c                   ó^   — e Zd ZU dZej        fZeee	e
                           ed<   d„ Zd„ ZdS )ÚUNIXCreatorz(
    Create UNIX socket end points.
    ÚrequiredInterfacesc                 óD   — t          dd¬¦  «        }t          ||¦  «        S )z3
        Construct a UNIX server endpoint.
        ú.sockú.©ÚsuffixÚdir)r   r    )rH   rL   rJ   s      rN   ÚserverzUNIXCreator.serveri   s&   € õ
 ˜W¨#Ð.Ñ.Ô.ˆÝ! '¨4Ñ0Ô0Ð0rP   c                 ó,   — t          ||j        ¦  «        S )z3
        Construct a UNIX client endpoint.
        )r   Úname)rH   rL   ÚserverAddresss      rN   ÚclientzUNIXCreator.clientq   s   € õ " '¨=Ô+=Ñ>Ô>Ð>rP   N)rQ   rR   rS   rT   r   r'   r]   r   r   r   r   Ú__annotations__rd   rh   rU   rP   rN   r\   r\   b   sg   € € € € € € ðð ð @JÔ?VÐ>XÐ˜ ¨$¨y¬/Ô!:Ô;ÐXÐXÑXð1ð 1ð 1ð?ð ?ð ?ð ?ð ?rP   r\   c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )Ú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                 ó"   — || _         || _        dS )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)rH   rm   rn   s      rN   Ú__init__zSendFileDescriptor.__init__ƒ   s   € ð ˆŒØˆŒ	ˆ	ˆ	rP   c                 óÂ   — | j                              | j        ¦  «         | j        r| j                              | j        ¦  «         | j                              ¦   «          dS )zn
        Send C{self.fd} and, if it is not L{None}, C{self.data}.  Then close the
        connection.
        N)Ú	transportÚsendFileDescriptorrm   rn   ÚwriteÚloseConnection©rH   s    rN   ÚconnectionMadez!SendFileDescriptor.connectionMadeŽ   sX   € ð
 	Œ×)Ò)¨$¬'Ñ2Ô2Ð2ØŒ9ð 	,ØŒN× Ò  ¤Ñ+Ô+Ð+ØŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'rP   c                 ó>   — t          j        | |¦  «         || _        d S ©N)r,   ÚconnectionLostÚreason©rH   rz   s     rN   ry   z!SendFileDescriptor.connectionLost˜   s    € ÝÔ*¨4°Ñ8Ô8Ð8ØˆŒˆˆrP   )rQ   rR   rS   rT   rz   ro   rv   ry   rU   rP   rN   rk   rk   x   sR   € € € € € ðð ð €Fð	ð 	ð 	ð(ð (ð (ðð ð ð ð rP   rk   c                   ó2   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	dS )Ú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                 ól   — | j         €t          ¦   «         | _        | j        S t          | j         ¦  «        S )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.
        )rz   r   Úwaitingr   ru   s    rN   ÚwaitForDescriptorz'ReceiveFileDescriptor.waitForDescriptor®   s/   € ð Œ;ÐÝ#™:œ:ˆDŒLØ”<Ðå˜œÑ$Ô$Ð$rP   c                 óH   — | j                              |¦  «         d| _         dS )z�
        Fire the waiting Deferred, initialized by C{waitForDescriptor}, with the
        file descriptor just received.
        N)r   Úcallback)rH   Ú
descriptors     rN   ÚfileDescriptorReceivedz,ReceiveFileDescriptor.fileDescriptorReceivedº   s%   € ð
 	Œ×Ò˜jÑ)Ô)Ð)ØˆŒˆˆrP   c           	      ó–   — | j         �A| j                              t          t          d|›d�¦  «        ¦  «        ¦  «         d| _         dS dS )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   Úerrbackr7   Ú	Exception©rH   rn   s     rN   ÚdataReceivedz"ReceiveFileDescriptor.dataReceivedÂ   sZ   € ð Œ<Ð#ØŒL× Ò Ý�	Ð"Q°TÐ"QÐ"QÐ"QÑRÔRÑSÔSñô ð ð  ˆDŒLˆLˆLð	 $Ð#rP   c                 óŽ   — t          j        | |¦  «         | j        �!| j                             |¦  «         d| _        || _        dS )zj
        Fail the waiting Deferred, initialized by C{waitForDescriptor}, if there
        is one.
        N)r,   ry   r   r†   rz   r{   s     rN   ry   z$ReceiveFileDescriptor.connectionLostÐ   sG   € õ
 	Ô*¨4°Ñ8Ô8Ð8ØŒ<Ð#ØŒL× Ò  Ñ(Ô(Ð(ØˆDŒLØˆŒˆˆrP   )
rQ   rR   rS   rT   rz   r   r€   r„   r‰   ry   rU   rP   rN   r}   r}   �   sf   € € € € € ð
ð 
ð €FØ€Gð
%ð 
%ð 
%ðð ð ð ð  ð  ð	ð 	ð 	ð 	ð 	rP   r}   c                   ón  — e Zd ZdZefZ e¦   «         Zd„ Z e	 e
j        ¦   «          d¦  «        d„ ¦   «         Zd„ Z e	 e
j        ¦   «          d¦  «        d„ ¦   «         Zd„ Z e	e e¦  «        d„ ¦   «         Z e	e e¦  «        d	„ ¦   «         Z e	e e¦  «        d
„ ¦   «         Zd„ Z e	e e¦  «        d„ ¦   «         Z e	 e
j        ¦   «         d¦  «         e	e e¦  «        d„ ¦   «         ¦   «         Z e	e e¦  «        d„ ¦   «         Z e	e e¦  «        d„ ¦   «         Z e	e e¦  «        d„ ¦   «         ZdS )ÚUNIXTestsBuilderz=
    Builder defining tests relating to L{IReactorUNIX}.
    c                 óp   — |                       d|                      ¦   «         t          ¦   «         ¦  «         dS )zs
        The UNIX socket created by L{IReactorUNIX.listenUNIX} is created with
        the mode specified.
        Ú
listenUNIXN)rO   r   r*   ru   s    rN   Ú	test_modezUNIXTestsBuilder.test_modeå   s,   € ð
 	�Š�| T§[¢[¡]¤]µM±O´OÑDÔDÐDÐDÐDrP   ú8Abstract namespace UNIX sockets only supported on Linux.c                 ó  — t          | ¦  «        }|                      ¦   «         }|                     d|z   t          ¦   «         ¦  «        }|                      |                     ¦   «         t          d|z   ¦  «        ¦  «         dS )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)rZ   rC   rŽ   r*   rF   ÚgetHostr   ©rH   rJ   rL   Úports       rN   Ú#test_listenOnLinuxAbstractNamespacez4UNIXTestsBuilder.test_listenOnLinuxAbstractNamespaceì   so   € õ ˜TÑ"Ô"ˆØ×#Ò#Ñ%Ô%ˆØ×!Ò! $¨¡+­}©¬Ñ?Ô?ˆØ×Ò˜Ÿš™œ­°T¸D±[Ñ)AÔ)AÑBÔBÐBÐBÐBrP   c                 ó   — d„ }|                       t          j        d|¦  «         |                      ¦   «         }|                      t
          ¦  «        5  |                     dt          ¦   «         ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z•
        L{IReactorUNIX.listenUNIX} raises L{CannotListenError} if the
        underlying port's createInternetSocket raises a socket error.
        c                 ó    — t          d¦  «        ‚)Nz FakeBasePort forced socket.error)ÚOSErrorru   s    rN   ÚraiseSocketErrorz=UNIXTestsBuilder.test_listenFailure.<locals>.raiseSocketError  s   € ÝÐ<Ñ=Ô=Ð=rP   ÚcreateInternetSocketznot-usedN)Úpatchr   ÚBasePortrC   ÚassertRaisesr!   rŽ   r*   )rH   rš   rL   s      rN   Útest_listenFailurez#UNIXTestsBuilder.test_listenFailureü   sÑ   € ð	>ð 	>ð 	>ð 	�
Š
•4”=Ð"8Ð:JÑKÔKÐKØ×#Ò#Ñ%Ô%ˆØ×ÒÕ0Ñ1Ô1ð 	<ð 	<Ø×Ò˜z­=©?¬?Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s   Á#BÂBÂ
Bc                 ó  — t          | ¦  «        }|                      ¦   «         }|                     d|z   t          ¦   «         ¦  «        }|                      |                     ¦   «         t          d|z   ¦  «        ¦  «         dS )zc
        L{IReactorUNIX.connectUNIX} also accepts a Linux abstract namespace
        path.
        r’   N)rZ   rC   ÚconnectUNIXr(   rF   ÚgetDestinationr   )rH   rJ   rL   Ú	connectors       rN   Ú$test_connectToLinuxAbstractNamespacez5UNIXTestsBuilder.test_connectToLinuxAbstractNamespace
  ss   € õ ˜TÑ"Ô"ˆØ×#Ò#Ñ%Ô%ˆØ×'Ò'¨¨t©µ]±_´_ÑEÔEˆ	Ø×Ò˜×1Ò1Ñ3Ô3µ[ÀÈÁÑ5MÔ5MÑNÔNÐNÐNÐNrP   c                 ó2  —  G d„ dt           ¦  «        } |¦   «         } |¦   «         }t          | ||| j        ¦  «         |                      |j        d         |j        d         ¦  «         |                      |j        d         |j        d         ¦  «         dS )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                   ó   — e Zd Zd„ ZdS )ú4UNIXTestsBuilder.test_addresses.<locals>.SaveAddressc                 ó¢   — t          |                     ¦   «         |                     ¦   «         ¬¦  «        | _        |                     ¦   «          d S )N)ÚhostÚpeer)Údictr“   ÚgetPeerÚ	addressesrt   )rH   rq   s     rN   ÚmakeConnectionzCUNIXTestsBuilder.test_addresses.<locals>.SaveAddress.makeConnection   sO   € Ý!%Ø"×*Ò*Ñ,Ô,°9×3DÒ3DÑ3FÔ3Fð"ñ "ô "�”ð ×(Ò(Ñ*Ô*Ð*Ð*Ð*rP   N)rQ   rR   rS   r®   rU   rP   rN   ÚSaveAddressr§     s#   € € € € € ð+ð +ð +ð +ð +rP   r¯   r©   rª   N)r,   r0   Ú	endpointsrF   r­   )rH   r¯   rd   rh   s       rN   Útest_addresseszUNIXTestsBuilder.test_addresses  s­   € ð	+ð 	+ð 	+ð 	+ð 	+Õ-ñ 	+ô 	+ð 	+ð �‘”ˆØ�‘”ˆå  f¨f°d´nÑEÔEÐEà×Ò˜Ô)¨&Ô1°6Ô3CÀFÔ3KÑLÔLÐLØ×Ò˜Ô)¨&Ô1°6Ô3CÀFÔ3KÑLÔLÐLÐLÐLrP   c                 ó´  ‡ ‡‡‡— ddl mŠ t          ¦   «         Š‰                     d¦  «         t          ‰                     ¦   «         d¦  «        Št          ¦   «         }|                     ¦   «         }ˆˆˆ fd„}|                     |¦  «         |                     t          d¦  «         | 
                    ˆfd„¦  «         t          ‰ ‰|‰ j        ¦  «         dS )	z¤
        L{IUNIXTransport.sendFileDescriptor} accepts an integer file descriptor
        and sends a copy of it to the process reading from the connection.
        r   )Úfromfd)r>   r   ó   junkc                 ó<  •—  ‰| t           t          ¦  «        }t          | ¦  «         ‰                     ‰                     ¦   «         |                     ¦   «         ¦  «         ‰                     ‰                     ¦   «         |                     ¦   «         ¦  «         d S rx   )r
   r   r   rF   ÚgetsocknameÚassertNotEqualÚfileno)rƒ   Úreceivedr³   ÚsrH   s     €€€rN   ÚcheckDescriptorzAUNIXTestsBuilder.test_sendFileDescriptor.<locals>.checkDescriptor=  s€   ø€ Ø�v˜j­'µ;Ñ?Ô?ˆHå�*ÑÔÐð ×Ò˜QŸ]š]™_œ_¨h×.BÒ.BÑ.DÔ.DÑEÔEÐEð
 ×Ò §¢¡
¤
¨H¯OªOÑ,=Ô,=Ñ>Ô>Ð>Ð>Ð>rP   z-Sending file descriptor encountered a problemc                 ó6   •— ‰j                              ¦   «         S rx   ©rq   rt   ©Úignoredrd   s    €rN   ú<lambda>z:UNIXTestsBuilder.test_sendFileDescriptor.<locals>.<lambda>M  ó   ø€  &Ô"2×"AÒ"AÑ"CÔ"C€ rP   N)r   r³   Úbindrk   r¸   r}   r€   ÚaddCallbackÚ
addErrbackr:   ÚaddBothr0   r°   )rH   rh   Údr»   r³   rº   rd   s   `   @@@rN   Útest_sendFileDescriptorz(UNIXTestsBuilder.test_sendFileDescriptor.  sé   øøøø€ ð 	"Ð!Ð!Ð!Ð!Ð!å‰HŒHˆØ	�Šˆw‰ŒˆÝ# A§H¢H¡J¤J°Ñ8Ô8ˆå&Ñ(Ô(ˆØ×$Ò$Ñ&Ô&ˆð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	
�Š�oÑ&Ô&Ð&Ø	�Š•SÐIÑJÔJÐJØ	�	Š	ÐCÐCÐCÐCÑDÔDÐDå  f¨f°d´nÑEÔEÐEÐEÐErP   c                 óì   —  G d„ dt           ¦  «        } G d„ dt           ¦  «        } |¦   «         } |¦   «         }||_        t          | ||| j        ¦  «         |                      |j        d¦  «         dS )z…
        If a L{IUNIXTransport.sendFileDescriptor} call fills up
        the send buffer, any registered producer is paused.
        c                   ó   — e Zd Zd„ ZdS )úSUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.DoesNotReadc                 ó8   — | j                              ¦   «          d S rx   )rq   ÚpauseProducingru   s    rN   rv   zbUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.DoesNotRead.connectionMadeY  s   € Ø”×-Ò-Ñ/Ô/Ð/Ð/Ð/rP   N©rQ   rR   rS   rv   rU   rP   rN   ÚDoesNotReadrÊ   X  s#   € € € € € ð0ð 0ð 0ð 0ð 0rP   rÎ   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ú`UNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptorsFc                 ó(  ‡ — t          ¦   «         ‰ _         ‰ j                             ‰ d¦  «         ˆ fd„}t          |¦  «        ‰ _        ‰ j        j        ‰ j        _        ‰ j                             d¦  «                             t          d¦  «         d S )NTc                  óž   •— ‰ j                              ‰ j                             ¦   «         ¦  «         ‰ j                              d¦  «         d S )Nó   x)rq   rr   r   r¸   rs   ru   s   €rN   ÚsenderzUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.connectionMade.<locals>.senderc  sC   ø€ Ø”N×5Ò5°d´k×6HÒ6HÑ6JÔ6JÑKÔKÐKØ”N×(Ò(¨Ñ.Ô.Ð.Ð.Ð.rP   r   zSend loop failure)
r   rq   ÚregisterProducerr+   ÚtaskrL   ÚclockÚstartrÄ   r:   )rH   rÔ   s   ` rN   rv   zoUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.connectionMade_  s‰   ø€ Ý$™hœh�”Ø”×/Ò/°°dÑ;Ô;Ð;ð/ð /ð /ð /ð /õ (¨Ñ/Ô/�”	Ø"&¤.Ô"8�”	”Ø”	—’ Ñ"Ô"×-Ò-­cÐ3FÑGÔGÐGÐGÐGrP   c                 ó.   — |                       ¦   «          d S rx   ©Ú_disconnectru   s    rN   ÚstopProducingznUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.stopProducingk  ó   € Ø× Ò Ñ"Ô"Ð"Ð"Ð"rP   c                 ó.   — |                       ¦   «          d S rx   rÚ   ru   s    rN   ÚresumeProducingzpUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.resumeProducingn  rÝ   rP   c                 ón   — d| _         | j                             ¦   «          |                      ¦   «          d S )NT)Úpausedrq   ÚunregisterProducerrÛ   ru   s    rN   rÌ   zoUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors.pauseProducingq  s5   € Ø"�”Ø”×1Ò1Ñ3Ô3Ð3Ø× Ò Ñ"Ô"Ð"Ð"Ð"rP   c                 ó¦   — | j                              ¦   «          | j                             ¦   «          | j        j                             ¦   «          d S rx   )rÖ   Ústoprq   ÚabortConnectionÚotherru   s    rN   rÛ   zlUNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducing.<locals>.SendsManyFileDescriptors._disconnectv  sE   € Ø”	—’Ñ Ô Ð Ø”×.Ò.Ñ0Ô0Ð0Ø”
Ô$×4Ò4Ñ6Ô6Ð6Ð6Ð6rP   N)	rQ   rR   rS   rá   rv   rÜ   rß   rÌ   rÛ   rU   rP   rN   ÚSendsManyFileDescriptorsrÐ   \  sg   € € € € € ØˆFð
Hð 
Hð 
Hð#ð #ð #ð#ð #ð #ð#ð #ð #ð
7ð 7ð 7ð 7ð 7rP   rç   z*sendFileDescriptor producer was not pausedN)r,   ræ   r0   r°   Ú
assertTruerá   )rH   rÎ   rç   rd   rh   s        rN   Ú-test_sendFileDescriptorTriggersPauseProducingz>UNIXTestsBuilder.test_sendFileDescriptorTriggersPauseProducingQ  s­   € ð	0ð 	0ð 	0ð 	0ð 	0Õ-ñ 	0ô 	0ð 	0ð	7ð 	7ð 	7ð 	7ð 	7Õ':ñ 	7ô 	7ð 	7ð> *Ð)Ñ+Ô+ˆØ�‘”ˆØˆŒÝ  f¨f°d´nÑEÔEÐEà�Š˜œÐ'SÑTÔTÐTÐTÐTrP   c                 ó  ‡— t          ¦   «         }t          |                     ¦   «         d¦  «        Št          ¦   «         }g }|                     ¦   «         }|                     |j        ¦  «         |                     ˆfd„¦  «         t          | ‰|| j        ¦  «         |  	                    |d         t          ¦  «         |d                              t          ¦  «         |  	                    ‰j        j        t          ¦  «         dS )ag  
        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                 ó6   •— ‰j                              ¦   «         S rx   r½   r¾   s    €rN   rÀ   z=UNIXTestsBuilder.test_fileDescriptorOverrun.<locals>.<lambda>’  rÁ   rP   r   )r   rk   r¸   r}   r€   rÅ   Úappendr0   r°   ÚassertIsInstancer7   Útrapr"   rz   Úvaluer#   )rH   Úcargorh   ÚresultrÆ   rd   s        @rN   Útest_fileDescriptorOverrunz+UNIXTestsBuilder.test_fileDescriptorOverrun‚  sß   ø€ õ ‘”ˆÝ# E§L¢L¡N¤N°DÑ9Ô9ˆå&Ñ(Ô(ˆØˆØ×$Ò$Ñ&Ô&ˆØ	�	Š	�&”-Ñ Ô Ð Ø	�	Š	ÐCÐCÐCÐCÑDÔDÐDå  f¨f°d´nÑEÔEÐEà×Ò˜f Qœi­Ñ1Ô1Ð1ØˆqŒ	�ŠÕ'Ñ(Ô(Ð(Ø×Ò˜fœmÔ1Õ3HÑIÔIÐIÐIÐIrP   c                 óÎ  ‡— ddl m} ddlm} ddlm} d„ Št          t          ¦  «         G ˆfd„dt          ¦  «        ¦   «         } G d„ d	|¦  «        } |t          t          ¦  «        \  }}|                      |j        ¦  «         |                      |j        ¦  «          |¦   «         }	 |||	¦  «        }
t          ¦   «         \  }}t          ¦   «         \  }}|                      t          |¦  «         |                      t          |¦  «         d
}||g} ||¦  «        \  }} ||||¦  «         |
                     ¦   «          |                      t#          |	j        ¦  «        |¦  «         |                      t)          |¦  «                             t)          |	j        ¦  «        ¦  «        ¦  «         |	j        r+ˆfd„|D ¦   «         }|                      ||	j        ¦  «         dS dS )a‰  
        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.
        r   ©Ú
socketpair)Ú_SendmsgMixin©Úsendmsgc                 ó<   — t          | ¦  «        }|j        |j        fS rx   )r   Úst_devÚst_ino)rm   Úfss     rN   ÚdeviceInodeTuplezTUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.deviceInodeTuple¼  s   € Ý�r‘”ˆBØ”I˜rœyÐ)Ð)rP   c                   ó    •— e Zd Zd„ Zˆ fd„ZdS )úPUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeProtocolc                 ó"   — g | _         g | _        d S rx   )ÚfdsÚdeviceInodesReceivedru   s    rN   ro   zYUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeProtocol.__init__Â  s   € Ø�”Ø,.�Ô)Ð)Ð)rP   c                 ó    •— | j                              |¦  «         | j                              ‰|¦  «        ¦  «         t          |¦  «         d S rx   )r  rì   r  r   )rH   rm   rý   s     €rN   r„   zgUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeProtocol.fileDescriptorReceivedÆ  sI   ø€ Ø”—’ Ñ#Ô#Ð#ØÔ)×0Ò0Ð1AÐ1AÀ"Ñ1EÔ1EÑFÔFÐFÝ�b‘	”	�	�	�	rP   N)rQ   rR   rS   ro   r„   )rý   s   €rN   ÚFakeProtocolrÿ   À  s=   ø€ € € € € ð/ð /ð /ðð ð ð ð ð ð rP   r  c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )úPUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiveré   c                 ó"   — || _         || _        d S rx   )r   Úprotocol)rH   ÚsktÚprotos      rN   ro   zYUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver.__init__Î  s   € Ø!�”Ø %�”��rP   c                 ó   — d S rx   rU   rˆ   s     rN   Ú_dataReceivedz^UNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver._dataReceivedÒ  ó   € Ø�rP   c                 ó   — d S rx   rU   ru   s    rN   r“   zXUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver.getHostÕ  r  rP   c                 ó   — d S rx   rU   ru   s    rN   r¬   zXUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver.getPeerØ  r  rP   c                 ó   — d S rx   rU   )rH   Úos     rN   Ú_getLogPrefixz^UNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.FakeReceiver._getLogPrefixÛ  r  rP   N)	rQ   rR   rS   Ú
bufferSizero   r  r“   r¬   r  rU   rP   rN   ÚFakeReceiverr  Ë  sd   € € € € € ØˆJð&ð &ð &ðð ð ðð ð ðð ð ðð ð ð ð rP   r  s   some data needs to be sentc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS rU   rU   )Ú.0rm   rý   s     €rN   ú
<listcomp>zNUNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriver.<locals>.<listcomp>ú  s%   ø€ ÐIÐIÐI¸Ð 0Ð 0°Ñ 4Ô 4ÐIÐIÐIrP   N)r   rõ   Útwisted.internet.unixrö   Útwisted.python.sendmsgrø   r   r$   r,   r   r   Ú
addCleanupr   r   r   ÚdoReadrF   Úlenr  ÚassertFalseÚsetÚintersectionr  )rH   ÚancillaryPackerrõ   rö   rø   r  r  Ú
sendSocketÚ
recvSocketr  ÚreceiverÚ	fileOneFDÚfileOneNameÚ	fileTwoFDÚfileTwoNameÚ
dataToSendÚ	fdsToSendÚ	ancillaryÚexpectedCountÚdeviceInodesSentrý   s                       @rN   Ú)_sendmsgMixinFileDescriptorReceivedDriverz:UNIXTestsBuilder._sendmsgMixinFileDescriptorReceivedDriverš  sO  ø€ ð: 	&Ð%Ð%Ð%Ð%Ð%à7Ð7Ð7Ð7Ð7Ð7Ø2Ð2Ð2Ð2Ð2Ð2ð	*ð 	*ð 	*õ 
Õ,Ñ	-Ô	-ð	ð 	ð 	ð 	ð 	ð 	ð 	Õ.ñ 	ô 	ñ 
.Ô	-ð	ð	ð 	ð 	ð 	ð 	˜=ñ 	ô 	ð 	ð& ", ­Gµ[Ñ!AÔ!AÑˆ
�JØ�Š˜
Ô(Ñ)Ô)Ð)Ø�Š˜
Ô(Ñ)Ô)Ð)à�‘”ˆØ�< 
¨EÑ2Ô2ˆõ ")¡¤Ñˆ	�;Ý!(¡¤Ñˆ	�;Ø�Š� Ñ,Ô,Ð,Ø�Š� Ñ,Ô,Ð,à2ˆ
Ø 	Ð*ˆ	Ø#2 ?°9Ñ#=Ô#=Ñ ˆ	�=Øˆ�
˜J¨	Ñ2Ô2Ð2à�ŠÑÔÐð 	×Ò�˜UœY™œ¨Ñ7Ô7Ð7ð 	×Ò�˜Y™œ×4Ò4µS¸¼±^´^ÑDÔDÑEÔEÐEð Œ9ð 	KØIÐIÐIÐI¸yÐIÑIÔIÐØ×ÒÐ-¨uÔ/IÑJÔJÐJÐJÐJð	Kð 	KrP   c                 óH   ‡— ddl mŠ ˆfd„}|                      |¦  «         dS )zß
        _SendmsgMixin handles multiple file descriptors per recvmsg, calling
        L{IFileDescriptorReceiver.fileDescriptorReceived} once per received
        file descriptor. Scenario: single CMSG with two FDs.
        r   ©Ú
SCM_RIGHTSc                 ó<   •— t           ‰t          dg| ¢R Ž fg}d}||fS )NÚiié   ©r   r   ©r*  r+  r,  r1  s      €rN   r!  z[UNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgOneCMSG.<locals>.ancillaryPacker  s2   ø€ Ý$ jµ$°tÐ2H¸iÐ2HÐ2HÐ2HÐIÐJˆIØˆMØ˜mÐ+Ð+rP   N©r  r1  r.  ©rH   r!  r1  s     @rN   Ú1test_multiFileDescriptorReceivedPerRecvmsgOneCMSGzBUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgOneCMSGý  sL   ø€ ð 	6Ð5Ð5Ð5Ð5Ð5ð	,ð 	,ð 	,ð 	,ð 	,ð
 	×6Ò6°ÑGÔGÐGÐGÐGrP   z=Multi control message ancillary sendmsg not supported on Mac.c                 óH   ‡— ddl mŠ ˆfd„}|                      |¦  «         dS )zá
        _SendmsgMixin handles multiple file descriptors per recvmsg, calling
        L{IFileDescriptorReceiver.fileDescriptorReceived} once per received
        file descriptor. Scenario: two CMSGs with one FD each.
        r   r0  c                 ó,   •— ˆfd„| D ¦   «         }d}||fS )Nc                 ó@   •— g | ]}t           ‰t          d |¦  «        f‘ŒS )Úir5  )r  rm   r1  s     €rN   r  zpUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGs.<locals>.ancillaryPacker.<locals>.<listcomp>  s(   ø€ ÐUÐUÐUÀR�* jµ$°s¸B±-´-Ð@ÐUÐUÐUrP   r4  rU   r6  s      €rN   r!  z\UNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGs.<locals>.ancillaryPacker  s,   ø€ ØUÐUÐUÐUÈ9ÐUÑUÔUˆIØˆMØ˜mÐ+Ð+rP   Nr7  r8  s     @rN   Ú2test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGszCUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgTwoCMSGs  sL   ø€ ð 	6Ð5Ð5Ð5Ð5Ð5ð	,ð 	,ð 	,ð 	,ð 	,ð
 	×6Ò6°ÑGÔGÐGÐGÐGrP   c                 óP  ‡‡— ddl mŠ d„ }ˆfd„}g }t          |j        ¦  «         |                      t
          |j        ¦  «         |                      ‰d|¦  «         |                      |¦  «         dŠt          ˆfd„|D ¦   «         ¦  «        }|  	                    |d¦  «         d	S )
zØ
        _SendmsgMixin handles multiple file descriptors per recvmsg, calling
        L{IFileDescriptorReceiver.fileDescriptorReceived} once per received
        file descriptor. Scenario: unsupported CMSGs.
        r   r÷   c                 ó   — g }d}||fS )Nr   rU   )r*  r+  r,  s      rN   r!  z[UNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG.<locals>.ancillaryPacker0  s   € ØˆIØˆMØ˜mÐ+Ð+rP   c                 ó@   •— d}dg}d}‰                      |||¦  «        S )Ns	   some data)NNrP   r   )ÚReceivedMessage)r
  ÚargsÚkwargsrn   r+  Úflagsrø   s         €rN   ÚfakeRecvmsgUnsupportedAncillaryzkUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG.<locals>.fakeRecvmsgUnsupportedAncillary5  s-   ø€ ØˆDØ*Ð+ˆIØˆEØ×*Ò*¨4°¸EÑBÔBÐBrP   Úrecvmsgz#received unsupported ancillary datac              3   ó,   •K  — | ]}‰|d          v V — ŒdS )ÚformatNrU   )r  ÚeÚexpectedMessages     €rN   ú	<genexpr>zUUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG.<locals>.<genexpr>D  s,   øè è € ÐCÐC°q�O q¨¤{Ð2ÐCÐCÐCÐCÐCÐCrP   z+Expected message not found in logged eventsN)
Útwisted.pythonrø   r9   rì   r  r;   rœ   r.  Úanyrè   )rH   r!  rF  ÚeventsÚfoundrK  rø   s        @@rN   Ú1test_multiFileDescriptorReceivedPerRecvmsgBadCMSGzBUNIXTestsBuilder.test_multiFileDescriptorReceivedPerRecvmsgBadCMSG!  sâ   øø€ ð 	+Ð*Ð*Ð*Ð*Ð*ð	,ð 	,ð 	,ð
	Cð 	Cð 	Cð 	Cð 	Cð ˆÝ�F”MÑ"Ô"Ð"Ø�Š�¨¬Ñ6Ô6Ð6à�
Š
�7˜IÐ'FÑGÔGÐGØ×6Ò6°ÑGÔGÐGð @ˆÝÐCÐCÐCÐC¸FÐCÑCÔCÑCÔCˆØ�Š˜ÐLÑMÔMÐMÐMÐMrP   c                 óö  — ddl m}  |¦   «         \  }}g }t          |j        ¦  «         |                      t
          |j        ¦  «          G d„ dt          ¦  «        } ||                     ¦   «         d¦  «        }t          ¦   «         }t          | ||| j
        ¦  «         |                     ¦   «          |                     d¦  «         |                      d|                     d¦  «        ¦  «         d	}d
}	t          |j        |j        |	|¬¦  «        }
|D ]:}|
                     ¦   «         D ] \  }}||                     |¦  «        k    r nŒ! dS Œ;|                      d|
›dt+          |¦  «        ›d�¦  «         dS )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   rô   c                   ó   — e Zd Zd„ ZdS )úRUNIXTestsBuilder.test_avoidLeakingFileDescriptors.<locals>.RecordEndpointAddressesc                 ó²   — | j                              ¦   «         | _        | j                              ¦   «         | _        t
                               | ¦  «         d S rx   )rq   r“   ÚhostAddressr¬   ÚpeerAddressrk   rv   ru   s    rN   rv   zaUNIXTestsBuilder.test_avoidLeakingFileDescriptors.<locals>.RecordEndpointAddresses.connectionMade\  sH   € Ø#'¤>×#9Ò#9Ñ#;Ô#;�Ô Ø#'¤>×#9Ò#9Ñ#;Ô#;�Ô Ý"×1Ò1°$Ñ7Ô7Ð7Ð7Ð7rP   NrÍ   rU   rP   rN   ÚRecordEndpointAddressesrT  [  s#   € € € € € ð8ð 8ð 8ð 8ð 8rP   rX  r´   FrP   r  zˆ%(protocolName)s (on %(hostAddress)r) does not provide IFileDescriptorReceiver; closing file descriptor received (from %(peerAddress)r).r,   )rV  rW  ÚprotocolNamerI  zExpected event (z) not found in logged events (ú)N)r   rõ   r9   rì   r  r;   rk   r¸   r,   r0   r°   r   ÚsetblockingrF   Úrecvr«   rW  rV  ÚitemsÚgetr   r	   )rH   rõ   ÚprobeClientÚprobeServerrO  rX  rd   rh   rI  ÚclsNameÚexpectedEventÚlogEventÚkÚvs                 rN   Ú test_avoidLeakingFileDescriptorsz1UNIXTestsBuilder.test_avoidLeakingFileDescriptorsG  sí  € ð 	&Ð%Ð%Ð%Ð%Ð%à#- :¡<¤<Ñ ˆ�[àˆÝ�F”MÑ"Ô"Ð"Ø�Š�¨¬Ñ6Ô6Ð6ð	8ð 	8ð 	8ð 	8ð 	8Õ&8ñ 	8ô 	8ð 	8ð )Ð(¨×);Ò);Ñ)=Ô)=¸wÑGÔGˆÝ$Ñ&Ô&ˆå  f¨f°d´nÑEÔEÐEð 	×ÒÑÔÐð 	×Ò Ñ&Ô&Ð&Ø×Ò˜˜k×.Ò.¨tÑ4Ô4Ñ5Ô5Ð5ð:ð 	ð
 (ˆõ ØÔ*ØÔ*Ø Øð	
ñ 
ô 
ˆð ð 	ð 	ˆHØ%×+Ò+Ñ-Ô-ð ð ‘��1Ø˜Ÿš Q™œÒ'Ð'Ø�Eð (ð ��ð ð �IŠIˆIð "�M�MÝØñô ð ð ðñô ð ð ð rP   c                 ó´  ‡ — t          t          ¦  «         G ˆ fd„dt          ¦  «        ¦   «         }t          ¦   «         }t	          |                     ¦   «         d¦  «        } |¦   «         }t          ‰ ||‰ j        ¦  «         ‰                      t          |j
        d         ¦  «         ‰                      dt          |j
        dd…         ¦  «        ¦  «         dS )z„
        L{IUNIXTransport.sendFileDescriptor} sends file descriptors before
        L{ITransport.write} sends normal bytes.
        c                   ó&   •— e Zd Zd„ Zˆ fd„Zd„ ZdS )úJUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEventsc                 ó<   — t          j        | ¦  «         g | _        d S rx   )r,   rv   rO  ru   s    rN   rv   zYUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEvents.connectionMade�  s   € Ý#Ô2°4Ñ8Ô8Ð8Ø �”��rP   c                 óŒ   •— ‰                      t          |¦  «         | j                             t	          |¦  «        ¦  «         d S rx   )r  r   rO  rì   Útype)Ú	innerSelfrƒ   rH   s     €rN   r„   zaUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEvents.fileDescriptorReceived¡  s<   ø€ Ø—’¥ zÑ2Ô2Ð2ØÔ ×'Ò'­¨ZÑ(8Ô(8Ñ9Ô9Ð9Ð9Ð9rP   c                 ó:   — | j                              |¦  «         d S rx   )rO  Úextendrˆ   s     rN   r‰   zWUNIXTestsBuilder.test_descriptorDeliveredBeforeBytes.<locals>.RecordEvents.dataReceived¥  s   € Ø”×"Ò" 4Ñ(Ô(Ð(Ð(Ð(rP   N)rQ   rR   rS   rv   r„   r‰   ru   s   €rN   ÚRecordEventsri  ›  sL   ø€ € € € € ð!ð !ð !ð:ð :ð :ð :ð :ð)ð )ð )ð )ð )rP   rp  r´   r   é   N)r   r$   r,   r   rk   r¸   r0   r°   rF   ÚintrO  Úbytes)rH   rp  rð   rd   rh   s   `    rN   Ú#test_descriptorDeliveredBeforeBytesz4UNIXTestsBuilder.test_descriptorDeliveredBeforeBytes”  sÝ   ø€ õ 
Õ,Ñ	-Ô	-ð
	)ð 
	)ð 
	)ð 
	)ð 
	)ð 
	)ð 
	)Õ.ñ 
	)ô 
	)ñ 
.Ô	-ð
	)õ ‘”ˆÝ# E§L¢L¡N¤N°GÑ<Ô<ˆØ�‘”ˆå  f¨f°d´nÑEÔEÐEà×Ò�˜fœm¨AÔ.Ñ/Ô/Ð/Ø×Ò˜¥%¨¬°a°b°bÔ(9Ñ":Ô":Ñ;Ô;Ð;Ð;Ð;rP   N)rQ   rR   rS   rT   r'   r]   r\   r°   r�   r   r=   ÚisLinuxr–   rŸ   r¤   r±   rø   ÚsendmsgSkipReasonrÇ   ré   rò   r.  r9  ÚisMacOSXr>  rQ  rf  rt  rU   rP   rN   rŒ   rŒ   Ü   s›  € € € € € ðð ð '˜Ðà�‘”€IðEð Eð Eð €VØˆHÔÑÔÐØEñô ð
Cð 
Cñ	ô ð
Cð<ð <ð <ð €VØˆHÔÑÔÐØEñô ðOð Oñ	ô ðOðMð Mð Mð, €V�ˆKÐ*Ñ+Ô+ð Fð  Fñ ,Ô+ð FðD €V�ˆKÐ*Ñ+Ô+ð.Uð .Uñ ,Ô+ð.Uð` €V�ˆKÐ*Ñ+Ô+ðJð Jñ ,Ô+ðJð.aKð aKð aKðF €V�ˆKÐ*Ñ+Ô+ðHð Hñ ,Ô+ðHð €VØˆÔÑÔØGñô ð €V�ˆKÐ*Ñ+Ô+ðHð Hñ ,Ô+ñ	ô ð
Hð €V�ˆKÐ*Ñ+Ô+ð#Nð #Nñ ,Ô+ð#NðJ €V�ˆKÐ*Ñ+Ô+ðJð Jñ ,Ô+ðJðX €V�ˆKÐ*Ñ+Ô+ð<ð <ñ ,Ô+ð<ð <ð <rP   rŒ   c                   ón   — e Zd ZdZej        fZd„ Z e e	j
        ¦   «          d¦  «        d„ ¦   «         ZdS )ÚUNIXDatagramTestsBuilderzE
    Builder defining tests relating to L{IReactorUNIXDatagram}.
    c                 óp   — |                       d|                      ¦   «         t          ¦   «         ¦  «         dS )zƒ
        The UNIX socket created by L{IReactorUNIXDatagram.listenUNIXDatagram}
        is created with the mode specified.
        ÚlistenUNIXDatagramN)rO   r   r)   ru   s    rN   Útest_listenModez(UNIXDatagramTestsBuilder.test_listenMode¼  s0   € ð
 	�ŠÐ+¨T¯[ª[©]¬]Õ<LÑ<NÔ<NÑOÔOÐOÐOÐOrP   r�   c                 ó  — t          | ¦  «        }|                      ¦   «         }|                     d|z   t          ¦   «         ¦  «        }|                      |                     ¦   «         t          d|z   ¦  «        ¦  «         dS )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)rZ   rC   r{  r)   rF   r“   r   r”   s       rN   r–   z<UNIXDatagramTestsBuilder.test_listenOnLinuxAbstractNamespaceÃ  sr   € õ ˜TÑ"Ô"ˆØ×#Ò#Ñ%Ô%ˆØ×)Ò)¨$°©+Õ7GÑ7IÔ7IÑJÔJˆØ×Ò˜Ÿš™œ­°T¸D±[Ñ)AÔ)AÑBÔBÐBÐBÐBrP   N)rQ   rR   rS   rT   r   ÚIReactorUNIXDatagramr]   r|  r   r=   ru  r–   rU   rP   rN   ry  ry  ²  s�   € € € € € ðð ð %Ô9Ð;Ðð
Pð Pð Pð €VØˆHÔÑÔÐØEñô ð	Cð 	Cñ	ô ð	Cð 	Cð 	CrP   ry  c                   óV   — e Zd ZU dZeefZeee	e
                           ed<   d„ Zd„ ZdS )ÚSocketUNIXMixinzb
    Mixin which uses L{IReactorSocket.adoptStreamPort} to hand out listening
    UNIX ports.
    r]   c                 ó‚  — t          t          ¦  «        }t          dd¬¦  «        }|                     |¦  «         |                     d¦  «         |                     d¦  «         	 |                     |                     ¦   «         |j        |¦  «        | 	                    ¦   «          S # | 	                    ¦   «          w xY w)zj
        Get a UNIX port from a reactor, wrapping an already-initialized file
        descriptor.
        r_   r`   ra   é   F)
r   r   r   rÂ   Úlistenr[  ÚadoptStreamPortr¸   Úfamilyr   )rH   rL   rK   ÚportSockrJ   s        rN   ÚgetListeningPortz SocketUNIXMixin.getListeningPortÞ  s¨   € õ
 �'‘?”?ˆå˜W¨#Ð.Ñ.Ô.ˆØ�Š�dÑÔÐØ�Š˜ÑÔÐØ×Ò˜UÑ#Ô#Ð#ð	Ø×*Ò*¨8¯?ª?Ñ+<Ô+<¸h¼oÈwÑWÔWà�NŠNÑÔÐÐøˆH�NŠNÑÔÐÐøøøs   Á&-B( Â(B>c                 ó8   — |                      |j        |¦  «        S ©aZ  
        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¡   rf   ©rH   rL   ÚaddressrK   s       rN   ÚconnectToListenerz!SocketUNIXMixin.connectToListenerî  ó   € ð ×"Ò" 7¤<°Ñ9Ô9Ð9rP   N)rQ   rR   rS   rT   r'   r&   r]   r   r   r   r   ri   r‡  r�  rU   rP   rN   r€  r€  Ó  sm   € € € € € € ðð ð 	Øð?Ð˜ ¨$¨y¬/Ô!:Ô;ð ð ñ ð
ð ð ð :ð :ð :ð :ð :rP   r€  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚListenUNIXMixinzZ
    Mixin which uses L{IReactorTCP.listenUNIX} to hand out listening UNIX
    ports.
    c                 óP   — t          dd¬¦  «        }|                     ||¦  «        S )z0
        Get a UNIX port from a reactor
        r_   r`   ra   )r   rŽ   )rH   rL   rK   rJ   s       rN   r‡  z ListenUNIXMixin.getListeningPort  s,   € õ
 ˜W¨#Ð.Ñ.Ô.ˆØ×!Ò! $¨Ñ0Ô0Ð0rP   c                 ó8   — |                      |j        |¦  «        S r‰  rŠ  r‹  s       rN   r�  z!ListenUNIXMixin.connectToListener  rŽ  rP   N)rQ   rR   rS   rT   r‡  r�  rU   rP   rN   r�  r�     s<   € € € € € ðð ð
1ð 1ð 1ð:ð :ð :ð :ð :rP   r�  c                   óP   — e Zd ZU efZeeee                           e	d<   d„ Z
d„ ZdS )ÚUNIXPortTestsMixinr]   c                 óX   — |› dt          |                     ¦   «         j        ¦  «        ›�S )zZ
        Get the message expected to be logged when a UNIX port starts listening.
        z starting on ©r6   r“   rf   )rH   r•   rK   s      rN   Ú#getExpectedStartListeningLogMessagez6UNIXPortTestsMixin.getExpectedStartListeningLogMessage#  s+   € ð ÐMÐM­°T·\²\±^´^Ô5HÑ(IÔ(IÐMÐMÐMrP   c                 óV   — dt          |                     ¦   «         j        ¦  «        › d�S )zJ
        Get the expected connection lost message for a UNIX port
        z(UNIX Port z Closed)r–  )rH   r•   s     rN   ÚgetExpectedConnectionLostLogMsgz2UNIXPortTestsMixin.getExpectedConnectionLostLogMsg)  s)   € ð I�\¨$¯,ª,©.¬.Ô*=Ñ>Ô>ÐHÐHÐHÐHrP   N)rQ   rR   rS   r'   r]   r   r   r   r   ri   r—  r™  rU   rP   rN   r”  r”     s]   € € € € € € Ø?K¸oÐ˜ ¨$¨y¬/Ô!:Ô;ÐMÐMÑMðNð Nð NðIð Ið Ið Ið IrP   r”  c                   ó   — e Zd ZdZdS )ÚUNIXPortTestsBuilderz.
    Tests for L{IReactorUNIX.listenUnix}
    N©rQ   rR   rS   rT   rU   rP   rN   r›  r›  0  ó   € € € € € ðð ð ð rP   r›  c                   ó   — e Zd ZdZdS )ÚUNIXFDPortTestsBuilderz3
    Tests for L{IReactorUNIX.adoptStreamPort}
    Nrœ  rU   rP   rN   rŸ  rŸ  ;  r�  rP   rŸ  c                   ó*   — e Zd ZeeefZd„ Zd„ Zd„ Z	dS )Ú%UNIXAdoptStreamConnectionTestsBuilderc                 óÂ  — |                       ¦   «         }ddlm}  G d„ dt          ¦  «        } |t          t
          ¦  «        \  }}|                     d¦  «         |                      |j        ¦  «         |                      |j        ¦  «         | 	                    ¦   «         } |¦   «         }| 
                    |t          |¦  «        }|                      |¦  «         dS )z€
        {IReactorSocket.adoptStreamConnection} returns None if the given
        factory's buildProtocol returns None.
        r   rô   c                   ó   — e Zd Zd„ ZdS )úXUNIXAdoptStreamConnectionTestsBuilder.test_buildProtocolReturnsNone.<locals>.NoneFactoryc                 ó   — d S rx   rU   )rH   rŒ  s     rN   ÚbuildProtocolzfUNIXAdoptStreamConnectionTestsBuilder.test_buildProtocolReturnsNone.<locals>.NoneFactory.buildProtocol\  s   € Ø�trP   N)rQ   rR   rS   r¦  rU   rP   rN   ÚNoneFactoryr¤  [  s#   € € € € € ðð ð ð ð rP   r§  FN)rC   r   rõ   r*   r   r   r[  r  r   r¸   ÚadoptStreamConnectionÚassertIsNone)	rH   rL   rõ   r§  Ús1Ús2Ús1FDrK   rñ   s	            rN   Útest_buildProtocolReturnsNonezCUNIXAdoptStreamConnectionTestsBuilder.test_buildProtocolReturnsNoneM  së   € ð ×#Ò#Ñ%Ô%ˆà%Ð%Ð%Ð%Ð%Ð%ð	ð 	ð 	ð 	ð 	�-ñ 	ô 	ð 	ð ��G¥[Ñ1Ô1‰ˆˆBØ
�Š�uÑÔÐØ�Š˜œÑ!Ô!Ð!Ø�Š˜œÑ!Ô!Ð!à�yŠy‰{Œ{ˆØ�+‘-”-ˆØ×.Ò.¨tµW¸gÑFÔFˆØ×Ò˜&Ñ!Ô!Ð!Ð!Ð!rP   c                 ó¾   ‡ — ˆ fd„}‰                       ¦   «         }‰                      |dd¬¦  «        }|                     |¦  «         ‰                      |¦  «         dS )z>
        Helper method to test UNIX server addresses.
        c                 óþ  •— | \  }}}	 t          d|                     ¦   «         j        ¦  «        }‰                     d|j        j        ›d|›d�t          |j        ¦  «        ¦  «         ‰                     d|j        j        ›d|›�|j        j        ¦  «         |j        j	        d         }‰ 
                    |t          ¦  «         |j                             ¦   «          d S # |j                             ¦   «          w xY w)Nr>   z<AccumulatingProtocol #z on ú>zAccumulatingProtocol,ú,r   )r8   r“   rf   rF   rq   Ú	sessionnoÚstrÚlogstrrK   ÚpeerAddressesrí   r   rt   )Ú	protocolsrh   rd   r•   ÚportPathrW  rH   s         €rN   Ú	connectedzOUNIXAdoptStreamConnectionTestsBuilder.test_ServerAddressUNIX.<locals>.connectedn  s  ø€ Ø#,Ñ ˆF�F˜Dð2Ý6°r¸4¿<º<¹>¼>Ô;NÑOÔO�Ø× Ò Ð àÔ'Ô1Ð1Ð1°8°8°8ð=å˜Ô(Ñ)Ô)ñô ð ð × Ò Ð àÔ'Ô1Ð1Ð1°8°8ð=àÔ$Ô+ñô ð ð %œnÔ:¸1Ô=�Ø×%Ò% kµ;Ñ?Ô?Ð?ð Ô ×/Ò/Ñ1Ô1Ð1Ð1Ð1ø�Ô ×/Ò/Ñ1Ô1Ð1Ð1øøøs   ‰B=C! Ã!C<N)Ú	interfaceÚaddressFamily)rC   ÚgetConnectedClientAndServerrÃ   Ú
runReactor)rH   r¸  rL   rÆ   s   `   rN   Útest_ServerAddressUNIXz<UNIXAdoptStreamConnectionTestsBuilder.test_ServerAddressUNIXi  s|   ø€ ð
	2ð 	2ð 	2ð 	2ð 	2ð, ×#Ò#Ñ%Ô%ˆØ×,Ò,Ø˜t°4ð -ñ 
ô 
ˆð 	
�Š�iÑ Ô Ð Ø�Š˜Ñ Ô Ð Ð Ð rP   c                 ó$  ‡‡‡‡— t          ¦   «         }t          ¦   «         |_        t          ¦   «         Št          ¦   «         ‰_        t          ¦   «         ‰_        t	          ¦   «         }t          ¦   «         |_        t          ¦   «         |_        t          dd¬¦  «        }‰                     ||¦  «        Šˆˆfd„}|j                             |¦  «         t          |j        ‰j        g¦  «        }ˆfd„}	| 	                    |	¦  «         t          ¦   «         Š‰ 
                    |	¦  «         t          |j        ‰j        g¦  «        }
ˆˆfd„}|
                     |¦  «         ‰                     ‰                     ¦   «         j        |¦  «         ‰S )a0  
        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.
        r_   r`   ra   c                 óÖ   •— ‰                      | j        ¦  «         ‰                     | j        ¦  «         ‰                     | j                             ¦   «         t
          ‰¦  «         d S rx   )ÚremoveReaderrq   ÚremoveWriterr¨  r¸   r   )r  rL   rd   s    €€rN   ÚfirstServerConnectedz_UNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer.<locals>.firstServerConnected¡  s[   ø€ Ø× Ò  ¤Ñ1Ô1Ð1Ø× Ò  ¤Ñ1Ô1Ð1Ø×)Ò)¨%¬/×*@Ò*@Ñ*BÔ*BÅGÈVÑTÔTÐTÐTÐTrP   c                 ó>   •— ‰j         r‰                     ¦   «          | S rx   )Úrunningrä   )rñ   rL   s    €rN   rä   zOUNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer.<locals>.stop¬  s   ø€ ØŒð Ø—’‘”�ØˆMrP   c                 óB   •— | \  }}‰                      ||‰f¦  «         d S rx   )r‚   )r¶  rh   rd   Údeferredr•   s      €€rN   rØ   zPUNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer.<locals>.startº  s-   ø€ Ø&‰NˆF�FØ×Ò˜v v¨tÐ4Ñ5Ô5Ð5Ð5Ð5rP   )r3   r   ÚprotocolConnectionMadeÚprotocolConnectionLostr2   r   rŽ   rÃ   r   rÅ   rÄ   r¡   r“   rf   )rH   rL   r¹  rº  ÚfirstServerrh   rJ   rÂ  ÚlostDeferredrä   ÚstartDeferredrØ   rÆ  r•   rd   s    `          @@@rN   r»  zAUNIXAdoptStreamConnectionTestsBuilder.getConnectedClientAndServer‹  s¬  øøøø€ õ &Ñ'Ô'ˆÝ-5©Z¬ZˆÔ*å Ñ"Ô"ˆÝ(0©
¬
ˆÔ%Ý(0©
¬
ˆÔ%å Ñ"Ô"ˆÝ(0©
¬
ˆÔ%Ý(0©
¬
ˆÔ%õ ˜W¨#Ð.Ñ.Ô.ˆØ×!Ò! $¨Ñ4Ô4ˆð	Uð 	Uð 	Uð 	Uð 	Uð 	Uð
 	Ô*×6Ò6Ð7KÑLÔLÐLå$ØÔ*¨FÔ,IÐJñ
ô 
ˆð	ð 	ð 	ð 	ð 	ð
 	×Ò˜TÑ"Ô"Ð"å‘:”:ˆØ×Ò˜DÑ!Ô!Ð!å%ØÔ*¨FÔ,IÐJñ
ô 
ˆð	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	×!Ò! %Ñ(Ô(Ð(à×Ò˜DŸLšL™NœNÔ/°Ñ8Ô8Ð8ØˆrP   N)
rQ   rR   rS   r%   r&   r'   r]   r­  r½  r»  rU   rP   rN   r¡  r¡  F  sS   € € € € € àØØðÐð"ð "ð "ð8 !ð  !ð  !ðD6ð 6ð 6ð 6ð 6rP   r¡  c                   ó>   — e Zd ZdZefZdZed„ ¦   «         Zd„ Z	d„ Z
dS )ÚUnixClientTestsBuilderz7
    Define tests for L{IReactorUNIX.connectUNIX}.
    Nc                 óF   — | j         €t          | ¦  «        | _         | j         S )z‹
        Return a path usable by C{connectUNIX} and C{listenUNIX}.

        @return: A path instance, built with C{_abstractPath}.
        )Ú_pathrZ   ru   s    rN   rJ   zUnixClientTestsBuilder.pathÔ  s#   € ð Œ:ÐÝ& tÑ,Ô,ˆDŒJØŒzÐrP   c                 ó8   — |                      | j        |¦  «        S )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Ž   rJ   ©rH   rL   rK   s      rN   rƒ  zUnixClientTestsBuilder.listenß  s   € ð ×!Ò! $¤)¨WÑ5Ô5Ð5rP   c                 ó8   — |                      | j        |¦  «        S )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¡   rJ   rÑ  s      rN   ÚconnectzUnixClientTestsBuilder.connectë  s   € ð ×"Ò" 4¤9¨gÑ6Ô6Ð6rP   )rQ   rR   rS   rT   r'   r]   rÏ  ÚpropertyrJ   rƒ  rÓ  rU   rP   rN   rÍ  rÍ  Ë  sd   € € € € € ðð ð '˜Ðà€Eàðð ñ „Xðð
6ð 
6ð 
6ð
7ð 
7ð 
7ð 
7ð 
7rP   rÍ  )jrT   Úhashlibr   Úosr   r   r   r   r   Úpprintr	   r   r
   r   r   r   Ústructr   Útempfiler   r   Útypingr   r   r   Úunittestr   r   Ú_AF_UNIXÚImportErrorÚzope.interfacer   r   Útwisted.internetr   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.connectionmixinsr,   r-   r.   r/   r0   Ú#twisted.internet.test.reactormixinsr1   Útwisted.internet.test.test_tcpr2   r3   r4   r5   Útwisted.python.compatr6   Útwisted.python.failurer7   Útwisted.python.filepathr8   Útwisted.python.logr9   r:   r;   Útwisted.python.reflectr<   Útwisted.python.runtimer=   rø   rv  r@   rZ   r\   rk   r}   rŒ   ry  r€  r�  r”  r›  rŸ  r¡  ÚglobalsÚupdateÚmakeTestCaseClassesrÍ  rU   rP   rN   ú<module>ró     s  ððð ð
 Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð ðØ*Ð*Ð*Ð*Ð*Ð*ð €G€Gøð ð ð ð Ø€G€G€Gðøøøð
 2Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð UÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø +Ð +Ð +Ð +Ð +Ð +à
ˆ-Ð0Ñ
1Ô
1€ØÐ Ø€=Ð)Ñ*Ô*Ð6àKð ð
<ð <ð <ð <ð <ñ <ô <ð <ð")ð )ð )ð?ð ?ð ?ð ?ð ?�/ñ ?ô ?ð ?ð,"ð "ð "ð "ð "Ð,ñ "ô "ð "ðJ €Ð$Ñ%Ô%ð;ð ;ð ;ð ;ð ;Ð/ñ ;ô ;ñ &Ô%ð;ð|S<ð S<ð S<ð S<ð S<�¨Ð8Lñ S<ô S<ð S<ðlCð Cð Cð Cð C˜°ñ Cô Cð CðB*:ð *:ð *:ð *:ð *:ñ *:ô *:ð *:ðZ:ð :ð :ð :ð :ñ :ô :ð :ð@Ið Ið Ið Ið Iñ Iô Ið Ið ð ð ð ð ØØØØñ	ô ð ðð ð ð ð ØØØØñ	ô ð ð{ð {ð {ð {ð {Ð,CÀ^ñ {ô {ð {ð| €�	„	× Ò Ð!×5Ò5Ñ7Ô7Ñ 8Ô 8Ð 8Ø €�	„	× Ò Ð)×=Ò=Ñ?Ô?Ñ @Ô @Ð @Ø €�	„	× Ò Ð%×9Ò9Ñ;Ô;Ñ <Ô <Ð <Ø €�	„	× Ò Ð'×;Ò;Ñ=Ô=Ñ >Ô >Ð >Ø €�	„	× Ò Ð6×JÒJÑLÔLÑ MÔ MÐ Mð*7ð *7ð *7ð *7ð *7˜^Ð-Cñ *7ô *7ð *7ðZ €�	„	× Ò Ð'×;Ò;Ñ=Ô=Ñ >Ô >Ð >Ð >Ð >s   ÁA ÁA!Á A!