
    Vh                        d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 edk(  rddl
mZmZ ddlmZ nd	Z G d
 de	      Zy)zX
Tests for L{twisted.internet._sigchld}, an alternate, superior SIGCHLD
monitoring API.
    )annotationsN)platformType)SynchronousTestCaseposix)installHandlerisDefaultHandler)setNonBlockingz,These tests can only run on POSIX platforms.c                  H    e Zd ZdZd
dZddZddZddZddZddZ	ddZ
y	)SetWakeupSIGCHLDTestszy
    Tests for the L{signal.set_wakeup_fd} implementation of the
    L{installHandler} and L{isDefaultHandler} APIs.
    c                    t        j                         \  }}| j                  t         j                  |       | j                  t         j                  |       t	        |       t	        |       ||fS )zk
        Create a non-blocking pipe which will be closed after the currently
        running test.
        )ospipe
addCleanupcloser	   selfreadwrites      R/home/dcms/DCMS/lib/python3.12/site-packages/twisted/internet/test/test_sigchld.pyr   zSetWakeupSIGCHLDTests.pipe   sQ    
 ggie$'%(tuU{    c                t    t        j                  t         j                        | _        t	        d      | _        y)z
        Save the current SIGCHLD handler as reported by L{signal.signal} and
        the current file descriptor registered with L{installHandler}.
        N)signal	getsignalSIGCHLDsignalModuleHandlerr   oldFDr   s    r   setUpzSetWakeupSIGCHLDTests.setUp*   s'    
 $*#3#3FNN#C #B'
r   c                    t        | j                         t        j                  t        j                  | j                         y)zM
        Restore whatever signal handler was present when setUp ran.
        N)r   r   r   r   r   r   s    r   tearDownzSetWakeupSIGCHLDTests.tearDown2   s(    
 	tzz"fnnd&>&>?r   c                   | j                  t                      t        j                  t        j                  t        j                         | j                  t                      t        j                  t        j                  t        j                         | j                  t                      t        j                  t        j                  d        | j                  t                      y)zn
        L{isDefaultHandler} returns true if the SIGCHLD handler is SIG_DFL,
        false otherwise.
        c                      y )N )argss    r   <lambda>z=SetWakeupSIGCHLDTests.test_isDefaultHandler.<locals>.<lambda>D   s    r   N)
assertTruer   r   r   SIG_IGNassertFalseSIG_DFLr   s    r   test_isDefaultHandlerz+SetWakeupSIGCHLDTests.test_isDefaultHandler:   s    
 	(*+fnnfnn5)+,fnnfnn5(*+fnn&89)+,r   c                v    | j                         \  }}t        |      }| j                  t        |      |       y)zV
        L{installHandler} returns the previously registered file descriptor.
        N)r   r   assertEqual)r   r   r   r   s       r   test_returnOldFDz&SetWakeupSIGCHLDTests.test_returnOldFDG   s2     iikeu%.6r   c                    | j                         \  }}| j                  t                      t        |       | j	                  t                      t        d       | j                  t                      y)zO
        C{installHandler(-1)} removes the SIGCHLD handler completely.
        r   N)r   r'   r   r   r)   r   s      r   test_uninstallHandlerz+SetWakeupSIGCHLDTests.test_uninstallHandlerO   sU     iike(*+u)+,r(*+r   c                   | j                         \  }}t        |       | j                  t        t        j
                  |d      }| j                  |j                  t        j                         t	        j                  t	        j                         t        j                         | j                  t        t	        j
                  |d            d       y)z
        The file descriptor passed to L{installHandler} has a byte written to
        it when SIGCHLD is delivered to the process.
              N)r   r   assertRaisesOSErrorr   r   r-   errnoEAGAINkillgetpidr   r   len)r   r   r   excs       r   test_installHandlerz)SetWakeupSIGCHLDTests.test_installHandlerZ   s    
 iikeu$:ELL1
		V^^,RWWT1-.2r   N)returnztuple[int, int])r=   None)__name__
__module____qualname____doc__r   r   r!   r+   r.   r0   r<   r$   r   r   r   r      s+    

(@-7	,3r   r   )rB   
__future__r   r6   r   r   twisted.python.runtimer   twisted.trial.unittestr   twisted.internet._signalsr   r   twisted.internet.fdescr	   skipr   r$   r   r   <module>rI      s@    #  	  / 67J59DO3/ O3r   