
    Yf                        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dS )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                  J    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
dS )SetWakeupSIGCHLDTestszy
    Tests for the L{signal.set_wakeup_fd} implementation of the
    L{installHandler} and L{isDefaultHandler} APIs.
    returntuple[int, int]c                    t          j                    \  }}|                     t           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      T/var/www/html/env/lib/python3.11/site-packages/twisted/internet/test/test_sigchld.pyr   zSetWakeupSIGCHLDTests.pipe   se    
 giie$'''%(((tuU{    Nonec                t    t          j        t           j                  | _        t	          d          | _        dS )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,    
 $*#3FN#C#C #B''


r   c                v    t          | j                   t          j        t          j        | j                   dS )zM
        Restore whatever signal handler was present when setUp ran.
        N)r   r    r   r   r   r!   s    r   tearDownzSetWakeupSIGCHLDTests.tearDown2   s1    
 	tz"""fnd&>?????r   c                   |                      t                                 t          j        t          j        t          j                   |                     t                                 t          j        t          j        t          j                   |                      t                                 t          j        t          j        d            |                     t                                 dS )zn
        L{isDefaultHandler} returns true if the SIGCHLD handler is SIG_DFL,
        false otherwise.
        c                     d S )N )argss    r   <lambda>z=SetWakeupSIGCHLDTests.test_isDefaultHandler.<locals>.<lambda>D   s    D r   N)
assertTruer   r   r   SIG_IGNassertFalseSIG_DFLr!   s    r   test_isDefaultHandlerz+SetWakeupSIGCHLDTests.test_isDefaultHandler:   s    
 	(**+++fnfn555)++,,,fnfn555(**+++fn&8&8999)++,,,,,r   c                    |                                  \  }}t          |          }|                     t          |          |           dS )zV
        L{installHandler} returns the previously registered file descriptor.
        N)r   r   assertEqual)r   r   r   r    s       r   test_returnOldFDz&SetWakeupSIGCHLDTests.test_returnOldFDG   sF     iikkeu%%..66666r   c                6   |                                  \  }}|                     t                                 t          |           |                     t                                 t          d           |                     t                                 dS )zO
        C{installHandler(-1)} removes the SIGCHLD handler completely.
        r   N)r   r*   r   r   r,   r   s      r   test_uninstallHandlerz+SetWakeupSIGCHLDTests.test_uninstallHandlerO   s     iikke(**+++u)++,,,r(**+++++r   c                   |                                  \  }}t          |           |                     t          t          j        |d          }|                     |j        t          j                   t	          j	        t	          j
                    t          j                   |                     t          t	          j        |d                    d           dS )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   r0   errnoEAGAINkillgetpidr   r   len)r   r   r   excs       r   test_installHandlerz)SetWakeupSIGCHLDTests.test_installHandlerZ   s    
 iikkeu$::EL111
	V^,,,RWT1--..22222r   N)r   r   )r   r   )__name__
__module____qualname____doc__r   r"   r$   r.   r1   r3   r?   r'   r   r   r   r      s         

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