
    tf|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 d Z	d Z
dd	Z G d
 dej                  Z G d dej                  Z G d dej                  ZdS )    N)Decimal)message)role)
serializerc                     t          j        d          } d}d}d}dddd| |d	d| |d
g}d	d| ||d}g t          j        ddt	          j                    i          t          j        ddt	          j                    i          t          j        ddt	          j                    i          t          j        ddt	          j                    i          t          j        dt	          j                    t	          j                    t	          j                    t	          j                    d          t          j	                    t          j
        d          t          j
        d|          t          j
        dg |          t          j
        d||          t          j
        dd          t          j        d          t          j        dt          j        j                  t          j        dd          t          j        dd|          t          j        ddg |          t          j        dd||          t          j        ddd          t          j        d          t          j        d|          t          j        dg |          t          j        d||          t          j        dd          t          j        d          t          j        dt          j        j                  t          j        d|          t          j        d||          t          j        d|g |          t          j        d|||          t          j        d|d          t          j        d|          t          j        d||          t          j        d|g |          t          j        d|||          t          j        d|d          t          j        d          t          j        dd          t          j        dd          t          j        d|          t          j        d|d          t          j        d|d          t          j        d|          t          j        d|d          t          j        d|d          t          j        dd          t          j        dd|          t          j        ddg |          t          j        dd||          t          j        ddd           t          j        dd          t          j        d|          t          j        d||          t          j        d|g |          t          j        d|||          t          j        d|d!dgg d"#          t          j        d|          t          j        d||          t          j        d|g |          t          j        d|||          t          j        d|d!dgg d"#          t          j        d          t          j        dd          t          j        dd          t          j        d|          t          j        d|t          j        j                  t          j        d|          t          j        d|t          j        j                  t          j        t          j        j        d|          t          j        t          j        j        d||          t          j        t          j        j        d|g |          t          j        t          j        j        d|||          t          j        t          j        j        d|          t          j        t          j        j        d||          t          j        t          j        j        d|g |          t          j        t          j        j        d|||          t          j        d          t          j        d|          t          j        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                     g | ]}d |fS F .0msgs     f/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/wamp/test/test_wamp_serializer.py
