
    *Vf>^                        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j(                         j+                         dk(  Z ej                         j+                         j/                  d      Z eej4                  j7                  d            Zerdnd	Z G d
 de      Zeresd dlZ G d dee      Z yyy)    N)mock)mark)BaseZMQTestCase	GreenTestSkipTesthave_gevent	skip_pypypypywindowsCI  d   c                      e Zd Zd Zd Zd Zd ZdZd Zd Z	 e
j                  edu d	
      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z# e
j                  e$d!
      d"        Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+ e
j                  e,xr e-xs e.j^                  d)k  xs e$d*
      e
j`                  d+               Z1d, Z2y)-
TestSocketc                    | j                         }|j                  t        j                        }| j	                  t        j
                  |j                  d       | j	                  t        j
                  |j                  d       | j	                  t        j                  |j                  d       |j                          |j                          y )Nzftl://aztcp://)ContextsocketzmqPUBassertRaisesErrnoEPROTONOSUPPORTbindconnectEINVALclosetermselfctxss      ^/var/www/html/software/conda/envs/catlas/lib/python3.12/site-packages/zmq/tests/test_socket.pytest_createzTestSocket.test_create   s    llnJJswws22AFFIFs22AIIyIszz1668<		
    c                 "   d}| j                         5 }|j                  t        j                        5 }|j	                  |       |j                  t        j
                        5 }|j                  |       d}|j                  |       | j                  |      }||k(  sJ 	 d d d        j                  du sJ 	 d d d        j                  du sJ 	 d d d        j                  du sJ y # 1 sw Y   LxY w# 1 sw Y   ?xY w# 1 sw Y   2xY w)N
inproc://a   hiT)
r   r   r   PUSHr   PULLr   sendrecvclosed)r   urlr   abmsgrcvds          r!   test_context_managerzTestSocket.test_context_manager(   s    \\^ 
	$sCHH% (sZZ) 'QIIcNCFF3K99Q<D3;&;' xx4'''( 88t###
	$ zzT!!!' '( (
	$ 
	$s:    D1C9$=C-"C9;D-C62C99D	>DDc           	         d}d}| j                         5 }|j                  t        j                        5 }|j                  t        j                        5 }|j                  |       |j                  |      }d|t        |      v sJ |5  |j                  |       | j                  |      }||k(  sJ 	 d d d        t        j                  t        j                        5  |j                  |t        j                         d d d        t        j                  t        j                        5  |j                  t        j                         d d d        |j                  |       d d d        d d d        |j                  t        j                        5 }|j                  t        j                        5 }|j                  |      }d|t        |      v sJ |5  |j                  |       |j                  |       | j                  |      }||k(  sJ |j                  |       d d d        |j                  |       t        j                  t        j                        5  |j                  |t        j                         d d d        t        j                  t        j                        5  |j                  t        j                         d d d        d d d        d d d        d d d        y # 1 sw Y   @xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr%   r&   zconnect=)flagszbind=)r   r   r   r'   r(   r   r   reprr)   r*   pytestraisesAgainDONTWAITunbind
disconnect)	r   r,   r/   r   r-   r.   connect_contextr0   bind_contexts	            r!   !test_connectbind_context_managersz,TestSocket.test_connectbind_context_managers7   s   \\^ !	/sCHH% CJJsxx,@ As"#))C.!#)T/-BBBB$ 'FF3K99Q<D3;&;'
 ]]399- 4FF3cllF34]]399- /FFF./  CHH% /CJJsxx,@ /A  !vvc{sg$|*<<<<! &IIcNFF3K99Q<D3;&;LL%& 		#]]399- 4FF3cllF34]]399- /FFF.// /#!	/ !	/' '
4 4/ /   (& &4 4/ // / / /#!	/ !	/s    M3 L)7L*K5	7+L""L	+L/!L	L)L)1'M3 M'8&MAL6	*<M&"M	+M3!M	MM'$M35K?:LLLLLL&!L))L3	.M36M ;MMMMMM$ M''M0	,M33M<c                    | j                   j                  t        j                        5 }|j	                  d      5  |j
                  }| j                   j                  t        j                        5 }|j                  |       |j                  d       | j                  |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nztcp://127.0.0.1:0s   msg)
contextr   r   r'   r   last_endpointr(   r   r)   r*   )r   pushr,   pulls       r!   test_bind_random_contextz#TestSocket.test_bind_random_context]   s    \\  * 	$d./ $((\\((2 $dLL%IIf%IIdO$$	$ 	$$ $$ $	$ 	$s:   C6C24B?&C.C?CCC	CC z
zmq.Socketc                 .   | j                   j                  t        j                        5 }| j                   dt        |      v sJ dt        |      vsJ 	 d d d        | j                   dt              v sJ dt        |      v sJ y # 1 sw Y   5xY w)Nz
(zmq.PUSH)r+   )r?   r   r   r'   	_repr_clsr4   r   r    s     r!   	test_reprzTestSocket.test_reprh   s    \\  * 	+ann%Z0DG;;;47***	+ ..!,Q77747"""		+ 	+s   ,BBc                    | j                         }|j                  t        j                        }dt	        |      v sJ dt	        |      v sJ dt	        |      v sJ dt	        |      v sJ |j                          |j                          y )Nr)   IDENTITYAFFINITYFD)r   r   r   r   dirr   r   r   s      r!   test_dirzTestSocket.test_diro   sw    llnJJswwQSV###SV###s1v~~		
r#   Nzrequires unittest.mockreasonc                     | j                  t        j                        }t        j                  |      }|j                          y )N)spec)r   r   SUBr   Mockr   )r   r    ms      r!   test_mockablezTestSocket.test_mockabley   s+    KK II1		r#   c                 d    | j                  t        j                        }|j                  d      }y )Nztcp://*)r   r   r   bind_to_random_port)r   r    ps      r!   test_bind_unicodezTestSocket.test_bind_unicode   s$    KK !!),r#   c                 d    | j                  t        j                        }|j                  d       y )Ntcp://127.0.0.1:5555)r   r   r   r   rF   s     r!   test_connect_unicodezTestSocket.test_connect_unicode   s!    KK 			()r#   c                    | j                         }|j                  t        j                        }	 |j	                  d       	 |j	                  d       |j                          |j                          y # t        j
                  $ r)}|j                  t        j                  k(  sJ Y d }~jd }~ww xY w# t        j
                  $ r)}|j                  t        j                  k(  sJ Y d }~d }~ww xY w)Nztcp:*zrand://*)r   r   r   r   rW   ZMQErrorerrnor   r   r   r   )r   r   r    es       r!   test_bind_to_random_portz#TestSocket.test_bind_to_random_port   s    llnJJsww	)!!'*	2!!*- 	
	
 || 	)77cjj(((	)
 || 	277c11111	2s/   A5 B4 5B1B,,B14C0C++C0c                    | j                  t        j                        5 }d}t        j                  t        j
                        5 }|j                  |       d d d        |t        j                        v sJ d}t        j                  t        j
                        5 }|j                  |       d d d        |t        |j                        v sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   8xY w# 1 sw Y   y xY w)Nztcp://1.2.3.4.5:1234567znoproc://no/such/file)
r   r   r'   r5   r6   r^   r   strvaluer   )r   r    r,   excs       r!   test_bind_connect_addr_errorz'TestSocket.test_bind_connect_addr_error   s    [[" 		)a+Cs||, s#cii.((()Cs||, 		##cii.(((		) 		) 
 		) 		)s<   &C3CAC3C'0!C3C$	 C3'C0	,C33C<c                     | j                   j                  t        j                        }| j                  j                  |       d}||_        |j                  t        j                        |k(  sJ y )Ns
   identity  )	r?   r   r   r(   socketsappendidentitygetrI   )r   r    idents      r!   test_identityzTestSocket.test_identity   sS    LL)A
uuS\\"e+++r#   c                    d}| j                  t        j                  t        j                        \  }}|j                  |j                  k(  sJ |j
                  |j
                  k(  sJ | j                  t        |j                  t        j                  |       | j                  t        |j                  t        j                  |       |j                  t        j                  |d       | j                  t        |j                  t        j                  |       |j                  t        j                  |       | j                  t        |j                  t        j                         | j                  t        j                  |j                  t        j                         |j!                  t        j                        }|j#                  d      }|j                  t        j                  d      }||k(  sJ t%        j&                  d       |j	                  |t        j(                         |j	                  |dz  d       ||j                         k(  sJ |dz  |j                  d      k(  sJ y)z2test setting/getting sockopts with unicode stringsu   téstutf16皙?   zlatin-1encodingN)create_bound_pairr   r   rR   send_unicoderecv_unicodeassertRaises	TypeError
setsockopt	SUBSCRIBErI   setsockopt_unicoderJ   getsockopt_unicoder   r   
getsockoptdecodetimesleepSNDMORE)r   topicrX   r    identbidentuidentu2s          r!   test_unicode_sockoptsz TestSocket.test_unicode_sockopts   s   %%cggsww71~~///~~///)Q\\3==%H)Q\\3<<G	S\\5':)Q\\3<<G	S]]E2)Q%9%93<<Hszz1+?+?Ocll+w'&&s||W=   

3	uckk*	uqy95((((qyANNIN>>>>r#   c           	      "   t        j                         }|dk  rd}nd}| j                  t         j                  t         j                        \  }}|j                  t         j                  d       |j                  t         j                        dk(  sJ |j                  t         j                  d       |j                  t         j                        dk(  sJ |j                  |k(  sJ d|_        |j                  dk(  sJ |j                  t         j                        t         j                  k(  sJ | j                  t         j                  |j
                  t         j                  d       |j                  t         j                        |j                  k(  sJ |j                  t         j                        t         j                  k(  sJ |j                  t         j                        |j                  k(  sJ |j                  t         j                        t         j                  k(  sJ g }i }t         j                  }|j                   D ]$  }t#        ||      }	t%        |	t&              s |||	<   & t         j                  j(                  D ]  }
|
j*                  t         j                  j,                  j&                  t         j                  j,                  j.                  hvrX|
j0                  j3                  d      rt	 |j                  |
      }|dkD  s|j5                  d	|
d
        |r%| j9                  dj;                  dg|z                yy# t         j6                  $ r"}|j5                  d	|
d| d       Y d}~d}~ww xY w)ztest integer sockopts)   r   r   r         )HWMROUTERXPUBTCPFAILREQ_CURVE_PROBE_ROUTER
IPC_FILTERGSSAPISTREAM_VMCI_BUFFER_SIZEVMCI_BUFFER_MIN_SIZEVMCI_BUFFER_MAX_SIZEVMCI_CONNECT_TIMEOUTBLOCKYIN_BATCH_SIZEOUT_BATCH_SIZEWSS_TRUST_SYSTEMONLY_FIRST_SUBSCRIBEPRIORITYRECONNECT_STOPNORM_ROUTER_	BUSY_POLLXSUB_VERBOSE_TOPICS_l        zgetsockopt(z=) returned a ridiculous value. It is probably the wrong type.z	) raised .N
 )r   zmq_version_infort   r   rR   ry   LINGERr}   hwmEVENTSPOLLOUTr   r   TYPEsocket_type	constants__all__getattr
isinstanceintSocketOption	_opt_type_OptTypeint64name
startswithri   r^   failjoin)r   vdefault_hwmrX   r    errorsbackrefr   r   rd   optnr`   s                r!   test_int_sockoptszTestSocket.test_int_sockopts   s     "v:KK%%cggsww71	SZZ#||CJJ'1,,,	SZZ$||CJJ'2---uu###uu{{||CJJ'3;;666szz1<<XN||CHH%666||CHH%000||CHH%666||CHH%000 MM	%% 	&DIt,E%%!%	& ==-- 0	C}}&&**&&,,%  xx""@ 	LL% u9MM%cW -: :[0	b IIdiiv./  << BC7)A3a@AABs   MN,N		Nc                 2   | j                   j                  t        j                        }| j                  j                  |       |j                  t        j                  d       | j                  t        j                  |j                  dd       | j                  t        j                  |j                  d       | j                  t        |j                  dd       | j                  t        j                  |j                  t        j                  d       y)z=Test that appropriate errors are raised on bad socket optionsr   i'        5r&   N)r?   r   r   r   rh   ri   ry   r   r   r   r}   rw   rx   rz   rF   s     r!   test_bad_sockoptszTestSocket.test_bad_sockopts  s    LL(A	SZZ#szz1<<qAszz1<<>)Q\\4>szz1<<Nr#   c                    | j                   j                  t        j                        }| j                  j                  |       |j                  t        j                  d       |j                  t        j                        dk(  sJ y)ztest set/getsockopt roundtrip.r   N)	r?   r   r   r   rh   ri   ry   r   r}   )r   rX   s     r!   test_sockopt_roundtripz!TestSocket.test_sockopt_roundtrip$  sY    LL(A	SZZ$||CJJ'2---r#   c                 "   | j                  t        j                  t        j                        \  }}| j                  j	                  ||g       d}| j                  t        |j                  |d       | j                  t        |j                  |d       |j                  |       |j                         }||j                  d      k(  sJ |j                  d      |k(  sJ |j                  |d       |j                  d      }||k(  sJ y)	ztest sending unicode objectsu   çπ§FcopyTutf8ro   rr   N)rt   r   PAIRrh   extendrw   rx   r)   ru   r*   encoder~   rv   )r   r-   r.   ur    s        r!   test_send_unicodezTestSocket.test_send_unicode+  s    %%chh91QF#)QVVQU;)QVVQT:	qFFHAHHV$$$$xx1$$$	q7+NNGN,Avvr#   c                 <   | j                  t        j                  t        j                        \  }}| j                  j	                  ||g       | j                  t        |j                  ddg       |j                  dg       | j                  |      }|dgk(  sJ y)z*check type on all frames in send_multipart   ar      bN)	rt   r   r   rh   r   rw   rx   send_multipartrecv_multipart)r   r-   r.   r0   s       r!   test_send_multipart_check_typez)TestSocket.test_send_multipart_check_type:  s    %%chh91QF#)Q%5%5ayA	$ ""1%v~~r#   c                 &   d}t        j                          }|j                  d       |j                         d   }d||fz  }|j                          t	        j
                  d       | j                  j                  t        j                        }| j                  j                  t        j                        }| j                  j                  ||g       |j                  |       t	        j
                  d       |j                  ddd	      }t        |t        j                        sJ |t        j                   u sJ |j"                  sJ d
