U
    luf:\  ã                   @   s   d dl Z d dlZd dlZd dlZ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
 d dlZd dlmZ d dlZd dlmZmZmZmZmZ e ¡  ¡ dkZe ¡  ¡  d¡Zeej d¡ƒZerÆdnd	ZG d
d„ deƒZerüesüd dlZG dd„ deeƒZ dS )é    N)Úmock)Úmark)ÚBaseZMQTestCaseÚ	GreenTestÚSkipTestÚhave_geventÚ	skip_pypyÚpypyÚwindowsÚCIéè  éd   c                   @   s€  e Zd Zdd„ Zdd„ Zdd„ ZdZdd	„ Zd
d„ Ze	j
edkd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#d$„ Zd%d&„ Zed'd(„ ƒZd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"e	j
e#d;dd<d=„ ƒZ$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dFdG„ Z)dHdI„ Z*e	j
e+rPe,p^e-j.dJk p^e#dKde	j/dLdM„ ƒƒZ0dNdO„ Z1dS )PÚ
TestSocketc                 C   s^   |   ¡ }| tj¡}|  tj|jd¡ |  tj|jd¡ |  tj|jd¡ | 	¡  | 
¡  d S )Nzftl://aztcp://)ÚContextÚsocketÚzmqÚPUBÚassertRaisesErrnoÚEPROTONOSUPPORTÚbindÚconnectÚEINVALÚcloseÚterm©ÚselfÚctxÚs© r   ú9/tmp/pip-unpacked-wheel-h6ekxre8/zmq/tests/test_socket.pyÚtest_create   s    zTestSocket.test_createc                 C   s®   d}|   ¡ Š}| tj¡d}| |¡ | tj¡4}| |¡ d}| |¡ |  |¡}||ksbt	‚W 5 Q R X |j
dkszt	‚W 5 Q R X |j
dks’t	‚W 5 Q R X |j
dksªt	‚d S )Nú
inproc://aó   hiT)r   r   r   ÚPUSHr   ÚPULLr   ÚsendÚrecvÚAssertionErrorÚclosed)r   Úurlr   ÚaÚbÚmsgÚrcvdr   r   r   Útest_context_manager(   s    




zTestSocket.test_context_managerc           	      C   sô  d}d}|   ¡ Ø}| tj¡Ð}| tj¡¸}| |¡ | |¡}d|›t|ƒksZt‚|& | 	|¡ |  
|¡}||ks€t‚W 5 Q R X t tj¡ |j	|tjd W 5 Q R X t tj¡ |j
tjd W 5 Q R X | |¡ W 5 Q R X W 5 Q R X | tj¡Þ}| tj¡Æ}| |¡}d|›t|ƒks4t‚|< | |¡ | 	|¡ |  
|¡}||ksft‚| |¡ W 5 Q R X | |¡ t tj¡ |j	|tjd W 5 Q R X t tj¡ |j
tjd W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr!   r"   zconnect=)Úflagszbind=)r   r   r   r#   r$   r   r   Úreprr'   r%   r&   ÚpytestÚraisesZAgainZDONTWAITZunbindZ
disconnect)	r   r)   r,   r   r*   r+   Zconnect_contextr-   Zbind_contextr   r   r   Ú!test_connectbind_context_managers7   s<    








z,TestSocket.test_connectbind_context_managersz
zmq.Socketc              	   C   sn   | j  tj¡.}| j› dt|ƒks(t‚dt|ƒks8t‚W 5 Q R X | j› dt|ƒksZt‚dt|ƒksjt‚d S )Nz
(zmq.PUSH)r(   )Úcontextr   r   r#   Ú	_repr_clsr0   r'   ©r   r   r   r   r   Ú	test_repr_   s
    zTestSocket.test_reprc                 C   sh   |   ¡ }| tj¡}dt|ƒks$t‚dt|ƒks4t‚dt|ƒksDt‚dt|ƒksTt‚| ¡  | ¡  d S )Nr%   ÚIDENTITYÚAFFINITYÚFD)r   r   r   r   Údirr'   r   r   r   r   r   r   Útest_dirf   s    zTestSocket.test_dirNzrequires unittest.mock©Úreasonc                 C   s$   |   tj¡}tj|d}| ¡  d S )N)Úspec)r   r   ÚSUBr   ZMockr   )r   r   Úmr   r   r   Útest_mockablep   s    zTestSocket.test_mockablec                 C   s   |   tj¡}| d¡}d S )Nztcp://*)r   r   r   Úbind_to_random_port)r   r   Úpr   r   r   Útest_bind_unicodev   s    zTestSocket.test_bind_unicodec                 C   s   |   tj¡}| d¡ d S )Nútcp://127.0.0.1:5555)r   r   r   r   r6   r   r   r   Útest_connect_unicodez   s    zTestSocket.test_connect_unicodec              
   C   s°   |   ¡ }| tj¡}z| d¡ W n4 tjk
