§
    ÈtºfÝ$  ã                   ó^  — d Z ddlZddlZddl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 ddlmZ dd	lmZ  G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z e¦   «                              e                     ¦   «         ¦  «          e¦   «                              e                     ¦   «         ¦  «          e¦   «                              e                     ¦   «         ¦  «          e¦   «                              e                     ¦   «         ¦  «         dS )aD  
Tests for implementations of L{IReactorSocket}.

Generally only tests for failure cases are found here.  Success cases for
this interface are tested elsewhere.  For example, the success case for
I{AF_INET} is in L{twisted.internet.test.test_tcp}, since that case should
behave exactly the same as L{IReactorTCP.listenTCP}.
é    N)Úverify)ÚUnsupportedAddressFamily)ÚIReactorSocket)ÚDatagramProtocolÚServerFactory)ÚReactorBuilderÚneedsRunningReactor)Úerr)Úplatformc                   ó   — e Zd ZdZegZd„ ZdS )Ú&IReactorSocketVerificationTestsBuilderaO  
    Builder for testing L{IReactorSocket} implementations for required
    methods and method signatures.

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

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

    These tests will be skipped for reactors which do not claim to
    provide L{IReactorSocket}.
    c                 óˆ   — |                       ¦   «         }|                      t          j        t          |¦  «        ¦  «         dS )zf
        The reactor instance returned by C{buildReactor} provides
        L{IReactorSocket}.
        N)ÚbuildReactorÚ