|_        |j'                  ddgdd	      }t        |t        j                        sJ |j"                  rJ |j                  |       | j)                  |      }	t+        d      D ]%  }
|j"                  r nt	        j
                  d       ' |j"                  du sJ |	dgk(  sJ | j)                  |      }	t+        d      D ]%  }
|j"                  r nt	        j
                  d       ' |j"                  du sJ |	ddgk(  sJ t        j,                  ddd	      }|j.                  j"                  du sJ |j                  |d      }|j                  |d      }|j.                  j"                  du sJ |j"                  du sJ |j"                  du sJ | j)                  |      }	|j.                  j"                  du sJ |	dgk(  sJ | j)                  |      }	|j.                  j"                  du sJ |	dgk(  sJ |j"                  du sJ |j"                  du sJ |j.                   ~t+        d      D ]%  }
|j"                  r nt	        j
                  d       ' |j"                  du sJ |j"                  du sJ t        j,                  dd      }| j1                  t2        |j                  |dd	       y)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:%irp   s	   somethingFT)r   trackr   s   else
   s   againr   )r   N)r   r   getsocknamer   r   r   r?   r   r'   r(   rh   r   r   r)   r   MessageTracker_FINISHED_TRACKERdonecopy_thresholdr   r   rangeFrametrackerrw   
