ó
L]c           @   sŠ   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	 m
 Z
 d  d l m Z d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   Thread(   t   mark(   t   BaseZMQTestCaset   SkipTestt	   skip_pypy(   t   bt   TestEINTRSysCallc           B   s³   e  Z d  Z d Z d Z e e d ƒ Z d d „ Z d „  Z	 e
 j e e d ƒ d d ƒd	 „  ƒ Z e
 j e e d
 ƒ d d ƒd „  ƒ Z d „  Z d „  Z d „  Z d „  Z RS(   s    Base class for EINTR tests. gš™™™™™¹?g      Ð?g     @@c         C   st   t  t d ƒ s t d ƒ ‚ n  | d k r6 |  j } n  t |  _ t j t j |  j ƒ |  _	 t j
 t j | d ƒ d S(   s}   start a timer to fire only once
        
        like signal.alarm, but with better resolution than integer seconds.
        t	   setitimers   EINTR tests require setitimeriè  N(   t   hasattrt   signalR   t   Nonet   signal_delayt   Falset   timer_firedt   SIGALRMt
   stop_timert   orig_handlerR   t   ITIMER_REAL(   t   selft   t(    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   alarm   s    	c         G   s9   t  |  _ t j t j d d ƒ t j t j |  j ƒ d  S(   Ni    (   t   TrueR   R	   R   R   R   R   (   R   t   args(    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyR   +   s    	t   RCVTIMEOt   reasons   requires RCVTIMEOc         C   sQ   |  j  t j ƒ } |  j | _ |  j ƒ  |  j t j | j ƒ |  j	 sM t
 ‚ d  S(   N(   t   sockett   zmqt   PULLt
   timeout_mst   rcvtimeoR   t   assertRaisest   Againt   recvR   t   AssertionError(   R   t   pull(    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   test_retry_recv0   s
    
t   SNDTIMEOs   requires SNDTIMEOc         C   sZ   |  j  t j ƒ } |  j | _ |  j ƒ  |  j t j | j t	 d ƒ ƒ |  j
 sV t ‚ d  S(   Nt   buf(   R   R   t   PUSHR   t   sndtimeoR   R   R   t   sendR   R   R!   (   R   t   push(    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   test_retry_send8   s
    
c            s»   ˆ  j  ƒ  \ } ‰ t j ƒ  } | j | t j ƒ ˆ  j ƒ  ‡  ‡ f d †  } t d | ƒ } | j ƒ  t | j	 d ˆ  j
 ƒ ƒ } | j ƒ  | | k sž t ‚ ˆ  j s­ t ‚ | j ƒ  d  S(   Nc              s+   t  j d ˆ  j ƒ ˆ j t d ƒ ƒ d  S(   Ni   t   ping(   t   timet   sleepR   R(   R   (    (   R   t   y(    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyR(   E   s    t   targeti   (   t   create_bound_pairR   t   Pollert   registert   POLLINR   R    t   startt   dictt   pollR   t   joinR!   R   R    (   R   t   xt   pollerR(   R   t   evts(    (   R   R.   s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   test_retry_poll@   s    


c         C   s‡   |  j  t j ƒ } |  j | _ | j d ƒ | j t d ƒ ƒ t j	 d ƒ |  j
 ƒ  |  j j ƒ  |  j sq t ‚ |  j j sƒ t ‚ d  S(   Ns   tcp://127.0.0.1:5555R+   gš™™™™™¹?(   R   R   R&   R   t   lingert   connectR(   R   R,   R-   R   t   contextt   destroyR   R!   t   closed(   R   R)   (    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   test_retry_termP   s    
c         C   s   t  d ƒ ‚ d  S(   Ns(   TODO: find a way to interrupt getsockopt(   R   (   R   (    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   test_retry_getsockopt[   s    c         C   s   t  d ƒ ‚ d  S(   Ns(   TODO: find a way to interrupt setsockopt(   R   (   R   (    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   test_retry_setsockopt^   s    N(   t   __name__t
   __module__t   __doc__R   t   timeoutt   intR   R
   R   R   R   t   skipifR   R   R#   R*   R;   RA   RB   RC   (    (    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyR      s   	((			(   R	   R,   t	   threadingR    t   pytestR   R   t	   zmq.testsR   R   R   t   zmq.utils.strtypesR   R   (    (    (    s9   lib/python2.7/site-packages/zmq/tests/test_retry_eintr.pyt   <module>   s   