assertTruer   ÚverifyObjectr   )ÚselfÚreactors     ú`/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/test/test_socket.pyÚtest_providerz4IReactorSocketVerificationTestsBuilder.test_provider-   s:   € ð
 ×#Ò#Ñ%Ô%ˆØ�Š�Ô+­N¸GÑDÔDÑEÔEÐEÐEÐEó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚrequiredInterfacesr   © r   r   r   r      s=   € € € € € ðð ð  )Ð)ÐðFð Fð Fð Fð Fr   r   c                   ó*   — e Zd ZdZegZd„ Zd„ Zd„ ZdS )Ú!AdoptStreamPortErrorsTestsBuilderas  
    Builder for testing L{IReactorSocket.adoptStreamPort} implementations.

    Generally only tests for failure cases are found here.  Success cases for
    this interface are tested elsewhere.  For example, the success case for
    I{AF_INET} is in L{twisted.internet.test.test_tcp}, since that case should
    behave exactly the same as L{IReactorTCP.listenTCP}.
    c                 óö  — |                       ¦   «         }t          j        ¦   «         }|                     ¦   «         }|                     ¦   «          |                      t          j        |j        |t          j        t          ¦   «         ¦  «        }t          j
        ¦   «         r-|                      |j        d         t          j        ¦  «         dS |                      |j        d         t          j        ¦  «         dS )z«
        An implementation of L{IReactorSocket.adoptStreamPort} raises
        L{socket.error} if passed an integer which is not associated with a
        socket.
        r   N)r   ÚsocketÚfilenoÚcloseÚassertRaisesÚerrorÚadoptStreamPortÚAF_INETr   r   Ú	isWindowsÚassertEqualÚargsÚerrnoÚWSAENOTSOCKÚEBADF©r   r   Úprober!   Úexcs        r   Útest_invalidDescriptorz8AdoptStreamPortErrorsTestsBuilder.test_invalidDescriptorB   sÅ   € ð ×#Ò#Ñ%Ô%ˆå”‘”ˆØ—’‘”ˆØ�Š‰Œˆà×ÒÝŒLØÔ#ØÝŒNÝ‰OŒOñ
ô 
ˆõ ÔÑÔð 	7Ø×Ò˜SœX aœ[­%Ô*;Ñ<Ô<Ð<Ð<Ð<à×Ò˜SœX aœ[­%¬+Ñ6Ô6Ð6Ð6Ð6r   c                 ób  — |                       ¦   «         }t          j        ¦   «         }|                     d¦  «         |                     d¦  «         |                      |j        ¦  «         d}|                      t          |j        | 	                    ¦   «         |t          ¦   «         ¦  «         dS )z¬
        An implementation of L{IReactorSocket.adoptStreamPort} raises
        L{UnsupportedAddressFamily} if passed an address family it does not
        support.
        ©z	127.0.0.1r   é   é  N)r   r    ÚbindÚlistenÚ
addCleanupr"   r#   r   r%   r!   r   ©r   r   ÚportÚ	arbitrarys       r   Útest_invalidAddressFamilyz;AdoptStreamPortErrorsTestsBuilder.test_invalidAddressFamilyZ   s›   € ð ×#Ò#Ñ%Ô%ˆåŒ}‰ŒˆØ�	Š	Ð"Ñ#Ô#Ð#Ø�Š�A‰ŒˆØ�Š˜œ
Ñ#Ô#Ð#àˆ	à×ÒÝ$ØÔ#Ø�KŠK‰MŒMØÝ‰OŒOñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óf  ‡ ‡‡‡— ‰                       ¦   «         Št          j        ¦   «         Š‰                      ‰j        ¦  «         ‰                     d¦  «         ‰                     d¦  «         ‰                     d¦  «         ‰                     ‰                     ¦   «         ‰j	        t          ¦   «         ¦  «        }|                     ¦   «         Šˆˆ fd„}‰                     |¦  «         ‰                     t          d¦  «         t          ‰ˆˆfd„¦  «         ‰                     ¦   «          dS )a9  
        When the L{IListeningPort} returned by
        L{IReactorSocket.adoptStreamPort} is stopped using
        C{stopListening}, the underlying socket is closed but not
        shutdown.  This allows another process which still has a
        reference to it to continue accepting connections over it.
        r2   r3   Fc                 ó(  •— ‰                      t          j        ‰j        ¦  «        }t	          j        ¦   «         r-‰                     |j        d         t          j	        ¦  «         d S ‰                     |j        d         t          j
        ¦  «         d S )Nr   )r#   r    r$   Úacceptr   r'   r(   r)   r*   ÚWSAEWOULDBLOCKÚEAGAIN©Úignoredr/   Ú
portSocketr   s     €€r   ÚstoppedzFAdoptStreamPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.stoppedˆ   sy   ø€ ð ×#Ò#¥F¤L°*Ô2CÑDÔDˆCÝÔ!Ñ#Ô#ð <Ø× Ò  ¤¨!¤­eÔ.BÑCÔCÐCÐCÐCà× Ò  ¤¨!¤­e¬lÑ;Ô;Ð;Ð;Ð;r   z"Failed to accept on original port.c                  ó4   •— ‰                       ˆfd„¦  «        S )Nc                 ó,   •— ‰                      ¦   «         S ©N©Ústop©rB   r   s    €r   ú<lambda>zYAdoptStreamPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>.<locals>.<lambda>–   ó   ø€ ¸7¿<º<¹>¼>€ r   ©ÚaddCallback©Údr   s   €€r   rK   zGAdoptStreamPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>–   ó   ø€ ˜QŸ]š]Ð+IÐ+IÐ+IÐ+IÑJÔJ€ r   N)r   r    r7   r"   r5   r6   Úsetblockingr%   r!   Úfamilyr   ÚstopListeningrN   Ú
addErrbackr
   r	   Úrun©r   r9   rD   rP   rC   r   s   `  @@@r   Útest_stopOnlyClosesz5AdoptStreamPortErrorsTestsBuilder.test_stopOnlyClosesq   s6  øøøø€ ð ×#Ò#Ñ%Ô%ˆå”]‘_”_ˆ