ValueError)r   addrsockportifacer-   r.   p1p2r/   irT   s               r!   test_trackerzTestSocket.test_trackerC  s    !}}		"#!!$4,&



3LL)LL)QF#			%

3VVLuDV9"c00111S*****www |W5EN"c0011177{	u!!!$r 	AwwJJsO	 ww$|n$$$!!!$r 	AwwJJsO	 ww$|W----IIhU$7yy~~&&&VVAEV"VVAEV"yy~~&&&ww%ww%!!!$yy~~&&&xj   !!!$yy~~&&&xj   ww%ww%			r 	AwwJJsO	 ww$ww$IIl%0*affae4Hr#   c                 l   | j                         }|j                  t        j                        }|j	                          | j                  t        j                  |j                  d       | j                  t        j                  |j                  d       | j                  t        j                  |j                  t        j                  d       | j                  t        j                  |j                  d       | j                  t        j                  |j                         |j                          y )Nr#   s   asdf)r   r   r   r   r   r   ENOTSOCKr   r   ry   rz   r)   r*   r   r   s      r!   
test_closezTestSocket.test_close  s    llnJJsww		s||QVVS9s||QYY<s||Q\\3==#Ns||QVVW=s||QVV4
r#   c                 d   | j                   j                  t        j                        }| j                  j                  |       d}||_        ||j                  k(  sJ ||j                  t        j                        k(  sJ |j                  |j                  t        j                        k(  sJ y)z*set setting/getting sockopts as attributesr   N)r?   r   r   DEALERrh   ri   lingerr}   r   fdrK   )r   r    r   s      r!   	test_attrzTestSocket.test_attr  s    LL

+A!!!cjj1111ttq||CFF++++r#   c                 6   | j                   j                  t        j                        }| j                  j                  |       	 d|_        | j                  d       	 |j                   | j                  d       y # t        $ r Y *w xY w# t        $ r Y y w xY w)Nfooz-bad setattr should have raised AttributeErrorz-bad getattr should have raised AttributeError)	r?   r   r   r   rh   ri   appler   AttributeErrorrF   s     r!   test_bad_attrzTestSocket.test_bad_attr  s    LL

+A	GAG IIEF	GGG IIEF  		  		s$   A= B =	B	B		BBc                 &    G d dt         j                        } || j                  t         j                        }| j                  j                  |       |j                  dk(  sJ d|_        |j                  dk(  sJ |j                  }|dk(  sJ y)z subclasses can assign attributesc                   "     e Zd ZdZ fdZ xZS )#TestSocket.test_subclass.<locals>.SNc                 2    d| _         t        |   |i | y )Nr   )r-   super__init__)r   r-   kw	__class__s      r!   r  z,TestSocket.test_subclass.<locals>.S.__init__  s     !*r*r#   )__name__
__module____qualname__r-   r  __classcell__)r  s   @r!   Sr     s    A+ +r#   r  r   r   N)r   Socketr?   REPrh   ri   r-   )r   r  r    r-   s       r!   test_subclasszTestSocket.test_subclass  st    	+

 	+ dllCGG$AssbyyssaxxCCAvvr#   c                     | j                         \  }}d}t        d      D ]  }|j                  |        t        j                  d       t        d      D ]  }| j                  |      |gk(  rJ  y )Nr&   r   rp   )rt   r   r)   r   r   r   )r   r-   r.   r/   r   s        r!   test_recv_multipartzTestSocket.test_recv_multipart  sp    %%'1q 	AFF3K	