<listcomp>z*generate_test_messages.<locals>.<listcomp>   s    )))SUCL)))    )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msgss          r1   generate_test_messagesrX   &   s	    BJ?L!H?Aq':|RPW`js  >A  >A  BIWZ]fggKTht/J/L/L MNNThd.H.J.J KLLT 	h4+B+D+D EFFT 	h4+B+D+D EFF	T
 	h577355-//-//	!
 !
 	 	T 	T 	fT 	f9---T 	f2k:::T 	f9[AAAT  	ft,,,!T" 	&!!#T$ 	&w'8'=>>>%T& 	66**'T( 	66	:::)T* 	66;GGG+T, 	66	+NNN-T. 	665999/T0 	v1T2 	vI...3T4 	vB{;;;5T6 	vIkBBB7T8 	v---9T: 	v;T< 	vGN$7888=T> 	VX&&?T@ 	VXI666ATB 	VXB{CCCCTD 	VXIkJJJETF 	VXu555GTH 	V-..ITJ 	V-I>>>KTL 	V-B{KKKMTN 	V-IkRRROTP 	V-u===QTR 	V$$STT 	66**UTV 	66**WTX 	**YTZ 	:::[T\ 	,???]T^ 	!122_T` 	!1BBBaTb 	!1,GGGcTd 	ff%%eTf 	ff9555gTh 	ff2kBBBiTj 	ff9[IIIkTl 	ff444mTn 	&&))oTp 	))qTr 	y999sTt 	r+FFFuTv 	yMMMwTx 	USETcTcTcdddyTz 	 011{T| 	 0yAAA}T~ 	 0r+NNNT@ 	 0yUUUATB 	 0USE\k\k\klllCTD 	V$$ETF 	FF++GTH 	66**ITJ 	&(++KTL 	&('2C2PQQQMTN 	&"233OTP 	&"2':K:XYYYQTR 	gl/BBSTT 	gl/	RRRUTV 	gl/S^___WTX 	gl/	ZefffYTZ 	gl/9IJJ[T\ 	gl/9IPYZZZ]T^ 	gl/9IPR[fggg_T` 	gl/9IPYbmnnnaTb 	vcTd 	vI...eTf 	vIkBBBgTDj *)D))))r3   c                     g } dddt          j        d          t          j        d          t          j        d          t          j        d          t          j        d          t          j        d	          f	D ][}|                     t          j        d
d|g                     |                     t          j        d
d|gd|i                     \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.
    r3                      i   i   r   r   r   r   r   c                     g | ]}d |fS )Tr-   r.   s     r1   r2   z1generate_test_messages_binary.<locals>.<listcomp>   s    (((CT3K(((r3   )r4   r5   appendr   rG   )rW   binarys     r1   generate_test_messages_binaryrc      s     D:a==:b>>:c??:c??:c??:d##% 
Z 
Z 	GM&&x@@@AAAGM&&xPVXXXYYYY((4((((r3   Fc                    g }|                     t          j        |                      |                     t          j        d|                      |                     t          j                               |                     t          j        d                     | s|                     t          j                               |                     t          j        d                     |                     t          j                               |                     t          j        d                     |S )Nuse_decimal_from_strT)batchedrf   )rg   )ra   r   JsonSerializerCBORSerializerMsgPackSerializerUBJSONSerializer)decimal_support_serializerss     r1   create_serializersrn      s   L
1WWWXXX
1$Udeeefff
133444
1$???@@@ GJ8::;;;J8FFFGGG 	J799:::J7EEEFFF r3   c                       e Zd Zd ZdS )TestFlatBuffersSerializerc           	      D   t          j        ddg dddddd	          t          j        dd
g ddddd          g}t          j                    }|D ]L}|                    |          \  }}|                    ||          d         }|                     ||           Md S )Nr   r   r	   r
   r   r   r   )r   r   i  T)r   r   r   retainedzcom.example.topic1)r   r   retainr   )r   rG   rI   r   FlatBuffersSerializer	serializeunserializeassertEqual)selfmessagesserr0   payloadrb   msg2s          r1   
