o
    iZ                     @   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rcdnd	ZG d
d deZeresd dlZG d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                   @   sr  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u 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ed%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z d7d8 Z!e	j
e"d9dd:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(dFdG Z)e	j
e*re+pe,j-dHk pe"dIde	j.dJdK Z/dLdM Z0dS )N
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   P/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/zmq/tests/test_socket.pytest_create   s   zTestSocket.test_createc              
   C   s   d}|   ^}|tjA}|| |tj}|| d}|| | |}||ks1J W d    n1 s;w   Y  |j	dksGJ W d    n1 sQw   Y  |j	dks]J W d    n1 sgw   Y  |j	dkssJ d S )N
inproc://a   hiT)
r   r   r   PUSHr   PULLr   sendrecv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|v s-J | || | 	|}||ks@J W d    n1 sJw   Y  t
tj |j|tjd W d    n1 shw   Y  t
tj |j	tjd W d    n1 sw   Y  || W d    n1 sw   Y  W d    n1 sw   Y  |tj}|tj}||}d|t|v sJ |" || || | 	|}||ksJ || W d    n1 sw   Y  || t
tj |j|tjd W d    n	1 sw   Y  t
tj |j	tjd W d    n	1 s4w   Y  W d    n	1 sDw   Y  W d    n1 sTw   Y  W d    d S W d    d S 1 smw   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_contextr,   bind_contextr   r   r   !test_connectbind_context_managers7   s\   



 




  $z,TestSocket.test_connectbind_context_managersz
zmq.Socketc                 C   s   | j tj}| j dt|v sJ dt|vsJ W d    n1 s&w   Y  | j dt|v s7J dt|v s?J d S )Nz
(zmq.PUSH)r'   )contextr   r   r#   	_repr_clsr/   r   r   r   r   r   	test_repr_   s   zTestSocket.test_reprc                 C   sh   |   }|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   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   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      zTestSocket.test_bind_unicodec                 C   s   |  tj}|d d S )Ntcp://127.0.0.1:5555)r   r   r   r   r;   r   r   r   test_connect_unicodez   rL   zTestSocket.test_connect_unicodec              
   C   s   |   }|tj}z|d W n tjy, } z|jtjks"J W Y d }~nd }~ww z|d W n tjyO } z|jtjksEJ W Y d }~nd }~ww |	  |
  d S )Nztcp:*zrand://*)r   r   r   r   rI   ZMQErrorerrnor   r   r   r   )r   r   r   er   r   r   test_bind_to_random_port~   s    z#TestSocket.test_bind_to_random_portc                 C   s<   | j tj}| j| d}||_|tj|ksJ d S )Ns
   identity  )	r9   r   r   r$   socketsappendidentitygetr=   )r   r   identr   r   r   test_identity   s
   zTestSocket.test_identityc                 C   s>  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stJ td ||tj |j|d dd || ksJ |d |jddksJ dS )z2test setting/getting sockopts with unicode stringsu   téstutf16皙?   zlatin-1encodingN)create_bound_pairr   r   rE   send_unicoderecv_unicodeassertRaises	TypeError
setsockopt	SUBSCRIBEr=   setsockopt_unicoder>   getsockopt_unicoder   r   
getsockoptdecodetimesleepSNDMORE)r   topicrJ   r   identbidentu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s(J |t jd |t jdks9J |j|ks@J d|_|jdksJJ |t j	t j
ksUJ | t j|jt j	d |t j|jkskJ |t jt jksvJ |t j|jksJ |t jt jksJ g }i }t j}|jD ]}t||}	t|	tr|||	< qt jjD ]K}
|
jt jjjt jjjhvrq|
jdrqz||
}W n t jy } z|d|
d	| d
 W Y d}~qd}~ww |dkr|d|
d q|r| ddg|  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_STOPzgetsockopt(z	) raised .Nl        z=) returned a ridiculous value. It is probably the wrong type.
 )r   zmq_version_infor^   r   rE   rc   LINGERrg   hwmEVENTSPOLLOUTr   r   TYPEsocket_type	constants__all__getattr