Ø�Š˜
Ô(Ñ)Ô)Ð)à�ŠÐ(Ñ)Ô)Ð)Ø×Ò˜!ÑÔÐØ×Ò˜uÑ%Ô%Ð%ð ×&Ò&Ø×ÒÑÔ Ô!2µM±O´Oñ
ô 
ˆð ×ÒÑ Ô ˆð	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	
�Š�gÑÔÐØ	�Š•SÐ>Ñ?Ô?Ð?åØÐJÐJÐJÐJÐJñ	
ô 	
ð 	
ð 	�Š‰Œˆˆˆr   N©	r   r   r   r   r   r   r0   r;   rX   r   r   r   r   r   6   sV   € € € € € ðð ð )Ð)Ðð7ð 7ð 7ð0
ð 
ð 
ð.(ð (ð (ð (ð (r   r   c                   ó   — e Zd ZdZegZd„ ZdS )Ú'AdoptStreamConnectionErrorsTestsBuildera}  
    Builder for testing L{IReactorSocket.adoptStreamConnection}
    implementations.

    Generally only tests for failure cases are found here.  Success cases for
    this interface are tested elsewhere.  For example, the success case for
    I{AF_INET} is in L{twisted.internet.test.test_tcp}, since that case should
    behave exactly the same as L{IReactorTCP.listenTCP}.
    c                 ó  — |                       ¦   «         }t          j        ¦   «         }|                      |j        ¦  «         d}|                      t
          |j        |                     ¦   «         |t          ¦   «         ¦  «         dS )z²
        An implementation of L{IReactorSocket.adoptStreamConnection} raises
        L{UnsupportedAddressFamily} if passed an address family it does not
        support.
        r4   N)	r   r    r7   r"   r#   r   ÚadoptStreamConnectionr!   r   )r   r   Ú
connectionr:   s       r   r;   zAAdoptStreamConnectionErrorsTestsBuilder.test_invalidAddressFamily©   s~   € ð ×#Ò#Ñ%Ô%ˆå”]‘_”_ˆ
Ø�Š˜
Ô(Ñ)Ô)Ð)àˆ	à×ÒÝ$ØÔ)Ø×ÒÑÔØÝ‰OŒOñ	
ô 	
ð 	
ð 	
ð 	
r   N)r   r   r   r   r   r   r;   r   r   r   r[   r[   œ   s8   € € € € € ðð ð )Ð)Ðð
ð 
ð 
ð 
ð 
r   r[   c                   ó*   — e Zd ZdZegZd„ Zd„ Zd„ ZdS )Ú#AdoptDatagramPortErrorsTestsBuilderzR
    Builder for testing L{IReactorSocket.adoptDatagramPort} implementations.
    c                 óö  — |                       ¦   «         }t          j        ¦   «         }|                     ¦   «         }|                     ¦   «          |                      t          j        |j        |t          j        t          ¦   «         ¦  «        }t          j
        ¦   «         r-|                      |j        d         t          j        ¦  «         dS |                      |j        d         t          j        ¦  «         dS )z­
        An implementation of L{IReactorSocket.adoptDatagramPort} raises
        L{socket.error} if passed an integer which is not associated with a
        socket.
        r   N)r   r    r!   r"   r#   r$   ÚadoptDatagramPortr&   r   r   r'   r(   r)   r*   r+   r,   r-   s        r   r0   z:AdoptDatagramPortErrorsTestsBuilder.test_invalidDescriptorÆ   sÇ   € ð ×#Ò#Ñ%Ô%ˆå”‘”ˆØ—’‘”ˆØ�Š‰Œˆà×ÒÝŒLØÔ%ØÝŒNÝÑÔñ
ô 
ˆõ ÔÑÔð 	7Ø×Ò˜SœX aœ[­%Ô*;Ñ<Ô<Ð<Ð<Ð<à×Ò˜SœX aœ[­%¬+Ñ6Ô6Ð6Ð6Ð6r   c                 ó:  — |                       ¦   «         }t          j        t          j        t          j        ¦  «        }|                      |j        ¦  «         d}|                      t          |j        | 	                    ¦   «         |t          ¦   «         ¦  «         dS )z®
        An implementation of L{IReactorSocket.adoptDatagramPort} raises
        L{UnsupportedAddressFamily} if passed an address family it does not
        support.
        r4   N)r   r    r&   Ú
