o
    tf	'                     @   s  d 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mZ ddl	Z	ddl	m
Z
 ddlZddlmZ e	jdd Zdd	 Zd
d Zdd Zd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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/d0 Z#e	j
jej$%d1d2dd3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)G d;d< d<eZ*d=d> Z+dS )?zTest asyncio support    N)CancelledError)Process)markc                 C   s   t jS N)zaioContext)Z
event_loop r   _/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/zmq/tests/test_asyncio.pyr      s   r   c                 C   sB   |  tj}t|tjsJ W d    d S 1 sw   Y  d S r   )socketzmqPUSH
isinstancer   Socket)contextsr   r   r	   test_socket_class   s   "r   c                 C   sP   t jj }t j }|  |  t|t ju sJ t|t jju s&J d S r   )r   asyncior   instancetermtype)r   actxctxr   r   r	   test_instance_subclass_first   s   
r   c              	   C   s   t j :}t|t ju sJ t jj }t|t jju s J W d    n1 s*w   Y  W d    d S W d    d S 1 sBw   Y  d S r   )r   r   r   r   r   )r   r   r   r   r   r	   test_instance_subclass_second'   s   "r   c                    sT   |t jt j\}}| }| rJ |dI d H  |I d H }|dgks(J d S )N   hi)r   r   PULLrecv_multipartdonesend)r   create_bound_pairabfrecvdr   r   r	   test_recv_multipart.   s   
r$   c                    s   | t jt j\}}| }| }| rJ | rJ |ddgI d H  |I d H }| s3J | dks;J |dksAJ d S Nr      there)r   r   r   recvr   send_multipartresult)r   r    r!   f1f2r#   r   r   r	   	test_recv7   s   
r,   ZRCVTIMEOzrequires RCVTIMEO)reasonc                    s   | \}}d|_ | }d|_ | }ttj |I d H  W d    n1 s)w   Y  |ddgI d H  |I d H }| sCJ |ddgksKJ d S )Nd     r   r&   )	Zrcvtimeor'   r   pytestraisesr   Againr(   r   	push_pullr    r!   r*   r+   r#   r   r   r	   test_recv_timeoutD   s   
r5   ZSNDTIMEOzrequires SNDTIMEOc                    sT   | t j}d|_tt j |dI d H  W d    d S 1 s#w   Y  d S )Nr.   s   not going anywhere)r   r   Zsndtimeor0   r1   r2   r   )r
   r   r   r   r	   test_send_timeoutS   s   
"r6   c                    sh   | \}}|  }| rJ d}||I d H  |I d H }| s$J | |ks,J ||ks2J d S )Nu   πøøπ)Zrecv_stringr   Zsend_stringr)   )r4   r    r!   r"   msgr#   r   r   r	   test_recv_string[   s   
r8   c                    n   | \}}|  }| rJ tdd}||I d H  |I d H }| s'J | |ks/J ||ks5J d S N   r    )	recv_jsonr   dict	send_jsonr)   r4   r    r!   r"   objr#   r   r   r	   test_recv_jsong      

rB   c                    s*  | \}}|  }| rJ |  tdI d H  tdd}||I d H  tjdk rHt	
t |I d H }W d    n1 sBw   Y  nt	
tjj |I d H }W d    n1 s_w   Y  | sjJ |jddI d H }|swJ tdI d H  |  }tj|ddI d H }||ksJ d S )Nr   r;   r<   )      timeout)r=   r   cancelr   sleepr>   r?   sysversion_infor0   r1   r   
exceptionspollwait_for)r4   r    r!   r"   rA   r#   eventsr   r   r	   test_recv_json_cancelleds   s.   

rP   c                    r9   r:   )Z
recv_pyobjr   r>   Z
send_pyobjr)   r@   r   r   r	   test_recv_pyobj   rC   rQ   c                    s   dd }dd }| t jt j\}}ddddi}|||I d H  ||I d H }|d |d ks4J |d	 s:J |||I d H  ||I d H }|d |d ksUJ |d	 r[J d S )
Nc                 S   s8   g }| | dg  t| d d}|| |S )N
identitiescontentutf8)extendgetjsondumpsencodeappend)r7   framesrS   r   r   r	   	serialize   s
   
