
    ^h                        S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKrS SKJr   S SKrS SKJr  S	r\R2                  " 5       S:H  r\R6                  " S\5        S r\R<                  " \SS9r\R<                  " \R@                  " 5       S:  SS9r!S r" " S S\5      r# " S S\#5      r$ " S S5      r%S r&g! \ a    S
r Nf = f)    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                     U $ N )xs    L/home/james-whalen/.local/lib/python3.13/site-packages/zmq/tests/__init__.py_idr   )   s    H    zDoesn't work on PyPy)reason)   zrequires zmq >= 4c                    [        U R                  S9nSUl        UR                  5         UR	                  US9  UR                  5       (       a4  S[        R                  R                  R                  l
        [        S5      eg)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   sf    chhAAHGGIFF7Fzz||.2		!!+M
 	
 r   c                   T  ^  \ rS rSr% SrSr\" \R                  R                  S5      =(       d    S5      r
\\R                     \S'   \S 5       r\S 5       r\S	 5       rS
 rS rU 4S jrU 4S jr\R.                  \R.                  S4S jrS rS rS rS rS rS rS rSr U =r!$ )BaseZMQTestCaseC   F
   ZMQ_TEST_TIMEOUT<   socketsc                     U R                   R                  R                  SS5      S   [        R                  SS5      S   :H  $ )N.   r   )	__class__