rV } z|jtjksFt‚W 5 d }~X Y nX z| d¡ W n4 tjk
rš } z|jtj	ksŠt‚W 5 d }~X Y nX | 
¡  | ¡  d S )Nztcp:*zrand://*)r   r   r   r   rC   ÚZMQErrorÚerrnor   r'   r   r   r   )r   r   r   Úer   r   r   Útest_bind_to_random_port~   s    ""z#TestSocket.test_bind_to_random_portc              
   C   sŒ   |   tj¡v}d}t tj¡}| |¡ W 5 Q R X |t|jƒksFt	‚d}t tj¡}| 
|¡ W 5 Q R X |t|jƒks~t	‚W 5 Q R X d S )Nztcp://1.2.3.4.5:1234567znoproc://no/such/file)r   r   r#   r1   r2   rH   r   ÚstrÚvaluer'   r   )r   r   r)   Úexcr   r   r   Útest_bind_connect_addr_error   s    z'TestSocket.test_bind_connect_addr_errorc                 C   s<   | j  tj¡}| j |¡ d}||_| tj¡|ks8t	‚d S )Ns
   identity  )
r4   r   r   r$   ÚsocketsÚappendÚidentityÚgetr8   r'   )r   r   Úidentr   r   r   Útest_identityœ   s
    zTestSocket.test_identityc                 C   sB  d}|   tjtj¡\}}|j|jks(t‚|j|jks8t‚|  t|j	tj
|¡ |  t|j	tj|¡ | tj|d¡ |  t|j	tj|¡ | tj
|¡ |  t|jtj¡ |  tj|jtj
¡ | tj¡}| d¡}| tjd¡}||ksèt‚t d¡ | |tj¡ |j|d dd || ¡ ks$t‚|d |jddks>t‚dS )z2test setting/getting sockopts with unicode stringsu   tÃ©stÚutf16çš™™™™™¹?é   zlatin-1©ÚencodingN)Úcreate_bound_pairr   r   r@   Úsend_unicoder'   Úrecv_unicodeÚassertRaisesÚ	TypeErrorÚ
setsockoptÚ	SUBSCRIBEr8   Zsetsockopt_unicoder9   Zgetsockopt_unicoder   r   Ú
getsockoptÚdecodeÚtimeÚsleepZSNDMORE)r   ZtopicrD   r   ZidentbZidentuZidentu2r   r   r   Útest_unicode_sockopts£   s(    

z TestSocket.test_unicode_sockoptsc                 C   s"  t  ¡ }|dk rd}nd}|  t jt j¡\}}| t jd¡ | t j¡dksPt‚| t jd¡ | t j¡dksrt‚|j	|ks€t‚d|_	|j	dks”t‚| t j
¡t jksªt‚|  t j|jt j
d¡ | t j¡|jksÖt‚| t j¡t jksìt‚| t j¡|jkst‚| t j¡t jkst‚g }i }t j}|jD ]$}t||ƒ}	t|	tƒr0|||	< q0t jjD ]¢}
|
jt jjjt jjjhkr‚q^|
j d¡r”q^z| |
¡}W n> t jk
rà } z| d|
›d	|› d
¡ W 5 d}~X Y nX |dkr^| d|
›d¡ q^|r|  d dg| ¡¡ dS )ztest integer sockopts)é   r   r   r   éÿÿÿÿé   é   )ZHWMÚROUTERZXPUBZTCPÚFAILZREQ_ZCURVE_ZPROBE_ROUTERZ
IPC_FILTERZGSSAPIZSTREAM_ZVMCI_BUFFER_SIZEZVMCI_BUFFER_MIN_SIZEZVMCI_BUFFER_MAX_SIZEZVMCI_CONNECT_TIMEOUTZBLOCKYZIN_BATCH_SIZEZOUT_BATCH_SIZEZWSS_TRUST_SYSTEMZONLY_FIRST_SUBSCRIBEZPRIORITYZRECONNECT_STOPzgetsockopt(z	) raised Ú.Nl        z=) returned a ridiculous value. It is probably the wrong type.Ú
Ú )r   Úzmq_version_infor[   r   r@   r`   ÚLINGERrb   r'   ÚhwmZEVENTSÚPOLLOUTr   r   ZTYPEÚsocket_typeÚ	constantsÚ__all__ÚgetattrÚ
isinstanceÚintZSocketOptionZ	_opt_typeZ_OptTypeZint64ÚnameÚ
startswithrH   rQ   ÚfailÚjoin)r   ÚvZdefault_hwmrD   r   ÚerrorsZbackrefru   rz   rM   ÚoptÚnrJ   r   r   r   Útest_int_sockopts»   sZ    

þÿ*

ÿzTestSocket.test_int_sockoptsc                 C   sz   | j  tj¡}| j |¡ | tjd¡ |  tj	|jdd¡ |  tj	|j
d¡ |  t|jdd¡ |  tj	|jtjd¡ dS )z=Test that appropriate errors are raised on bad socket optionsr   i'  é   ó   5r"   N)r4   r   r   r   rP   rQ   r`   rq   r   r   rb   r^   r_   ra   r6   r   r   r   Útest_bad_sockopts	  s    zTestSocket.test_bad_sockoptsc                 C   s@   | j  tj¡}| j |¡ | tjd¡ | tj¡dks<t	‚dS )ztest set/getsockopt roundtrip.ri   N)
r4   r   r   r   rP   rQ   r`   rq   rb   r'   )r   rD   r   r   r   Útest_sockopt_roundtrip  s    z!TestSocket.test_sockopt_roundtripc                 C   s°   |   tjtj¡\}}| j ||g¡ d}| jt|j|dd | jt|j|dd | |¡ | 	¡ }|| 
d¡kstt‚| d¡|ks†t‚|j|dd |jdd}||ks¬t‚dS )	ztest sending unicode objectsu   Ã§Ï€Â§F©ÚcopyTÚutf8rV   rY   N)r[   r   ÚPAIRrP   Úextendr^   r_   r%   r\   r&   Úencoder'   rc   r]   )r   r*   r+   Úur   r   r   r   Útest_send_unicode  s    
zTestSocket.test_send_unicodec                 C   s`   |   tjtj¡\}}| j ||g¡ |  t|jddg¡ | dg¡ |  |¡}|dgks\t	‚dS )z*check type on all frames in send_multipartó   arƒ   ó   bN)
r[   r   rŠ   rP   r‹   r^   r_   Úsend_multipartÚrecv_multipartr'   )r   r*   r+   r-   r   r   r   Útest_send_multipart_check_type,  s    
z)TestSocket.test_send_multipart_check_typec                 C   sü  d}t   ¡ }| d¡ | ¡ d }d||f }| ¡  t d¡ | j  tj¡}| j  tj	¡}| j
 ||g¡ | |¡ t d¡ |jdddd	}t|tjƒs t‚|tjks®t‚|js¸t‚d
