§
    Ètºf  ã                   óÞ   — d Z ddlZddlZddlZ	 ddlZddlmZ n# e$ r dZY nw xY wddl	m
Z
 ddlmZ  G d„ dej        ¦  «        Z G d	„ d
ej        ¦  «        Z G d„ dej        ¦  «        ZdS )z&
Tests for L{twisted.internet.fdesc}.
é    N)Úfdescznot supported on this platform)ÚuntilConcludes)Úunittestc                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚNonBlockingTestszE
    Tests for L{fdesc.setNonBlocking} and L{fdesc.setBlocking}.
    c                 óÖ  — t          j        ¦   «         \  }}|                      t           j        |¦  «         |                      t           j        |¦  «         |                      t          j        |t
          j        ¦  «        t           j        z  ¦  «         t          j	        |¦  «         |  
                    t          j        |t
          j        ¦  «        t           j        z  ¦  «         dS )zR
        L{fdesc.setNonBlocking} sets a file description to non-blocking.
        N)ÚosÚpipeÚ
addCleanupÚcloseÚassertFalseÚfcntlÚF_GETFLÚ
O_NONBLOCKr   ÚsetNonBlockingÚ
assertTrue©ÚselfÚrÚws      úV/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/test/test_fdesc.pyÚtest_setNonBlockingz$NonBlockingTests.test_setNonBlocking   s¦   € õ Œw‰yŒy‰ˆˆ1Ø�Š�œ !Ñ$Ô$Ð$Ø�Š�œ !Ñ$Ô$Ð$Ø×Ò�œ Q­¬Ñ6Ô6½¼ÑFÑGÔGÐGÝÔ˜QÑÔÐØ�Š�œ A¥u¤}Ñ5Ô5½¼ÑEÑFÔFÐFÐFÐFó    c                 ó€  — t          j        ¦   «         \  }}|                      t           j        |¦  «         |                      t           j        |¦  «         t	          j        |¦  «         t	          j        |¦  «         |                      t          j        |t          j	        ¦  «        t           j
        z  ¦  «         dS )zK
        L{fdesc.setBlocking} sets a file description to blocking.
        N)r	   r
   r   r   r   r   ÚsetBlockingr   r   r   r   r   s      r   Útest_setBlockingz!NonBlockingTests.test_setBlocking'   s�   € õ Œw‰yŒy‰ˆˆ1Ø�Š�œ !Ñ$Ô$Ð$Ø�Š�œ !Ñ$Ô$Ð$ÝÔ˜QÑÔÐÝÔ˜!ÑÔÐØ×Ò�œ Q­¬Ñ6Ô6½¼ÑFÑGÔGÐGÐGÐGr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r      sD   € € € € € ðð ð	Gð 	Gð 	Gð	Hð 	Hð 	Hð 	Hð 	Hr   r   c                   óZ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ÚReadWriteTestsz<
    Tests for L{fdesc.readFromFD}, L{fdesc.writeToFD}.
    c                 óª   — t          j        ¦   «         \  | _        | _        t	          j        | j        ¦  «         t	          j        | j        ¦  «         dS )zG
        Create a non-blocking pipe that can be used in tests.
        N)r	   r
   r   r   r   r   ©r   s    r   ÚsetUpzReadWriteTests.setUp8   sC   € õ œ™œ‰ˆŒ�”ÝÔ˜TœVÑ$Ô$Ð$ÝÔ˜TœVÑ$Ô$Ð$Ð$Ð$r   c                 ó²   — 	 t          j        | j        ¦  «         n# t          $ r Y nw xY w	 t          j        | j        ¦  «         dS # t          $ r Y dS w xY w)z
        Close pipes.
        N)r	   r   r   ÚOSErrorr   r%   s    r   ÚtearDownzReadWriteTests.tearDown@   s{   € ð	ÝŒH�T”VÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøð	ÝŒH�T”VÑÔÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ œ
)¨)­A Á
AÁAc                 ó6   — t          j        | j        |¦  «        S )z)
        Write data to the pipe.
        )r   Ú	writeToFDr   )r   Úds     r   ÚwritezReadWriteTests.writeM   s   € õ Œ˜tœv qÑ)Ô)Ð)r   c                 ód   — g }t          j        | j        |j        ¦  «        }|€|r|d         S dS |S )z*
        Read data from the pipe.
        Nr   r   )r   Ú
