
    EfG,                         d dl Z d dlZd dlZ	 d dlmZ eZd dlZd dlZd dlm	Z	m
Z
mZmZ dZer ee      Z ee      Z ee      ez
  Zd Z G d de
      Zy# e$ r dZY Kw xY w)    N)getrefcount)PYPYBaseZMQTestCaseSkipTest	skip_pypy   xc                     t         j                  dk  rd}nd}t        d      D ]*  }t        |       ||z   k  r yt	        j
                  d       , y)zwait for refcount on an object to drop to an expected value

    Necessary because of the zero-copy gc thread,
    which can take some time to receive its DECREF message.
    )            2   Ng?)sysversion_inforangegrctimesleep)objrcmy_refsis       8/usr/lib/python3/dist-packages/zmq/tests/test_message.pyawait_gcr      sN     '!2Y s8rG|#

4	    c                        e Zd Z fdZed        Zd Zd Zd Zd Z	ed        Z
ed        Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Z xZS )	TestFramec                 j    t         |           t        d      D ]  }t        j                           y )Nr
   )supertearDownr   gccollect)selfr   	__class__s     r   r    zTestFrame.tearDown2   s*    q 	AJJL	r   c                     t        dd      D ]a  }d|z  t        z  }t        |      }t        j                  |d      }t        |      |dz   k(  sJ ~t        ||       t        |      |k(  sJ ~c y)z/Message above 30 bytes are never copied by 0MQ.      r   FcopyN)r   xr   zmqFramer   )r#   r   sr   ms        r   test_above_30zTestFrame.test_above_307   st     q" 	AA
AQB		!%(Aq6R!V###QOq6R<<	r   c                     t        d      D ]E  }d|z  t        z  }t        j                  |      }t	        |      }|j                         }||k(  rEJ  y)z+Test the str representations of the Frames.r'   r   N)r   r*   r+   r,   strencode)r#   r   r-   r.   m_strm_str_bs         r   test_strzTestFrame.test_strD   sO    r 	 AA
A		!AFEllnG<<	 r   c                     t        dd      D ]\  }d|z  t        z  }t        j                  |      }|j                  }||j                  k(  sJ t
        s||usJ ||j                  u r\J  y)zTest the Frame.bytes property.r   r'   r   N)r   r*   r+   r,   bytesr   )r#   r   r-   r.   bs        r   
test_byteszTestFrame.test_bytesM   si    q" 		 AA
A		!AA<<z!z<<		 r   c                 
   d}| j                  t        t        j                  |       t	        d      D ]N  }d|z  dz  }t        j                  |j                  d            }||j                  j                  d      k(  rNJ  y)z/Test the unicode representations of the Frames.asdfr'   r      §utf8N)assertRaises	TypeErrorr+   r,   r   r2   r7   decode)r#   r-   r   r.   s       r   test_unicodezTestFrame.test_unicodeZ   so    )SYY2r 	/AAA		!((6*+Av....	/r   c                     t        d      D ]<  }d|z  t        z  }t        j                  |      }t	        |      t	        |      k(  r<J  y)zTest the len of the Frames.r'   r   N)r   r*   r+   r,   len)r#   r   r-   r.   s       r   test_lenzTestFrame.test_lenc   sE    r 	$AA
