
    Zd:\                        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                                                    dk    Z ej                                                                        d          Z eej                            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 dS dS dS )    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 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+re,pe-j.        d(k     pe#d)	          e	j/        d*                         Z0d+ Z1dS ),
TestSocketc                    |                                  }|                    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ss      5lib/python3.11/site-packages/zmq/tests/test_socket.pytest_createzTestSocket.test_create   s    llnnJJsws2AFIFFFs2AIyIIIsz168<<<				




    c                 N   d}|                                  5 }|                    t          j                  5 }|                    |           |                    t          j                  5 }|                    |           d}|                    |           |                     |          }||k    sJ 	 d d d            n# 1 swxY w Y   |j	        dk    sJ 	 d d d            n# 1 swxY w Y   |j	        dk    sJ 	 d d d            n# 1 swxY w Y   |j	        dk    sJ d S )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CH%% (sZZ)) 'QIIcNNNCFF3KKK99Q<<D3;;;;;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' x4'''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 8t#####
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ 
	$ zT!!!!!!sY    D5C(,A
C7C(CC(
CC(D(C,	,D/C,	0DDDc           	         d}d}|                                  5 }|                    t          j                  5 }|                    t          j                  5 }|                    |           |                    |          }d|t          |          v sJ |5  |                    |           | 	                    |          }||k    sJ 	 d d d            n# 1 swxY w Y   t          j        t          j                  5  |                    |t          j                   d d d            n# 1 swxY w Y   t          j        t          j                  5  |	                    t          j                   d d d            n# 1 swxY w Y   |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    t          j                  5 }|                    t          j                  5 }|                    |          }d|t          |          v sJ |5  |                    |           |                    |           | 	                    |          }||k    sJ |                    |           d d d            n# 1 swxY w Y   |                    |           t          j        t          j                  5  |                    |t          j                   d d d            n# 1 swxY w Y   t          j        t          j                  5  |	                    t          j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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CH%% CJJsx,@,@ As"#))C..)#))T/-B-BBBBB$ ' 'FF3KKK99Q<<D3;;;;;' ' ' ' ' ' ' ' ' ' ' ' ' ' '
 ]39-- 4 4FF3clF3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4]39-- / /FFF.../ / / / / / / / / / / / / / /                              CH%% /CJJsx,@,@ /A  !vvc{{&s$|*<*<<<<<! & &IIcNNNFF3KKK99Q<<D3;;;;LL%%%& & & & & & & & & & & & & & & 		#]39-- 4 4FF3clF3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4]39-- / /FFF.../ / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / / / / / / / / / / / / /#!	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/ !	/sz   N5 GAF53C	F5C  F5#C $!F5"D3	'F53D77F5:D7;!F5!F		=F5	FF5FF5)G5F99G<F9=G N5G	N5G	"N56 N.NAJ-	!N-J11N4J156N+"L	NLN L!!N!M/	#N/M33N6M37N:NN

NN
NN5N!	!N5$N!	%N55N9<N9z
zmq.Socketc                 8   | j                             t          j                  5 }| j         dt          |          v sJ dt          |          vsJ 	 d d d            n# 1 swxY w Y   | j         dt          |          v sJ dt          |          v sJ d S )Nz
(zmq.PUSH)r+   )contextr   r   r'   	_repr_clsr4   r   r    s     r!   	test_reprzTestSocket.test_repr_   s    \  ** 	+an000DGG;;;;477*****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ .,,,Q7777477""""""s   /A!!A%(A%c                 T   |                                  }|                    t          j                  }dt	          |          v sJ dt	          |          v sJ dt	          |          v sJ dt	          |          v sJ |                                 |                                 d S )Nr)   IDENTITYAFFINITYFD)r   r   r   r   dirr   r   r   s      r!   test_dirzTestSocket.test_dirf   s    llnnJJswQSVV####SVV####s1vv~~~~				




