
    Ef:                     Z    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
y)    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y)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       y)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     </usr/lib/python3/dist-packages/zmq/tests/test_retry_eintr.pyalarmzTestEINTRSysCall.alarm   se    
 v{+:;;9!!A "MM&..$//J++Q5    c                     d| _         t        j                  t        j                  dd       t        j                  t        j                  | j
                         y )NTr   )r   r   r   r   r   r   )r   argss     r   r   zTestEINTRSysCall.stop_timer'   s:    ++Q2fnnd&7&78r   RCVTIMEOzrequires RCVTIMEO)reasonc                     | j                  t        j                        }| j                  |_        | j                          | j                  t        j                  |j                         | j                  sJ y N)
socketzmqPULL
timeout_msrcvtimeor   assertRaisesAgainrecvr   )r   pulls     r   test_retry_recvz TestEINTRSysCall.test_retry_recv,   sO    {{388$

#))TYY/r   SNDTIMEOzrequires SNDTIMEOc                     | j                  t        j                        }| j                  |_        | j                          | j                  t        j                  |j                  d       | j                  sJ y )Ns   buf)
r   r    PUSHr"   sndtimeor   r$   r%   sendr   r   pushs     r   test_retry_sendz TestEINTRSysCall.test_retry_send4   sQ    {{388$

#))TYY7r      )rerunsc                      j                         \  }t        j                         }|j                  |t        j                          j                           fd}t        |      }|j                          t        |j                  d j                  z              }|j                          ||v sJ  j                  sJ |j                          y )Nc                  l    t        j                  d j                  z         j                  d       y )N      ping)timesleepr   r-   )r   ys   r   r-   z.TestEINTRSysCall.test_retry_poll.<locals>.sendC   s%    JJq4,,,-FF7Or   )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DOO 345	Dyy	r   c                 r   | j                  t        j                        }| j                  |_        |j                  d       |j                  d       t        j                  d       | j                          | j                  j                          | j                  sJ | j                  j                  sJ y )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~    {{388$oo+,		'

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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      s    % LGWs]#J69
 T[[WS*--6IJ  K  T[[WS*--6IJ  K  TZZq $	#CCr   r   )r   r7   	threadingr   pytestr   r    	zmq.testsr   r   r   r]   r   r   <module>ra      s)        
 /
NC NCr   