3q 	3A&&q)cU222	3r#   c                     | j                         }|j                  t        j                        }|j	                          t        j                  d       |j                          |j                  sJ y)z,s.close() after ctx.destroy() should be fineg{Gz?N)	r   r   r   r
  destroyr   r   r   r+   r   s      r!   test_close_after_destroyz#TestSocket.test_close_after_destroy  sH    llnJJsww

4		xxxr#   c                    | j                         \  }}t        j                          |j                  t              }|dk(  sJ |j                  t        t        j
                        }|t        j
                  k(  sJ d}|j                  |       |j                  t              }|t        j                  k(  sJ | j                  |      }|j                  t              }|dk(  sJ ||k(  sJ y )Nr   r&   )	rt   r   pollPOLL_TIMEOUTr   r   r)   POLLINr*   )r   r-   r.   evtr/   msg2s         r!   	test_pollzTestSocket.test_poll  s    %%'1		ff\"axxff\3;;/ckk!!!	sff\"cjj   yy|ff\"axxs{{r#   c                     t         j                  dk(  rt        d      dt         j                  z  }t         j                  dkD  sJ |       t         j                  dk  sJ |       y)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/   s     r!   test_ipc_path_max_lengthz#TestSocket.test_ipc_path_max_length  s^    1$7889C<P<PP##b(-#-(##d*/C/*r#   c                    t         j                  dk(  rt        d      | j                  j	                  t         j
                        }| j                  j                  |       	 |j                  dj                  dt         j                  dz   z               y # t         j                  $ r1}t        t         j                        |j                  v sJ Y d }~y d }~ww xY w)Nr   r  zipc://{}r-   r   )r   r  r   r?   r   r   rh   ri   r   formatr^   rc   strerror)r   r    r`   s      r!   test_ipc_path_max_length_msgz'TestSocket.test_ipc_path_max_length_msg  s    1$788LL(A	;FF:$$SC,@,@1,D%EFG|| 	;s++,