|_|jddgddd	}t|tjƒsât‚|jrìt‚| |¡ |  |¡}	tdƒD ]}
|jr q(t d¡ q|jdks8t‚|	dgksHt‚|  |¡}	tdƒD ]}
|jrl qzt d¡ qZ|jdksŠt‚|	ddgksœt‚tjdddd	}|jjdks¾t‚|j|dd}|j|dd}|jjdksìt‚|jdksüt‚|jdkst‚|  |¡}	|jjdks(t‚|	dgks8t‚|  |¡}	|jjdksTt‚|	dgksdt‚|jdkstt‚|jdks„t‚|j ~tdƒD ]}
|jr¦ q´t d¡ q”|jdksÄt‚|jdksÔt‚tjddd}| jt|j|ddd	 dS )zJtest the MessageTracker object for tracking when zmq is done with a bufferztcp://127.0.0.1)z	127.0.0.1r   é   z%s:%irW   s	   somethingFT)rˆ   Útrackr   s   elseé
   s   againr‡   )r•   N)r   r   Úgetsocknamer   rd   re   r4   r   r#   r$   rP   r‹   r   r%   rx   ZMessageTrackerr'   Z_FINISHED_TRACKERÚdoneZcopy_thresholdr‘   r’   ÚrangeZFrameÚtrackerr^   Ú
ValueError)r   ÚaddrÚsockÚportZifacer*   r+   Úp1Úp2r,   ÚirA   r   r   r   Útest_tracker5  sx    