readFromFDr   Úappend)r   ÚlÚress      r   ÚreadzReadWriteTests.readS   s?   € ð ˆÝÔ˜tœv q¤xÑ0Ô0ˆØˆ;Øð Ø˜”t�à�sàˆJr   c                 ó  — |                       d¦  «        }|                      |dk    ¦  «         |                      ¦   «         }|                      t	          |¦  «        |¦  «         |                      dd|…         |¦  «         dS )z”
        Test that the number of bytes L{fdesc.writeToFD} reports as written
        with its return value are seen by L{fdesc.readFromFD}.
        s   hellor   N)r-   r   r3   ÚassertEqualÚlen)r   ÚnÚss      r   Útest_writeAndReadz ReadWriteTests.test_writeAndReada   sx   € ð
 �JŠJ�xÑ Ô ˆØ�Š˜˜AšÑÔÐØ�IŠI‰KŒKˆØ×Ò�˜Q™œ Ñ#Ô#Ð#Ø×Ò˜ " 1 "œ qÑ)Ô)Ð)Ð)Ð)r   c                 óÜ  — ddz  }|                       |¦  «        }|                      |dk    ¦  «         g }d}d}||k     s|dk     rP|                     |                      ¦   «         ¦  «         |t	          |d         ¦  «        z  }|dz  }||k     °J|dk     °Pd                     |¦  «        }|                      t	          |¦  «        |¦  «         |                      |d|…         |¦  «         dS )	z}
        Similar to L{test_writeAndRead}, but use a much larger string to verify
        the behavior for that case.
        s
   0123456879i'  r   é2   éÿÿÿÿé   r   N)r-   r   r0   r3   r6   Újoinr5   )r   ÚorigÚwrittenÚresultÚresultlengthÚis         r   Útest_writeAndReadLargez%ReadWriteTests.test_writeAndReadLargel   sö   € ð
 ˜uÑ$ˆØ—*’*˜TÑ"Ô"ˆØ�Š˜ !šÑ$Ô$Ð$ØˆØˆØˆØ˜WÒ$Ð$¨¨Bª¨Ø�MŠM˜$Ÿ)š)™+œ+Ñ&Ô&Ð&Ø�C  r¤