__module__split__name__selfs    r   _is_pyzmq_testBaseZMQTestCase._is_pyzmq_testI   s;    ~~((..sA6q9X^^CQR=STU=VVVr   c                 n    U R                   =(       a#    [        [        S5      =(       a    U R                  $ )NSIGALRM)r8   hasattrsignaltest_timeout_secondsr6   s    r   _should_test_timeout$BaseZMQTestCase._should_test_timeoutM   s/      *	**))	
r   c                 d    U R                   (       a  [        R                  $ [        R                  $ r   )r
   gzmqr"   r   r6   s    r   r"   BaseZMQTestCase.ContextU   s    ::<<;;r   c                 r    U R                   R                  U5      nU R                  R                  U5        U$ r   )r!   socketr.   append)r7   socket_typess      r   rE   BaseZMQTestCase.socket\   s-    LL,Ar   c                      [        SU S35      e)NzTest did not complete in z seconds)TimeoutError)r7   r   argss      r   _alarm_timeoutBaseZMQTestCase._alarm_timeouta   s    6wixHIIr   c                   > [         TU ]  5         U R                  (       a  [        (       d  [	        S5      eU R
                  R                  5       U l        / U l        U R                  (       ad  [        R                  " [        R                  [        U R                  U R                  5      5        [        R                  " U R                  5        g g )Nzrequires gevent)supersetUpr
   have_geventr   r"   instancer!   r.   r?   r=   r;   r   rM   r>   alarm)r7   r2   s    r   rQ   BaseZMQTestCase.setUpd   s    ::kk,--||,,.$$MM(;(;T=V=V W LL223 %r   c                   > U R                   (       a  [        R                  " S5        U R                  1nU R                  (       aY  U R                  R                  5       nUR                  UR                  5        UR                  S5        U R                  (       a  MY  U H  n [        X0R                  5        M     [        TU ]A  5         g ! [         a+    S [        R                  R                  R                  l        e f = f)Nr   )r?   r=   rT   r!   r.   popaddcloser'   teardown_timeout	Exceptionr   r    r"   r#   rP   tearDown)r7   contextssockr%   r2   s       r   r\   BaseZMQTestCase.tearDownr   s    $$LLOLL>ll<<##%DLL&JJqM lll CS"7"78  	  6:		!!))3s   &C5Dztcp://127.0.0.1c                 z   U R                   R                  U5      nUR                  [        R                  S5        UR                  U5      nU R                   R                  U5      nUR                  [        R                  S5        UR                  U SU 35        U R                  R                  XF/5        XF4$ )z/Create a bound socket pair using a random port.r   :)	r!   rE   
setsockoptr   LINGERbind_to_random_portconnectr.   extend)r7   type1type2	interfaces1ports2s          r   create_bound_pair!BaseZMQTestCase.create_bound_pair   s     \\  '
cjj!$%%i0\\  '
cjj!$


i[$()RH%vr   c                     UR                  U5        UR                  5       nUR                  U5        UR                  5       nU$ r   )sendrecv)r7   rj   rl   msgmsg2msg3s         r   	ping_pongBaseZMQTestCase.ping_pong   s3    
wwy
wwyr   c                     [         R                  c  [        S5      eUR                  U5        UR	                  5       nUR                  U5        UR	                  5       nU$ )NzNo json library)r	   jsonmodr   	send_json	recv_jsonr7   rj   rl   oo2o3s         r   ping_pong_jsonBaseZMQTestCase.ping_pong_json   sJ    ??",--
Q\\^
R\\^	r   c                     UR                  U5        UR                  5       nUR                  U5        UR                  5       nU$ r   )
send_pyobj
recv_pyobjr{   s         r   ping_pong_pyobjBaseZMQTestCase.ping_pong_pyobj   s5    
a]]_
b]]_	r   c                 &    U" U0 UD6  U R                  S5        g ! [        R                   a`  nU R                  UR                  US[        R                  " U5       S[        R                  " UR                  5       S35         S nAg S nAff = f)N Function did not raise any errorwrong error raised, expected '' got '')failr   ZMQErrorassertEqualerrnor7   r   funcrL   kwargses         r   assertRaisesErrno!BaseZMQTestCase.assertRaisesErrno   s    
	:$!&! II89 || 	0e1D0E F	ll177A 	s    BABBc           	      J   [         R                  " S5        [        R                  " U// / UR	                  SS5      S9u  pEn[        U5      S:  d   S5       e[        R                  UR                  SS5      -  US'   U(       a  UR                  OUR                  nU" S0 UD6$ )	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   selectrW   lenDONTWAITgetrecv_multipartrq   )r7   	multipartrE   r   rwr   rq   s           r   _select_recvBaseZMQTestCase._select_recv   s    
 	

3**fXr2vzz)Q7OPa1vz;;;z,,GQ)??w(1v$$v{{~f~r   c                 *    U R                   " SU40 UD6$ )z=call recv in a way that raises if there is nothing to receiveFr   r7   rE   r   s      r   rq   BaseZMQTestCase.recv   s      9&99r   c                 *    U R                   " SU40 UD6$ )zGcall recv_multipart in a way that raises if there is nothing to receiveTr   r   s      r   r   BaseZMQTestCase.recv_multipart   s      v888r   )r!   r.   )"r5   r3   __qualname____firstlineno__r
   rZ   intosenvironr   r>   r   r   Socket__annotations__propertyr8   r?   r"   rE   rM   rQ   r\   PAIRrm   ru   r   r   r   r   rq   r   __static_attributes____classcell__)r2   s   @r   r)   r)   C   s    Erzz~~.@AGRH#**W W 
 
  
J4( HHCHH8I::9 9r   r)   c                       \ rS rSrSrg)PollZMQTestCase   r   N)r5   r3   r   r   r   r   r   r   r   r      s    r   r   c                   2    \ rS rSrSrSrSrS rS rS r	Sr
g	)
	GreenTest   z/Mixin for making green versions of test classesTr+   c                    U[         R                  :X  a  [        S5      e U" U0 UD6  U R                  S5        g ! [         R                   aq    [
        R                  " 5       S   nU R                  UR                  US[         R                  " U5       S[         R                  " UR                  5       S35         g f = f)NzSkipping because we're green.r   r1   r   r   r   )	r   EAGAINr   r   r   sysexc_infor   r   r   s         r   r   GreenTest.assertRaisesErrno   s    CJJ:;;	:$!&! II89 || 	q!A0e1D0E F	ll177A	s   ; BC ?C c                 .   U R                   (       a  [        R                  " S5        U R                  1nU R                  (       aX  U R                  R                  5       nUR                  UR                  5        UR                  5         U R                  (       a  MX   [        R                  " U Vs/ s H#  n[        R                  " UR                  5      PM%     snU R                  SS9  g s  snf ! [        R                   a    [        S5      ef = f)Nr   T)r   raise_errorr   )r?   r=   rT   r!   r.   rW   rX   rY   geventjoinallspawnr   rZ   Timeoutr$   )r7   r]   r^   r%   s       r   r\   GreenTest.tearDown   s    $$LLOLL>ll<<##%DLL&JJL lll		NN3;<8Cchh'8<-- < ~~ 	Q 	s   C4 3*C/C4 /C4 4 Dc                     [        S5      eNzSkipping because we are green)r   r6   s    r   
skip_greenGreenTest.skip_green   s    677r   r   N)r5   r3   r   r   __doc__r
   rZ   r   r\   r   r   r   r   r   r   r      s    9E: (8r   r   c                    ^  U 4S jnU$ )Nc                 T   > U R                   (       a  [        S5      eT" U /UQ70 UD6$ r   )r
   r   )r7   rL   r   fs      r   skipping_test!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
   rB   rR   ImportErrorpython_implementationPYPYwarnDeprecationWarningr   skipif	skip_pypyzmq_version_inforequire_zmq_4r'   r)   r   r   r   r   r   r   <module>r      s    
   
      '  
 !K
 %%'61
 	_ KK%;<	C002T9BUV
G9h G9T	o 	+8 +8\K  Ks   C C C 