zTestSocket.test_trackerc                 C   s„   |   ¡ }| tj¡}| ¡  |  tj|jd¡ |  tj|jd¡ |  tj|j	tj
d¡ |  tj|jd¡ |  tj|j¡ | ¡  d S )Nó    s   asdf)r   r   r   r   r   r   ÚENOTSOCKr   r   r`   ra   r%   r&   r   r   r   r   r   Ú
test_close|  s    zTestSocket.test_closec                 C   s`   | j  tj¡}| j |¡ d}||_||jks2t‚|| tj	¡ksFt‚|j
| tj¡ks\t‚dS )z*set setting/getting sockopts as attributesr–   N)r4   r   r   ÚDEALERrP   rQ   Úlingerr'   rb   rq   Úfdr:   )r   r   r§   r   r   r   Ú	test_attr‡  s    zTestSocket.test_attrc                 C   sr   | j  tj¡}| j |¡ z
d|_W n tk
r8   Y nX |  d¡ z
|j W n tk
rb   Y nX |  d¡ d S )NZfooz-bad setattr should have raised AttributeErrorz-bad getattr should have raised AttributeError)	r4   r   r   r¦   rP   rQ   ZappleÚAttributeErrorr|   r6   r   r   r   Útest_bad_attr‘  s    


zTestSocket.test_bad_attrc                 C   sd   G dd„ dt jƒ}|| jt jƒ}| j |¡ |jdks:t‚d|_|jdksNt‚|j}|dks`t‚dS )z subclasses can assign attributesc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )z#TestSocket.test_subclass.<locals>.SNc                    s   d| _ tƒ j||Ž d S )Nrh   )r*   ÚsuperÚ__init__)r   r*   Úkw©Ú	__class__r   r   r­   §  s    z,TestSocket.test_subclass.<locals>.S.__init__)Ú__name__Ú
__module__Ú__qualname__r*   r­   Ú__classcell__r   r   r¯   r   ÚS¤  s   rµ   rh   r”   N)r   ÚSocketr4   ÚREPrP   rQ   r*   r'   )r   rµ   r   r*   r   r   r   Útest_subclass¡  s    zTestSocket.test_subclassc                 C   sX   |   ¡ \}}d}tdƒD ]}| |¡ qt d¡ tdƒD ]}|  |¡|gks:t‚q:d S )Nr"   rg   rW   )r[   r™   r%   rd   re   r’   r'   )r   r*   r+   r,   r¡   r   r   r   Útest_recv_multipart³  s    
zTestSocket.test_recv_multipartc                 C   s<   |   ¡ }| tj¡}| ¡  t d¡ | ¡  |js8t	‚dS )z,s.close() after ctx.destroy() should be fineg{®Gáz„?N)
r   r   r   r·   Údestroyrd   re   r   r(   r'   r   r   r   r   Útest_close_after_destroy¼  s    
z#TestSocket.test_close_after_destroyc                 C   sœ   |   ¡ \}}t ¡  | t¡}|dks*t‚| ttj¡}|tjksFt‚d}| |¡ | t¡}|tjkslt‚|  	|¡}| t¡}|dksŒt‚||ks˜t‚d S )Nr   r"   )
r[   rd   ÚpollÚPOLL_TIMEOUTr'   r   rs   r%   ÚPOLLINr&   )r   r*   r+   Zevtr,   Zmsg2r   r   r   Ú	test_pollÆ  s    




zTestSocket.test_pollc                 C   sD   t jdkrtdƒ‚dt j }t jdks.t|ƒ‚t jdk s@t|ƒ‚dS )z$IPC_PATH_MAX_LEN is a sensible valuer   úIPC_PATH_MAX_LEN undefinedz)Surprising value for IPC_PATH_MAX_LEN: %sé   i  N)r   ÚIPC_PATH_MAX_LENr   r'   )r   r,   r   r   r   Útest_ipc_path_max_lengthÖ  s
    

z#TestSocket.test_ipc_path_max_lengthc              
   C   sˆ   t jdkrtdƒ‚| j t j¡}| j |¡ z| d 	dt jd  ¡¡ W n8 t j
k
r‚ } ztt jƒ|jksrt‚W 5 d }~X Y nX d S )Nr   rÀ   zipc://{}r*   r”   )r   rÂ   r   r4   r   r   rP   rQ   r   ÚformatrH   rL   Ústrerrorr'   )r   r   rJ   r   r   r   Útest_ipc_path_max_length_msgß  s    
z'TestSocket.test_ipc_path_max_length_msgzipc not supported on Windows.c              	   C   s‚   | j  tj¡}| j |¡ d}t tj¡}| 	d|› ¡ W 5 Q R X |j
jtjksXt‚t|j
ƒ}||ksnt‚d| ¡ ks~t‚dS )z3Display the ipc path in case of an ENOENT exceptionz/foo/barzipc://zno such file or directoryN)r4   r   r   r   rP   rQ   r1   r2   rH   r   rM   rI   ÚENOENTr'   rL   Úlower)r   r   Zinvalid_pathÚerrorÚerror_messager   r   r   Ú/test_ipc_path_no_such_file_or_directory_messageê  s    
z:TestSocket.test_ipc_path_no_such_file_or_directory_messagec              	   C   s®   t  ¡ d dk}t jt jt jt jt jfD ]€}| j |¡}d|_	|j	dksLt
‚|r z|jdks`t
‚W n tk
rv   Y nX z|jdksˆt
‚W n tk
rž   Y nX | ¡  q(d S )Nr   rg   r   )r   rp   r   rk   r@   ÚREQr¦   r4   r   rr   r'   Zsndhwmrª   Zrcvhwmr   )r   Zzmq3Ústyper   r   r   r   Útest_hwm÷  s    zTestSocket.test_hwmc                 C   s`   |   tj¡}t |¡}t |¡}|js*t‚|js4t‚|j|jksDt‚|j|jksTt‚| ¡  d S )N)	r   r   r   rˆ   ÚdeepcopyZ_shadowr'   Ú
underlyingr   )r   r   ZscopyZsdcopyr   r   r   Ú	test_copy  s    



