o
    GXîhó
  ã                   @   sv   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r9e ¡  dS dS )é    N)Úsupportc                   @   s   e Zd ZdS )ÚSIGUSR1ExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   úD/opt/python-3.10.19/usr/lib/python3.10/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‚)Nr   r   )r   r   r   r   r   r   Úsigusr1_handler   s   z'InterProcessSignalTests.sigusr1_handlerc                 C   sf   |d ur|  ¡  tj}t ¡ | }t ¡ |k r(| j| rd S t ¡  t ¡ |k s|  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 s=w   Y  |  | jddddœ¡ |  t¡$ |  |d¡}|  |d¡ W d   ƒ n1 sjw   Y  W d   ƒ n1 syw   Y  |  | jddddœ¡ |  |d¡}| ¡  W d   ƒ n1 sžw   Y  z3|  t¡ t  d¡ |  d d¡ W d   ƒ n1 s¿w   Y  |  | jddddœ¡ W t  d¡ d S t  d¡ w )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/   s@   ÿÿÿ€ÿÿ
þ
þ
ÿ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ÿ