U
    luf]   ã                   @   sb   d dl Z d dlZd dlZd dlmZ d dlmZmZ esDe ¡ dkrNejej	_
G dd„ deƒZdS )é    N)Údevices)ÚPYPYÚBaseZMQTestCase)é   é   c                   @   s^   e Zd Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestMonitoredQueueó    ó   inó   outc           
      C   sø   t  tjtjtj||¡| _| j tj¡}| j tj¡}| j tj¡}| 	d¡}| 	d¡}| 	d¡}	| 
tj|¡ | j d| ¡ | j d| ¡ | j d|	 ¡ | j ¡  t d¡ z| tj¡ W n tjk
rÚ   Y nX | j |||g¡ |||fS )Nútcp://127.0.0.1útcp://127.0.0.1:%igš™™™™™É?)r   ÚThreadMonitoredQueueÚzmqZPAIRÚPUBÚdeviceÚcontextÚsocketZSUBZbind_to_random_portÚ
setsockoptZ	SUBSCRIBEZ
connect_inZconnect_outZconnect_monÚstartÚtimeÚsleepÚrecv_multipartÚNOBLOCKÚZMQErrorÚsocketsÚextend)
ÚselfZmon_subZ	in_prefixZ
out_prefixÚaliceÚbobÚmonZaportZbportZmport© r    ú;/tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_monqueue.pyÚbuild_device   s2        ÿ




zTestMonitoredQueue.build_devicec                 C   s   t dƒD ](}t| jdd ƒ}|d k	r& q2t d¡ q|d k	rVtj| jjjdd}| 	¡  | j
D ]}| ¡  q\|d k	r~|jdd | jjdd d S )Né2   Ú_contextgš™™™™™¹?T)ÚtargetÚdaemoné   )Útimeout)ÚrangeÚgetattrr   r   r   Ú	threadingÚThreadr$   Ztermr   r   ÚcloseÚjoin)r   Úir   Útr   r    r    r!   Úteardown_device-   s    

z"TestMonitoredQueue.teardown_devicec                 C   sj   |   ¡ \}}}d ¡ }| |¡ |  |¡}||ks6t‚d ¡ }| |¡ |  |¡}||ks^t‚|  ¡  d S )Nó	   hello bobó   hello alice©r"   ÚsplitÚsend_multipartr   ÚAssertionErrorr1   )r   r   r   r   ÚalicesÚbobsr    r    r!   Ú
test_replyB   s    



zTestMonitoredQueue.test_replyc                 C   sº   |   ¡ \}}}d ¡ }| |¡ d ¡ }| |¡ d ¡ }| |¡ |  |¡}||ksZt‚|  |¡}||kspt‚|  |¡}||ks†t‚d ¡ }| |¡ |  |¡}||ks®t‚|  ¡  d S )Nr2   ó   hello againó   hello again and againr3   r4   )r   r   r   r   r8   Úalices2Úalices3r9   r    r    r!   Ú
test_queueN   s$    







zTestMonitoredQueue.test_queuec           	      C   s.  |   ¡ \}}}d ¡ }| |¡ d ¡ }| |¡ d ¡ }| |¡ |  |¡}||ksZt‚|  |¡}dg| |ksvt‚|  |¡}||ksŒt‚|  |¡}||ks¢t‚|  |¡}dg| |ks¾t‚d ¡ }| |¡ |  |¡}||ksæt‚|  |¡}dg| |kst‚|  |¡}dg| |ks"t‚|  ¡  d S )Nr2   r;   r<   r	   r3   r
   r4   ©	r   r   r   r   r8   r=   r>   r9   Úmonsr    r    r!   Útest_monitorb   s4    











zTestMonitoredQueue.test_monitorc           	      C   s4  |   ddd¡\}}}d ¡ }| |¡ d ¡ }| |¡ d ¡ }| |¡ |  |¡}||ks`t‚|  |¡}dg| |ks|t‚|  |¡}||ks’t‚|  |¡}||ks¨t‚|  |¡}dg| |ksÄt‚d ¡ }| |¡ |  |¡}||ksìt‚|  |¡}dg| |ks
t‚|  |¡}dg| |ks(t‚|  ¡  d S )Nr   s   foos   barr2   r;   r<   r3   r4   r@   r    r    r!   Útest_prefix~   s4    











zTestMonitoredQueue.test_prefixc           	      C   sØ   |   d¡\}}}d ¡ }| |¡ d ¡ }| |¡ d ¡ }| |¡ |  |¡}||ks\t‚|  |¡}||ksrt‚|  |¡}||ksˆt‚d ¡ }| |¡ |  |¡}||ks°t‚|  |¡}dg| |ksÌt‚|  ¡  d S )Nr
   r2   r;   r<   r3   r4   r@   r    r    r!   Útest_monitor_subscribeš   s(    








z)TestMonitoredQueue.test_monitor_subscribec              	   C   s„  t  tjtjtjdd¡}|| _| tjd¡ | tjd¡ | 	tjd¡ | 
d¡}| d¡}| j tj¡}d|_| j tj¡}d|_| j ||g¡ | d| ¡ | d| ¡ | ¡  t d¡ t ¡ d	krd
dg}||fD ]8}| |¡ z| tj¡ W qà tjk
r   Y qàX qàddg}| dg| ¡ |  |¡}	|	dg| ksPt‚| |	¡ |  |¡}
|
dg| ksxt‚|  ¡  dS )ztest router-router MQ devicesr	   r
   r   r   ó   aó   br   r   )é   r   r   s   pings   pongs   hellos   thereN)r   r   r   ÚROUTERr   r   Úsetsockopt_inÚLINGERÚsetsockopt_outÚsetsockopt_monZbind_in_to_random_portZbind_out_to_random_portr   r   ÚDEALERÚidentityr   r   Úconnectr   r   r   Úzmq_version_infor6   Úrecvr   r   r   r7   r1   )r   ÚdevZportaZportbÚaÚbZping_msgÚsÚmsgZbmsgZamsgr    r    r!   Útest_router_router°   sL        ÿ






z%TestMonitoredQueue.test_router_routerc                 C   sX   t  tjtjtj¡ | _}| tjd¡ | 	tjd¡ | 
tjd¡ | ¡  |  ¡  d S )Nr   )r   r   r   rH   rM   r   r   rI   rJ   rK   rL   r   r1   )r   rR   r    r    r!   Útest_default_mq_argsØ   s      ÿ
z'TestMonitoredQueue.test_default_mq_argsc                 C   s\   | j  tj¡}| j  tj¡}| j  tj¡}| j |||g¡ d}d}|  t	t
j|||¡ d S )NÚinÚout)r   r   r   rH   rM   r   r   r   ÚassertRaisesÚ	TypeErrorr   Zmonitoredqueue)r   ZinsZoutsrA   r    r    r!   Útest_mq_check_prefixã   s    z'TestMonitoredQueue.test_mq_check_prefixN)r   r	   r
   )Ú__name__Ú
__module__Ú__qualname__r"   r1   r:   r?   rB   rC   rD   rW   rX   r]   r    r    r    r!   r      s   
(r   )r+   r   r   r   Z	zmq.testsr   r   rP   ÚContextZDeviceZcontext_factoryr   r    r    r    r!   Ú<module>   s   
