U
    luf"                     @   s   d dl Z d dlmZ d dlmZ z@d dlmZmZmZm	Z	m
Z
mZmZmZ d dlmZmZ dZW n ek
rx   dZY nX G dd	 d	eZdS )
    N)TestCase)SkipTest)IDENTITYPOLLINPOLLOUTPULLPUSHREPREQzmq_version_info)CffiTFc                   @   s   e Z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d Zdd Zdd Zdd Zdd Zdd ZdS ) TestCFFIBackendc                 C   s   t stdd S )NzCFFI not available)have_ffi_backendr   )self r   ?/tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_cffi_backend.pysetUp   s    zTestCFFIBackend.setUpc                 C   s    t  }|d tddkstd S )Nr         )r   rangeAssertionError)r   versionr   r   r   test_zmq_version_info   s    z%TestCFFIBackend.test_zmq_version_infoc                 C   s,   t  }|tjkstdt |ks(td S Nr   )r   zmq_ctx_newr   NULLr   zmq_ctx_destroy)r   ctxr   r   r   test_zmq_ctx_new_destroy"   s    z(TestCFFIBackend.test_zmq_ctx_new_destroyc                 C   sX   t  }t |t}|tjks"ttj|ks0tdt |ksBtdt |ksTtd S r   )	r   r   
zmq_socketr   r   r   r   	zmq_closer   r   r   socketr   r   r   test_zmq_socket_open_close(   s    z*TestCFFIBackend.test_zmq_socket_open_closec                 C   s   t  }t |t}tdd}t |ttd|d}|dksDt	|tj
ksRt	tj
|ks`t	dt |ksrt	dt |kst	d S )Nchar[3]   zmqvoid*   r   )r   r   r    r   r   newzmq_setsockoptr   castr   r   r!   r   )r   r   r#   identityretr   r   r   test_zmq_setsockopt1   s    z#TestCFFIBackend.test_zmq_setsockoptc                 C   s.  t  }t |t}tdd}t |ttd|d}|dksDt	tdd}td}t 
|ttd||}|dks~t	ttd|dd	 d
kst	ttd|d	d dkst	ttd|dd dkst	|tjkst	tj|kst	dt |kst	dt |ks*t	d S )Nchar[]r&   r'   r(   r   zsize_t*r%   char*      zr      m   q)r   r   r    r   r   r)   r*   r   r+   r   Zzmq_getsockoptstringr   r!   r   )r   r   r#   r,   r-   Z
option_lenoptionr   r   r   test_zmq_getsockopt>   s     
"""z#TestCFFIBackend.test_zmq_getsockoptc                 C   sl   t  }t |d}dt |dks(t|tjks6ttj|ksDtdt |ksVtdt |kshtd S )N   r      tcp://*:4444)	r   r   r    zmq_bindr   r   r   r!   r   r"   r   r   r   test_zmq_bindS   s    zTestCFFIBackend.test_zmq_bindc                 C   s   t  }t |t}t |t}dt |dks4tdt |dksHt|tj	ksVttj	|ksdttj	|ksrtdt 
|kstdt 
|kstdt |kstd S )Nr   r9   s   tcp://127.0.0.1:4444)r   r   r    r   r   r:   r   zmq_connectr   r   r!   r   )r   r   Zsocket1Zsocket2r   r   r   test_zmq_bind_connect]   s    z%TestCFFIBackend.test_zmq_bind_connectc                 C   s@   t d}t j|kstdt|ks*tdt|ks<td S )N
zmq_msg_t*r   )r   r)   r   r   r   zmq_msg_initzmq_msg_closer   zmq_msgr   r   r   test_zmq_msg_init_closel   s    
z'TestCFFIBackend.test_zmq_msg_init_closec                 C   sB   t d}t j|kstdt|dks,tdt|ks>td S )Nr>   r   
   )r   r)   r   r   r   Zzmq_msg_init_sizer@   rA   r   r   r   test_zmq_msg_init_sizes   s    
z&TestCFFIBackend.test_zmq_msg_init_sizec                 C   s`   t d}t dd}dt|t d|dt jt jks<tt j|ksJtdt|ks\td S )Nr>   char[5]   Hellor   r'      )r   r)   r   zmq_msg_init_datar+   r   r   r@   )r   rB   messager   r   r   test_zmq_msg_init_dataz   s    
 
   
z&TestCFFIBackend.test_zmq_msg_init_datac                 C   s   t d}t dd}dt|t d|dt jt jks<tt|}t j|ksTtt t d|dksntdt	|kstd S )Nr>   r/   rG   r   r'   rH   r0   )
r   r)   r   rI   r+   r   r   zmq_msg_datar5   r@   )r   rB   rJ   datar   r   r   test_zmq_msg_data   s    
 
   

