
    fD                        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 ej2                         dk(  Z ej6                  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&y# e$ r d
ZY w xY w)    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    M/var/www/cvtools/html/venv/lib/python3.12/site-packages/zmq/tests/__init__.py_idr   )   s    H    zDoesn't work on PyPy)reason)   zrequires zmq >= 4c                 
   t        | j                        }d|_        |j                          |j	                  |       |j                         r4dt        j                  j                  j                  _
        t        d      y)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   sd    chhAAHGGIFF7Fzz|.2		!!+M
 	
 r   c                   <    e Zd ZU dZdZ eej                  j                  d      xs 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                  j                  dd      d   t        j                  dd      d   k(  S )N.   r   )	__class__
__module__split__name__selfs    r   _is_pyzmq_testzBaseZMQTestCase._is_pyzmq_testI   s;    ~~((..sA6q9X^^CQR=STU=VVVr   c                 Z    | j                   xr t        t        d      xr | j                  S )NSIGALRM)r7   hasattrsignaltest_timeout_secondsr5   s    r   _should_test_timeoutz$BaseZMQTestCase._should_test_timeoutM   s/      *	**))	
r   c                 Z    | j                   rt        j                  S t        j                  S r   )r
   gzmqr"   r   r5   s    r   r"   zBaseZMQTestCase.ContextU   s    ::<<;;r   c                 r    | j                   j                  |      }| j                  j                  |       |S r   )r!   socketr-   append)r6   socket_typess      r   rA   zBaseZMQTestCase.socket\   s-    LL,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    6wixHIIr   c                    t         |           | j                  rt        st	        d      | j
                  j                         | _        g | _        | j                  rbt        j                  t        j                  t        | j                  | j                               t        j                  | j                         y y )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,--||,,.$$MM(;(;T=V=V W LL223 %r   c                    | j                   rt        j                  d       | j                  h}| j                  rS| j                  j                         }|j                  |j                         |j                  d       | j                  rS|D ]  }	 t        || j                          t        | A          y # t        $ r+ d t        j                  j                  j                  _         w xY w)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    $$LLOLL>ll<<##%DLL&JJqM ll  	CS$"7"78	 	  6:		!!))3s   B<<4C0ztcp://127.0.0.1c                 ~   | j                   j                  |      }|j                  t        j                  d       |j                  |      }| j                   j                  |      }|j                  t        j                  d       |j                  | d|        | j                  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     \\  '
cjj!$%%i0\\  '
cjj!$


i[$()RH%2vr   c                     |j                  |       |j                         }|j                  |       |j                         }|S r   )sendrecv)r6   rb   rd   msgmsg2msg3s         r   	ping_pongzBaseZMQTestCase.ping_pong   s3    
wwy
wwyr   c                     t         j                  t        d      |j                  |       |j	                         }|j                  |       |j	                         }|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   sJ    ??",--
Q\\^
R\\^	r   c                     |j                  |       |j                         }|j                  |       |j                         }|S r   )
send_pyobj
recv_pyobjrq   s         r   ping_pong_pyobjzBaseZMQTestCase.ping_pong_pyobj   s5    
a]]_
b]]_	r   c                     	  ||i | | j                  d       y # t        j                  $ r^}| j                  |j                  |dt        j                  |       dt        j                  |j                         d       Y d }~y 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    
	:$!&! II89 || 	0e1D0E F	ll177A 	s    BABBc           	      p   t        j                         dk\  rt        j                  d       t        j                  |gg g |j                  dd            \  }}}t        |      dkD  sJ d       t         j                  |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 receive)   r0   r   g?r      r   r   zShould have received a messageflagsr   )r   zmq_version_infotimesleepselectrP   lenDONTWAITgetrecv_multipartrh   )r6   	multipartrA   r   rwr   rh   s           r   _select_recvzBaseZMQTestCase._select_recv   s    !Y. JJsO**fXr2vzz)Q7OP1a1vz;;;z,,GQ)??w(1v$$v{{~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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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rzz~~.@AGRH#**W W 
 
  
J4( HHCHH8I::9r   r)   c                       e Zd Zy)PollZMQTestCaseN)r4   r2   r   r   r   r   r   r      s    r   r   c                   *    e Zd ZdZdZdZd Zd Zd Zy)	GreenTestz/Mixin for making green versions of test classesTr*   c                 |   |t         j                  k(  rt        d      	  ||i | | j                  d       y # t         j                  $ rn t        j                         d   }| j                  |j                  |dt        j                  |       dt        j                  |j                         d       Y y 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    CJJ:;;	:$!&! II89 || 	q!A0e1D0E F	ll177A	s   : A>B;:B;c                    | j                   rt        j                  d       | j                  h}| j                  rR| j                  j                         }|j                  |j                         |j                          | j                  rR	 t        j                  |D cg c]!  }t        j                  |j                        # c}| j                  d       y c c}w # t        j                  $ r t        d      w xY w)Nr   T)r   raise_errorr   )r=   r;   rN   r!   r-   rP   rQ   rR   geventjoinallspawnr   rS   Timeoutr$   )r6   rV   rW   r%   s       r   rU   zGreenTest.tearDown   s    $$LLOLL>ll<<##%DLL&JJL ll		NN3;<Cchh'<-- < ~~ 	Q 	s   C! !&CC! C! !D c                     t        d      NzSkipping because we are green)r   r5   s    r   
skip_greenzGreenTest.skip_green   s    677r   N)	r4   r2   r   __doc__r
   rS   r   rU   r   r   r   r   r   r      s    9E: (8r   r   c                       fd}|S )Nc                 J    | j                   rt        d       | g|i |S r   )r
   r   )r6   rG   r   fs      r   skipping_testz!skip_green.<locals>.skipping_test  s+    :::;;T+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_pypyr   require_zmq_4r'   r)   r   r   r   r   r   r   <module>r      s    
   
      '  
 !K
 &x%%'61
 _ DKK%;<	0C002T9BUV
H9h H9V	o 	+8 +8\M  Ks   C C%$C%