3
rY]
                 @   sf   d dl Z d dlZd dlZd dlZd dlZd dlZG dd deZG dd dejZ	e
dkrbej  dS )    Nc               @   s   e Zd ZdS )SIGUSR1ExceptionN)__name__
__module____qualname__ r   r   +lib/python3.6/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   r   r   sigusr1_handler   s    z'InterProcessSignalTests.sigusr1_handlerc             C   s^   |d k	r|j   d}tj | }x&tj |k rF| j| r<d S tj  q"W | jd||f  d S )Ng      $@z'signal %s not received after %s seconds)waittimeZ	monotonicr   signalpauseZfail)r   childsignameZtimeoutZdeadliner   r   r   wait_signal   s    
z#InterProcessSignalTests.wait_signalc             C   s$   d||f }t jdd|g}tj|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   sN  t j t j| j t j t j| j t j t jt j t j t jt j t	t
j }| j|d}| j|d W d Q R X | j| jdddd | jt* | j|d}| j|d W d Q R X W d Q R X | j| jdddd | j|d}|j  W d Q R X zF| jt t jd | jd d W d Q R X | j| jdddd W d t jd X d S )Nr	   r   r   )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.   s.    
 

z0InterProcessSignalTests.test_interprocess_signalN)	r   r   r   r   r   r   r   r"   r+   r   r   r   r   r      s   r   __main__)r'   r   r   r   r   Zunittest	Exceptionr   ZTestCaser   r   mainr   r   r   r   <module>   s   E