
    Mh                        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m	Z	 d dl
mZ d dlmZ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 d	Zn# e$ r d
ZY nw xY w ej                    dk    Z ej        de           d Z ej        ed          Z ej         ej                     dk     d          Z!d Z" G d de          Z# G d de#          Z$ G d d          Z%d Z&dS )    N)partial)Thread)List)SkipTestTestCase)mark)jsonapi)greenTFPyPyzYzmq.tests is deprecated in pyzmq 25, we recommend managing your own contexts and sockets.c                     | S N )xs    R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/zmq/tests/__init__.py_idr   )   s    H    zDoesn't work on PyPy)reason)   zrequires zmq >= 4c                    t          | j                  }d|_        |                                 |                    |           |                                r*dt          j        j        j	        _
        t          d          dS )z"Terminate a context with a timeout)targetTtimeoutN?context could not terminate, open sockets likely remain in test)r   termdaemonstartjoinis_alivezmqsugarcontextContext	_instanceRuntimeError)ctxr   ts      r   term_contextr'   5   s{    chAAHGGIIIFF7Fzz|| 
.2	!+M
 
 	

 
r   c                   6    e Zd ZU dZdZ eej                            d          pd          Z	e
ej                 ed<   ed             Zed             Zed             Zd	 Zd
 Z fdZ fdZej        ej        dfdZd Zd Zd Zd Zd Zd Zd Z xZS )BaseZMQTestCaseF
   ZMQ_TEST_TIMEOUT<   socketsc                     | j         j                            dd          d         t                              dd          d         k    S )N.   r   )	__class__
__module__split__name__selfs    r   _is_pyzmq_testzBaseZMQTestCase._is_pyzmq_testI   s<    ~(..sA66q9X^^CQR=S=STU=VVVr   c                 H    | j         ot          t          d          o| j        S )NSIGALRM)r7   hasattrsignaltest_timeout_secondsr5   s    r   _should_test_timeoutz$BaseZMQTestCase._should_test_timeoutM   s,      *	***)	
r   c                 @    | j         rt          j        S t          j        S r   )r
   gzmqr"   r   r5   s    r   r"   zBaseZMQTestCase.ContextU   s    : 	<;r   c                 n    | j                             |          }| j                            |           |S r   )r!   socketr-   append)r6   socket_typess      r   rA   zBaseZMQTestCase.socket\   s2    L,,Ar   c                 (    t          d| d          )NzTest did not complete in z seconds)TimeoutError)r6   r   argss      r   _alarm_timeoutzBaseZMQTestCase._alarm_timeouta   s    HwHHHIIIr   c                 ~   t                                                       | j        rt          st	          d          | j                                        | _        g | _        | j	        rRt          j
        t          j        t          | j        | j                             t          j        | j                   d S d S )Nzrequires gevent)supersetUpr
   have_geventr   r"   instancer!   r-   r=   r;   r9   r   rH   r<   alarm)r6   r1   s    r   rK   zBaseZMQTestCase.setUpd   s    : 	.k 	.,---|,,..$ 	4M(;T=V W W   L233333	4 	4r   c                    | j         rt          j        d           | j        h}| j        rO| j                                        }|                    |j                   |                    d           | j        O|D ]B}	 t          || j	                   # t          $ r d t          j        j        j        _         w xY wt                                                       d S )Nr   )r=   r;   rN   r!   r-   popaddcloser'   teardown_timeout	Exceptionr   r    r"   r#   rJ   tearDown)r6   contextssockr%   r1   s       r   rU   zBaseZMQTestCase.tearDownr   s    $ 	LOOOL>l 	<##%%DLL&&&JJqMMM l 	  	 	CS$"78888   6:	!)3
 	s    B'B=ztcp://127.0.0.1c                    | j                             |          }|                    t          j        d           |                    |          }| j                             |          }|                    t          j        d           |                    | d|            | j                            ||g           ||fS )z/Create a bound socket pair using a random port.r   :)	r!   rA   
setsockoptr   LINGERbind_to_random_portconnectr-   extend)r6   type1type2	interfaces1ports2s          r   create_bound_pairz!BaseZMQTestCase.create_bound_pair   s     \  ''
cj!$$$%%i00\  ''
cj!$$$


i(($(()))RH%%%2vr   c                     |                     |           |                                }|                     |           |                                }|S r   )sendrecv)r6   rb   rd   msgmsg2msg3s         r   	ping_pongzBaseZMQTestCase.ping_pong   s?    
wwyy
wwyyr   c                     t           j        t          d          |                    |           |                                }|                    |           |                                }|S )NzNo json library)r	   jsonmodr   	send_json	recv_jsonr6   rb   rd   oo2o3s         r   ping_pong_jsonzBaseZMQTestCase.ping_pong_json   sY    ?",---
Q\\^^
R\\^^	r   c                     |                     |           |                                }|                     |           |                                }|S r   )
send_pyobj
recv_pyobjrq   s         r   ping_pong_pyobjzBaseZMQTestCase.ping_pong_pyobj   sE    
a]]__
b]]__	r   c                    	  ||i | |                      d           d S # t          j        $ rW}|                     |j        |dt          j        |           dt          j        |j                   d           Y d }~d S d }~ww xY w)N Function did not raise any errorwrong error raised, expected '' got '')failr   ZMQErrorassertEqualerrnor6   r   funcrG   kwargses         r   assertRaisesErrnoz!BaseZMQTestCase.assertRaisesErrno   s    
	:D$!&!!! II899999 | 	 	 	e1D1D  	l17          	s   ! BABBc           	      B   t          j        d           t          j        |gg g |                    dd                    \  }}}t          |          dk    s