zTestSocket.test_copyc                 C   sZ   |   tjtj¡\}}ttfD ]8}t|ƒ d¡}||ƒ}| |¡ | 	¡ }||kst
‚qd S )NÚascii)r[   r   r#   r$   Ú
memoryviewÚ	bytearrayrL   rŒ   r%   r&   r'   )r   r*   r+   Zbuffer_typeÚrawbytesr,   Úrecvdr   r   r   Útest_send_buffer  s    
zTestSocket.test_send_bufferc                 C   sÔ   |   tj¡}| d¡ tj |j¡}|j|jks4t‚|   tj¡}tj |¡}|j	|ksZt‚|j|jksjt‚|j|jkszt‚t |¡}|j	|ks’t‚|j|jks¢t‚| 
d¡ d}| |¡ |  |¡}||ksÐt‚d S )NrF   r"   )r   r   r#   r   r¶   ÚshadowrÐ   r'   r$   Z_shadow_objr   r%   r&   )r   rD   r    r   Ús2Zs3Úsentr-   r   r   r   Útest_shadow  s"    




zTestSocket.test_shadowc           	      C   s¦   zddl m}m} W n tk
r0   tdƒ‚Y nX | ¡ }| |tj¡}| |tj¡}tj	 
|¡}tj	 
|¡}| d¡ | d¡ | d¡ |  |¡}|dks¢t‚d S )Nr   )ÚzctxÚzsocketzRequires pyczmqr!   r"   )ZpyczmqrÜ   rÝ   Ú	Exceptionr   Únewr   r#   r$   r¶   rØ   r   r   r%   r&   r'   )	r   rÜ   rÝ   r   ÚcaÚcbr*   r+   r-   r   r   r   Útest_shadow_pyczmq.  s    



zTestSocket.test_shadow_pyczmqc                 C   s¼   |   tjtj¡\}}| d¡ d|_t ¡ }| |tj¡ tdƒD ] }| 	d¡ | 
d¡}|rB qdqB|  |¡ | 	d¡ |  |¡}|dksŽt‚| d¡ | 	d¡ | 
d¡}|g ks¸t‚d S )NÚprefixÚcr   s   canaryéú   s   prefixmessager   )r[   r   r   r@   Ú	subscribeZPollerÚregisterr¾   r™   r%   r¼   r&   r'   Zunsubscribe)r   ZpubÚsubrD   r¡   Úeventsr,   r   r   r   Útest_subscribe_method?  s$    








z TestSocket.test_subscribe_methodl        zonly run on 64b and not on CI.c           
   
   C   sè   t  d¡}d}z|| }W n. tk