test_basicz$TestFlatBuffersSerializer.test_basic   s    M& (yy)+G!<!<$'#') ) ) OF0!*+-g#>#>#'	) ) )
 .00  	( 	(C "mmC00OGV ??7F33A6D S$''''	( 	(r3   N)__name__
__module____qualname__r~   r-   r3   r1   rp   rp      s#        ( ( ( ( (r3   rp   c                   2    e Zd ZdZd	dZd Zd Zd Z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                    t          d          | _        dt          j                    _        dt          j                    t          j        dd          t          j        dd          t          j        dddz            t          j        ddd	z            d
dt          j        d          ddddd d
dt          j        d          gd	fg| _	        dt          j                    t          j        dd          t          j        dd          t          j        dddz            t          j        ddd	z            d
dt          d          t          d          t          d          t          d          t          j        d          ddddd d
dt          d          t          d          t          d          t          d          t          j        d          gdfg| _        d S )NT)rl   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   )rn   _test_serializersdecimal
getcontextprecrandomrandintr4   r5   _test_messages_no_decr   _test_messages_decry   s    r1   setUpzTestDecimalSerializer.setUp   s   !3D!I!I!I %'! moonQ00nQ00nQS11nQS11)(jmm('Z]]	 &
"2 moonQ00nQ00nQS11nQS11)(GHHGHHmnnmnnjmm('FGGFGGlmmlmmZ]]! !#
r3   c                    t          j        d          }| j        D ]n\  }}|                    |                    |                    d         }|                     ||           |                     d|d         |d         z              odS )zZ
        Test without ``use_decimal_from_str`` feature of JSON object serializer.
        Fre   r        ?r   r   N)r   JsonObjectSerializerr   rw   rv   rx   ry   r{   contains_binaryobj_objs        r1   test_json_no_decimalz*TestDecimalSerializer.test_json_no_decimal1  s     -5III$($> 	H 	H OS??3==#5#566q9DS$'''/cT#Y1FGGGG	H 	Hr3   c                    t          j        d          }| j        D ]\  }}|                    |                    |                    d         }|                     ||           |                     d|d         |d         z              |                     t          d          |d         |d	         z              |                     t          d
          |d         |d         z              dS )zR
        Test ``use_decimal_from_str`` feature of JSON object serializer.
        Tre   r   r   r   r   z'1.0000000000000000000000000000000000001r   r   zM1.000000000000000000000000000000000000000000000000000000000000000000000000001r   r   N)r   r   r   rw   rv   rx   r   r   s        r1   test_json_decimalz'TestDecimalSerializer.test_json_decimal;  s    -4HHH$($; 	N 	N OS??3==#5#566q9DS$'''/cT#Y1FGGGW%NOOQUVYQZ]abe]fQfgggW%tuuw{|  xA  DH  IL  DM  xM  N  N  N  N	N 	Nr3   c                     | j         D ]d}|j        }| j        | j        z   D ]K\  }}|                    |          }|                    |          }|                     ||d                    Led S Nr   r   _serializerr   r   rv   rw   rx   )ry   wamp_serr{   r   r0   r|   r}   s          r1   test_roundtrip_msgz(TestDecimalSerializer.test_roundtrip_msgG  s    . 	/ 	/H&C(,(BTE\(\ / /$--,,w//  d1g..../	/ 	/r3   c                 h   | j         D ]}|j        }| j        | j        z   D ]\  }}|                    |          }|                    |          }|d         }| j         D ]Q}|j        }|                    |          }	|                    |	          }
|
d         }
|                     ||
           Rd S r   r   )ry   	wamp_ser1ser1r   r0   payload1msg1	wamp_ser2ser2payload2r}   s              r1   test_crosstrip_msgz(TestDecimalSerializer.test_crosstrip_msgO  s    / 	0 	0I(D(,(BTE\(\ 	0 	0$>>#..''11Aw!%!7 0 0I$0D#~~d33H++H55D7D$$S$////0		0	0 	0r3   )r   N)	r   r   r   __doc__r   r   r   r   r   r-   r3   r1   r   r      su        	 	?
 ?
 ?
 ?
BH H H
N 
N 
N/ / /0 0 0 0 0r3   r   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestSerializerc                 p    t                      t                      z   | _        t                      | _        d S )N)rX   rc   _test_messagesrn   r   r   s    r1   r   zTestSerializer.setUpa  s0    4669V9X9XX!3!5!5r3   c                     t          j        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   rr   )r   r   r   goo)r   r   r   r   N)r4   r5   rx   )ry   vo1o2s       r1   test_deep_equal_msgz"TestSerializer.test_deep_equal_msgf  s~     JrNNE!IIIuiiiFXYY[\]UIII.qSXYY[\]R     r3   c                     | j         D ]T}| j        D ]J\  }}|                    |          \  }}|                    ||          }|                     |g|           KUdS )z;
        Test round-tripping over each serializer.
        Nr   r   rv   rw   rx   )ry   r{   r   r0   r|   rb   r}   s          r1   r   z!TestSerializer.test_roundtrip_msgo  s     ) 	. 	.C(,(; 	. 	.$ #&--"4"4 w77   #----	.	. 	.r3   c                 >   | j         D ]}| j        D ]\  }}|                    |          \  }}|                    ||          }|d         }| j         D ]G}|                    |          \  }}|                    ||          }|                     |g|           HdS )zV
        Test cross-tripping over 2 serializers (as is done by WAMP routers).
        r   Nr   )	ry   r   r   r0   r|   rb   r   r   r}   s	            r1   r   z!TestSerializer.test_crosstrip_msg  s     * 	2 	2D(,(; 2 2$ #'.."5"5 ''88Aw 2 
2 
2D '+nnT&:&:OGV  ++GV<<D $$cUD1111
22	2 	2r3   c                    | j         D ]\  }}|                     |j        i            | j        D ]}|                     |j        |j        v            |                    |          \  }}|                     |j        |j        v            |                     |j        |j                 |           |                                 |                     |j        |j        v            dS )z5
        Test message serialization caching.
        N)	r   rx   _serializedr   assertFalser   rv   