:::	;s   $4B C,'CCzipc not supported on Windows.c                    | j                   j                  t        j                        }| j                  j                  |       d}t        j                  t        j                        5 }|j                  d|        ddd       j                  j                  t        j                  k(  sJ t        |j                        }||v sJ d|j                         v sJ y# 1 sw Y   bxY w)z3Display the ipc path in case of an ENOENT exceptionz/foo/barzipc://Nzno such file or directory)r?   r   r   r   rh   ri   r5   r6   r^   r   rd   r_   ENOENTrc   lower)r   r    invalid_patherrorerror_messages        r!   /test_ipc_path_no_such_file_or_directory_messagez:TestSocket.test_ipc_path_no_such_file_or_directory_message  s     LL(A!]]3<<( 	,EFFVL>*+	,{{  ELL000EKK(},,,*m.A.A.CCCC	, 	,s   *C  C)c                    t        j                         d   dk\  }t         j                  t         j                  t         j                  t         j
                  t         j                  fD ]m  }| j                  j                  |      }d|_	        |j                  dk(  sJ |r&	 |j                  dk(  sJ 	 	 |j                  dk(  sJ 	 |j                          o y # t        $ r Y 1w xY w# t        $ r Y -w xY w)Nr   r   r   )r   r   r   r   rR   REQr   r?   r   r   sndhwmr   rcvhwmr   )r   zmq3styper    s       r!   test_hwmzTestSocket.test_hwm  s    ##%a(A-ggszz377CGGSZZH 	E##E*AAE55C<<88s?*?88s?*? GGI	 &  & s$   !C4C(	C%$C%(	C43C4c                 Z   | j                  t        j                        }t        j                  |      }t        j                  |      }|j
                  sJ |j
                  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                          y )N)r   r   r   r   deepcopy_shadow
underlyingr   )r   r    scopysdcopys       r!   	test_copyzTestSocket.test_copy  s    KK 		!q!}}}~~~||u/////||v00000		r#   c                    | j                  t        j                  t        j                        \  }}t        t
        fD ]L  }t        |      j                  d      } ||      }|j                  |       |j                         }||k(  rLJ  y )Nascii)
