+
    üÐj  ã                   óì   € R t ^ RIt^ RIt^ RIt ^ RIt^ RIHt ^ RI	H
t
 ^ RIHt  ! R R]P                  4      t ! R R	]P                  4      t ! R
 R]P                  4      tR#   ] d    Rt LXi ; i)z&
Tests for L{twisted.internet.fdesc}.
N)Úfdescznot supported on this platform)ÚuntilConcludes)Úunittestc                   ó0   a € ] tR t^t o RtR tR tRtV tR# )ÚNonBlockingTestsz=
Tests for L{fdesc.setNonBlocking} and L{fdesc.setBlocking}.
c                ó  € \         P                  ! 4       w  rV P                  \         P                  V4       V P                  \         P                  V4       V P	                  \
        P
                  ! V\
        P                  4      \         P                  ,          4       \        P                  ! V4       V P                  \
        P
                  ! V\
        P                  4      \         P                  ,          4       R# )zB
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   &  Ú9/usr/lib/python3/dist-packages/twisted/test/test_fdesc.pyÚtest_setNonBlockingÚ$NonBlockingTests.test_setNonBlocking   s�   € ô �wŠw‹y‰ˆØ�‰œŸ™ !Ô$Ø�‰œŸ™ !Ô$Ø×ÑœŸš Q¬¯©Ó6¼¿¹ÕFÔGÜ×Ò˜QÔØ�‰œŸš A¤u§}¡}Ó5¼¿¹ÕEÖFó    c                óž  € \         P                  ! 4       w  rV P                  \         P                  V4       V P                  \         P                  V4       \        P
                  ! V4       \        P                  ! V4       V P                  \        P                  ! V\        P                  4      \         P                  ,          4       R# )z;
L{fdesc.setBlocking} sets a file description to blocking.
N)r   r	   r
   r   r   r   ÚsetBlockingr   r   r   r   r   s   &  r   Útest_setBlockingÚ!NonBlockingTests.test_setBlocking'   sw   € ô �wŠw‹y‰ˆØ�‰œŸ™ !Ô$Ø�‰œŸ™ !Ô$Ü×Ò˜QÔÜ×Ò˜!ÔØ×ÑœŸš Q¬¯©Ó6¼¿¹ÕFÖGr   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € ñò	G÷	Hð 	Hr   r   c                   ól   a € ] tR t^3t o RtR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tRtV tR# )ÚReadWriteTestsz4
Tests for L{fdesc.readFromFD}, L{fdesc.writeToFD}.
c                óÊ   € \         P                  ! 4       w  V n        V n        \        P
                  ! V P                  4       \        P
                  ! V P                  4       R# )z7
Create a non-blocking pipe that can be used in tests.
N)r   r	   r   r   r   r   ©r   s   &r   ÚsetUpÚReadWriteTests.setUp8   s;   € ô Ÿš›‰ˆŒ�”Ü×Ò˜TŸV™VÔ$Ü×Ò˜TŸV™VÖ$r   c                óÐ   €  \         P                  ! V P                  4        \         P                  ! V P                  4       R#   \         d     L0i ; i  \         d     R# i ; i)z
Close pipes.
N)r   r   r   ÚOSErrorr   r+   s   &r   ÚtearDownÚReadWriteTests.tearDown@   sS   € ð	Ü�HŠH�T—V‘VÔð	Ü�HŠH�T—V‘VÖøô ô 	Ùð	ûô ô 	Úð	ús"   ‚ A £ A ÁAÁAÁA%Á$A%c                óD   € \         P                  ! V P                  V4      # )z
Write data to the pipe.
)r   Ú	writeToFDr   )r   Úds   &&r   ÚwriteÚReadWriteTests.writeM   s   € ô �Š˜tŸv™v qÓ)Ð)r   c                óŽ   € . p\         P                  ! V P                  VP                  4      pVf   V'       d
   V^ ,          # R# V# )z
Read data from the pipe.
r   )r   Ú
readFromFDr   Úappend)r   ÚlÚress   &  r   ÚreadÚReadWriteTests.readS   s<   € ð ˆÜ×Ò˜tŸv™v q§x¡xÓ0ˆØŠ;ßØ˜•t�áàˆJr   c                óÐ   € V P                  R4      pV P                  V^ 8„  4       V P                  4       pV P                  \	        V4      V4       V P                  RRV V4       R# )z|
Test that the number of bytes L{fdesc.writeToFD} reports as written
with its return value are seen by L{fdesc.readFromFD}.
s   helloN)r5   r   r<   ÚassertEqualÚlen)r   ÚnÚss   &  r   Útest_writeAndReadÚ ReadWriteTests.test_writeAndReada   sW   € ð
 �J‰J�xÓ ˆØ�‰˜˜A™ÔØ�I‰I‹KˆØ×Ñœ˜Q› Ô#Ø×Ñ˜ " 1˜ qÖ)r   c                ó�  € RR,          pV P                  V4      pV P                  V^ 8„  4       . p^ p^ pWB8  g   V^28  dD   VP                  V P                  4       4       V\	        VR,          4      ,          pV^,          pKP  RP                  V4      pV P                  \	        V4      V4       V P                  VRV V4       R# )ze