™OœOÑ+ˆLà�‰FˆAð	 ˜WÒ$Ð$¨¨Bª¨ð
 —’˜&Ñ!Ô!ˆØ×Ò�˜V™œ gÑ.Ô.Ð.Ø×Ò˜˜h˜w˜hœ¨Ñ0Ô0Ð0Ð0Ð0r   c                 óž   — g }t          j        | j        |j        ¦  «        }|                      |g ¦  «         |                      |¦  «         dS )z¨
        Verify that reading from a file descriptor with no data does not raise
        an exception and does not result in the callback function being called.
        N)r   r/   r   r0   r5   ÚassertIsNone)r   r1   rA   s      r   Útest_readFromEmptyz!ReadWriteTests.test_readFromEmpty€   sO   € ð
 ˆÝÔ! $¤&¨!¬(Ñ3Ô3ˆØ×Ò˜˜BÑÔÐØ×Ò˜&Ñ!Ô!Ð!Ð!Ð!r   c                 óœ   — t          j        | j        ¦  «         |                      |                      ¦   «         t
          j        ¦  «         dS )z†
        Test that using L{fdesc.readFromFD} on a cleanly closed file descriptor
        returns a connection done indicator.
        N)r	   r   r   r5   r3   r   ÚCONNECTION_DONEr%   s    r   Útest_readFromCleanClosez&ReadWriteTests.test_readFromCleanCloseŠ   ó=   € õ
 	Œ�”ÑÔÐØ×Ò˜Ÿš™œ¥eÔ&;Ñ<Ô<Ð<Ð<Ð<r   c                 óž   — t          j        | j        ¦  «         |                      |                      d¦  «        t
          j        ¦  «         dS )z‰
        Verify that writing with L{fdesc.writeToFD} when the read end is closed
        results in a connection lost indicator.
        ó   sN)r	   r   r   r5   r-   r   ÚCONNECTION_LOSTr%   s    r   Útest_writeToClosedz!ReadWriteTests.test_writeToClosed’   óA   € õ
 	Œ�”ÑÔÐØ×Ò˜Ÿš DÑ)Ô)­5Ô+@ÑAÔAÐAÐAÐAr   c                 óœ   — t          j        | j        ¦  «         |                      |                      ¦   «         t
          j        ¦  «         dS )zŠ
        Verify that reading with L{fdesc.readFromFD} when the read end is
        closed results in a connection lost indicator.
        N)r	   r   r   r5   r3   r   rN   r%   s    r   Útest_readFromInvalidz#ReadWriteTests.test_readFromInvalidš   rK   r   c                 óž   — t          j        | j        ¦  «         |                      |                      d¦  «        t
          j        ¦  «         dS )zŠ
        Verify that writing with L{fdesc.writeToFD} when the write end is
        closed results in a connection lost indicator.
        rM   N)r	   r   r   r5   r-   r   rN   r%   s    r   Útest_writeToInvalidz"ReadWriteTests.test_writeToInvalid¢   rP   r   c                 óx  — t           j        }d„ }|t           _        	 |                      |                      d¦  «        d¦  «         |t           _        n# |t           _        w xY wd„ }|t           _        	 |                      |                      d¦  «        d¦  «         |t           _        dS # |t           _        w xY w)z8
        Test error path for L{fdesc.writeTod}.
        c                 óD   — t          ¦   «         }t          j        |_        |‚©N)r(   ÚerrnoÚEAGAIN©ÚfdÚdataÚerrs      r   ÚeagainWritez4ReadWriteTests.test_writeErrors.<locals>.eagainWrite°   s   € Ý‘)”)ˆCÝœˆCŒIØˆIr   rM   r   c                 óD   — t          ¦   «         }t          j        |_        |‚rW   )r(   rX   ÚEINTRrZ   s      r   Ú
eintrWritez3ReadWriteTests.test_writeErrors.<locals>.eintrWrite»   s   € Ý‘)”)ˆCÝœˆCŒIØˆIr   N)r	   r-   r5   )r   Ú
oldOsWriter^   ra   s       r   Útest_writeErrorszReadWriteTests.test_writeErrorsª   sÃ   € õ ”Xˆ
ð	ð 	ð 	ð
 �Œð	"Ø×Ò˜TŸZšZ¨Ñ-Ô-¨qÑ1Ô1Ð1à!�BŒHˆHø�z�BŒHÐ!Ð!Ð!Ð!ð	ð 	ð 	ð
 �Œð	"Ø×Ò˜TŸZšZ¨Ñ-Ô-¨qÑ1Ô1Ð1à!�BŒHˆHˆHø�z�BŒHÐ!Ð!Ð!Ð!s   �)A ÁA!Á4)B+ Â+B9N)r   r   r   r    r&   r)   r-   r3   r9   rD   rG   rJ   rO   rR   rT   rc   r!   r   r   r#   r#   3   sØ   € € € € € ðð ð%ð %ð %ðð ð ð*ð *ð *ðð ð ð	*ð 	*ð 	*ð1ð 1ð 1ð("ð "ð "ð=ð =ð =ðBð Bð Bð=ð =ð =ðBð Bð Bð"ð "ð "ð "ð "r   r#   c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚCloseOnExecTestszL
    Tests for L{fdesc._setCloseOnExec} and L{fdesc._unsetCloseOnExec}.
    zÆ
import os, errno
try:
    os.write(%d, b'lul')
except OSError as e:
    if e.errno == errno.EBADF:
        os._exit(0)
    os._exit(5)
except BaseException:
    os._exit(10)
else:
    os._exit(20)
c                 ó„  — t          j        ¦   «         }|dk    r‡	 t          j        t          j        t          j        d| j        |                     ¦   «         fz  g¦  «         d S # t          $ r0 dd l}| 	                    ¦   «          t          j
        d¦  «         Y d S w xY wt          t           j        |d¦  «        d         S )Nr   z-cé   r=   )r	   ÚforkÚexecvÚsysÚ