r#   Nzrequires unittest.mockreasonc                     |                      t          j                  }t          j        |          }|                                 d S )N)spec)r   r   SUBr   Mockr   )r   r    ms      r!   test_mockablezTestSocket.test_mockablep   s8    KK  I1						r#   c                 n    |                      t          j                  }|                    d          }d S )Nztcp://*)r   r   r   bind_to_random_port)r   r    ps      r!   test_bind_unicodezTestSocket.test_bind_unicodev   s,    KK  !!),,r#   c                 n    |                      t          j                  }|                    d           d S )Ntcp://127.0.0.1:5555)r   r   r   r   rA   s     r!   test_connect_unicodezTestSocket.test_connect_unicodez   s.    KK  			()))))r#   c                    |                                  }|                    t          j                  }	 |                    d           n3# t          j        $ r!}|j        t          j        k    sJ Y d }~nd }~ww xY w	 |                    d           n3# t          j        $ r!}|j        t          j        k    sJ Y d }~nd }~ww xY w|	                                 |
                                 d S )Nztcp:*zrand://*)r   r   r   r   rR   ZMQErrorerrnor   r   r   r   )r   r   r    es       r!   test_bind_to_random_portz#TestSocket.test_bind_to_random_port~   s   llnnJJsw	)!!'****| 	) 	) 	)7cj(((((((((	)	2!!*----| 	2 	2 	27c1111111111	2 	
			