SOCK_DGRAMr7   r"   r#   r   rb   r!   r   r8   s       r   r;   z=AdoptDatagramPortErrorsTestsBuilder.test_invalidAddressFamilyÞ   s†   € ð ×#Ò#Ñ%Ô%ˆåŒ}�Vœ^­VÔ->Ñ?Ô?ˆØ�Š˜œ
Ñ#Ô#Ð#àˆ	à×ÒÝ$ØÔ%Ø�KŠK‰MŒMØÝÑÔñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óh  ‡ ‡‡‡— ‰                       ¦   «         Št          j        t          j        t          j        ¦  «        Š‰                      ‰j        ¦  «         ‰                     d¦  «         ‰                     d¦  «         ‰                     ‰ 	                    ¦   «         ‰j
        t          ¦   «         ¦  «        }|                     ¦   «         Šˆˆ fd„}‰                     |¦  «         ‰                     t          d¦  «         t!          ‰ˆˆfd„¦  «         ‰                     ¦   «          dS )a7  
        When the L{IListeningPort} returned by
        L{IReactorSocket.adoptDatagramPort} is stopped using
        C{stopListening}, the underlying socket is closed but not
        shutdown.  This allows another process which still has a
        reference to it to continue reading and writing to it.
        r2   Fc                 ó*  •— ‰                      t          j        ‰j        d¦  «        }t	          j        ¦   «         r-‰                     |j        d         t          j	        ¦  «         d S ‰                     |j        d         t          j
        ¦  «         d S )Nr3   r   )r#   r    r$   Úrecvfromr   r'   r(   r)   r*   r?   r@   rA   s     €€r   rD   zHAdoptDatagramPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.stopped	  s{   ø€ ð ×#Ò#¥F¤L°*Ô2EÀqÑIÔIˆCÝÔ!Ñ#Ô#ð <Ø× Ò  ¤¨!¤­eÔ.BÑCÔCÐCÐCÐCà× Ò  ¤¨!¤­e¬lÑ;Ô;Ð;Ð;Ð;r   z Failed to read on original port.c                  ó4   •— ‰                       ˆfd„¦  «        S )Nc                 ó,   •— ‰                      ¦   «         S rG   rH   rJ   s    €r   rK   z[AdoptDatagramPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>.<locals>.<lambda>  rL   r   rM   rO   s   €€r   rK   zIAdoptDatagramPortErrorsTestsBuilder.test_stopOnlyCloses.<locals>.<lambda>  rQ   r   N)r   r    r&   rd   r7   r"   r5   rR   rb   r!   rS   r   rT   rN   rU   r
   r	   rV   rW   s   `  @@@r   rX   z7AdoptDatagramPortErrorsTestsBuilder.test_stopOnlyClosesó   s0  øøøø€ ð ×#Ò#Ñ%Ô%ˆå”]¥6¤>µ6Ô3DÑEÔEˆ
Ø�Š˜
Ô(Ñ)Ô)Ð)à�ŠÐ(Ñ)Ô)Ð)Ø×Ò˜uÑ%Ô%Ð%ð ×(Ò(Ø×ÒÑÔ Ô!2Õ4DÑ4FÔ4Fñ
ô 
ˆð ×ÒÑ Ô ˆð	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	
�Š�gÑÔÐØ	�Š•SÐ<Ñ=Ô=Ð=åØÐJÐJÐJÐJÐJñ	
ô 	
ð 	
ð 	�Š‰Œˆˆˆr   NrY   r   r   r   r`   r`   ¿   sV   € € € € € ðð ð )Ð)Ðð7ð 7ð 7ð0
ð 
ð 
ð*&ð &ð &ð &ð &r   r`   )r   r*   r    Úzope.interfacer   Útwisted.internet.errorr   Útwisted.internet.interfacesr   Útwisted.internet.protocolr   r   Ú#twisted.internet.test.reactormixinsr   r	   Útwisted.python.logr
   Útwisted.python.runtimer   r   r   r[   r`   ÚglobalsÚupdateÚmakeTestCaseClassesr   r   r   ú<module>rt      s  ððð ð €€€Ø €€€à !Ð !Ð !Ð !Ð !Ð !à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ "Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +ðFð Fð Fð Fð F¨^ñ Fô Fð Fð8cð cð cð cð c¨ñ cô cð cðL 
ð  
ð  
ð  
ð  
¨nñ  
ô  
ð  
ðFZð Zð Zð Zð Z¨.ñ Zô Zð Zðz €�	„	× Ò Ð7×KÒKÑMÔMÑ NÔ NÐ NØ €�	„	× Ò Ð2×FÒFÑHÔHÑ IÔ IÐ IØ €�	„	× Ò Ð8×LÒLÑNÔNÑ OÔ OÐ OØ €�	„	× Ò Ð4×HÒHÑJÔJÑ KÔ KÐ KÐ KÐ Kr   