a
    ze
                     @   sr   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ G dd deZ	G dd dej
Zedkrne  dS )    N)supportc                   @   s   e Zd ZdS )SIGUSR1ExceptionN)__name__
__module____qualname__ r   r   0/usr/lib/python3.9/test/signalinterproctester.pyr   
   s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )InterProcessSignalTestsc                 C   s   dddd| _ d S )Nr   SIGHUPSIGUSR1SIGALRMgot_signals)selfr   r   r   setUp   s    zInterProcessSignalTests.setUpc                 C   s   | j d  d7  < d S )Nr      r   r   signumframer   r   r   sighup_handler   s    z&InterProcessSignalTests.sighup_handlerc                 C   s   | j d  d7  < td S )Nr   r   )r   r   r   r   r   r   sigusr1_handler   s    z'InterProcessSignalTests.sigusr1_handlerc                 C   s\   |d ur|   tj}t | }t |k rF| j| r<d S t  q"| d||f  d S )Nz'signal %s not received after %s seconds)	waitr   ZSHORT_TIMEOUTtime	monotonicr   signalpauseZfail)r   childsignametimeoutdeadliner   r   r   wait_signal   s    

z#InterProcessSignalTests.wait_signalc                 C   s$   d||f }t jdd|g}t|S )Nz)import os, signal; os.kill(%s, signal.%s)z-Iz-c)sys
executable
subprocessPopen)r   pidr   codeargsr   r   r   subprocess_send_signal*   s    z.InterProcessSignalTests.subprocess_send_signalc              	   C   s  t  t j| j t  t j| j t  t jt j t  t jt j t	t
 }| |d}| |d W d    n1 sz0    Y  | | jdddd | tH | |d}| |d W d    n1 s0    Y  W d    n1 s0    Y  | | jdddd | |d}|  W d    n1 s>0    Y  zf| t& t d | d d W d    n1 s0    Y  | | jdddd W t d nt d 0 d S )Nr   r   r   r
   r   SIGUSR2r   )r   r   r   r   r   r*   SIG_IGNr   default_int_handlerstrosgetpidr)   r!   ZassertEqualr   ZassertRaisesr   r   KeyboardInterruptalarm)r   r&   r   r   r   r   test_interprocess_signal/   s4    *H(
,
z0InterProcessSignalTests.test_interprocess_signalN)	r   r   r   r   r   r   r!   r)   r2   r   r   r   r   r	      s   r	   __main__)r.   r   r$   r"   r   Zunittesttestr   	Exceptionr   ZTestCaser	   r   mainr   r   r   r   <module>   s   E