s/   A A;A66A;?B C$C  Cc                    |                      t          j                  5 }d}t          j        t          j                  5 }|                    |           d d d            n# 1 swxY w Y   |t          |j                  v sJ d}t          j        t          j                  5 }|	                    |           d d d            n# 1 swxY w Y   |t          |j                  v sJ 	 d d d            d S # 1 swxY w Y   d S )Nztcp://1.2.3.4.5:1234567znoproc://no/such/file)
r   r   r'   r5   r6   rY   r   strvaluer   )r   r    r,   excs       r!   test_bind_connect_addr_errorz'TestSocket.test_bind_connect_addr_error   s   [["" 		)a+Cs|,, s              #ci..(((()Cs|,, 		#              #ci..(((((		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		)sY   !C9A#C9#A'	'C9*A'	+;C9&C<C9C	C9C	C99C= C=c                     | j                             t          j                  }| j                            |           d}||_        |                    t          j                  |k    sJ d S )Ns
   identity  )	r?   r   r   r(   socketsappendidentitygetrD   )r   r    idents      r!   test_identityzTestSocket.test_identity   s`    L))A
uuS\""e++++++r#   c                    d}|                      t          j        t          j                  \  }}|j        |j        k    sJ |j        |j        k    sJ |                     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J t%          j        d           |                    |t          j                   |                    |dz  d           ||                                k    sJ |dz  |                    d          k    sJ dS )z2test setting/getting sockopts with unicode stringsu   téstutf16皙?   zlatin-1encodingN)create_bound_pairr   r   rM   send_unicoderecv_unicodeassertRaises	TypeError
setsockopt	SUBSCRIBErD   setsockopt_unicoderE   getsockopt_unicoder   r   
getsockoptdecodetimesleepSNDMORE)r   topicrS   r    identbidentuidentu2s          r!   test_unicode_sockoptsz TestSocket.test_unicode_sockopts   s   %%cgsw771~////~////)Q\3=%HHH)Q\3<GGG	S\5':::)Q\3<GGG	S]E222)Q%93<HHHsz1+?OOOcl++w''&&s|W==    
3	uck***	uqy9555((((((qyANNIN>>>>>>>>r#   c           	         t          j                    }|dk     rd}nd}|                     t           j        t           j                  \  }}|                    t           j        d           |                    t           j                  dk    sJ |                    t           j        d           |                    t           j                  dk    sJ |j        |k    sJ d|_        |j        dk    sJ |                    t           j	                  t           j
        k    sJ |                     t           j        |j        t           j	        d           |                    t           j                  |j        k    sJ |                    t           j                  t           j        k    sJ |                    t           j                  |j        k    sJ |                    t           j                  t           j        k    sJ g }i }t           j        }|j        D ],}t#          ||          }	t%          |	t&                    r|||	<   -t           j        j        D ]}
|
j        t           j        j        j        t           j        j        j        hvr6|
j                            d          rQ	 |                    |
          }|dk    r|                    d	|
d
           # t           j        $ r&}|                    d	|
d| d           Y d}~d}~ww xY w|r.|                     d                    dg|z                        dS dS )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_STOPl        zgetsockopt(z=) returned a ridiculous value. It is probably the wrong type.z	) raised .N
 )r   zmq_version_inforo   r   rM   rt   LINGERrx   hwmEVENTSPOLLOUTr   r   TYPEsocket_type	constants__all__getattr
isinstanceintSocketOption	_opt_type_OptTypeint64name
startswithrd   rY   failjoin)r   vdefault_hwmrS   r    errorsbackrefr   r   r_   optnr[   s                r!   test_int_sockoptszTestSocket.test_int_sockopts   s9    ""v::KKK%%cgsw771	SZ###||CJ''1,,,,	SZ$$$||CJ''2----u####u{{{{||CJ''3;6666sz1<XNNN||CH%%6666||CH%%0000||CH%%6666||CH%%0000 M	% 	& 	&DIt,,E%%% &!%=- +	 +	C}&*&,%   x""  6 	LL%% u99MM:c : : :  	 < B B B@C@@A@@@AAAAAAAAB  	0IIdiiv../////	0 	0s   0K%%L4LLc                    | 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)r?   r   r   r   rc   rd   rt   r   r   r   rx   rr   rs   ru   rA   s     r!   test_bad_sockoptszTestSocket.test_bad_sockopts	  s    L((A	SZ###sz1<qAAAsz1<>>>)Q\4>>>sz1<NNNNNr#   c                    | j                             t          j                  }| j                            |           |                    t          j        d           |                    t          j                  dk    sJ dS )ztest set/getsockopt roundtrip.r   N)	r?   r   r   r   rc   rd   rt   r   rx   )r   rS   s     r!   test_sockopt_roundtripz!TestSocket.test_sockopt_roundtrip  sj    L((A	SZ$$$||CJ''2------r#   c                 P   |                      t          j        t          j                  \  }}| j                            ||g           d}|                     t          |j        |d           |                     t          |j        |d           |                    |           |	                                }||
                    d          k    sJ |                    d          |k    sJ |                    |d           |                    d          }||k    sJ dS )	ztest sending unicode objectsu   çπ§FcopyTutf8rj   rm   N)ro   r   PAIRrc   extendrr   rs   r)   rp   r*   encodery   rq   )r   r-   r.   ur    s        r!   test_send_unicodezTestSocket.test_send_unicode  s   %%ch991QF###)QVQU;;;)QVQT:::	qFFHHAHHV$$$$$$xx1$$$$	q7+++NNGN,,Avvvvvvr#   c                 F   |                      t          j        t          j                  \  }}| j                            ||g           |                     t          |j        ddg           |                    dg           |                     |          }|dgk    sJ dS )z*check type on all frames in send_multipart   ar      bN)	ro   r   r   rc   r   rr   rs   send_multipartrecv_multipart)r   r-   r.   r0   s       r!   test_send_multipart_check_typez)TestSocket.test_send_multipart_check_type,  s    %%ch991QF###)Q%5ayAAA	$   ""1%%v~~~~~~r#   c                    d}t          j                     }|                    d           |                                d         }d||fz  }|                                 t	          j        d           | j                             t          j                  }| j                             t          j	                  }| j
                            ||g           |                    |           t	          j        d           |                    ddd	          }t          |t          j                  sJ |t          j        u sJ |j        sJ d
|_        |                    ddgdd	          }t          |t          j                  sJ |j        rJ |                    |           |                     |          }	t+          d          D ]}
|j        r nt	          j        d            |j        dk    sJ |	dgk    sJ |                     |          }	t+          d          D ]}
|j        r nt	          j        d            |j        dk    sJ |	ddgk    sJ t          j        ddd	          }|j        j        dk    sJ |                    |d          }|                    |d          }|j        j        dk    sJ |j        dk    sJ |j        dk    sJ |                     |          }	|j        j        dk    sJ |	dgk    sJ |                     |          }	|j        j        dk    sJ |	dgk    sJ |j        dk    sJ |j        dk    sJ |j         ~t+          d          D ]}
|j        r nt	          j        d            |j        dk    sJ |j        dk    sJ t          j        dd          }|                     t2          |j        |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:%irk   s	   somethingFT)r   trackr   s   else
   s   againr   )r   N)r   r   getsocknamer   rz   r{   r?   r   r'   r(   rc   r   r   r)   r   MessageTracker_FINISHED_TRACKERdonecopy_thresholdr   r   rangeFrametrackerrr   
ValueError)r   addrsockportifacer-   r.   p1p2r/   irO   s               r!   test_trackerzTestSocket.test_tracker5  s    !}		"###!!!$4,&


3L))L))QF###			%
3VVLuDV99"c011111S*****w |W5ENN"c0111117	u!!!$$r 	 	Aw JsOOOOw$|n$$$$!!!$$r 	 	Aw JsOOOOw$|W-----IhU$777y~&&&&VVAEV""VVAEV""y~&&&&w%w%!!!$$y~&&&&xj    !!!$$y~&&&&xj    w%w%			r 	 	Aw JsOOOOw$w$Il%000*afae4HHHHHr#   c                 L   |                                  }|                    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 )Nr#   s   asdf)r   r   r   r   r   r   ENOTSOCKr   r   rt   ru   r)   r*   r   r   s      r!   
test_closezTestSocket.test_close|  s    llnnJJsw				s|QVS999s|QY<<<s|Q\3=#NNNs|QVW===s|QV444




r#   c                 L   | j                             t          j                  }| j                            |           d}||_        ||j        k    sJ ||                    t          j                  k    sJ |j	        |                    t          j
                  k    sJ dS )z*set setting/getting sockopts as attributesr   N)r?   r   r   DEALERrc   rd   lingerrx   r   fdrF   )r   r    r   s      r!   	test_attrzTestSocket.test_attr  s    L
++A!!!!cj111111tq||CF++++++++r#   c                 :   | j                             t          j                  }| j                            |           	 d|_        |                     d           n# t          $ r Y nw xY w	 |j         |                     d           d S # t          $ r Y d S w xY w)Nfooz-bad setattr should have raised AttributeErrorz-bad getattr should have raised AttributeError)	r?   r   r   r   rc   rd   appler   AttributeErrorrA   s     r!   test_bad_attrzTestSocket.test_bad_attr  s    L
++A	GAG IIEFFFF  	 	 	D		GGG IIEFFFFF  	 	 	DD	s$    A 
A*)A*.B 
BBc                      G d dt           j                  } || j        t           j                  }| j                            |           |j        dk    sJ d|_        |j        dk    sJ |j        }|dk    sJ dS )z subclasses can assign attributesc                   "     e Zd ZdZ fdZ xZS )#TestSocket.test_subclass.<locals>.SNc                 H    d| _          t                      j        |i | d S )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?   REPrc   rd   r-   )r   r   r    r-   s       r!   test_subclasszTestSocket.test_subclass  s    	+ 	+ 	+ 	+ 	+
 	+ 	+ 	+ AdlCG$$AsbyyyysaxxxxCAvvvvvvr#   c                 
   |                                  \  }}d}t          d          D ]}|                    |           t          j        d           t          d          D ]}|                     |          |gk    sJ d S )Nr&   r   rk   )ro   r   r)   rz   r{   r   )r   r-   r.   r/   r   s        r!   test_recv_multipartzTestSocket.test_recv_multipart  s    %%''1q 	 	AFF3KKKK
3q 	3 	3A&&q))cU22222	3 	3r#   c                     |                                  }|                    t          j                  }|                                 t          j        d           |                                 |j        sJ dS )z,s.close() after ctx.destroy() should be fineg{Gz?N)	r   r   r   r   destroyrz   r{   r   r+   r   s      r!   test_close_after_destroyz#TestSocket.test_close_after_destroy  s[    llnnJJsw
4				xr#   c                    |                                  \  }}t          j                     |                    t                    }|dk    sJ |                    t          t          j                  }|t          j        k    sJ d}|                    |           |                    t                    }|t          j        k    sJ |                     |          }|                    t                    }|dk    sJ ||k    sJ d S )Nr   r&   )	ro   rz   pollPOLL_TIMEOUTr   r   r)   POLLINr*   )r   r-   r.   evtr/   msg2s         r!   	test_pollzTestSocket.test_poll  s    %%''1	ff\""axxxxff\3;//ck!!!!	sff\""cj    yy||ff\""axxxxs{{{{{{r#   c                     t           j        dk    rt          d          dt           j        z  }t           j        dk    s
J |            t           j        dk     s
J |            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/   s     r!   test_ipc_path_max_lengthz#TestSocket.test_ipc_path_max_length  sj    1$$78889C<PP#b(((#(((#d***C*****r#   c                    t           j        dk    rt          d          | j                            t           j                  }| j                            |           	 |                    d	                    dt           j        dz   z                       d S # t           j
        $ r-}t          t           j                  |j        v sJ Y d }~d S d }~ww xY w)Nr   r  zipc://{}r-   r   )r   r  r   r?   r   r   rc   rd   r   formatrY   r^   strerror)r   r    r[   s      r!   test_ipc_path_max_length_msgz'TestSocket.test_ipc_path_max_length_msg  s    1$$7888L((A	;FF:$$SC,@1,D%EFFGGGGG| 	; 	; 	;s+,,
::::::::::	;s   8B C("CCzipc not supported on Windows.c                    | j                             t          j                  }| j                            |           d}t          j        t          j                  5 }|	                    d|            ddd           n# 1 swxY w Y   |j
        j        t          j        k    sJ t          |j
                  }||v sJ d|                                v sJ dS )z3Display the ipc path in case of an ENOENT exceptionz/foo/barzipc://Nzno such file or directory)r?   r   r   r   rc   rd   r5   r6   rY   r   r_   rZ   ENOENTr^   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    L((A!]3<(( 	,EFF*L**+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,{ EL0000EK((},,,,*m.A.A.C.CCCCCCCs   BBBc                    t          j                    d         dk    }t           j        t           j        t           j        t           j        t           j        fD ]}| j                            |          }d|_	        |j	        dk    sJ |r>	 |j
        dk    sJ n# t          $ r Y nw xY w	 |j        dk    sJ n# t          $ r Y nw xY w|                                 d S )Nr   r   r   )r   r   r   r   rM   REQr   r?   r   r   sndhwmr   rcvhwmr   )r   zmq3styper    s       r!   test_hwmzTestSocket.test_hwm  s    #%%a(A-gsz37CGSZH 	 	E##E**AAE5C<<<< 8s?????%   D8s?????%   DGGIIII	 	s$   
B
B%$B%)B77
CCc                 (   |                      t          j                  }t          j        |          }t          j        |          }|j        sJ |j        sJ |j        |j        k    sJ |j        |j        k    sJ |                                 d S )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                 >   |                      t          j        t          j                  \  }}t          t
          fD ]`}t          |                              d          } ||          }|                    |           |	                                }||k    sJ ad S )Nascii)
