U
    •uÄc|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               R   C   s²  t  d¡} d}d}d}dddd| |d	d| |d
œg}d	d| ||dœ}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d"d#dgd$�t d|¡tjd||d�tjd|g |d�tjd|||d�tjd|d!dgd"d#dg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�gN}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   ÚarrZrealm1Ú
subscriberÚ	publisherÚcallerÚcallee)r   r   r   r   é@â ©Úargs©r   ÚkwargsT)Zprogress)Úmodeéƒ
 i'  )ÚtimeoutÚprefix)ÚmatchZ
roundrobin)Zinvokei,  )r   Féd   éÈ   )Z
exclude_meÚexcludeZeligiblec                 S   s   g | ]}d |f‘qS )F© ©Ú.0Úmsgr"   r"   úpc:\users\psant\downloads\hotstarbackend\school\venv\Lib\site-packages\autobahn\wamp\test\test_wamp_serializer.pyÚ
<listcomp>‹   s     z*generate_test_messages.<locals>.<listcomp>)ÚosÚurandomr   ZHellor   ZRoleSubscriberFeaturesZRolePublisherFeaturesZRoleCallerFeaturesZRoleCalleeFeaturesZGoodbyeÚYieldZ	InterruptZKILLZ
InvocationZResultZCancelÚCallZUnregisteredZ
UnregisterZ
RegisteredZRegisterÚEventZ	PublishedÚPublishZUnsubscribedZUnsubscribeZ
SubscribedZ	SubscribeZMATCH_PREFIXÚErrorZMESSAGE_TYPE)Z
some_bytesZsome_unicodeZsome_uriZsome_unicode_uriZ	some_argsZsome_kwargsÚmsgsr"   r"   r&   Úgenerate_test_messages&   s¶    
ü














­Ur0   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   s   g | ]}d |f‘qS )Tr"   r#   r"   r"   r&   r'   ¢   s     z1generate_test_messages_binary.<locals>.<listcomp>)r(   r)   Úappendr   r,   )r/   Ú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�¡ | sŽ|  t ¡ ¡ |  tjdd�¡ |  t ¡ ¡ |  tjdd�¡ |S )N©Úuse_decimal_from_strT)Úbatchedr<   )r=   )r8   r   ZJsonSerializerZCBORSerializerZMsgPackSerializerZUBJSONSerializer)Údecimal_supportZ_serializersr"   r"   r&   Úcreate_serializers¥   s    r?   c                   @   s   e Zd Zdd„ ZdS )ÚTestFlatBuffersSerializerc                 C   s‚   t jdddddgdddœd	d
d�t jdddddgdddœd
d�g}t ¡ }|D ].}| |¡\}}| ||¡d }|  ||¡ qNd S )Nr   r   r   r   r	   r   r
   )r   r   iš  T)r   r   r   Zretainedzcom.example.topic1)r   r   Zretainr   )r   r,   r-   r   ZFlatBuffersSerializerÚ	serializeÚunserializeÚassertEqual)ÚselfÚmessagesÚserr%   Úpayloadr9   Úmsg2r"   r"   r&   Ú
test_basicÁ   s&    ûüùz$TestFlatBuffersSerializer.test_basicN)Ú__name__Ú
__module__Ú__qualname__rI   r"   r"   r"   r&   r@   ¿   s   r@   c                   @   s>   e Zd ZdZd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
    N)Úreturnc                 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)r>   éL   r   l          l            r   r6   r7   g^öF7Ýš¿?g6!Y¤ì?é   éÿÿÿÿr   )	ÚaÚbÚcÚdÚeÚfÚgÚyÚzz'0.1234567890123456789012345678901234567z'0.8765432109876543210987654321098765434zM0.123456789012345678901234567890123456701234567890123456789012345678901234567zM0.876543210987654321098765432109876543298765432109876543210987654321098765434)rR   rS   rT   rU   rV   rW   rX   ÚhÚiÚjÚkrY   rZ   )r?   Ú_test_serializersÚdecimalZ
