
    Ef                         d dl Z d dlmZ d dlmZ d dlZd dlZ	 d dlZd dlmZm	Z	 d dl
mZ  G d de      Zy# e$ r dZY w xY w)    N)partial)TestCase)genioloop)	zmqstreamc                   2    e Zd Zd Zd ZddZd Zd Zd Zy)	TestZMQStreamc                     t         t        j                          t        j                          _        t        j                  d       _        t         r-t         j                  dk  r j                  j                           fd} j                  j                  |        j                  j                  d      } j                  j                  d|z          j                   _        d  _        y )NF)make_current   c                    K   t        j                   j                  j                  t        j
                               _        t        j                   j                  j                  t        j                               _        y wN)	r   	ZMQStreamcontextsocketzmqPUSHpushPULLpullselfs   :/usr/lib/python3/dist-packages/zmq/tests/test_zmqstream.py_make_socketsz*TestZMQStream.setUp.<locals>._make_sockets   sQ     !++DLL,?,?,IJDI!++DLL,?,?,IJDIs   BBztcp://127.0.0.1ztcp://127.0.0.1:%i)tornadopytestskipr   Contextr   r   IOLooploopversion_infor   run_syncr   bind_to_random_portr   connectstream_timeout_task)r   r   ports   `  r   setUpzTestZMQStream.setUp   s    ?KKM{{}MMu5	w++d2II""$	K 			=)yy,,->?		.56ii!    c                       j                   r: j                   j                           fd} j                  j                  |        j                  j	                  d        j
                  j                          y )Nc                     K   t        j                   j                  j                         dz    j                         d {    y 7 w)N   )r   with_timeoutr!   timer'   r   s   r   waitz$TestZMQStream.tearDown.<locals>.wait-   s3     &&tyy~~'7!';T=O=OPPPs   ?A
AA
T)all_fds)r'   cancelr!   r#   closer   term)r   r0   s   ` r   tearDownzTestZMQStream.tearDown)   sZ    %%'Q IIt$		%r*   c                      g  fd fd} j                   j                  |        j                   j                          rJ y )Nc                     K   	 t        j                         d {    dgd d   j                  j                          y 7 %# t        j                  $ r Y y w xY ww)Nz	timed out)r   sleepasyncioCancelledErrorr!   stop)r   	timed_outtimeouts   r   sleep_timeoutz6TestZMQStream.run_until_timeout.<locals>.sleep_timeout7   sU     ii((( (=IaLIINN	 ))) s7   AA AA !AA AAAAc                      t         j                  dk  r j                  j                         y t	        j
                                 _        y )Nr   )r   r"   r!   add_callbackr9   ensure_futurer'   )r   r>   s   r   make_timeout_taskz:TestZMQStream.run_until_timeout.<locals>.make_timeout_task?   s8    ##d*		&&}5%,%:%:=?%K"r*   )r!   r#   start)r   r=   rB   r>   r<   s   `` @@r   run_until_timeoutzTestZMQStream.run_until_timeout4   s@    			L 			,-		}9r*   c                 ~   | j                   j                  d        | j                   j                  d        | j                  t        | j                   j                  d       | j                  t        | j                   j                  d       | j                  t        | j                   j                  t
               y)z#Ensure callable check works (py3k).c                       y r    argss    r   <lambda>z3TestZMQStream.test_callable_check.<locals>.<lambda>L       r*   c                       y r   rG   rH   s    r   rJ   z3TestZMQStream.test_callable_check.<locals>.<lambda>M   rK   r*   r-   N)r&   on_sendon_recvassertRaisesAssertionErrorr   r   s    r   test_callable_checkz!TestZMQStream.test_callable_checkI   s~     	././.$++*=*=qA.$++*=*=qA.$++*=*=sCr*   c                    K   dg j                   j                         t        j                         } fd} j                  j                  |       t        j                  |d       d {   }|k(  sJ y 7 w)Ns   basicc                 H    | k(  sJ j                   j                          y r   r!   r;   msgr   sents    r   callbackz2TestZMQStream.test_on_recv_basic.<locals>.callbackW       $;;IINNr*      )r=   )r   send_multipartr9   Futurer   rN   wait_for)r   frX   recvdrW   s   `   @r   test_on_recv_basicz TestZMQStream.test_on_recv_basicR   sk     z		  &NN	 			(#&&q"55}} 6s   A.B2A?3Bc                      dg fd} j                   j                  |        j                  j                  d fd        j	                          y )Ns   wakec                 H    | k(  sJ j                   j                          y r   rT   rU   s    r   rX   z1TestZMQStream.test_on_recv_wake.<locals>.callbackb   rY   r*   r-   c                  :     j                   j                        S r   )r   r[   )r   rW   s   r   rJ   z1TestZMQStream.test_on_recv_wake.<locals>.<lambda>g   s    		(@(@(F r*   )r   rN   r!   
call_laterrD   )r   rX   rW   s   ` @r   test_on_recv_wakezTestZMQStream.test_on_recv_wake_   sD    y	 			(#		Q FG r*   N)2   )	__name__
__module____qualname__r)   r5   rD   rQ   r`   re   rG   r*   r   r	   r	      s!    "$	*D	!r*   r	   )r9   	functoolsr   unittestr   r   r   r   r   r   zmq.eventloopr   ImportErrorr	   rG   r*   r   <module>rn      sH   
     
#'
R!H R!	  Gs   8 AA