executableÚprogramÚfilenoÚBaseExceptionÚ	tracebackÚ	print_excÚ_exitr   Úwaitpid)r   ÚfObjÚpidro   s       r   Ú_execWithFileDescriptorz(CloseOnExecTests._execWithFileDescriptorÚ   sÅ   € ÝŒg‰iŒiˆØ�!Š8ˆ8ð	Ý”Ý”NÝ”^ T¨4¬<¸4¿;º;¹=¼=Ð:JÑ+JÐKñô ð ð ð øõ !ð ð ð Ø Ð Ð Ð à×#Ò#Ñ%Ô%Ð%Ý”˜‘”����ð	øøøõ "¥"¤*¨c°1Ñ5Ô5°aÔ8Ð8s   ›AA$ Á$6BÂBc                 ó�  — t          |                      ¦   «         d¦  «        5 }t          j        |                     ¦   «         ¦  «         |                      |¦  «        }|                      t          j        |¦  «        ¦  «         |  	                    t          j
        |¦  «        d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z°
        A file descriptor passed to L{fdesc._setCloseOnExec} is not inherited
        by a new process image created with one of the exec family of
        functions.
        Úwbr   N)ÚopenÚmktempr   Ú_setCloseOnExecrm   ru   r   r	   Ú	WIFEXITEDr5   ÚWEXITSTATUS©r   rs   Ústatuss      r   Útest_setCloseOnExecz$CloseOnExecTests.test_setCloseOnExecì   så   € õ �$—+’+‘-”- Ñ&Ô&ð 	8¨$ÝÔ! $§+¢+¡-¤-Ñ0Ô0Ð0Ø×1Ò1°$Ñ7Ô7ˆFØ�OŠO�BœL¨Ñ0Ô0Ñ1Ô1Ð1Ø×Ò�Rœ^¨FÑ3Ô3°QÑ7Ô7Ð7ð		8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8s   £BB;Â;B?ÃB?c                 óÜ  — t          |                      ¦   «         d¦  «        5 }t          j        |                     ¦   «         ¦  «         t          j        |                     ¦   «         ¦  «         |                      |¦  «        }|                      t          j	        |¦  «        ¦  «         |  
                    t          j        |¦  «        d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z¦
        A file descriptor passed to L{fdesc._unsetCloseOnExec} is inherited by
        a new process image created with one of the exec family of functions.
        rw   é   N)rx   ry   r   rz   rm   Ú_unsetCloseOnExecru   r   r	   r{   r5   r|   r}   s      r   Útest_unsetCloseOnExecz&CloseOnExecTests.test_unsetCloseOnExecø   sþ   € õ
 �$—+’+‘-”- Ñ&Ô&ð 	9¨$ÝÔ! $§+¢+¡-¤-Ñ0Ô0Ð0ÝÔ# D§K¢K¡M¤MÑ2Ô2Ð2Ø×1Ò1°$Ñ7Ô7ˆFØ�OŠO�BœL¨Ñ0Ô0Ñ1Ô1Ð1Ø×Ò�Rœ^¨FÑ3Ô3°RÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9s   £B1C!Ã!C%Ã(C%N)r   r   r   r    rl   ru   r   rƒ   r!   r   r   re   re   Ç   sR   € € € € € ðð ð€Gð9ð 9ð 9ð$
8ð 
8ð 
8ð
9ð 
9ð 
9ð 
9ð 
9r   re   )r    rX   r	   rj   r   Útwisted.internetr   ÚImportErrorÚskipÚtwisted.python.utilr   Útwisted.trialr   ÚSynchronousTestCaser   r#   re   r!   r   r   ú<module>rŠ      s?  ððð ð €€€Ø 	€	€	€	Ø 
€
€
€
ð'Ø€L€L€Lð 'Ð&Ð&Ð&Ð&Ð&Ð&øð ð ,ð ,ð ,Ø+€D€D€Dð,øøøð
 /Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "ðHð Hð Hð Hð H�xÔ3ñ Hô Hð Hð8Q"ð Q"ð Q"ð Q"ð Q"�XÔ1ñ Q"ô Q"ð Q"ðh;9ð ;9ð ;9ð ;9ð ;9�xÔ3ñ ;9ô ;9ð ;9ð ;9ð ;9s   � ›%¤%