isinstanceintSocketOption	_opt_type_OptTypeint64name
startswithrO   rT   failjoin)r   vdefault_hwmrJ   r   errorsbackrefr   r   valueoptnrQ   r   r   r   test_int_sockopts   sd   


$
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)r9   r   r   r   rS   rT   rc   r   r   r   rg   ra   rb   rd   r;   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J dS )ztest set/getsockopt roundtrip.rs   N)	r9   r   r   r   rS   rT   rc   r   rg   )r   rJ   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s:J |d|ksCJ |j|dd |jdd}||ksVJ dS )	ztest sending unicode objectsu   çπ§FcopyTutf8rY   r\   N)r^   r   PAIRrS   extendra   rb   r%   r_   r&   encoderh   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.J dS )z*check type on all frames in send_multipart   ar      bN)	r^   r   r   rS   r   ra   rb   send_multipartrecv_multipart)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sPJ |tju sWJ |js\J d
|_|jddgddd	}t|tjsqJ |jrvJ || | |}	tdD ]}
|jr ntd q|jdksJ |	dgksJ | |}	tdD ]}
|jr ntd q|jdksJ |	ddgksJ tjdddd	}|jjdksJ |j|dd}|j|dd}|jjdksJ |jdksJ |jdksJ | |}	|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s4J |j ~tdD ]}
|jrD ntd q<|jdksSJ |jdks[J 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:%irZ   s	   somethingFT)r   trackr   s   else
   s   againr   )r   N)r   r   getsocknamer   ri   rj   r9   r   r#   r$   rS   r   r   r%   r   MessageTracker_FINISHED_TRACKERdonecopy_thresholdr   r   rangeFrametrackerra   
ValueError)r   addrsockportifacer)   r*   p1p2r+   irG   r   r   r   test_tracker)  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   rc   rd   r%   r&   r   r   r   r   r   
test_closep  s   zTestSocket.test_closec                 C   s`   | 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)r9   r   r   DEALERrS   rT   lingerrg   r   fdr?   )r   r   r   r   r   r   	test_attr{  s   zTestSocket.test_attrc                 C   sp   | j tj}| j| zd|_W n	 ty   Y nw | d z|j W n
 ty0   Y d S w | d d S )Nfooz-bad setattr should have raised AttributeErrorz-bad getattr should have raised AttributeError)	r9   r   r   r   rS   rT   appleAttributeErrorr   r;   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J d|_|jdks'J |j}|dks0J 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|i | d S )Nrr   )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   rr   r   N)r   Socketr9   REPrS   rT   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)J qd S )Nr"   rq   rZ   )r^   r   r%   ri   rj   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sJ dS )z,s.close() after ctx.destroy() should be fineg{Gz?N)	r   r   r   r   destroyri   rj   r   r'   r   r   r   r   test_close_after_destroy  s   
z#TestSocket.test_close_after_destroyc                 C   s   |   \}}t  |t}|dksJ |ttj}|tjks#J d}|| |t}|tjks6J | |}|t}|dksFJ ||ksLJ d S )Nr   r"   )	r^   ri   pollPOLL_TIMEOUTr   r   r%   POLLINr&   )r   r)   r*   evtr+   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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+   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 d S  t j
yD } ztt j|jv s9J W Y d }~d S d }~ww )Nr   r   zipc://{}r)   r   )r   r   r   r9   r   r   rS   rT   r   formatrO   strstrerror)r   r   rQ   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 d   n1 s(w   Y  |j
jtjks6J t|j
}||v sAJ d| v sIJ dS )z3Display the ipc path in case of an ENOENT exceptionz/foo/barzipc://Nzno such file or directory)r9   r   r   r   rS   rT   r0   r1   rO   r   r   rP   ENOENTr   lower)r   r   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s&J |rNz	|j
dks0J W n	 ty:   Y nw z	|jdksCJ W n	 tyM   Y nw |  qd S )Nr   rq   r   )r   r   r   rv   rE   REQr   r9   r   r   sndhwmr   rcvhwmr   )r   zmq3styper   r   r   r   test_hwm  s$   
zTestSocket.test_hwmc                 C   s`   |  tj}t|}t|}|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sdcopyr   r   r   	test_copy  s   