getcontextÚprecÚrandomÚrandintr(   r)   Ú_test_messages_no_decr   Ú_test_messages_dec©rD   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.
        Fr;   r   ç     ð?rW   rX   N)r   ÚJsonObjectSerializerrd   rB   rA   rC   ©rD   rF   Ú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 ]x\}}| | |¡¡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.
        Tr;   r   rh   rW   rX   z'1.0000000000000000000000000000000000001r[   r\   zM1.000000000000000000000000000000000000000000000000000000000000000000000000001r]   r^   N)r   ri   re   rB   rA   rC   r   rj   r"   r"   r&   Útest_json_decimal;  s    z'TestDecimalSerializer.test_json_decimalc                 C   sP   | j D ]D}|j}| j| j D ],\}}| |¡}| |¡}|  ||d ¡ qqd S ©Nr   ©r_   Ú_serializerrd   re   rA   rB   rC   )rD   Zwamp_serrF   rk   r%   rG   rH   r"   r"   r&   Útest_roundtrip_msgG  s    


z(TestDecimalSerializer.test_roundtrip_msgc                 C   s‚   | j D ]v}|j}| j| j D ]^\}}| |¡}| |¡}|d }| j D ]2}|j}| |¡}	| |	¡}
|
d }
|  ||
¡ qFqqd S rp   rq   )rD   Z	wamp_ser1Úser1rk   r%   Zpayload1Úmsg1Z	wamp_ser2Úser2Zpayload2rH   r"   r"   r&   Útest_crosstrip_msgO  s    





z(TestDecimalSerializer.test_crosstrip_msg)	rJ   rK   rL   Ú__doc__rg   rn   ro   rs   rw   r"   r"   r"   r&   rM   å   s   
A
rM   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)r0   r:   Ú_test_messagesr?   r_   rf   r"   r"   r&   rg   a  s    zTestSerializer.setUpc              	   C   sf   t  d¡}ddd|dddgddddgidœ|g}ddddddgi|dddgdd	œ|g}|  ||¡ d
S )zK
        Test deep object equality assert (because I am paranoid).
        é
   r   r   r   é	   r	   r   )r   r   r   Úgoo)r}   r   r   r   N)r(   r)   rC   )rD   ÚvZo1Zo2r"   r"   r&   Útest_deep_equal_msgf  s    
&&z"TestSerializer.test_deep_equal_msgc                 C   sH   | j D ]<}| jD ]0\}}| |¡\}}| ||¡}|  |g|¡ qqdS )z;
        Test round-tripping over each serializer.
        N©r_   rz   rA   rB   rC   )rD   rF   rk   r%   rG   r9   rH   r"   r"   r&   rs   o  s
    
z!TestSerializer.test_roundtrip_msgc           	      C   sv   | j D ]j}| 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€   )	rD   rt   rk   r%   rG   r9   ru   rv   rH   r"   r"   r&   rw   €  s    

z!TestSerializer.test_crosstrip_msgc                 C   sŽ   | j D ]‚\}}|  |ji ¡ | jD ]d}|  |j|jk¡ | |¡\}}|  |j|jk¡ |  |j|j |¡ | ¡  |  |j|jk¡ q"qdS )z5
        Test message serialization caching.
        N)	rz   rC   Z_serializedr_   ÚassertFalserr   rA   Ú
assertTrueZuncache)rD   rk   r%   rF   rG   r9   r"   r"   r&   Útest_cache_msg›  s    
zTestSerializer.test_cache_msgc                 C   s”   | j 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   rE   Úrated_messagesÚunserializedN)r_   ÚstatsrC   )rD   rF   rŠ   r"   r"   r&   Útest_initial_stats³  s    
z!TestSerializer.test_initial_statsc                 C   s|   | j D ]p}| 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   rE   rˆ   N)r_   rz   rA   rB   rŠ   r‚   ©rD   rF   rk   r%   rG   r9   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   rE   rˆ   r‰   N)r_   rz   rA   rB   rŠ   r‚   rC   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   rE   rˆ   r‰   N)r_   rz   rA   rB   rŠ   rC   r�   r"   r"   r&   Útest_reset_statsö  s    
zTestSerializer.test_reset_statsc                    sT   ˆ j D ]H}‡ 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   rE   rˆ   )r‚   )rŠ   rf   r"   r&   Úon_stats  s    z0TestSerializer.test_auto_stats.<locals>.on_statsr{   r   N)r_   Zset_stats_autoresetrz   rA   rB   )rD   rF   r‘   rk   r%   rG   r9   r"   rf   r&   Útest_auto_stats  s    
zTestSerializer.test_auto_statsN)rJ   rK   rL   rg   r   rs   rw   rƒ   r‹   rŽ   r�   r�   r’   r"   r"   r"   r&   ry   _  s   	ry   )F)r(   Úunittestrb   r`   r   Zautobahn.wampr   r   r   r0   r:   r?   ÚTestCaser@   rM   ry   r"   r"   r"   r&   Ú<module>   s   h
&z