A		!Aq6SV###	$r   c                    t        dd      D ].  }d|z  t        z  }t        |      x}}t        j                  |d      }|dz  }t        |      |k(  sJ t        j
                  |      }|dz  }t        |      |k(  sJ |j                  }t        |      |k(  sJ |t        |      j                         k(  sJ |t        |      k(  sJ ||j                  k(  sJ |t        |      k(  sJ ~t        |      |k(  sJ ~|dz  }t        |      |k(  sJ ~|dz  }t        ||       t        |      |k(  sJ ||k(  sJ ~1 y)z-Run through a ref counting cycle with a copy.r&   r'   r   Fr(   r   Nr   r*   r   r+   r,   r)   bufferr1   r2   r7   r   r#   r   r-   r   rc_0r.   m2bufs           r   test_lifecycle1zTestFrame.test_lifecycle1j   sK    q" 	AA
AAB		!%(A!GBq6R<<1B!GBq6R<< ))Cq6R<<A'''b	>!><<c
?"? q6R<<!GBq6R<<!GBQOq6R<<::?	r   c                    t        dd      D ]?  }d|z  t        z  }t        |      x}}t        j                  |d      }|dz  }t        |      |k(  sJ t        j
                  |      }|dz  }t        |      |k(  sJ |j                  }t        |      |k(  sJ |t        |      j                         k(  sJ |t        |      k(  sJ ||j                  k(  sJ ||j                  k(  sJ |t        |      k(  sJ ~t        |      |k(  sJ ~|dz  }t        |      |k(  sJ ~|dz  }t        ||       t        |      |k(  sJ ||k(  sJ ~B y)z7Run through a different ref counting cycle with a copy.r&   r'   r   Fr(   r   NrF   rH   s           r   test_lifecycle2zTestFrame.test_lifecycle2   s[    q" 	AA
AAB		!%(A!GBq6R<<1B!GBq6R<< ((Cq6R<<A'''b	>!>= =<<c
?"? q6R<<!GBq6R<<!GBQOq6R<<::=	r   c                 v   t        j                  ddd      }|j                  j                  rJ t        j                  |      }|j                  rJ ~t        d      D ]  }t        j                           t        d      D ]%  }|j                  r nt        j                  d       ' |j                  sJ y )N   asdfFTr)   trackr
   
   皙?)
r+   r,   trackerdoneMessageTrackerr   r!   r"   r   r   )r#   r.   pmr   s       r   test_trackerzTestFrame.test_tracker   s    IIgE699>>!!"77{q 	AJJL	r 	AwwJJsO	 wwwr   c                     t        j                  dd      }|j                  d k(  sJ t        j                  |      }|j                  d k(  sJ | j	                  t
        t         j                  |       y )NrP   F)rR   )r+   r,   rU   r)   r>   
ValueErrorrW   )r#   r.   rJ   s      r   test_no_trackerzTestFrame.test_no_tracker   s[    IIgU+yyD   YYq\zzT!!!*c&8&8!<r   c                 z   t        j                  ddd      }t        j                  ddd      }t        j                  ||      }|j                  j                  rJ |j                  rJ | j                  t         j                  |j                  d       ~t        d      D ]  }t        j                           | j                  t         j                  |j                  d       |j                  rJ ~t        d      D ]  }t        j                           |j                  d      J |j                  sJ y )NrP   FTrQ   s   whodarT   r
   )r+   r,   rW   rU   rV   r>   NotDonewaitr   r!   r"   )r#   r.   rJ   mtr   s        r   test_multi_trackerzTestFrame.test_multi_tracker   s    IIgE6YYxe482&99>>!!77{#++rww4q 	AJJL	#++rww477{q 	AJJL	wws|###wwwr   c                 `    dj                         }t        j                  t        |             y)ztest using a buffer as input8   §§¶•ªº˜µ¬˚…∆˙åß∂©œ∑´†≈ç√N)r2   r+   r,   
memoryview)r#   inss     r   test_buffer_inzTestFrame.test_buffer_in   s     HOOQ		*S/"r   c                     | j                  t        t        j                  d       | j                  t        t        j                  t	                      y)ztest using a bad objectr&   N)r>   r?   r+   r,   object)r#   s    r   test_bad_buffer_inzTestFrame.test_bad_buffer_in   s0    )SYY2)SYY9r   c                     dj                         }t        j                  |      }|j                  }t	        |t
              sJ ||j                  u sJ |j                  |j                  u sJ y)zreceiving buffered outputrc   N)r2   r+   r,   rG   
isinstancerd   )r#   re   r.   outbs       r   test_buffer_outzTestFrame.test_buffer_out   s^    HOOQIIcNxx$
+++qxxxx188###r   c                 r   dj                         }t        |      }t        j                  |      }|j                  }|j
                  dk(  sJ |j                  |fk(  sJ |j                         |k(  sJ t        |      }|j
                  dk(  sJ |j                  |fk(  sJ |j                         |k(  sJ y)zmemoryview shape inforc   r   N)	r2   rC   r+   r,   rG   ndimshapetobytesrd   )r#   datanfview1view2s         r   test_memoryview_shapezTestFrame.test_memoryview_shape   s    IPPRIIIdOzzQ{{qd"""}}$&&&1zzQ{{qd"""}}$&&&r   c                    | j                  t        j                  t        j                        \  }}d}t        j                  |      }||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ t        d      D ]  }|j                         }||k(  rJ  ||j                  k(  sJ y)z9ensure that a message remains intact after multiple sendss   messageFr(   rT   T   N)
create_bound_pairr+   PAIRr,   r7   sendr   r   r   recv)r#   ar8   r-   r.   r   rs          r   test_multisendzTestFrame.test_multisend   s)   %%chh91IIaLAGG||	qu

3AGG||	qu

3AGG||	qt

3AGG||	qt

3AGG||q 	AA6M6	 AGG||r   c                     d}t        |       t        j                  |      }|j                  }|j	                         }||k(  sJ |j
                  |k(  sJ y)ztest messages from memoryviews   carrotjuiceN)rd   r+   r,   rG   rq   r7   )r#   r-   r.   rK   s2s        r   test_memoryviewzTestFrame.test_memoryview  sJ    1IIaLhh[[]Qwwww!||r   c                    d}| j                  t        j                  t        j                        \  }}t        d      D ]  }|j	                  |d       |j                  d      }|j                  }|j                  }~t        d      D ]~  }dd|dz  z   z  }|j	                  |d       |j                  d      }	|j                         }