zTestSocket.test_copyc                 C   sZ   |  tjtj\}}ttfD ]}t|d}||}|| |	 }||ks*J qd S )Nascii)
r^   r   r#   r$   
memoryview	bytearrayr   r   r%   r&   )r   r)   r*   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sJ |  tj}tj|}|j|u s-J |j|jks5J |j|jks=J t|}|j|u sIJ |j|jksQJ |	d d}|
| | |}||kshJ d S )NrM   r"   )r   r   r#   r   r   shadowr  r$   _shadow_objr   r%   r&   )r   rJ   r   r   s2s3sentr,   r   r   r   test_shadow  s"   




zTestSocket.test_shadowc           	      C   s   z
ddl m}m} W n ty   tdw | }||tj}||tj}tj	
|}tj	
|}|d |d |d | |}|dksNJ d S )Nr   )zctxzsocketzRequires pyczmqr!   r"   )pyczmqr  r  	Exceptionr   newr   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}|r1 nq!| | |	d | |}|dksGJ |d |	d |
d}|g ks\J d S )Nprefixcr   s   canary   s   prefixmessager   )r^   r   r   rE   	subscribePollerregisterr   r   r%   r   r&   unsubscribe)r   pubsubrJ   r   eventsr+   r   r   r   test_subscribe_method3  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y } ztd| d }~ww |  \}}z|j|dd |jdd}W n tyG } ztd| d }~ww t|}t|}	t	|	|ksXJ |	d |ks`J |	d |kshJ d S )Nr   l       zNot enough memory: %sFr   r   rr   )
osurandomMemoryErrorr   r^   r%   r&   ordr  len)
r   r   NbufrQ   r)   r*   r,   byteviewr   r   r   test_large_sendI  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.J |d	 s4J ||| ||}|d |d ksIJ |d	 rOJ d S )
Nc                 S   s8   g }| | dg  t| d d}|| |S )N
identitiescontentr   )r   rV   jsondumpsr   rT   )r+   framesr5  r   r   r   	serializef  s
   
z3TestSocket.test_custom_serialize.<locals>.serializec                 S   s*   | d d }t | d d}||dS )Nrr   r   )r4  r5  )r6  loadsrh   )r8  r4  r5  r   r   r   deserializem  s
   z5TestSocket.test_custom_serialize.<locals>.deserializer5  r   bee)r)   r*   r4  )r^   r   r   rv   send_serializedrecv_serialized)r   r)   r*   r9  r;  r+   r  r2r   r   r   test_custom_serializec  s    	

z TestSocket.test_custom_serialize)1r   r   r   r    r-   r8   r:   r<   rA   r   skipifr   rH   rK   rN   rR   rX   rp   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maxsizelarger3  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>  s   
 z.TestSocketGreen.test_timeout.<locals>.<lambda>rZ   )r^   geventspawn_laterTimeoutstartra   r&   kill)r   r*   gtimeoutr   rG  r   test_timeout  s   
zTestSocketGreen.test_timeoutRCVTIMEOzrequires RCVTIMEOrB   c                 C   sn   | j tj}tjdd}d|_W d    n1 sw   Y  |  t|dks,J |d j	t
ks5J d S )NTrecordr   r   r   )r9   r   r   r   warningscatch_warningsrcvtimeor   r.  categoryUserWarningr   r   wr   r   r   test_warn_set_timeo     z#TestSocketGreen.test_warn_set_timeoSNDTIMEOzrequires SNDTIMEOc                 C   sn   | j tj}tjdd}|j W d    n1 sw   Y  |  t|dks,J |d j	t
ks5J d S )NTrR  r   r   )r9   r   r   r   rT  rU  sndtimeor   r.  rW  rX  rY  r   r   r   test_warn_get_timeo  r\  z#TestSocketGreen.test_warn_get_timeoN)r   r   r   r   
skip_greenr   r   r:   rP  r   rA  hasattrr   r[  r_  r   r   r   r   rF    s    
rF  )!r   rP   r6  r*  platformr   rC  ri   rT  unittestr   r0   r   r   	zmq.testsr   r   r   r   r   python_implementationr   r	   r   r
   boolenvironrV   rB  r   r   rI  rF  r   r   r   r   <module>   s6       m