ó
L]c           @   sB  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 m Z y d  d l m	 Z	 Wn! e
 k
 r‰ d  d l	 m	 Z	 n Xd  d l m Z d  d l Z d  d l m Z m Z m Z m Z m Z m Z d e j f d „  ƒ  YZ d e j f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ e r>d e e f d „  ƒ  YZ n  d S(   iÿÿÿÿN(   t   Threadt   Event(   t   Queue(   t   mark(   t   BaseZMQTestCaset   have_geventt	   GreenTestt
   skip_greent   PYPYt   SkipTestt   KwargTestSocketc           B   s   e  Z d Z d  „  Z RS(   c         O   s2   | j  d d  ƒ |  _ t t |  ƒ j | | Ž  d  S(   Nt
   test_kwarg(   t   popt   Nonet   test_kwarg_valuet   superR
   t   __init__(   t   selft   argst   kwargs(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR      s    N(   t   __name__t
   __module__R   R   R   (    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR
      s   t   KwargTestContextc           B   s   e  Z e Z RS(    (   R   R   R
   t   _socket_class(    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR      s   t   TestContextc           B   s  e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z e j e j j d ƒ d d ƒd „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j e j j d ƒ d d ƒd „  ƒ Z RS(   c         C   s|   |  j  ƒ  } |  j t | |  j  ƒ ƒ ~ |  j  ƒ  } |  j t | |  j  ƒ ƒ ~ |  j  ƒ  } |  j t | |  j  ƒ ƒ ~ d  S(   N(   t   Contextt   assert_t
   isinstance(   R   t   c1t   c2t   c3(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt	   test_init%   s    c         C   sa   |  j  ƒ  } |  j d t | ƒ k ƒ t j ƒ  d k rS |  j d t | ƒ k ƒ n  | j ƒ  d  S(   Nt   socketi   t
   IO_THREADS(   i   (   R   t
   assertTruet   dirt   zmqt   zmq_version_infot   term(   R   t   ctx(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_dir0   s
    c         C   s*   |  j  ƒ  } | j ƒ  |  j | j ƒ d  S(   N(   R   R&   R   t   closed(   R   t   c(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt	   test_term7   s    
c         C   s)   |  j  ƒ   } Wd  QX|  j | j ƒ d  S(   N(   R   R   R)   (   R   R*   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_context_manager<   s    c         C   s   |  j  t j |  j d ƒ d  S(   Niÿÿÿÿ(   t   assertRaisesErrnoR$   t   EINVALR   (   R   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_fail_initA   s    c         C   si   |  j  t j t j ƒ \ } } | j t j d ƒ | j d d t ƒ| j ƒ  | j ƒ  |  j	 j
 ƒ  d  S(   Ni    t   hellot   copy(   t   create_bound_pairR$   t   ROUTERt   DEALERt
   setsockoptt   LINGERt   sendt   Falset   closet   contextR&   (   R   t   rept   req(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_term_hangD   s    

c         C   s™   |  j  j ƒ  } |  j  j d d ƒ } |  j | | k ƒ | j ƒ  |  j  j ƒ  } |  j  j ƒ  } |  j | | k ƒ |  j | j ƒ |  j | | k ƒ d  S(   Nt
   io_threadsi   (   R   t   instanceR"   R&   t   assertFalseR)   (   R   R'   R   R   t   c4(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_instanceL   s    
c            s  |  j  j ƒ  t ƒ  ‰ d |  j f ‡  f d †  ƒ  Y‰  ‡  ‡ f d †  } d } g  t | ƒ D] } t d | ƒ ^ qZ } g  | D] } | j ƒ  ^ q| ˆ  j ƒ  } t | ˆ  ƒ s³ t	 ‚ x8 t | ƒ D]* } ˆ j
 d d ƒ } | | k sÀ t	 ‚ qÀ W| j ƒ  g  | D] } | j d d ƒ ^ qÿ d  S(   Nt   SlowContextc              s   e  Z ‡  f d  †  Z RS(   c            s*   t  j d ƒ t ˆ  |  ƒ j | | Ž  d  S(   Ni   (   t   timet   sleepR   R   (   R   t   at   kw(   RC   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR   ^   s    (   R   R   R   (    (   RC   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyRC   ]   s   c              s   ˆ j  ˆ  j ƒ  ƒ d  S(   N(   t   putR?   (    (   RC   t   q(    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   fb   s    i   t   targett   timeouti   (   R:   R&   R   R   t   rangeR    t   startR?   R   t   AssertionErrort   gett   join(   R   RJ   t   Nt   it   threadst   tR'   t
   thread_ctx(    (   RC   RI   s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_instance_threadsafeW   s    	(
c         C   sS   d } t  ƒ  > } | j t j d | ƒ } |  j | j | k ƒ Wd  QXWd  QXd  S(   Ns   testing one two threeR   (   R   R    R$   R4   R"   R   (   R   R   R'   R    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_socket_passes_kwargst   s    c         C   s†   |  j  ƒ  } xi t d ƒ D][ } g  t d ƒ D] } | j t j ƒ ^ q, } g  | D] } | j ƒ  ^ qQ t j d ƒ q W| j ƒ  d S(   s9   opening and closing many sockets shouldn't cause problemsi   iA   g{®Gáz„?N(	   R   RM   R    R$   t   REPR9   RD   RE   R&   (   R   R'   RS   t   socketst   s(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_many_socketsz   s    +c         C   s¦   |  j  ƒ  } d | _ |  j | j d ƒ | j t j ƒ } |  j | j d ƒ |  j | j t j ƒ d ƒ | j ƒ  d | _	 | j t j ƒ } | j ƒ  | j
 ƒ  d S(   s*   setting socket options with ctx attributesi   t    N(   R   t   lingert   assertEqualR    R$   t   REQt
   getsockoptR6   R9   t	   subscribeR&   (   R   R'   R[   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_sockopts„   s    	
	
t   wint   reasons   Segfaults on Windowsc         C   s   |  j  ƒ  } g  t d ƒ D] } | j t j ƒ ^ q } g  | d d d … D] } | j ƒ  ^ qK | j ƒ  t j d ƒ x | D] } |  j	 | j
 ƒ q Wd S(   s$   Context.destroy should close socketsiA   Ni   g{®Gáz„?(   R   RM   R    R$   RY   R9   t   destroyRD   RE   R"   R)   (   R   R'   RS   RZ   R[   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_destroy”   s    +*
c         C   sƒ   |  j  t j t j ƒ \ } } | j d ƒ t j d ƒ |  j j d d ƒ t j d ƒ x$ | | f D] } |  j	 | j
 ƒ qe Wd S(   s4   Context.destroy should set linger on closing socketst   hig{®Gáz„?R^   i    N(   R2   R$   R`   RY   R7   RD   RE   R:   Rf   R"   R)   (   R   R<   R;   R[   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_destroy_linger¥   s    c         C   s¤   |  j  ƒ  } | j t j ƒ } |  j | j ƒ t d | j ƒ } | j ƒ  | j	 d d ƒ |  j
 | j ƒ  d ƒ | j ƒ  | j	 d d ƒ |  j | j ƒ  d ƒ d S(   s    Context.term won't close socketsRK   RL   gš™™™™™¹?s   Context should be waitings   Context should have closedN(   R   R    R$   R`   R@   R)   R    R&   RN   RQ   R"   t   is_aliveR9   (   R   R'   R[   RU   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_term_noclose°   s    

c            sg   t  r t d ƒ ‚ n  ‡  f d †  } t d | ƒ } | j ƒ  | j d d ƒ ˆ  j | j ƒ  d ƒ d S(   s+   test close&term by garbage collection alones   GC doesn't work c             s$   ‡  f d †  }  |  ƒ  t  j ƒ  d  S(   Nc             s"   ˆ  j  ƒ  }  |  j t j ƒ } d  S(   N(   R   R    R$   t   PUSH(   R'   R[   (   R   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   innerÄ   s    (   t   gct   collect(   Rm   (   R   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   gcfÃ   s    RK   RL   i   s1   Garbage collection should have cleaned up contextN(   R   R	   R    RN   RQ   R@   Rj   (   R   Rp   RU   (    (   R   s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_gc½   s    
c            s9   d t  f ‡  f d †  ƒ  Y‰  ‡  ‡ f d †  } | ƒ  d S(   s6   ctx.destroy should succeed when cyclic ref prevents gct   CyclicReferencec              s#   e  Z d d  „ Z ‡  f d †  Z RS(   c         S   s   | |  _  d  S(   N(   t   parent(   R   Rs   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR   Ò   s    c            s   | |  _  ˆ  |  ƒ |  _ d  S(   N(   t   sockt   child(   R   Rt   (   Rr   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   crashÕ   s    	N(   R   R   R   R   Rv   (    (   Rr   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyRr   Ñ   s   c             sB   ˆ j  ƒ  }  |  j t j ƒ } ˆ  ƒ  } | j | ƒ |  j ƒ  d  S(   N(   R   R    R$   t   PULLRv   Rf   (   R'   Rt   R*   (   Rr   R   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt	   crash_zmqÙ   s
    	N(   t   object(   R   Rx   (    (   Rr   R   s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_cyclic_destroyÎ   s    c            s±   ˆ j  ƒ  ‰  t ƒ  ‰ ˆ j ƒ  ‡  ‡ ‡ f d †  } t d | ƒ } | j ƒ  ˆ j d ƒ ˆ j ˆ j ƒ  d ƒ t j	 d ƒ ˆ  j
 ƒ  | j d d ƒ ˆ j | j ƒ  d ƒ d S(	   s/   ctx.term should not crash active threads (#139)c             sŠ   ˆ  j  t j ƒ }  |  j d ƒ ˆ j ƒ  zB y |  j ƒ  Wn- t j k
 ri } ˆ j | j t j	 ƒ d  SXWd  |  j
 ƒ  Xˆ j d ƒ d  S(   Ns   tcp://127.0.0.1s,   recv should have been interrupted with ETERM(   R    R$   RY   t   bind_to_random_portt   sett   recvt   ZMQErrorR_   t   errnot   ETERMR9   t   fail(   R[   t   e(   R'   t   evtR   (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   blockè   s    
 	RK   i   s   sync event never firedg{®Gáz„?RL   s%   term should have interrupted s.recv()N(   R   R   t   clearR    RN   t   waitR"   t   is_setRD   RE   R&   RQ   R@   Rj   (   R   R„   RU   (    (   R'   Rƒ   R   s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_term_threadâ   s    	


c         C   sa   |  j  ƒ  } | j t j ƒ } | j d ƒ | j ƒ  | j ƒ  | j sN t ‚ | j s] t ‚ d  S(   Ns   tcp://127.0.0.1(	   R   R    R$   t   PUBR{   R9   Rf   R)   RO   (   R   R'   R[   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_destroy_no_socketsþ   s    

c         C   s˜   t  j ƒ  d k  r! t d ƒ ‚ n  |  j ƒ  } | j t  j d ƒ |  j | j t  j ƒ d ƒ d | _ |  j | j d ƒ |  j | j t  j ƒ d ƒ d  S(   Ni   s    context options require libzmq 3i   id   (   i   (	   R$   R%   R	   R   R|   t   MAX_SOCKETSR_   RP   t   max_sockets(   R   R'   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_ctx_opts  s    	c         C   sÅ   |  j  ƒ  } t j | ƒ } t j | ƒ } t j | ƒ } |  j | j ƒ |  j | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j | j | j ƒ | j t j	 ƒ } | j
 ƒ  | j ƒ  d  S(   N(   R   R1   t   deepcopyR   t   _shadowR_   t
   underlyingR    R$   R‰   R9   R&   (   R   R   R   t   c2bR   R[   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt	   test_copy  s    
c         C   sà   |  j  ƒ  } |  j  j | j ƒ } |  j | j | j ƒ | j t j ƒ } | j ƒ  ~ |  j | j	 ƒ | j t j ƒ } |  j  j | j ƒ } | j t j ƒ } | j ƒ  | j ƒ  | j
 ƒ  |  j t j | j t j ƒ ~ d  S(   N(   R   t   shadowR   R_   R    R$   R‰   R9   R@   R)   R&   R-   t   EFAULT(   R   R'   t   ctx2R[   t   s2(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_shadow  s    



c   	      C   sß   y  d d l  m } m } m } Wn t k
 r? t d ƒ ‚ n X| j ƒ  } | j | t j ƒ } | j	 | d ƒ |  j
 j | ƒ } | j t j ƒ } | j d ƒ | j | d ƒ |  j | ƒ } |  j | d ƒ | j ƒ  d  S(   Niÿÿÿÿ(   t   zctxt   zsockett   zstrs   Requires pyczmqs
   inproc://aRh   (   t   pyczmqR˜   R™   Rš   t	   ExceptionR	   t   newR$   Rl   t   bindR   t   shadow_pyczmqR    Rw   t   connectR7   R}   R_   R9   (	   R   R˜   R™   Rš   R'   RF   R•   t   bt   rcvd(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_shadow_pyczmq0  s     s   No fork on Windowsc   
      C   s  |  j  j ƒ  } t | ƒ } t j ƒ  \ } } t j | d ƒ } t j ƒ  } | d k rÉ |  j  j ƒ  } t j | d ƒ } t | ƒ } | j ƒ  | j t	 | ƒ d ƒ | j
 ƒ  | j ƒ  t j d ƒ n t j | ƒ | j ƒ  }	 | j ƒ  |	 sø t ‚ t |	 ƒ | k st ‚ | j ƒ  d  S(   Nt   ri    t   ws   
(   R   R?   t   idt   ost   pipet   fdopent   forkR&   t   writet   strt   flushR9   t   _exitt   readlineRO   t   int(
   R   R'   t   parent_ctx_idt   r_fdt   w_fdt   readert	   child_pidt   writert   child_ctx_idt
   child_id_s(    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   test_fork_instanceA  s(    



(   R   R   R   R(   R+   R,   R/   R=   RB   RW   RX   R\   Rc   R   t   skipift   syst   platformt
   startswithRg   Ri   Rk   Rq   Rz   Rˆ   RŠ   R   R’   R—   R£   R¹   (    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR   #   s6   										
									
			t   TestContextGreenc           B   s)   e  Z d  Z e j Z e j Z e j Z RS(   s    gevent subclass of context tests(   R   R   t   __doc__R   R   Rq   Rˆ   Ri   (    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyR¾   ^  s   		(   R1   Rn   R§   R»   RD   t	   threadingR    R   t   queueR   t   ImportErrort   pytestR   R$   t	   zmq.testsR   R   R   R   R   R	   t   SocketR
   R   R   R   R8   R¾   (    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_context.pyt   <module>   s$   .ÿ ;