ó
    Ö›‘h(  ã                   ó*  • S r SSKrSSKrSSKrSSKrSSKJrJrJrJr  SSK	J
r
JrJrJrJ	r	  SSKJr   SSK	JrJr  SrSS	KJr  SS
KJr  SSKJrJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  \"RJ                  " 5       (       a	  SSK	J&r&  Sr'OSr' SSK(J)r)J*r*J+r+J,r,  Sr-Sr. " S S5      r/S r0 " S S\15      r2 " S S\5      r3S r4\" \-\.5       " S S\$5      5       r5\" \-\.5       " S S \$5      5       r6g! \ a    Sr NÃf = f! \ a    Sr-Sr. Nof = f)!z&
Tests for L{twisted.python.sendmsg}.
é    N)ÚcloseÚpathsepÚpipeÚread)ÚAF_INETÚAF_INET6Ú
SOL_SOCKETÚerrorÚsocket)Úpack)ÚAF_UNIXÚ
socketpairFT)ÚskipIf)Úreactor)ÚDeferredÚinlineCallbacks)ÚProcessDone)ÚProcessProtocol)ÚFilePath)Úplatform)ÚTestCase)ÚMSG_DONTWAIT)Ú
SCM_RIGHTSÚgetSocketFamilyÚrecvmsgÚsendmsgÚ z!Platform doesn't support sendmsg.c                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)Ú	_FDHolderé5   zH
A wrapper around a FD that will remember if it has been closed or not.
c                 ó   • Xl         g ©N©Ú_fd)ÚselfÚfds     ÚdC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/python/test/test_sendmsg.pyÚ__init__Ú_FDHolder.__init__:   s   € Ø�ó    c                 ó   • U R                   $ )z
Return the fileno of this FD.
r#   ©r%   s    r'   ÚfilenoÚ_FDHolder.fileno=   s   € ð �x‰xˆr*   c                 ó`   • U R                   (       a  [        U R                   5        SU l         gg)z8
Close the FD. If it's already been closed, do nothing.
N)r$   r   r,   s    r'   r   Ú_FDHolder.closeC   s"   € ð �8�8Ü�$—(‘(ŒOØˆD�Hð r*   c                 óš   • U R                   (       a:  [        R                  " SU R                    S3[        5        U R	                  5         gg)z.
If C{self._fd} is unclosed, raise a warning.
zFD z was not closed!N)r$   ÚwarningsÚwarnÚResourceWarningr   r,   s    r'   Ú__del__Ú_FDHolder.__del__K   s5   € ð �8�8Ü�MŠM˜C §¡˜zÐ)9Ð:¼OÔLØ�J‰J�Lð r*   c                 ó   • U $ r"   © r,   s    r'   Ú	__enter__Ú_FDHolder.__enter__S   s   € Øˆr*   c                 ó$   • U R                  5         g r"   )r   )r%   Úexc_typeÚ	exc_valueÚ	tracebacks       r'   Ú__exit__Ú_FDHolder.__exit__V   s   € Ø�
‰
�r*   r#   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r(   r-   r   r5   r9   r?   Ú__static_attributes__r8   r*   r'   r   r   5   s%   † ñòòòòòõr*   r   c                  óF   • [        5       u  p[        U 5      [        U5      4$ )zA
Create a pipe, and return the two FDs wrapped in L{_FDHolders}.
)r   r   )ÚrÚws     r'   Ú	_makePiperJ   Z   s    € ô ‹6�D€AÜ�a‹Lœ) A›,Ð'Ð'r*   c                   ó&   • \ rS rSrSrS\4S jrSrg)ÚExitedWithStderréb   z$
A process exited with some stderr.
Úreturnc                 óh   • SR                  S/[        U R                  5      -   5      n[        U5      $ )zI
Dump the errors in a pretty way in the event of a subprocess traceback.
ó   
r*   )ÚjoinÚlistÚargsÚrepr©r%   Úresults     r'   Ú__str__ÚExitedWithStderr.__str__g   s+   € ð —‘˜S˜E¤D¨¯©£OÑ3Ó4ˆÜ�F‹|Ðr*   r8   N)rA   rB   rC   rD   rE   ÚstrrW   rF   r8   r*   r'   rL   rL   b   s   † ñð˜÷ r*   rL   c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚStartStopProcessProtocoléo   aÔ  
An L{IProcessProtocol} with a Deferred for events where the subprocess
starts and stops.

@ivar started: A L{Deferred} which fires with this protocol's
    L{IProcessTransport} provider when it is connected to one.

@ivar stopped: A L{Deferred} which fires with the process output or a
    failure if the process produces output on standard error.

@ivar output: A C{str} used to accumulate standard output.

