o
    >h|Z                     @   s   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 dd Z	dd	 Z
dddZG dd dejZG dd dejZG dd dejZdS )    N)Decimal)message)role)
serializerc                  C   sJ  t d} d}d}d}dddd| |d	d| |d
g}d	d| ||d}g tddt itddt itddt itddt itdt t t t dt	 t
dtj
d|dtj
dg |dtj
d||dtj
dddtdtjdtjjdtddtjdd|dtjddg |dtjdd||dtjddddtdtjd|dtjdg |dtjd||dtjdddtdtjdtjjdtd|tjd||dtjd|g |dtjd|||dtjd|ddtd|tjd||dtjd|g |dtjd|||dtjd|ddtdtddtddtd|tjd|ddtjd|ddtd|tjd|ddtjd|ddtddtjdd|dtjddg |dtjdd||dtjdddd tddtd|tjd||dtjd|g |dtjd|||dtjd|d!dgg d"d#td|tjd||dtjd|g |dtjd|||dtjd|d!dgg d"d#tdtddtddtd|tjd|tjjdtd|tjd|tjjdttjjd|tjtjjd||dtjtjjd|g |dtjtjjd|||dttjjd|tjtjjd||dtjtjjd|g |dtjtjjd|||dtdtjd|dtj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!
        u   こんにちは世界zcom.myapp.foobaru   com.myapp.你好世界.baz         hello   )foobarbazmoo)r   r   r   r   arrrealm1
subscriber	publishercallercallee)r   r   r   r   @ argsr   kwargsT)progress)mode
 i'  )timeoutprefix)match
roundrobin)invoke,  )r   F)d      r#   )
exclude_meexcludeeligiblec                 S      g | ]}d |fqS F .0msgr+   r+   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/wamp/test/test_wamp_serializer.py
<listcomp>       z*generate_test_messages.<locals>.<listcomp>)osurandomr   Hellor   RoleSubscriberFeaturesRolePublisherFeaturesRoleCallerFeaturesRoleCalleeFeaturesGoodbyeYield	InterruptKILL
InvocationResultCancelCallUnregistered
Unregister
RegisteredRegisterEvent	PublishedPublishUnsubscribedUnsubscribe
Subscribed	SubscribeMATCH_PREFIXErrorMESSAGE_TYPE)
some_bytessome_unicodesome_urisome_unicode_uri	some_argssome_kwargsmsgsr+   r+   r/   generate_test_messages&   sR  


 !"#
$%&'()
*
+
,-.
/01
23456
7
89:;<
=>?@AB
C
D
EF
GHIJKLMNOPQRSUrV   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   r)   )Tr+   r,   r+   r+   r/   r0      r1   z1generate_test_messages_binary.<locals>.<listcomp>)r2   r3   appendr   rE   )rU   binaryr+   r+   r/   generate_test_messages_binary   s   	 r`   Fc                 C   s   g }| tj| d | tjd| d | t  | tjdd | sG| t  | tjdd | t  | tjdd |S )Nuse_decimal_from_strT)batchedrb   )rc   )r^   r   JsonSerializerCBORSerializerMsgPackSerializerUBJSONSerializer)decimal_support_serializersr+   r+   r/   create_serializers   s   rj   c                   @   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   r
   )r   r   i  T)r   r   r   retainedzcom.example.topic1)r   r   retainr   )r   rE   rG   r   FlatBuffersSerializer	serializeunserializeassertEqual)selfmessagesserr.   payloadr_   msg2r+   r+   r/   
test_basic   s(   z$TestFlatBuffersSerializer.test_basicN)__name__
__module____qualname__rx   r+   r+   r+   r/   rk      s    rk   c                   @   s:   e Zd ZdZdddZdd Zdd	 Zd
d Zdd ZdS )TestDecimalSerializera  
    binary fixed-point
    binary floating-point:          float (float32), double (float64)
    decimal floating-point:         decimal128, decimal256
    decimal fixed-point:            NUMERIC(precision, scale)
    decimal arbitrary precision:    NUMERIC, decimal.Decimal

    https://developer.nvidia.com/blog/implementing-high-precision-decimal-arithmetic-with-cuda-int128/
    https://github.com/johnmcfarlane/cnl
    returnNc                 C   s  t dd| _dt _dt tddtddtddd tddd	 d
dtdddddd d
dtdgd	fg| _	dt tddtddtddd tddd	 d
dt
dt
dt
dt
dtdddddd d
dt
dt
dt
dt
dtdgdfg| _d S )NT)rh   L   r   l          l            r   r\   r]   g^F7ݚ?g6!Y?   r   )	abcdefgyzz'0.1234567890123456789012345678901234567z'0.8765432109876543210987654321098765434zM0.123456789012345678901234567890123456701234567890123456789012345678901234567zM0.876543210987654321098765432109876543298765432109876543210987654321098765434)r   r   r   r   r   r   r   hijkr   r   )rj   _test_serializersdecimal
getcontextprecrandomrandintr2   r3   _test_messages_no_decr   _test_messages_decrs   r+   r+   r/   setUp   sh   





zTestDecimalSerializer.setUpc                 C   sX   t jdd}| jD ] \}}|||d }| || | d|d |d   q	dS )zZ
        Test without ``use_decimal_from_str`` feature of JSON object serializer.
        Fra   r        ?r   r   N)r   JsonObjectSerializerr   rq   rp   rr   rs   ru   contains_binaryobj_objr+   r+   r/   test_json_no_decimal1  s   z*TestDecimalSerializer.test_json_no_decimalc                 C   s   t jdd}| jD ]<\}}|||d }| || | d|d |d   | td|d |d	   | td
|d |d   q	dS )zR
        Test ``use_decimal_from_str`` feature of JSON object serializer.
        Tra   r   r   r   r   z'1.0000000000000000000000000000000000001r   r   zM1.000000000000000000000000000000000000000000000000000000000000000000000000001r   r   N)r   r   r   rq   rp   rr   r   r   r+   r+   r/   test_json_decimal;  s   z'TestDecimalSerializer.test_json_decimalc                 C   sP   | j D ]"}|j}| j| j D ]\}}||}||}| ||d  qqd S Nr   r   _serializerr   r   rp   rq   rr   )rs   wamp_serru   r   r.   rv   rw   r+   r+   r/   test_roundtrip_msgG  s   


z(TestDecimalSerializer.test_roundtrip_msgc                 C   s   | j D ];}|j}| j| j D ]/\}}||}||}|d }| j D ]}|j}||}	||	}
|
d }
| ||
 q#qqd S r   r   )rs   	wamp_ser1ser1r   r.   payload1msg1	wamp_ser2ser2payload2rw   r+   r+   r/   test_crosstrip_msgO  s   





z(TestDecimalSerializer.test_crosstrip_msg)r}   N)	ry   rz   r{   __doc__r   r   r   r   r   r+   r+   r+   r/   r|      s    

A
r|   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)rV   r`   _test_messagesrj   r   r   r+   r+   r/   r   a  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   r   rl   )r   r   r   goo)r   r   r   r   N)r2   r3   rr   )rs   vo1o2r+   r+   r/   test_deep_equal_msgf  s   
""z"TestSerializer.test_deep_equal_msgc                 C   sH   | j D ]}| jD ]\}}||\}}|||}| |g| qqdS )z;
        Test round-tripping over each serializer.
        Nr   r   rp   rq   rr   )rs   ru   r   r.   rv   r_   rw   r+   r+   r/   r   o  s   
