o
    @Bi~=                     @   s   d dl m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 Z	dd	 Z
d
d Zdd Zeej dG dd dejZG dd dejZdS )    )absolute_importN)message)role)
serializerc                 C   s   |r| j drtjrdS dS )NjsonTF)SERIALIZER_ID
startswithsixPY2)sercontains_binary r   b/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/wamp/test/test_serializer.py	must_skip(   s   r   c               	   C   s  g t ddt it  t dt jdg dddddt jddgd	t jdd
dt dt jdt jjdt ddt jddg dddddt jddddt 	dt j	dg dddddt j	dd
dt 
dt j
dt j
jdt ddt jddg dddddt jddddt dt ddt ddt ddt jddddt jddddt ddt jddg dddddt jddddt ddt ddt jddg dddddt jddddgg ddt dt ddt ddt ddt jddt jjdt t jjddt jt jjddg dddddt jddg dd	t j	dg ddddd} d d! | D S )"z
    List of WAMP test message used for serializers. Expand this if you add more
    options or messages.

    This list of WAMP message does not contain any binary app payloads!
    realm1
subscriber@             hellofoobarargskwargsr   T)progress)mode
 i'  )timeoutzcom.myapp.procedure1prefix)match
roundrobin)invoke,  )	publisherzcom.myapp.topic1F)d      r(   )
exclude_meexcludeeligiblezcom.myapp.error1u   com.myapp.你好世界zHello Worldu   こんにちは世界)enjpc                 S      g | ]}d |fqS )Fr   .0msgr   r   r   
<listcomp>a       z*generate_test_messages.<locals>.<listcomp>)r   Hellor   RoleSubscriberFeaturesGoodbyeYield	InterruptKILL
InvocationResultCancelCallUnregistered
Unregister
RegisteredRegisterEvent	PublishedPublishUnsubscribedUnsubscribe
Subscribed	SubscribeMATCH_PREFIXErrorMESSAGE_TYPE)msgsr   r   r   generate_test_messages/   s   
	







 !
"
#
$%& '()+rP   c                  C   s   g } dddt dt dt dt dt dt d	f	D ]}| tjd
d|gd | tjd
d|gd|id qdd | D S )a!  
    Generate WAMP test messages which contain binary app payloads.

    With the JSON serializer, this currently only works on Python 3 (both CPython3 and PyPy3),
    because even on Python 3, we need to patch the stdlib JSON, and on Python 2, the patching
    would be even hackier.
                           i   i   r   r"   r   r   r   c                 S   r1   )Tr   r2   r   r   r   r5   x   r6   z1generate_test_messages_binary.<locals>.<listcomp>)osurandomappendr   rE   )rO   binaryr   r   r   generate_test_messages_binaryd   s   	 r\   c                  C   s   g } |  t  |  tjdd |  t  |  tjdd |  t  |  tjdd |  t  |  tjdd tjrF	 | S )NT)batched)rZ   r   JsonSerializerMsgPackSerializerCBORSerializerUBJSONSerializerr	   PY3)_serializersr   r   r   create_serializers{   s   rd   z1WAMP-FlatBuffers currently only supports Python 3c                   @   s   e Zd Zdd ZdS )TestFlatBuffersSerializerc                 C   s~   t jddg ddddddd	t jdd
g ddddddg}t }|D ]}||\}}|||d }| || q%d S )Nr   r"   r   r   r   r   i  T)r   r   r)   retainedzcom.example.topic1)r   r   retainr   )r   rE   rG   r   FlatBuffersSerializer	serializeunserializeassertEqual)selfmessagesr   r4   payloadr[   msg2r   r   r   
test_basic   s(   z$TestFlatBuffersSerializer.test_basicN)__name__
__module____qualname__rp   r   r   r   r   re      s    re   c                   @   s\   e Z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S )TestSerializerc                 C   s   t  t  | _t | _d S )N)rP   r\   _test_messagesrd   _test_serializersrl   r   r   r   setUp   s   zTestSerializer.setUpc                 C   s^   t d}ddd|g ddg did|g}dddg di|g ddd	|g}| || d
S )zK
        Test deep object equality assert (because I am paranoid).
        
   r   r   r   )	   r   r   moor   )r   r   bazgoo)r}   r   r|   r   N)rX   rY   rk   )rl   vo1o2r   r   r   test_deep_equal_msg   s   