@ivar errors: A C{str} used to accumulate standard error.
c                 ó\   • [        5       U l        [        5       U l        SU l        SU l        g )Nr*   )r   ÚstartedÚstoppedÚoutputÚerrorsr,   s    r'   r(   Ú!StartStopProcessProtocol.__init__   s"   € Ü“zˆŒÜ“zˆŒØˆŒØˆ�r*   c                 óN   • U R                   R                  U R                  5        g r"   )r^   ÚcallbackÚ	transportr,   s    r'   ÚconnectionMadeÚ'StartStopProcessProtocol.connectionMade…   s   € Ø�‰×Ñ˜dŸn™nÕ-r*   c                 ó.   • U =R                   U-  sl         g r"   )r`   ©r%   Údatas     r'   ÚoutReceivedÚ$StartStopProcessProtocol.outReceivedˆ   ó   € Ø�Š�tÑŽr*   c                 ó.   • U =R                   U-  sl         g r"   )ra   ri   s     r'   ÚerrReceivedÚ$StartStopProcessProtocol.errReceived‹   rm   r*   c                 óö   • UR                  [        5      (       a&  U R                  R                  U R                  5        g U R                  R                  [        U R                  U R                  5      5        g r"   )Úcheckr   r_   rd   r`   ÚerrbackrL   ra   )r%   Úreasons     r'   ÚprocessEndedÚ%StartStopProcessProtocol.processEndedŽ   sI   € Ø�<‰<œ×$Ñ$Ø�L‰L×!Ñ! $§+¡+Õ.à�L‰L× Ñ Ô!1°$·+±+¸t¿{¹{Ó!KÕLr*   )ra   r`   r^   r_   N)rA   rB   rC   rD   rE   r(   rf   rk   ro   ru   rF   r8   r*   r'   r[   r[   o   s!   † ñòò.òòõMr*   r[   c                 óì  • [        [        R                  5      R                  5       R                  n[        [        R                  5      n[        [        R                  " [        R                  5      5      R                  5       R                  US'   [        5       n[        R                  " UUU[        [        5      R                  U S-   5      R                  5       R                  S/USSSUS.S9  U$ )zÙ
Start a script that is a peer of this test as a subprocess.

@param script: the module name of the script in this directory (no
    package prefix, no '.py')
@type script: C{str}

@rtype: L{StartStopProcessProtocol}
Ú
PYTHONPATHz.pys   17rI   rH   )r   é   é   é   )ÚenvÚchildFDs)r   ÚsysÚ
executableÚ
asTextModeÚpathÚdictÚosÚenvironr   rQ   r[   r   ÚspawnProcessÚ__file__Úsibling)ÚscriptÚoutputFDÚpyExer|   Ússpps        r'   Ú_spawnrŒ   •   s¿   € ô ”S—^‘^Ó$×/Ñ/Ó1×6Ñ6€EÜ
Œr�z‰zÓ
€CÜ ¤§¢¬c¯h©hÓ!7Ó8×CÑCÓE×JÑJ€CˆÑÜ#Ó%€DÜ×ÒØØàÜ”XÓ×&Ñ& v°¡~Ó6×AÑAÓC×HÑHØð	
ð
 Ø˜S S¨hÑ7ò