rt   r   r'   r(   
memoryview	bytearrayrc   r   r)   r*   )r   r-   r.   buffer_typerawbytesr/   recvds          r!   test_send_bufferzTestSocket.test_send_buffer   sw    %%chh91&	2 	%K;'..w7Hh'CFF3KFFHEH$$$	%r#   c                    | j                  t        j                        }|j                  d       t        j                  j                  |j                        }|j                  |j                  k(  sJ | j                  t        j                        }t        j                  j                  |      }|j                  |u sJ |j                  |j                  k7  sJ |j                  |j                  k(  sJ t        j                  |      }|j                  |u sJ |j                  |j                  k(  sJ |j                  d       d}|j                  |       | j                  |      }||k(  sJ y )Nr[   r&   )r   r   r'   r   r	  shadowr2  r(   _shadow_objr   r)   r*   )r   rX   r   r    s2s3sentr0   s           r!   test_shadowzTestSocket.test_shadow)  s   KK!	%&ZZq||,||r}},,,KK!ZZq!~~"""||q||+++}},,,ZZ]~~"""}},,,


)*
yy}t||r#   c                    	 ddl m}m} |j                         }|j                  |t        j                        }|j                  |t        j                        }t        j                  j                  |      }t        j                  j                  |      }|j                  d       |j                  d       |j                  d       | j                  |      }|dk(  sJ y # t        $ r t	        d      w xY w)Nr   )zctxzsocketzRequires pyczmqr%   r&   )pyczmqrF  rG  	Exceptionr   newr   r'   r(   r	  r?  r   r   r)   r*   )	r   rF  rG  r   cacbr-   r.   r0   s	            r!   test_shadow_pyczmqzTestSocket.test_shadow_pyczmq<  s    	., hhj[[chh'[[chh'JJb!JJb!	|			,	uyy|u}}  	.,--	.s   C$ $C9c                 R   | j                  t        j                  t        j                        \  }}|j	                  d       d|_        t        j
                         }|j                  |t        j                         t        d      D ](  }|j                  d       |j                  d      }|s( n | j                  |       |j                  d       | j                  |      }|dk(  sJ |j                  d       |j                  d       |j                  d      }|g k(  sJ y )Nprefixcr   s   canary   s   prefixmessager   )rt   r   r   rR   	subscribePollerregisterr  r   r)   r  r*   unsubscribe)r   pubsubrX   r   eventsr/   s          r!   test_subscribe_methodz TestSocket.test_subscribe_methodM  s    ))#''377;ShJJL	

