o
    iH%                     @   sz  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(G d9d: d:eZ)d;d< Z*dS )=zTest asyncio support    N)CancelledError)Process)markc                 C   s   t jS N)zaioContext)
event_loop r	   Q/var/www/edux/Edux_v2/venv/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_recv6   s   
r-   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'   )	rcvtimeor(   r   pytestraisesr   Againr)   r   	push_pullr!   r"   r+   r,   r$   r	   r	   r
   test_recv_timeoutC   s   
r8   SNDTIMEOzrequires SNDTIMEOc                    sT   | t j}d|_tt j |dI d H  W d    d S 1 s#w   Y  d S )Nr0   s   not going anywhere)r   r   sndtimeor3   r4   r5   r   )r   r   r	   r	   r
   test_send_timeoutR   s   
"r;   c                    sh   | \}}|  }| rJ d}||I d H  |I d H }| s$J | |ks,J ||ks2J d S )Nu   πøøπ)recv_stringr   send_stringr*   )r7   r!   r"   r#   msgr$   r	   r	   r
   test_recv_stringZ   s   
r?   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*   r7   r!   r"   r#   objr$   r	   r	   r
   test_recv_jsonf      

rI   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   rB   rC   )      timeout)rD   r   cancelr   sleeprE   rF   sysversion_infor3   r4   r   
exceptionspollwait_for)r7   r!   r"   r#   rH   r$   eventsr	   r	   r
   test_recv_json_cancelledr   s.   

rW   c                    r@   rA   )
recv_pyobjr   rE   
send_pyobjr*   rG   r	   r	   r
   test_recv_pyobj   rJ   rZ   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)r>   framesr\   r	   r	   r
   	serialize   s
   
z(test_custom_serialize.<locals>.serializec                 S   s*   | d d }t | d d}||dS )Nr]   )r[   r\   )r`   loadsdecode)rd   r[   r\   r	   r	   r
   deserialize   s
   z*test_custom_serialize.<locals>.deserializer\   rB   beer!   r"   r[   )r   DEALERROUTERsend_serializedrecv_serialized)r    re   ri   r!   r"   r>   r$   r2r	   r	   r
   test_custom_serialize   s"   rq   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 )Nr\   rB   rj   rk   s   not json)	r3   r4   	TypeErrorrn   r`   ra   r   ro   rg   )dealer_routerr!   r"   r>   r	   r	   r
   test_custom_serialize_error   s   "rt   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   DONTWAITr3   r4   r5   r   rT   r   )r7   pushpullr#   r>   r	   r	   r
   test_recv_dontwait   s   
rx   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   rO   r   r)   	cancelledr6   r	   r	   r
   test_recv_cancel   s   
rz   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   rM      r1   r   r'   )	rT   r   rP   r*   r   r)   r   POLLINr   )r7   r!   r"   r#   evtr$   r	   r	   r
   	test_poll   s    

r~   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://testr1   rM   r   r'   )r   r   r   r   r   r^   bindconnectr   Pollerregisterr|   rT   r   r)   r   )	socketsr   urlr!   r"   pollerr#   r}   r$   r	   r	   r
   test_poll_base_socket   s"   


r   c                    sX   | \}}|j dd}|  tdD ]}tdI d H  | r# nq| s*J d S )Nr{   rM   rB   r   )rT   closeranger   rP   ry   )r7   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wbr{   rM      xr1   )r   r   ospipefdopenr   r   r|   POLLOUTrT   rE   fileno
unregisterwriteflushreadr   )prw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(   )r>   rk   r	   r
   testE  s   z!test_multiple_loops.<locals>.testrK   
   rM   )r   r   new_event_looprun_until_completerU   r   )r7   r   iloopr	   rk   r
   test_multiple_loopsB  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   
underlyingr   )r   r   async_sr	   r	   r
   test_shadowP  s   

"r   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_taska  s   z5ProcessForTeardownTest.run.<locals>.never_ending_taskr{   rM   Fz,never_ending_task was completed unexpectedlyN)r   r   r   r   r   PAIRbind_to_random_portr   r   rU   r   TimeoutErrorr   )selfr   r   r   r   coror	   r	   r
   runZ  s   

zProcessForTeardownTest.runN)__name__
__module____qualname__r   r	   r	   r	   r
   r   Y  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   startaddfinalizer	terminatejoinexitcode)requestprocr	   r	   r
   test_process_teardownp  s   
r   )+__doc__r   r`   r   rQ   concurrent.futuresr   multiprocessingr   r3   r   r   zmq.asyncior   fixturer   r   r   r   r%   r-   skipifhasattrr8   r;   r?   rI   rW   rZ   rq   rt   rx   rz   r~   r   r   platform
startswithr   r   r   r   r   r	   r	   r	   r
   <module>   sT    
		

#

	