Similar to L{test_writeAndRead}, but use a much larger string to verify
the behavior for that case.
s
   0123456879i'  r   Néÿÿÿÿ)r5   r   r9   r<   r@   Újoinr?   )r   ÚorigÚwrittenÚresultÚresultlengthÚis   &     r   Útest_writeAndReadLargeÚ%ReadWriteTests.test_writeAndReadLargel   s¬   € ð
 ˜uÕ$ˆØ—*‘*˜TÓ"ˆØ�‰˜ !™Ô$ØˆØˆØˆØÔ$¨¨B¬Ø�M‰M˜$Ÿ)™)›+Ô&ØœC  r¥
›OÕ+ˆLà��FŠAØ—‘˜&Ó!ˆØ×Ñœ˜V› gÔ.Ø×Ñ˜˜h˜w˜¨Ö0r   c                ó¦   € . p\         P                  ! V P                  VP                  4      pV P	                  V. 4       V P                  V4       R# )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   r8   r   r9   r?   ÚassertIsNone)r   r:   rJ   s   &  r   Útest_readFromEmptyÚ!ReadWriteTests.test_readFromEmpty€   sA   € ð
 ˆÜ×!Ò! $§&¡&¨!¯(©(Ó3ˆØ×Ñ˜˜BÔØ×Ñ˜&Ö!r   c                ó¢   € \         P                  ! V P                  4       V P                  V P	                  4       \
        P                  4       R# )zn
Test that using L{fdesc.readFromFD} on a cleanly closed file descriptor
returns a connection done indicator.
N)r   r   r   r?   r<   r   ÚCONNECTION_DONEr+   s   &r   Útest_readFromCleanCloseÚ&ReadWriteTests.test_readFromCleanCloseŠ   ó0   € ô
 	�Š�—‘ÔØ×Ñ˜Ÿ™›¤e×&;Ñ&;Ö<r   c                ó¤   € \         P                  ! V P                  4       V P                  V P	                  R4      \
        P                  4       R# )zq
Verify that writing with L{fdesc.writeToFD} when the read end is closed
results in a connection lost indicator.
ó   sN)r   r   r   r?   r5   r   ÚCONNECTION_LOSTr+   s   &r   Útest_writeToClosedÚ!ReadWriteTests.test_writeToClosed’   ó3   € ô
 	�Š�—‘ÔØ×Ñ˜Ÿ™ DÓ)¬5×+@Ñ+@ÖAr   c                ó¢   € \         P                  ! V P                  4       V P                  V P	                  4       \
        P                  4       R# )zr
Verify that reading with L{fdesc.readFromFD} when the read end is
closed results in a connection lost indicator.
N)r   r   r   r?   r<   r   rZ   r+   s   &r   Útest_readFromInvalidÚ#ReadWriteTests.test_readFromInvalidš   rW   r   c                ó¤   € \         P                  ! V P                  4       V P                  V P	                  R4      \
        P                  4       R# )zr
Verify that writing with L{fdesc.writeToFD} when the write end is
closed results in a connection lost indicator.
rY   N)r   r   r   r?   r5   r   rZ   r+   s   &r   Útest_writeToInvalidÚ"ReadWriteTests.test_writeToInvalid¢   r]   r   c                óR  € \         P                  pR pV\         n         V P                  V P                  R4      ^ 4       V\         n        R pV\         n         V P                  V P                  R4      ^ 4       V\         n        R#   T\         n        i ; i  T\         n        i ; i)z(
Test error path for L{fdesc.writeTod}.
c                 óD   € \        4       p\        P                  Vn        Vh©N)r/   ÚerrnoÚEAGAIN©ÚfdÚdataÚerrs   && r   ÚeagainWriteÚ4ReadWriteTests.test_writeErrors.<locals>.eagainWrite°   s   € Ü“)ˆCÜŸ™ˆCŒIØˆIr   rY   c                 óD   € \        4       p\        P                  Vn        Vhrf   )r/   rg   ÚEINTRri   s   && r   Ú
eintrWriteÚ3ReadWriteTests.test_writeErrors.<locals>.eintrWrite»   s   € Ü“)ˆCÜŸ™ˆCŒIØˆIr   N)r   r5   r?   )r   Ú
oldOsWriterm   rq   s   &   r   Útest_writeErrorsÚReadWriteTests.test_writeErrorsª   sˆ   € ô —X‘Xˆ
ò	ð
 ŒŒð	"Ø×Ñ˜TŸZ™Z¨Ó-¨qÔ1à!ŒBŒHò	ð
 ŒŒð	"Ø×Ñ˜TŸZ™Z¨Ó-¨qÔ1à!ŒBŽHøð "ŒB�Hûð "ŒB�Hús    !B	 Á!B Â	BÂB&)r   r   N)r   r    r!   r"   r#   r,   r0   r5   r<   rC   rM   rQ   rU   r[   r_   rb   rt   r$   r%   r&   s   @r   r)   r)   3   sM   ø‡ € ñò%òò*òò	*ò1ò("ò=òBò=òB÷"ð "r   r)   c                   ó:   a € ] tR t^Çt o RtRtR tR tR tRt	V t