ro   r   r'   r(   
memoryview	bytearrayr^   r   r)   r*   )r   r-   r.   buffer_typerawbytesr/   recvds          r!   test_send_bufferzTestSocket.test_send_buffer  s    %%ch991&	2 	% 	%K;''..w77H+h''CFF3KKKFFHHEH$$$$$	% 	%r#   c                    |                      t          j                  }|                    d           t          j                            |j                  }|j        |j        k    sJ |                      t          j                  }t          j                            |          }|j        |u sJ |j        |j        k    sJ |j        |j        k    sJ t          j        |          }|j        |u sJ |j        |j        k    sJ |	                    d           d}|
                    |           |                     |          }||k    sJ d S )NrV   r&   )r   r   r'   r   r   shadowr(  r(   _shadow_objr   r)   r*   )r   rS   r   r    s2s3sentr0   s           r!   test_shadowzTestSocket.test_shadow  s5   KK!!	%&&&Zq|,,|r},,,,KK!!Zq!!~""""|q|++++},,,,Z]]~""""},,,,


)***
yy}}t||||||r#   c                 0   	 ddl m}m} n# t          $ r t	          d          w xY w|                                }|                    |t          j                  }|                    |t          j                  }t          j	        
                    |          }t          j	        
                    |          }|                    d           |                    d           |                    d           |                     |          }|dk    sJ d S )Nr   )zctxzsocketzRequires pyczmqr%   r&   )pyczmqr<  r=  	Exceptionr   newr   r'   r(   r   r5  r   r   r)   r*   )	r   r<  r=  r   cacbr-   r.   r0   s	            r!   test_shadow_pyczmqzTestSocket.test_shadow_pyczmq.  s   	.,,,,,,,,, 	. 	. 	.,---	. hhjj[[ch''[[ch''Jb!!Jb!!	|			,	uyy||u}}}}}}s    %c                    |                      t          j        t          j                  \  }}|                    d           d|_        t          j                    }|                    |t          j                   t          d          D ]0}|	                    d           |
                    d          }|r n1|                     |           |	                    d           |                     |          }|dk    sJ |                    d           |	                    d           |
                    d          }|g k    sJ d S )Nprefixcr   s   canary   s   prefixmessager   )ro   r   r   rM   	subscribePollerregisterr
  r   r)   r  r*   unsubscribe)r   pubsubrS   r   eventsr/   s          r!   test_subscribe_methodz TestSocket.test_subscribe_method?  s)   ))#'37;;ShJLL	