ð €Kr*   c                   óp   • \ rS rSrSrS rS rS rS rS r	S r
S	 r\" \S
5      S 5       r\S 5       rSrg)ÚSendmsgTestsé±   z:
Tests for the Python2/3 compatible L{sendmsg} interface.
c                 ó<   • [        [        5      u  U l        U l        g)z 
Create a pair of UNIX sockets.
N)r   r   Úinputr`   r,   s    r'   ÚsetUpÚSendmsgTests.setUp·   s   € ô #-¬WÓ"5ÑˆŒ
�D•Kr*   c                 ól   • U R                   R                  5         U R                  R                  5         g)z$
Close the sockets opened by setUp.
N)r‘   r   r`   r,   s    r'   ÚtearDownÚSendmsgTests.tearDown½   s$   € ð 	�
‰
×ÑÔØ�‰×ÑÕr*   c                 óÞ   • U R                   R                  5         U R                  [        [        U R                   S5      nU R                  UR                  S   [        R                  5        g)z
If the underlying C{sendmsg} call fails, L{send1msg} raises
L{socket.error} with its errno set to the underlying errno value.
ó   hello, worldr   N©	r‘   r   ÚassertRaisesr
   r   ÚassertEqualrS   ÚerrnoÚEBADF©r%   Úexcs     r'   Útest_syscallErrorÚSendmsgTests.test_syscallErrorÄ   sJ   € ð
 	�
‰
×ÑÔØ×Ñ¤¤w°·
±
¸OÓLˆØ×Ñ˜Ÿ™ !™¤e§k¡kÕ2r*   c                 óä   • U R                   R                  5         U R                  [        [        U R                   SS/S5      nU R                  UR                  S   [        R                  5        g)zx
The behavior when the underlying C{sendmsg} call fails is the same
whether L{sendmsg} is passed ancillary data or not.
r˜   )r   r   s   0123r   Nr™   rž   s     r'   Ú#test_syscallErrorWithControlMessageÚ0SendmsgTests.test_syscallErrorWithControlMessageÍ   sV   € ð
 	�
‰
×ÑÔØ×ÑÜ”7˜DŸJ™J¨¸/Ð9JÈAó
ˆð 	×Ñ˜Ÿ™ !™¤e§k¡kÕ2r*   c                 ó8  • SnU R                  [        U5      [        U R                  U5      5        [	        U R
                  5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  / 5        g)z9
L{recvmsg} will retrieve a message sent via L{sendmsg}.
ó   hello, world!r   N)	r›   Úlenr   r‘   r   r`   rj   ÚflagsÚ	ancillary)r%   ÚmessagerV   s      r'   Útest_roundtripÚSendmsgTests.test_roundtripØ   su   € ð #ˆØ×Ñœ˜W›¤w¨t¯z©z¸7Ó'CÔDä˜Ÿ™Ó%ˆØ×Ñ˜Ÿ™Ð&6Ô7Ø×Ñ˜Ÿ™ qÔ)Ø×Ñ˜×)Ñ)¨2Õ.r*   c                 ó*  • SS-  S-  nU R                   R                  S5        [        U R                   U5      nU R                  U[	        U5      :  5        [        U R                  [	        U5      5      nU R                  [	        US   5      U5        g)zC
L{sendmsg} returns the number of bytes which it was able to send.
ó   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   é   Fr   N)r‘   Úsetblockingr   Ú
assertTruer§   r   r`   r›   )r%   rª   ÚsentÚreceiveds       r'   Útest_shortsendÚSendmsgTests.test_shortsendä   sy   € ð  Ñ$ rÑ)ˆØ�
‰
×Ñ˜uÔ%Ü�t—z‘z 7Ó+ˆð
 	�‰˜œs 7›|Ñ+Ô,Ü˜4Ÿ;™;¬¨G«Ó5ˆØ×Ñœ˜X a™[Ó)¨4Õ0r*   c                 óˆ   • [        U R                  S/ S5        [        U R                  5      nU R	                  US/ S45        g)z�
L{sendmsg} treats an empty ancillary data list the same way it treats
receiving no argument for the ancillary parameter at all.
r¦   r   N)r   r‘   r   r`   r›   rU   s     r'   Útest_roundtripEmptyAncillaryÚ)SendmsgTests.test_roundtripEmptyAncillaryó   s=   € ô
 	�—
‘
Ð,¨b°!Ô4ä˜Ÿ™Ó%ˆØ×Ñ˜Ð"2°B¸Ð!:Õ;r*   z7MSG_DONTWAIT is only known to work as intended on Linuxc                 ó  • [        S5       H  n [        U R                  S[        S9  M     U R                  S5        g! [         a8  nU R                  UR                  S   [        R                  5         SnA  gSnAff = f)z�
The C{flags} argument to L{sendmsg} is passed on to the underlying
C{sendmsg} call, to affect it in whatever way is defined by those
flags.
i    r®   )r¨   r   NzHFailed to fill up the send buffer, or maybe send1msg blocked for a while)
Úranger   r‘   r   ÚOSErrorr›   rS   rœ   ÚEAGAINÚfail)r%   ÚiÚes      r'   Ú
test_flagsÚSendmsgTests.test_flagsý   sk   € ô �x–ˆAðÜ˜Ÿ
™
 K´|ÔDñ !ð �I‰Ið8õøô	 ó Ø× Ñ  §¡¨¡¬E¯L©LÔ9Ýûðús   �?¿
BÁ	-A<Á<Bc              #   óf  #   • [        SU R                  R                  5       5      nUR                  v •  [	        5       u  p#U R                  UR                  5        U R                  UR                  5        U   [        U R                  S[        [        [        SUR                  5       5      4/5        SSS5        UR                  v •  U R                  [        UR                  5       S5      S5        U R                  [        UR                  5       S5      S5        g! , (       d  f       Nq= f7f)zÎ
Calling L{sendmsg} with SOL_SOCKET, SCM_RIGHTS, and a platform-endian
packed file descriptor number should send that file descriptor to a
different process, where it can be retrieved by using L{recv1msg}.
Úpullpipes   blonkr¿   Nr¯   s   Test fixture data: blonk.
r*   )rŒ   r`   r-   r^   rJ   Ú
addCleanupr   r   r‘   r	   r   r   r_   r›   r   )r%   r‹   ÚpipeOutÚpipeIns       r'   Útest_sendSubProcessFDÚ"SendmsgTests.test_sendSubProcessFD  s×   é € ô �j $§+¡+×"4Ñ"4Ó"6Ó7ˆØ�l‰lÒÜ#›+‰ˆØ�‰˜Ÿ™Ô&Ø�‰˜Ÿ™Ô%âÜØ—
‘
ØÜœj¬$¨s°F·M±M³OÓ*DÐEÐFô÷ ð �l‰lÒØ×Ñœ˜gŸn™nÓ.°Ó5Ð7UÔVà×Ñœ˜gŸn™nÓ.°Ó5°sÕ;÷ �Vüs   ‚A7D1Á9<D Â5A+D1Ä 
D.Ä*D1)r‘   r`   N)rA   rB   rC   rD   rE   r’   r•   r    r£   r«   rµ   r¸   r   ÚdontWaitSkiprÁ   r   rÈ   rF   r8   r*   r'   rŽ   rŽ   ±   s[   † ñò6òò3ò	3ò
/ò1ò<ñ ˆLÐSÓTñó Uðð* ñ<ó ó<r*   rŽ   c                   óH   • \ rS rSrSrS rS rS r\" \	S5      S 5       r
Srg	)
ÚGetSocketFamilyTestsi-  z
Tests for L{getSocketFamily}.
c                 óR   • [        U5      nU R                  UR                  5        U$ )z£
Create a new socket using the given address family and return that
socket's file descriptor.  The socket will automatically be closed when
the test is torn down.
)r   rÅ   r   )r%   ÚaddressFamilyÚss      r'   Ú_socketÚGetSocketFamilyTests._socket3  s#   € ô �=Ó!ˆØ�‰˜Ÿ™Ô Øˆr*   c                 óh   • U R                  [        [        U R                  [        5      5      5        g)z€
When passed the file descriptor of a socket created with the C{AF_INET}
address family, L{getSocketFamily} returns C{AF_INET}.
N)r›   r   r   rÐ   r,   s    r'   Ú	test_inetÚGetSocketFamilyTests.test_inet=  s"   € ð
 	×Ñœ¤/°$·,±,¼wÓ2GÓ"HÕIr*   c                 óh   • U R                  [        [        U R                  [        5      5      5        g)z‚
When passed the file descriptor of a socket created with the
C{AF_INET6} address family, L{getSocketFamily} returns C{AF_INET6}.
N)r›   r   r   rÐ   r,   s    r'   Ú
test_inet6ÚGetSocketFamilyTests.test_inet6D  s"   € ð
 	×Ñœ¤?°4·<±<ÄÓ3IÓ#JÕKr*   z)Platform does not support AF_UNIX socketsc                 óh   • U R                  [        [        U R                  [        5      5      5        g)z€
When passed the file descriptor of a socket created with the C{AF_UNIX}
address family, L{getSocketFamily} returns C{AF_UNIX}.
N)r›   r   r   rÐ   r,   s    r'   Ú	test_unixÚGetSocketFamilyTests.test_unixK  s"   € ð 	×Ñœ¤/°$·,±,¼wÓ2GÓ"HÕIr*   r8   N)rA   rB   rC   rD   rE   rÐ   rÓ   rÖ   r   ÚnonUNIXSkiprÙ   rF   r8   r*   r'   rÌ   rÌ   -  s7   † ñòòJòLñ ˆKÐDÓEñJó FóJr*   rÌ   )7rE   rœ   rƒ   r~   r2   r   r   r   r   r   r   r   r	   r
   Ústructr   r   r   rÛ   ÚImportErrorÚunittestr   Útwisted.internetr   Útwisted.internet.deferr   r   Útwisted.internet.errorr   Útwisted.internet.protocolr   Útwisted.python.filepathr   Útwisted.python.runtimer   Útwisted.trial.unittestr   ÚisLinuxr   rÊ   Útwisted.python.sendmsgr   r   r   r   ÚdoImportSkipÚimportSkipReasonr   rJ   Ú	ExceptionrL   r[   rŒ   rŽ   rÌ   r8   r*   r'   Ú<module>rë      s3  ðñó Û 	Û 
Û ß )Ó )ß ?Õ ?Ý ðß*ð €Kå å $ß <Ý .Ý 5Ý ,Ý +Ý +à×Ò×ÑÝ#à�Lð €LðßTÓTð
 €LØÐ÷"ñ "òJ(ô
�yô 
ô#M˜ô #MòLñ8 ˆÐ&Ó'ôx<�8ó x<ó (ðx<ñv ˆÐ&Ó'ô#J˜8ó #Jó (ñ#Jøðy ó Ø‚Kðûð6 ó ;Ø€LØ:Òð;ús#   ´C7 ÂD Ã7DÄDÄ
DÄD