|
|k(  sJ ||k(  sJ |	j                  |k(  sJ t        |	j                        t        u r~J   y	)
z$check for clobbering message buffers@                                                                       Fr(   r&      (   rS   N)
rz   r+   r{   r   r|   r}   r7   rG   rq   type)r#   nullsasbr   r.   mbrK   ffrJ   r8   s              r   test_noncopying_recvzTestFrame.test_noncopying_recv  s    ''#((;Br 	/AGGDuG%U#AB((C1X /QV,'WW%W(KKMDy yTz!zxx2~%~BHH~.../	/r   c                 V   d}| j                  t        j                  t        j                        \  }}t        d      D ]  }|j	                  t        |      d       |j                  d      }t        |      }t        d      D ]  }dd|dz  z   z  }|j	                  t        |      d       |j                  d      }t        |      }	|j                         |k(  sJ |j                  rJ |	j                         |k(  sJ |	j                  rJ t        |      t
        u rJ   y	)
z%test non-copying memmoryview messagesr   r   Fr(   r&   r   r   rS   N)
rz   r+   r{   r   r|   rd   r}   rq   readonlyr   )
r#   r   r   r   r   r.   rK   r   rJ   buf2s
             r   test_noncopying_memoryviewz$TestFrame.test_noncopying_memoryview1  s   ''#((;Br 	/AGGJt$5G1U#AQ-C1X 	/QV,
2U3WW%W(!"~{{},,,<<''||~+++==((CyJ...	/	/r   c                    	 ddl }ddlm} |j
                  j                  }t        d      D cg c]  } |dd       }}| j                  t        j                  t        j                        \  }}t        t        ddg}t        d	t        |      d	z         D ]3  }|d| }	|D ]  }
|j
                  j                  d
d|	      j                  |
      }|j!                  |d       |j#                  d      }|j%                  ||j&                        j)                  |j*                        } |||        |j-                  |	dt        fdt        fdg      }d|d<   d|d<   d|d<   |j!                  |d       |j#                  d      }|j%                  ||j&                        j)                  |j*                        } |||       6 y# t        $ r t	        d      w xY wc c}w )z%test non-copying numpy array messagesr   N)assert_array_equalzrequires numpyr&   r   z>i4Br   ii@B )sizeFr(   r~   r8   )ca32)dtypei   g    eAzhello therer   )numpynumpy.testingr   ImportErrorr   randomrandintr   rz   r+   r{   intfloatrC   uniformastyper|   r}   
frombufferr   reshaperp   empty)r#   r   r   randr   shapesr~   r8   dtypesrp   dtAmsgr   s                 r   test_buffer_numpyzTestFrame.test_buffer_numpyE  s   	-8 ||##&+Ah/$q!*//%%chh91ueS)q#f+/* 	%A2AJE )LL(()0u ) >>DfRj qu%ff%f($$S!''2::177C"1a() E3*sElL)QRAAcFAcF"AcFFF15F!&&e&$C  agg.66qww?Aq!$'	%  	-+,,	- 0s   
G G(G%c                 ^   t        j                  d      }|j                  rJ | j                  t         j                  t         j                        \  }}|j                  ddg       | j                  |d      }|j                  sJ t        j                         d   dk\  r't        s!|j                  t         j                        sJ | j                  |d      }|j                  rJ t        j                         d   dk\  r)t        s"|j                  t         j                        rJ yyy)	ztest Frame.more attributes   hellos   his   thereFr(   r   r
   N)r+   r,   morerz   r{   send_multipartr}   zmq_version_infor   getMORE)r#   framer   r   s       r   test_frame_morezTestFrame.test_frame_moree  s     		(#::~''#((;B
5(+,		"5	)zzz!!$)$99SXX&&&		"5	)::~!!$)$yy**** 37)r   )__name__
__module____qualname__r    r   r/   r5   r9   rA   rD   rL   rN   rY   r\   ra   rf   ri   rm   rw   r   r   r   r   r   r   __classcell__)r$   s   @r   r   r   1   s    
 
 
  /$ ! !F    D=$#
:
$'0/,/(%@ + +r   r   )r)   r!   r   r   r   r   r   r+   	zmq.testsr   r   r   r   r*   rc0rd   vview_rcr   r    r   r   <module>r      s~   
  	 
 C  
 @ @ 	
a&C1A!fslG$B+ B+M  
Cs   A A"!A"