3
###s 	 	AHHYVVC[[F 		#!"""iinn&&&&&!!!!"""||||||r#   l        zonly run on 64b and not on CI.c                    t          j        d          }d}	 ||z  }n$# t          $ r}t          d|z            d }~ww xY w|                                 \  }}	 |                    |d           |                    d          }n$# t          $ r}t          d|z            d }~ww xY wt          |          }t          |          }	t          |	          |k    sJ |	d         |k    sJ |	d         |k    sJ d S )Nr   l       zNot enough memory: %sFr   r   r   )
osurandomMemoryErrorr   ro   r)   r*   ordr.  len)
r   rF  Nbufr[   r-   r.   r0   byteviews
             r!   test_large_sendzTestSocket.test_large_sendU  s*    JqMM	8a%CC 	8 	8 	82Q6777	8%%''1	8FF3UF###66u6%%DD 	8 	8 	82Q6777	8 1vv$4yyA~~~~Aw$Bx4s(    
?:?-B 
B)B$$B)c                    |                      t          j        t          j                  \  }}d }d }ddddi}|                    ||           |                    |          }|d         |d         k    sJ |d         sJ |                    ||           |                    |          }|d         |d         k    sJ |d         rJ d S )Nc                     g }|                     |                     dg                      t          j        | d                                       d          }|                    |           |S )N
identitiescontentr   )r   rf   jsondumpsr   rd   )r/   framesr^  s      r!   	serializez3TestSocket.test_custom_serialize.<locals>.serializer  s_    FMM#'',33444jY0077??GMM'"""Mr#   c                 z    | d d         }t          j        | d                             d                    }||dS )Nr   r   )r]  r^  )r_  loadsry   )ra  r]  r^  s      r!   deserializez5TestSocket.test_custom_serialize.<locals>.deserializey  sE    Jj!2!26!:!:;;G("  r#   r^  r   bee)r-   r.   r]  )ro   r   r   r   send_serializedrecv_serialized)r   r-   r.   rb  re  r/   r2  r2s           r!   test_custom_serializez TestSocket.test_custom_serializeo  s   %%cj#*==1	 	 		 	 	  
 	