""z"TestSerializer.test_deep_equal_msgc                 C   sR   | j D ]#}| jD ]\}}t||s%||\}}|||}| |g| qqdS )z;
        Test round-tripping over each serializer.
        Nrv   ru   r   ri   rj   rk   )rl   r   r   r4   rn   r[   ro   r   r   r   test_roundtrip_msg   s   

z!TestSerializer.test_roundtrip_msgc           	      C   s   | j D ]?}| jD ]9\}}t||sA||\}}|||}|d }| j D ]}t||s@||\}}|||}| |g| q%qqdS )zV
        Test cross-tripping over 2 serializers (as is done by WAMP routers).
        r   Nr   )	rl   ser1r   r4   rn   r[   msg1ser2ro   r   r   r   test_crosstrip_msg   s   



z!TestSerializer.test_crosstrip_msgc                 C   s   | j D ]F\}}| |ji  | jD ]7}t||sH| |j|jv  ||\}}| |j|jv  | |j|j | |	  | |j|jv  qqdS )z5
        Test message serialization caching.
        N)
ru   rk   _serializedrv   r   assertFalse_serializerri   
assertTrueuncache)rl   r   r4   r   rn   r[   r   r   r   test_cache_msg   s   

zTestSerializer.test_cache_msgc                 C   s   | j D ]D}|jdd}| |d d d | |d d d | |d d d | |d d d | |d d d | |d d d qd	S )
zA
        Test initial serializer stats are indeed empty.
        Tdetails
serializedbytesr   rm   rated_messagesunserializedN)rv   statsrk   )rl   r   r   r   r   r   test_initial_stats  s   
z!TestSerializer.test_initial_statsc                 C   s   | j D ]=}| jD ]\}}t||s||\}}||| q|jdd}| |d dk | |d dk | |d dk qdS )_
        Test serializer stats are non-empty after serializing/unserializing messages.
        Fr   r   r   rm   r   N)rv   ru   r   ri   rj   r   r   rl   r   r   r4   rn   r[   r   r   r   r   test_serialize_stats$  s   

z#TestSerializer.test_serialize_statsc                 C   s(  | j D ]}| jD ]\}}t||s||\}}||| q|jdd}| |d d dk | |d d dk | |d d dk | |d d dk | |d d dk | |d d dk | |d d |d d  | |d d |d d  | |d d |d d  qd	S )
zp
        Test serializer stats - with details - are non-empty after serializing/unserializing messages.
        Tr   r   r   r   rm   r   r   N)rv   ru   r   ri   rj   r   r   rk   r   r   r   r   !test_serialize_stats_with_details9  s"   

z0TestSerializer.test_serialize_stats_with_detailsc                 C   s   | j D ]b}| jD ]\}}t||s||\}}||| q|  |jdd}| |d d d | |d d d | |d d d | |d d d | |d d d | |d d d qd	S )
z]
        Test serializer stats are reset after fetching stats - depending on option.
        Tr   r   r   r   rm   r   r   N)rv   ru   r   ri   rj   r   rk   r   r   r   r   test_reset_statsY  s   

zTestSerializer.test_reset_statsc                    s^    j D ])} fdd}|dd|  jD ]\}}t||s+||\}}||| qqdS )r   c                    s:     | d dk   | d dk   | d dk d S )Nr   r   rm   r   )r   )r   rw   r   r   on_statsy  s   z0TestSerializer.test_auto_stats.<locals>.on_statsry   r   N)rv   set_stats_autoresetru   r   ri   rj   )rl   r   r   r   r4   rn   r[   r   rw   r   test_auto_statss  s   

zTestSerializer.test_auto_statsN)rq   rr   rs   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   rt      s    	 rt   )
__future__r   rX   unittestr	   autobahn.wampr   r   r   r   rP   r\   rd   skipIfrb   TestCasere   rt   r   r   r   r   <module>   s   5&