z!TestSerializer.test_roundtrip_msgc           	      C   sv   | j D ]5}| jD ]/\}}||\}}|||}|d }| j D ]}||\}}|||}| |g| q qqdS )zV
        Test cross-tripping over 2 serializers (as is done by WAMP routers).
        r   Nr   )	rs   r   r   r.   rv   r_   r   r   rw   r+   r+   r/   r     s   

z!TestSerializer.test_crosstrip_msgc                 C   s   | j D ]A\}}| |ji  | jD ]2}| |j|jv  ||\}}| |j|jv  | |j|j | |  | |j|jv  qqdS )z5
        Test message serialization caching.
        N)	r   rr   _serializedr   assertFalser   rp   
assertTrueuncache)rs   r   r.   ru   rv   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   rt   rated_messagesunserializedN)r   statsrr   )rs   ru   r   r+   r+   r/   test_initial_stats  s   
z!TestSerializer.test_initial_statsc                 C   s|   | j D ]8}| jD ]\}}||\}}||| 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   rt   r   N)r   r   rp   rq   r   r   rs   ru   r   r.   rv   r_   r   r+   r+   r/   test_serialize_stats  s   
z#TestSerializer.test_serialize_statsc                 C   s  | j D ]}| jD ]\}}||\}}||| 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   rt   r   r   N)r   r   rp   rq   r   r   rr   r   r+   r+   r/   !test_serialize_stats_with_details  s   
z0TestSerializer.test_serialize_stats_with_detailsc                 C   s   | j D ]]}| jD ]\}}||\}}||| 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   rt   r   r   N)r   r   rp   rq   r   rr   r   r+   r+   r/   test_reset_stats  s   
zTestSerializer.test_reset_statsc                    sT    j D ]$} fdd}|dd|  jD ]\}}||\}}||| qqdS )r   c                    s:     | d dk   | d dk   | d dk d S )Nr   r   rt   r   )r   )r   r   r+   r/   on_stats  s   z0TestSerializer.test_auto_stats.<locals>.on_statsr   r   N)r   set_stats_autoresetr   rp   rq   )rs   ru   r   r   r.   rv   r_   r+   r   r/   test_auto_stats  s   
zTestSerializer.test_auto_statsN)ry   rz   r{   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r/   r   _  s    	r   r*   )r2   unittestr   r   r   autobahn.wampr   r   r   rV   r`   rj   TestCaserk   r|   r   r+   r+   r+   r/   <module>   s   h
&z