assertTrueuncache)ry   r   r0   r{   r|   rb   s         r1   test_cache_msgzTestSerializer.test_cache_msg  s     %)$7 	E 	E OS S_b111- E E   CO!CDDD"%--"4"4 3? BCCC  !A7KKK   CO!CDDDDE	E 	Er3   c                    | j         D ]}|                    d          }|                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           d	S )
zA
        Test initial serializer stats are indeed empty.
        Tdetails
serializedbytesr   rz   rated_messagesunserializedN)r   statsrx   )ry   r{   r   s      r1   test_initial_statsz!TestSerializer.test_initial_stats  s     ) 
	I 
	ICIIdI++EU<091===U<0<a@@@U<01ABAFFFU>27;Q???U>2:>BBBU>23CDaHHHH
	I 
	Ir3   c                 v   | j         D ]}| j        D ]3\  }}|                    |          \  }}|                    ||           4|                    d          }|                     |d         dk               |                     |d         dk               |                     |d         dk               dS )_
        Test serializer stats are non-empty after serializing/unserializing messages.
        Fr   r   r   rz   r   N)r   r   rv   rw   r   r   ry   r{   r   r0   r|   rb   r   s          r1   test_serialize_statsz#TestSerializer.test_serialize_stats  s     ) 	9 	9C(,(; 1 1$ #&--"4"4 0000IIeI,,EOOE'NQ.///OOE*-1222OOE"23a78888	9 	9r3   c                    | j         D ]}| j        D ]3\  }}|                    |          \  }}|                    ||           4|                    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                    d	S )
zp
        Test serializer stats - with details - are non-empty after serializing/unserializing messages.
        Tr   r   r   r   rz   r   r   N)r   r   rv   rw   r   r   rx   r   s          r1   !test_serialize_stats_with_detailsz0TestSerializer.test_serialize_stats_with_details  s    ) 	m 	mC(,(; 1 1$ #&--"4"4 0000IIdI++E
 OOE,/81<===OOE,/
;a?@@@OOE,/0@AAEFFFOOE.1':Q>???OOE.1*=ABBBOOE.12BCaGHHHU<095;PQX;YZZZU<0<eN>ST^>_```U<01ABE.DYZjDkllll3	m 	mr3   c                    | j         D ]4}| j        D ]3\  }}|                    |          \  }}|                    ||           4|                                 |                    d          }|                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           6d	S )
z]
        Test serializer stats are reset after fetching stats - depending on option.
        Tr   r   r   r   rz   r   r   N)r   r   rv   rw   r   rx   r   s          r1   test_reset_statszTestSerializer.test_reset_stats  sP    ) 	I 	IC(,(; 1 1$ #&--"4"4 0000IIKKKIIdI++EU<091===U<0<a@@@U<01ABAFFFU>27;Q???U>2:>BBBU>23CDaHHHH'	I 	Ir3   c                       j         D ]Y} fd}|                    dd|            j        D ]3\  }}|                    |          \  }}|                    ||           4ZdS )r   c                                          | d         dk                                    | d         dk                                    | d         dk               d S )Nr   r   rz   r   )r   )r   ry   s    r1   on_statsz0TestSerializer.test_auto_stats.<locals>.on_stats  s]    g 2333j 1A 5666&6 7! ;<<<<<r3   r   r   N)r   set_stats_autoresetr   rv   rw   )ry   r{   r   r   r0   r|   rb   s   `      r1   test_auto_statszTestSerializer.test_auto_stats  s     ) 	1 	1C= = = = =
 ##B8444(,(; 1 1$ #&--"4"4 00001	1 	1r3   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r3   r1   r   r   _  s        6 6 6
! ! !. . ."2 2 26E E E0I I I 9 9 9(m m m>I I I21 1 1 1 1r3   r   r,   )r4   unittestr   r   r   autobahn.wampr   r   r   rX   rc   rn   TestCaserp   r   r   r-   r3   r1   <module>r      sN  6 
			          ! ! ! ! ! !       $ $ $ $ $ $e* e* e*P) ) ).   4!( !( !( !( !( 1 !( !( !(Lv0 v0 v0 v0 v0H- v0 v0 v0tC1 C1 C1 C1 C1X& C1 C1 C1 C1 C1r3   