rH } ztd| ƒ‚W 5 d }~X Y nX |  ¡ \}}z|j|dd |jdd}W n. tk
r¢ } ztd| ƒ‚W 5 d }~X Y nX t|ƒ}t|ƒ}	t	|	ƒ|ksÄt
‚|	d |ksÔt
‚|	d |ksät
‚d S )Nr”   l       zNot enough memory: %sFr‡   r   rh   )ÚosÚurandomÚMemoryErrorr   r[   r%   r&   ÚordrÓ   Úlenr'   )
r   rä   ÚNÚbufrJ   r*   r+   r-   ÚbyteÚviewr   r   r   Útest_large_sendU  s"    
zTestSocket.test_large_sendc                 C   s¢   |   tjtj¡\}}dd„ }dd„ }ddddœi}| ||¡ | |¡}|d |d ks\t‚|d	 sht‚| ||¡ | |¡}|d |d ks’t‚|d	 ržt‚d S )
Nc                 S   s8   g }|  |  dg ¡¡ t | d ¡ d¡}| |¡ |S )NÚ
identitiesÚcontentr‰   )r‹   rS   ÚjsonÚdumpsrŒ   rQ   )r,   Úframesrö   r   r   r   Ú	serializer  s
    
z3TestSocket.test_custom_serialize.<locals>.serializec                 S   s*   | d d… }t  | d  d¡¡}||dœS )Nrh   r‰   )rõ   rö   )r÷   Úloadsrc   )rù   rõ   rö   r   r   r   Údeserializey  s
    þz5TestSocket.test_custom_serialize.<locals>.deserializerö   rƒ   Zbee)r*   r+   rõ   )r[   r   r¦   rk   Zsend_serializedZrecv_serializedr'   )r   r*   r+   rú   rü   r,   rÖ   Zr2r   r   r   Útest_custom_serializeo  s     	þÿ

z TestSocket.test_custom_serialize)2r±   r²   r³   r    r.   r3   r5   r7   r<   r   Úskipifr   rB   rE   rG   rK   rO   rU   rf   r‚   r…   r†   rŽ   r“   r   r¢   r¥   r©   r«   r¸   r¹   r»   r¿   rÃ   rÆ   r
   rË   rÎ   rÑ   r×   rÛ   râ   rê   r	   Úon_ciÚsysÚmaxsizeZlargerô   rý   r   r   r   r   r      sZ   
&

N	
F
	
	

	þr   c                   @   s`   e Zd ZejZejZdZdd„ Ze	j
eedƒ dddd„ ƒZe	j
eed	ƒ d
ddd„ ƒZdS )ÚTestSocketGreenzzmq.green.Socketc                    sN   |   ¡ \‰ }t d‡ fdd„¡}t d¡}| ¡  |  tj|j¡ | ¡  d S )Ng      à?c                      s
   ˆ   d¡S )Nr"   )r%   r   ©r*   r   r   Ú<lambda>œ  r£   z.TestSocketGreen.test_timeout.<locals>.<lambda>rW   )r[   ÚgeventZspawn_laterÚTimeoutÚstartr^   r&   Úkill)r   r+   ÚgÚtimeoutr   r  r   Útest_timeoutš  s    
zTestSocketGreen.test_timeoutZRCVTIMEOzrequires RCVTIMEOr=   c              	   C   sZ   | j  tj¡}tjdd}d|_W 5 Q R X | ¡  t|ƒdksDt	‚|d j
tksVt	‚d S )NT©Úrecordrƒ   r”   r   )r4   r   r   rÌ   ÚwarningsÚcatch_warningsZrcvtimeor   rï   r'   ÚcategoryÚUserWarning©r   r   Úwr   r   r   Útest_warn_set_timeo¢  s    z#TestSocketGreen.test_warn_set_timeoZSNDTIMEOzrequires SNDTIMEOc              	   C   sZ   | j  tj¡}tjdd}|j W 5 Q R X | ¡  t|ƒdksDt	‚|d j
tksVt	‚d S )NTr  r”   r   )r4   r   r   rÌ   r  r  Zsndtimeor   rï   r'   r  r  r  r   r   r   Útest_warn_get_timeo«  s    z#TestSocketGreen.test_warn_get_timeoN)r±   r²   r³   r   Z
skip_greenr«   r»   r5   r  r   rþ   Úhasattrr   r  r  r   r   r   r   r  •  s   
r  )!rˆ   rI   r÷   rë   Úplatformr   r   rd   r  Zunittestr   r1   r   r   Z	zmq.testsr   r   r   r   r   Úpython_implementationrÈ   r	   r{   r
   ÚboolÚenvironrS   rÿ   r½   r   r  r  r   r   r   r   Ú<module>   s2       y