z(test_custom_serialize.<locals>.serializec                 S   s*   | d d }t | d d}||dS )NrT   )rR   rS   )rW   loadsdecode)r[   rR   rS   r   r   r	   deserialize   s
   z*test_custom_serialize.<locals>.deserializerS   r;   beer    r!   rR   )r   ZDEALERZROUTERsend_serializedrecv_serialized)r   r\   r`   r    r!   r7   r#   r2r   r   r	   test_custom_serialize   s"   rf   c                    s   | \}}ddddi}t t |ttjI d H  W d    n1 s&w   Y  |dI d H  t t |tjI d H  W d    d S 1 sMw   Y  d S )NrS   r;   ra   rb   s   not json)	r0   r1   	TypeErrorrc   rW   rX   r   rd   r^   )Zdealer_routerr    r!   r7   r   r   r	   test_custom_serialize_error   s   "rh   c                    s   | \}}| tj}ttj |I d H  W d    n1 s!w   Y  |dI d H  | I d H  | tj}| sAJ |I d H }|dksLJ d S )Ns   ping)	r'   r   ZDONTWAITr0   r1   r2   r   rM   r   )r4   pushpullr"   r7   r   r   r	   test_recv_dontwait   s   
rk   c                    s   | \}}|  }| }| sJ | sJ | rJ |ddgI d H  |I d H }| s4J | s:J |ddgksBJ d S r%   )r'   r   rH   r   r(   	cancelledr3   r   r   r	   test_recv_cancel   s   
rm   c                    s   | \}}|j dd}tdI d H  | dksJ |j dd}| r'J |I d H }|dks2J |j dd}| r>J |ddgI d H  |I d H }|tjksTJ | I d H }|ddgkscJ d S )Nr   rF      r/   r   r&   )	rM   r   rI   r)   r   r(   r   POLLINr   )r4   r    r!   r"   evtr#   r   r   r	   	test_poll   s    

rq   c           	         s   t  }d}|t j}|t j}| ||g || || t	 }|
|t j |jdd}| r;J |ddg |I d H }||t jfgksQJ | }|ddgks]J d S )Nzinproc://testr/   rF   r   r&   )r   r   r
   r   r   rU   bindconnectr   Pollerregisterro   rM   r   r(   r   )	socketsr   urlr    r!   Zpollerr"   rp   r#   r   r   r	   test_poll_base_socket   s"   


rx   c                    sX   | \}}|j dd}|  tdD ]}tdI d H  | r# nq| s*J d S )Nrn   rF   r;   r   )rM   closeranger   rI   rl   )r4   r    r!   r"   _r   r   r	   test_poll_on_closed_socket  s   r|   winz)Windows does not support polling on filesc                     s  t  } t \}}t|d}t|d}| |tj | |tj | j	ddI d H }t
|}| |vs:J | |v sBJ ||  tjksMJ | | |d |  | j	ddI d H }t
|}| |v spJ ||  tjks{J |ddksJ |  |  d S )Nrbwbrn   rF      xr/   )r   rt   ospipefdopenru   r   ro   POLLOUTrM   r>   fileno
unregisterwriteflushreadry   )prwZevtsr   r   r	   test_poll_raw"  s,   

r   c                    sN   | \  fdd}t dD ]}t }|tj| dd |  qd S )Nc                     s0     dI d H   I d H } | dksJ d S )Ns   buf)r   r'   )r7   rb   r   r	   testF  s   z!test_multiple_loops.<locals>.testrD   
   rF   )rz   r   new_event_looprun_until_completerN   ry   )r4   r   iloopr   rb   r	   test_multiple_loopsC  s   
r   c                  C   st   t  ,} | t j}t|}t|tjsJ |j|jks J |j|jks(J W d    d S 1 s3w   Y  d S r   )	r   r   r
   r   r   r   r   Z
underlyingr   )r   r   Zasync_sr   r   r	   test_shadowQ  s   

"r   c               	      s   t j } | ` | t jA}t|jdksJ tdD ]}t|j	dt j
jd}|  tdI d H  qtdI d H  t|jdksIJ W d    n1 sSw   Y  W d    d S W d    d S 1 skw   Y  d S )Nr   r   r/   )rG   flagsg?)r   r   r   r
   r   lenZ_recv_futuresrz   ensure_futurerM   Z	PollEventro   rH   rI   )r   r   r   r"   r   r   r	   test_poll_leakZ  s   
Pr   c                   @   s   e Zd Zdd ZdS )ProcessForTeardownTestc                 C   s   t j }|tj}|d dd }t }tj	||dd}zz|
| W n
 tjy3   Y nw J dW |  dS |  w )	z;Leave context, socket and event loop upon implicit disposalztcp://127.0.0.1c                    s   |   I d H  d S r   )r'   )r
   r   r   r	   never_ending_tasko  s   z5ProcessForTeardownTest.run.<locals>.never_ending_taskrn   rF   Fz,never_ending_task was completed unexpectedlyN)r   r   r   r
   r   ZPAIRZbind_to_random_portr   r   rN   r   TimeoutErrorry   )selfr   r
   r   r   coror   r   r	   runh  s   

zProcessForTeardownTest.runN)__name__
__module____qualname__r   r   r   r   r	   r   g  s    r   c                 C   sT   t  }|  | |j |d |jd usJ d|jdks(J d|j d S )Nr   zprocess teardown hangsr   zPython process died with code )r   startZaddfinalizer	terminatejoinexitcode)requestprocr   r   r	   test_process_teardown~  s   
r   ),__doc__r   rW   r   rJ   concurrent.futuresr   multiprocessingr   r0   r   r   Zzmq.asyncior   Zfixturer   r   r   r   r$   r,   Zskipifhasattrr5   r6   r8   rB   rP   rQ   rf   rh   rk   rm   rq   rx   r|   platform
startswithr   r   r   r   r   r   r   r   r   r	   <module>   sV    
		

#

	