z!TestCFFIBackend.test_zmq_msg_datac                 C   s   t  }t |t}t |t}dt |dks4tdt |dksHtt	d t
d}t
dd}t |t
d|t
d	d
t
jt
j d
t ||dkstdt |kstt |dkstt |dkstt |dkstd S )Nr   s   tcp://*:7777s   tcp://127.0.0.1:7777皙?r>   rF   rG   r'   size_trH   )r   r   r    r
   r	   r:   r   r<   timesleepr   r)   rI   r+   r   zmq_msg_sendr@   r!   r   )r   r   senderreceiverrB   rJ   r   r   r   test_zmq_send   s(    



zTestCFFIBackend.test_zmq_sendc                 C   sJ  t  }t |t}t |t}dt |dks4tdt |dksHtt	d t
d}t
dd}t |t
d|t
d	d
t
jt
j t
d}t | d
t ||dkstd
t ||dkstd
t |kstdt
t |t |d d  ks
tt |dkstt |dks2tt |dksFtd S )Nr   s   tcp://*:2222s   tcp://127.0.0.1:2222rO   r>   rF   rG   r'   rP   rH   )r   r   r    r
   r	   r:   r   r<   rQ   rR   r   r)   rI   r+   r   r?   rS   zmq_msg_recvzmq_msg_sizebufferrL   r!   r   )r   r   rT   rU   rB   rJ   zmq_msg2r   r   r   test_zmq_recv   s6    





zTestCFFIBackend.test_zmq_recvc                 C   sb  t  }t |t}t |t}t |d}t |d}td}tdd}t 	|t
d|t
ddtjtj td	}||_d
|_ttB |_d
|_t tjd
d
}	|	d
kstt |dd
}	|	d
kstt ||d
}	ttt t   |	dksttd t |dd
}	|	dks*tt|jt@ s>tt|jt@ rRttd}
t |
 t |
|d
}|dkstdt |
kstdtt  |
t |
d d  ksttd	}||_d
|_ttB |_d
|_t |dd
}	|	d
ksttd}tdd}t 	|t
d|t
ddtjtj dt ||d
ksVttd d
t |dd
ksxtt|jt@ stdt |
|d
kstdt |
kstdtt  |
tt |
d d  kstd
t !|kstd
t !|kstd
t "|ks"td
t #|ks6td
t #|
ksJtd
t #|ks^td S )Ns   tcp://*:3333s   tcp://127.0.0.1:3333r>   rF   rG   r'   rP   rH   zzmq_pollitem_t*r   r1   g?zchar[11]s   Hello Againr   )$r   r   r    r
   r	   r:   r<   r   r)   rI   r+   r   r#   fdr   r   eventsZreventsZzmq_pollr   rS   printr5   Zzmq_strerrorZ	zmq_errnorQ   rR   intr?   rW   rX   rY   rL   r!   r   r@   )r   r   rT   rU   Zr1Zr2rB   rJ   Zreceiver_pollitemr-   rZ   Zret_recvZsender_pollitemZzmq_msg_againZmessage_againr   r   r   test_zmq_poll   s    













"zTestCFFIBackend.test_zmq_pollN)__name__
__module____qualname__r   r   r   r$   r.   r7   r;   r=   rC   rE   rK   rN   rV   r[   r`   r   r   r   r   r      s   	
$r   )rQ   Zunittestr   Z	zmq.testsr   Zzmq.backend.cffir   r   r   r   r   r	   r
   r   Zzmq.backend.cffi._cffir   r   r   ImportErrorr   r   r   r   r   <module>   s   (

