
    ye:                     b    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e          Z
dS )    N)Thread)mark)BaseZMQTestCaseSkipTestc                   "   e Zd ZdZdZdZ eedz            ZddZd Z	 e
j         eed           d	
          d             Z e
j         eed           d
          d             Z e
j        d          d             Zd Zd Zd ZdS )TestEINTRSysCallzBase class for EINTR tests.皙?g      ?g     @@Nc                     t          t          d          st          d          || j        }d| _        t          j        t          j        | j                  | _        t          j        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ts     :lib/python3.11/site-packages/zmq/tests/test_retry_eintr.pyalarmzTestEINTRSysCall.alarm   sp    
 v{++ 	<:;;;9!A "M&.$/JJ+Q55555    c                     d| _         t          j        t          j        dd           t          j        t          j        | j                   d S )NTr   )r   r   r   r   r   r   )r   argss     r   r   zTestEINTRSysCall.stop_timer'   s?    +Q222fnd&788888r   RCVTIMEOzrequires RCVTIMEO)reasonc                     |                      t          j                  }| j        |_        |                                  |                     t          j        |j                   | j	        sJ d S N)
socketzmqPULL
timeout_msrcvtimeor   assertRaisesAgainrecvr   )r   pulls     r   test_retry_recvz TestEINTRSysCall.test_retry_recv,   sZ    {{38$$

#)TY///r   SNDTIMEOzrequires SNDTIMEOc                     |                      t          j                  }| j        |_        |                                  |                     t          j        |j        d           | j	        sJ d S )Ns   buf)
r   r    PUSHr"   sndtimeor   r$   r%   sendr   r   pushs     r   test_retry_sendz TestEINTRSysCall.test_retry_send4   s\    {{38$$

#)TY777r      )rerunsc                                                       \  }t          j                    }|                    |t          j                                                      fd}t          |          }|                                 t          |	                    d j
        z                      }|                                 ||v sJ  j        sJ |                                 d S )Nc                  j    t          j        d j        z                                 d           d S )N      ping)timesleepr   r-   )r   ys   r   r-   z.TestEINTRSysCall.test_retry_poll.<locals>.sendC   s.    Jq4,,---FF7OOOOOr   )targetr5   )create_bound_pairr    PollerregisterPOLLINr   r   startdictpollr"   joinr   r&   )r   xpollerr-   r   evtsr9   s   `     @r   test_retry_pollz TestEINTRSysCall.test_retry_poll<   s    %%''13:&&&

	 	 	 	 	 	 $				FKKDO 34455	Dyyyy	r   c                 `   |                      t          j                  }| j        |_        |                    d           |                    d           t          j        d           | 	                                 | j
                                         | j        sJ | j
        j        sJ d S )Nztcp://127.0.0.1:5555r6   r	   )r   r    r+   r"   lingerconnectr-   r7   r8   r   contextdestroyr   closedr.   s     r   test_retry_termz TestEINTRSysCall.test_retry_termO   s    {{38$$o+,,,		'
3

|""""""r   c                      t          d          )Nz(TODO: find a way to interrupt getsockoptr   r   s    r   test_retry_getsockoptz&TestEINTRSysCall.test_retry_getsockoptZ       ABBBr   c                      t          d          )Nz(TODO: find a way to interrupt setsockoptrO   rP   s    r   test_retry_setsockoptz&TestEINTRSysCall.test_retry_setsockopt]   rR   r   r   )__name__
__module____qualname____doc__r   timeoutintr"   r   r   r   skipifr   r    r(   r0   flakyrF   rM   rQ   rT    r   r   r   r      s8       %% LGWs]##J6 6 6 69 9 9
 T[WWS*---6IJJJ    KJ  T[WWS*---6IJJJ    KJ  TZq  $	# 	# 	#C C CC C C C Cr   r   )r   r7   	threadingr   pytestr   r    	zmq.testsr   r   r   r]   r   r   <module>ra      s                  



 / / / / / / / /
NC NC NC NC NC NC NC NC NC NCr   