R# )ÚCloseOnExecTestszD
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                ó¨  € \         P                  ! 4       pV^ 8X  dZ    \         P                  ! \        P                  \        P                  RV P
                  VP                  4       3,          .4       R# \        \         P                  V^ 4      ^,          #   \         d/    ^ RIpTP                  4        \         P                  ! ^4        R# i ; i)é    z-cN)r   ÚforkÚexecvÚsysÚ
executableÚprogramÚfilenoÚBaseExceptionÚ	tracebackÚ	print_excÚ_exitr   Úwaitpid)r   ÚfObjÚpidr�   s   &&  r   Ú_execWithFileDescriptorÚ(CloseOnExecTests._execWithFileDescriptorÚ   s‘   € Ü�gŠg‹iˆØ�!Œ8ð	Ü—’Ü—N‘NÜ—^‘^ T¨4¯<©<¸4¿;¹;»=Ð:JÕ+JÐKöô "¤"§*¡*¨c°1Ó5°aÕ8Ð8øô !ô Û à×#Ñ#Ô%Ü—’˜—ð	ús   žAB Â5CÃCc                ó„  € \        V P                  4       R4      ;_uu_ 4       p\        P                  ! VP	                  4       4       V P                  V4      pV P                  \        P                  ! V4      4       V P                  \        P                  ! V4      ^ 4       RRR4       R#   + '       g   i     R# ; i)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.
ÚwbN)ÚopenÚmktempr   Ú_setCloseOnExecr   r‡   r   r   Ú	WIFEXITEDr?   ÚWEXITSTATUS©r   r…   Ústatuss   &  r   Útest_setCloseOnExecÚ$CloseOnExecTests.test_setCloseOnExecì   sz   € ô �$—+‘+“- ×&Ô&¨$Ü×!Ò! $§+¡+£-Ô0Ø×1Ñ1°$Ó7ˆFØ�O‰OœBŸLšL¨Ó0Ô1Ø×ÑœRŸ^š^¨FÓ3°QÔ7÷	 '×&×&Ò&ús   £BB.Â.B?	c                óÌ  € \        V P                  4       R4      ;_uu_ 4       p\        P                  ! VP	                  4       4       \        P
                  ! VP	                  4       4       V P                  V4      pV P                  \        P                  ! V4      4       V P                  \        P                  ! V4      ^4       RRR4       R#   + '       g   i     R# ; i)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.
rŠ   N)r‹   rŒ   r   r�   r   Ú_unsetCloseOnExecr‡   r   r   rŽ   r?   r�   r�   s   &  r   Útest_unsetCloseOnExecÚ&CloseOnExecTests.test_unsetCloseOnExecø   sŽ   € ô
 �$—+‘+“- ×&Ô&¨$Ü×!Ò! $§+¡+£-Ô0Ü×#Ò# D§K¡K£MÔ2Ø×1Ñ1°$Ó7ˆFØ�O‰OœBŸLšL¨Ó0Ô1Ø×ÑœRŸ^š^¨FÓ3°RÔ8÷ '×&×&Ò&ús   £B%CÃC#	r   N)r   r    r!   r"   r#   r~   r‡   r’   r–   r$   r%   r&   s   @r   rw   rw   Ç   s%   ø‡ € ñð€Gò9ò$
8÷
9ð 
9r   rw   )r#   rg   r   r|   r   Útwisted.internetr   ÚImportErrorÚskipÚtwisted.python.utilr   Útwisted.trialr   ÚSynchronousTestCaser   r)   rw   r   r   r   Ú<module>rž      sz   ðñó Û 	Û 
ð'Ûõ 'å .Ý "ôH�x×3Ñ3ô Hô8Q"�X×1Ñ1ô Q"ôh;9�x×3Ñ3ö ;9øðs ô ,Ø+‚Dð,ús   �A' Á'	A3Á2A3