o
    i:                     @   sT   d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZm	Z	 G dd deZ
dS )    N)Thread)mark)BaseZMQTestCaseSkipTestc                   @   s   e Zd ZdZdZdZeed ZdddZdd	 Z	e
jeed
 dddd Ze
jeed dddd Ze
jdddd Zdd Zdd Zdd ZdS )TestEINTRSysCallzBase class for EINTR tests.皙?g      ?g     @@Nc                 C   sL   t tds	td|du r| j}d| _ttj| j| _ttj	|d dS )zustart a timer to fire only once

        like signal.alarm, but with better resolution than integer seconds.
        	setitimerzEINTR tests require setitimerNFi  )
hasattrsignalr   signal_delaytimer_firedSIGALRM
stop_timerorig_handlerr   ITIMER_REAL)selft r   U/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/zmq/tests/test_retry_eintr.pyalarm   s   
zTestEINTRSysCall.alarmc                 G   s*   d| _ ttjdd ttj| j d S )NTr   )r   r
   r   r   r   r   )r   argsr   r   r   r   '   s   zTestEINTRSysCall.stop_timerRCVTIMEOzrequires RCVTIMEO)reasonc                 C   s:   |  tj}| j|_|   | tj|j | j	sJ d S N)
socketzmqPULL
timeout_msrcvtimeor   assertRaisesAgainrecvr   )r   pullr   r   r   test_retry_recv,   s
   z TestEINTRSysCall.test_retry_recvSNDTIMEOzrequires SNDTIMEOc                 C   s<   |  tj}| j|_|   | tj|jd | j	sJ d S )Ns   buf)
r   r   PUSHr   sndtimeor   r   r    sendr   r   pushr   r   r   test_retry_send4   s
   z TestEINTRSysCall.test_retry_send   )rerunsc                    s      \}t }||tj     fdd}t|d}|  t|	d j
 }|  ||v s9J  js>J |  d S )Nc                      s   t d j  d d S )N      ping)timesleepr   r'   r   r   yr   r   r'   C   s   z.TestEINTRSysCall.test_retry_poll.<locals>.send)targetr-   )create_bound_pairr   PollerregisterPOLLINr   r   startdictpollr   joinr   r!   )r   xpollerr'   r   evtsr   r1   r   test_retry_poll<   s   

z TestEINTRSysCall.test_retry_pollc                 C   s^   |  tj}| j|_|d |d td | 	  | j
  | js'J | j
js-J d S )Nztcp://127.0.0.1:5555r.   r   )r   r   r%   r   lingerconnectr'   r/   r0   r   contextdestroyr   closedr(   r   r   r   test_retry_termO   s   




z TestEINTRSysCall.test_retry_termc                 C      t d)Nz(TODO: find a way to interrupt getsockoptr   r   r   r   r   test_retry_getsockoptZ      z&TestEINTRSysCall.test_retry_getsockoptc                 C   rF   )Nz(TODO: find a way to interrupt setsockoptrG   rH   r   r   r   test_retry_setsockopt]   rJ   z&TestEINTRSysCall.test_retry_setsockoptr   )__name__
__module____qualname____doc__r   timeoutintr   r   r   r   skipifr	   r   r#   r*   flakyr?   rE   rI   rK   r   r   r   r   r      s     




r   )r
   r/   	threadingr   pytestr   r   	zmq.testsr   r   r   r   r   r   r   <module>   s   