#y)))!!+..Y3y>1111\""""	%+++{++)}I....l######r#   )2r   r   r   r"   r1   r=   r@   rB   rH   r   skipifr   rP   rT   rW   r\   ra   rh   r   r   r   r   r   r   r	   r   r   r   r   r  r  r  r  r  r  r   r  r$  r+  r3  r:  rC  rO  r
   on_cisysmaxsizelargerZ  rj   r#   r!   r   r      s         " " "$/ $/ $/L I# # #   T[&>???  @?
- - -* * *  $
) 
) 
), , ,? ? ?0L0 L0 L0\O O O. . .     DI DI YDIL	 	 	, , ,G G G   $3 3 3     0 0 0	; 	; 	; T[!@AAA
D 
D BA
D  "  % % %  &  "  , T[	%>S[50>g/   
Z    Z	 
 * $  $  $  $  $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d
S )TestSocketGreenzzmq.green.Socketc                 (   |                                  \  }t          j        dfd          }t          j        d          }|                                 |                     t          j        |j                   |                                 d S )Ng      ?c                  .                          d          S )Nr&   )r)   )r-   s   r!   <lambda>z.TestSocketGreen.test_timeout.<locals>.<lambda>  s    u r#   rk   )ro   geventspawn_laterTimeoutstartrr   r*   kill)r   r.   gtimeoutr-   s       @r!   test_timeoutzTestSocketGreen.test_timeout  s{    ))++DAq"3(=(=(=(=>>AnS))GMMOOOfnaf555FFHHHHHr#   RCVTIMEOzrequires RCVTIMEOrI   c                 8   | j                             t          j                  }t	          j        d          5 }d|_        d d d            n# 1 swxY w Y   |                                 t          |          dk    sJ |d         j	        t          k    sJ d S )NTrecordr   r   r   )r?   r   r   r  warningscatch_warningsrcvtimeor   rU  categoryUserWarningr   r    ws      r!   test_warn_set_timeoz#TestSocketGreen.test_warn_set_timeo  s    ##CG,,A(555 
              GGIIIq66Q;;;;Q4=K//////   AAASNDTIMEOzrequires SNDTIMEOc                 8   | j                             t          j                  }t	          j        d          5 }|j         d d d            n# 1 swxY w Y   |                                 t          |          dk    sJ |d         j	        t          k    sJ d S )NTr  r   r   )r?   r   r   r  r  r  sndtimeor   rU  r  r  r  s      r!   test_warn_get_timeoz#TestSocketGreen.test_warn_get_timeo  s    ##CG,,A(555 

              GGIIIq66Q;;;;Q4=K//////r  N)r   r   r   r   
skip_greenr   r  r@   r}  r   rk  hasattrr   r  r  rp  r#   r!   rr  rr    s        !,#,#7 &		 	 	 
j111:M	N	N	N	0 	0 
O	N	0 
j111:M	N	N	N	0 	0 
O	N	0 	0 	0r#   rr  )!r   rZ   r_  rQ  platformr   rm  rz   r  unittestr   r5   r   r   	zmq.testsr   r   r   r   r	   python_implementationr  r
   r   r   boolenvironrf   rl  r	  r   rv  rr  rp  r#   r!   <module>r     s      				   



                



 R R R R R R R R R R R R R R%x%''--//69
(



#
#
%
%
0
0
;
;RZ^^D!!"" 'ttCr	$ r	$ r	$ r	$ r	$ r	$ r	$ r	$j   0w  0MMM0 0 0 0 0)Z 0 0 0 0 0 0  0  0  0r#   