3

#s 	AHHYVVC[F		
 			#!"iin&&&&!!"||r#   l        zonly run on 64b and not on CI.c                    t        j                  d      }d}	 ||z  }| j	                         \  }}	 |j                  |d       |j                  d      }t        |      }t        |      }	t        |	      |k(  sJ |	d   |k(  sJ |	d   |k(  sJ y # t        $ r}t        d|z        d }~ww xY w# t        $ r}t        d|z        d }~ww xY w)Nr   l       zNot enough memory: %sFr   r   r   )
osurandomMemoryErrorr   rt   r)   r*   ordr8  len)
r   rP  Nbufr`   r-   r.   r0   byteviews
             r!   test_large_sendzTestSocket.test_large_sendc  s     JJqM	8a%C %%'1	8FF3UF#66u6%D
 1v$4yA~~Aw$Bx4  	82Q677	8  	82Q677	8s.   B %B1 	B.B))B.1	C:CCc                 \   | j                  t        j                  t        j                        \  }}d }d }ddddi}|j	                  ||       |j                  |      }|d   |d   k(  sJ |d   sJ |j	                  ||       |j                  |      }|d   |d   k(  sJ |d   rJ y )Nc                     g }|j                  | j                  dg              t        j                  | d         j	                  d      }|j                  |       |S )N
identitiescontentr   )r   rk   jsondumpsr   ri   )r/   framesrh  s      r!   	serializez3TestSocket.test_custom_serialize.<locals>.serialize  sL    FMM#'',34jjY077?GMM'"Mr#   c                 d    | d d }t        j                  | d   j                  d            }||dS )Nr   r   )rg  rh  )ri  loadsr~   )rk  rg  rh  s      r!   deserializez5TestSocket.test_custom_serialize.<locals>.deserialize  s:    Jjj!2!26!:;G(" r#   rh  r   bee)r-   r.   rg  )rt   r   r   r   send_serializedrecv_serialized)r   r-   r.   rl  ro  r/   r<  r2s           r!   test_custom_serializez TestSocket.test_custom_serialize}  s    %%cjj#**=1		 
 	
#y)!!+.Y3y>111\"""	%+{+)}I...l####r#   )3r  r  r  r"   r1   r=   rC   rE   rG   rM   r   skipifr   rU   rY   r\   ra   rf   rm   r   r   r   r   r   r   r	   r   r   r   r   r  r  r  r  r  r   r   r'  r.  r5  r=  rD  rM  rY  r
   on_cisysmaxsizelargerd  rt   r#   r!   r   r      sb   "$/L$ I# T[[&>? @
-*$
),?0Q0fO. DI DIL	,G $3 0	; T[[!@A
D B
D"%&", T[[	%>S[[50>g/ 
ZZ  	
 * $r#   r   c                       e Zd Zej                  Zej                  ZdZd Z e	j                   eed       d      d        Z e	j                   eed       d      d	        Zy
)TestSocketGreenzzmq.green.Socketc                    | j                         \  }t        j                  dfd      }t        j                  d      }|j	                          | j                  t        j                  |j                         |j                          y )Ng      ?c                  &     j                  d      S )Nr&   )r)   )r-   s   r!   <lambda>z.TestSocketGreen.test_timeout.<locals>.<lambda>  s    u r#   rp   )rt   geventspawn_laterTimeoutstartrw   r*   kill)r   r.   gtimeoutr-   s       @r!   test_timeoutzTestSocketGreen.test_timeout  s`    ))+DAq""3(=>AnnS)GMMOfnnaff5FFHr#   RCVTIMEOzrequires RCVTIMEOrN   c                 *   | j                   j                  t        j                        }t	        j
                  d      5 }d|_        d d d        |j                          t              dk(  sJ |d   j                  t        k(  sJ y # 1 sw Y   BxY w)NTrecordr   r   r   )r?   r   r   r)  warningscatch_warningsrcvtimeor   r_  categoryUserWarningr   r    ws      r!   test_warn_set_timeoz#TestSocketGreen.test_warn_set_timeo  su    ##CGG,A((5 
GGIq6Q;;Q4==K///	 s    B		BSNDTIMEOzrequires SNDTIMEOc                 4   | j                   j                  t        j                        }t	        j
                  d      5 }|j                   d d d        |j                          t              dk(  sJ |d   j                  t        k(  sJ y # 1 sw Y   BxY w)NTr  r   r   )r?   r   r   r)  r  r  sndtimeor   r_  r  r  r  s      r!   test_warn_get_timeoz#TestSocketGreen.test_warn_get_timeo  su    ##CGG,A((5 

GGIq6Q;;Q4==K///	 s    BBN)r  r  r  r   
skip_greenr   r  rE   r  r   ru  hasattrr   r  r  rz  r#   r!   r|  r|    s}    !,,#,#7#7 &		 
j11:M	N	0 
O	0 
j11:M	N	0 
O	0r#   r|  )!r   r_   ri  r[  platformr   rw  r   r  unittestr   r5   r   r   	zmq.testsr   r   r   r   r	   python_implementationr#  r
   r   r   boolenvironrk   rv  r  r   r  r|  rz  r#   r!   <module>r     s       	   
      
 R R%x%%'--/69
(



#
#
%
0
0
;RZZ^^D!" tC@
$ @
$F w0)Z 0 ;r#   