J d            t          j        |                    dd          z  |d<   |r|j        n|j	        } |di |S )	zIcall recv[_multipart] in a way that raises if there is nothing to receiveg?r      r   r   zShould have received a messageflagsr   )
timesleepr   selectrP   lenDONTWAITgetrecv_multipartrh   )r6   	multipartrA   r   rwr   rh   s           r   _select_recvzBaseZMQTestCase._select_recv   s    
 	
3*fXr2vzz)Q7O7OPPP1a1vvzzz;zzz,GQ)?)??w(1Bv$$v{t~~f~~r   c                       | j         d|fi |S )z=call recv in a way that raises if there is nothing to receiveFr   r6   rA   r   s      r   rh   zBaseZMQTestCase.recv   s     t 99&999r   c                       | j         d|fi |S )zGcall recv_multipart in a way that raises if there is nothing to receiveTr   r   s      r   r   zBaseZMQTestCase.recv_multipart   s     t v88888r   ) r4   r2   __qualname__r
   rS   intosenvironr   r<   r   r   Socket__annotations__propertyr7   r=   r"   rA   rH   rK   rU   PAIRre   rl   ru   ry   r   r   rh   r   __classcell__)r1   s   @r   r)   r)   C   s        E3rz~~.@AAGRHH#*W W XW 
 
 X
   X  
J J J4 4 4 4 4    ( HCH8I         : : :  : : :9 9 9 9 9 9 9r   r)   c                       e Zd ZdS )PollZMQTestCaseN)r4   r2   r   r   r   r   r   r      s        Dr   r   c                   ,    e Zd ZdZdZdZd Zd Zd ZdS )	GreenTestz/Mixin for making green versions of test classesTr*   c                 v   |t           j        k    rt          d          	  ||i | |                     d           d S # t           j        $ ri t          j                    d         }|                     |j        |dt          j        |           dt          j        |j                   d           Y d S w xY w)NzSkipping because we're green.r{   r0   r|   r}   r~   )	r   EAGAINr   r   r   sysexc_infor   r   r   s         r   r   zGreenTest.assertRaisesErrno   s    CJ:;;;	:D$!&!!! II899999 | 	 	 	q!Ae1D1D  	l17       	s   A   A4B87B8c                    | j         rt          j        d           | j        h}| j        rN| j                                        }|                    |j                   |                                 | j        N	 t          j	        d |D             | j
        d           d S # t          j        $ r t          d          w xY w)Nr   c                 @    g | ]}t          j        |j                  S r   )geventspawnr   ).0r%   s     r   
<listcomp>z&GreenTest.tearDown.<locals>.<listcomp>   s$    <<<Cch''<<<r   T)r   raise_errorr   )r=   r;   rN   r!   r-   rP   rQ   rR   r   joinallrS   Timeoutr$   )r6   rV   rW   s      r   rU   zGreenTest.tearDown   s    $ 	LOOOL>l 	<##%%DLL&&&JJLLL l 			N<<8<<<-      
 ~ 	 	 	Q  	s   :&B" "Cc                      t          d          NzSkipping because we are green)r   r5   s    r   
skip_greenzGreenTest.skip_green   s    6777r   N)	r4   r2   r   __doc__r
   rS   r   rU   r   r   r   r   r   r      sR        99E: : :   (8 8 8 8 8r   r   c                       fd}|S )Nc                 H    | j         rt          d           | g|R i |S r   )r
   r   )r6   rG   r   fs      r   skipping_testz!skip_green.<locals>.skipping_test   s<    : 	,:;;;1T+D+++F+++r   r   )r   r   s   ` r   r   r      s$    , , , , , r   )'r   platformr;   r   r   warnings	functoolsr   	threadingr   typingr   unittestr   r   pytestr   r   	zmq.utilsr	   r   r
   r?   rL   ImportErrorpython_implementationPYPYwarnDeprecationWarningr   skipif	skip_pypyzmq_version_inforequire_zmq_4r'   r)   r   r   r   r   r   r   <module>r      s6   
			   



                     ' ' ' ' ' ' ' '       



      MMM!!!!!!KK   KKK &x%''61
 _     DK%;<<<	0C022T9BUVVV
 
 
G9 G9 G9 G9 G9h G9 G9 G9T	 	 	 	 	o 	 	 	+8 +8 +8 +8 +8 +8 +8 +8\    s   A AA