§
    ‹Q»j§	  ã            
       ób  — d Z ddlZddlZddlZddlZej                             dej                             ej                             ej         	                    e
¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZ ddlmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )	z©
Unit tests for Network Gateway Session Management & Framing in FreeExile.
Verifies session creation, heartbeat timeout eviction, packet framing, and envelope dispatch.
é    Nz../../server)ÚSessionManagerÚClientSession)ÚPacketCodecc                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestNetworkGatewayc                 ó0   — t          d¬¦  «        | _        d S )Ng       @)Úsession_timeout_seconds)r   Úsession_mgr)Úselfs    ú8C:\Projects\FreeExile\tests\unit\test_network_gateway.pyÚsetUpzTestNetworkGateway.setUp   s   € Ý)À#ÐFÑFÔFˆÔÐÐó    c                 ó.  — | j                              ddd¬¦  «        }|                      |j        ¦  «         |                      |j        d¦  «         | j                              |j        ¦  «        }|                      ||¦  «         | j                              |j        d¬¦  «         |                      |j        d¦  «         | j          	                    |j        ¦  «         |  
                    | j                              |j        ¦  «        ¦  «         dS )z:Registering, retrieving, and terminating a client session.Úacc_iphone_user_1ié  z192.168.1.50)Ú
account_idÚ	entity_idÚ	client_ipg     €2@)Ú
latency_msN)r
   Úcreate_sessionÚassertIsNotNoneÚ
session_idÚassertEqualr   Úget_sessionÚrecord_heartbeatÚlast_latency_msÚremove_sessionÚassertIsNone)r   ÚsessionÚ	retrieveds      r   Útest_session_lifecyclez)TestNetworkGateway.test_session_lifecycle   s  € àÔ"×1Ò1Ø*ØØ$ð 2ñ 
ô 
ˆð
 	×Ò˜WÔ/Ñ0Ô0Ð0Ø×Ò˜Ô*¨DÑ1Ô1Ð1àÔ$×0Ò0°Ô1CÑDÔDˆ	Ø×Ò˜ GÑ,Ô,Ð,ð 	Ô×)Ò)¨'Ô*<ÈÐ)ÑNÔNÐNØ×Ò˜Ô0°$Ñ7Ô7Ð7ð 	Ô×'Ò'¨Ô(:Ñ;Ô;Ð;Ø×Ò˜$Ô*×6Ò6°wÔ7IÑJÔJÑKÔKÐKÐKÐKr   c                 ó@  — | j                              ddd¦  «        }t          j        ¦   «         dz
  |_        | j                              ¦   «         }|                      |j        |¦  «         |                      | j                              |j        ¦  «        ¦  «         dS )zDStale sessions without heartbeats within timeout period get evicted.Úacc_2iê  z	127.0.0.1g      @N)	r
   r   ÚtimeÚlast_heartbeat_timestampÚevict_stale_sessionsÚassertInr   r   r   )r   r   Úevicteds      r   Útest_heartbeat_timeout_evictionz2TestNetworkGateway.test_heartbeat_timeout_eviction*   sˆ   € àÔ"×1Ò1°'¸4ÀÑMÔMˆå+/¬9©;¬;¸Ñ+<ˆÔ(àÔ"×7Ò7Ñ9Ô9ˆØ�Š�gÔ(¨'Ñ2Ô2Ð2Ø×Ò˜$Ô*×6Ò6°wÔ7IÑJÔJÑKÔKÐKÐKÐKr   c                 ó  — d}t          j        |¦  «        }|                      t          |¦  «        dt          |¦  «        z   ¦  «         t          j        |¦  «        \  }}|                      ||¦  «         |                      |d¦  «         dS )zICodec correctly encodes 4-byte length prefix and decodes complete frames.s   FREEEXILE_FRAME_DATAé   r   N)r   Úencode_framer   ÚlenÚdecode_frame)r   ÚpayloadÚframed_dataÚdecoded_payloadÚ	remainders        r   Ú!test_packet_framing_encode_decodez4TestNetworkGateway.test_packet_framing_encode_decode4   s‰   € à)ˆÝ!Ô.¨wÑ7Ô7ˆð 	×Ò�˜[Ñ)Ô)¨1­s°7©|¬|Ñ+;Ñ<Ô<Ð<å%0Ô%=¸kÑ%JÔ%JÑ"ˆ˜Ø×Ò˜¨'Ñ2Ô2Ð2Ø×Ò˜ CÑ(Ô(Ð(Ð(Ð(r   N)Ú__name__Ú
__module__Ú__qualname__r   r    r(   r2   © r   r   r   r      sY   € € € € € ðGð Gð GðLð Lð Lð*Lð Lð Lð
)ð 
)ð 
)ð 
)ð 
)r   r   Ú__main__)Ú__doc__ÚunittestÚsysÚosr#   ÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úgateway.session_managerr   r   Úgateway.network_gatewayr   ÚTestCaser   r3   Úmainr6   r   r   ú<module>rF      sõ   ððð ð
 €€€Ø 
€
€
€
Ø 	€	€	€	Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \à AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ /Ð /Ð /Ð /Ð /Ð /ð-)ð -)ð -)ð -)ð -)˜Ô*ñ -)ô -)ð -)ð` ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   