§
    æÀj   ã            
       óˆ  — d dl Zd dlmc m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¦  «        ¦  «        ¦  «         ej
                             d ej
                             ej
                             ej
                             e¦  «        d¦  «        ¦  «        ¦  «         d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZ d dlZd dlZd dl Z  G d	„ d
ej!        ¦  «        Z"e#dk    r ej$        ¦   «          dS dS )é    Nz../../serverz../../)ÚServerEngineLoop)ÚFiveElements)ÚAgentOrbServiceÚAgentOrbTierÚDelegationSessionÚDelegationHarvestReport)ÚTacticalStance)ÚLLMProviderTypeÚLLMProviderConfigc                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestAgentOrbHMACc           	      óò   — t          ¦   «         | _        t          | j        d¬¦  «        | _        | j                             ddddt
          j        dd¬¦  «         | j                             ddd¬	¦  «         d S )
Nz:memory:)ÚengineÚdb_pathé   g        g      @g     @�@)Ú	entity_idÚ	initial_xÚ	initial_yÚ	initial_zÚelementÚ
move_speedÚmax_hpÚitem_agent_orb_tier1)Ú	player_idÚorb_idÚcount)r   r   r   ÚserviceÚregister_playerr   ÚHOAÚgrant_agent_orb)Úselfs    ú7C:\Projects\FreeExile\tests\unit\test_agent_orb_hmac.pyÚsetUpzTestAgentOrbHMAC.setUp   sƒ   € Ý&Ñ(Ô(ˆŒÝ&¨d¬kÀ:ÐNÑNÔNˆŒØŒ×#Ò#ØØØØÝ Ô$ØØð 	$ñ 	
ô 	
ð 	
ð 	Œ×$Ò$¨qÐ9OÐWXÐ$ÑYÔYÐYÐYÐYó    c                 óâ  — t          t          j        ¬¦  «        }| j                             ddt
          j        |¦  «         | j                             ddd¦  «         | j                             dd¬¦  «         | j         	                    d¬¦  «        }|  
                    |t          ¦  «         |                      t          |d	¦  «        ¦  «         |                      |j        d
¦  «         t           j                             dd¦  «                             d¦  «        }t)          j        |j        d¬¦  «        }|j        › |j        › |› |j        › �                     d¦  «        }t5          j        ||t8          j        ¦  «                             ¦   «         }|                      |j        |¦  «         |                      | j                              |¦  «        ¦  «         t          |j        |j!        |j"        |j#        |j        dz   |j$        |j         %                    ¦   «         |j&        |j        |j        ¬¦
  «
        }|  '                    | j                              |¦  «        ¦  «         d S )N)Úproviderr   r   Úcurr_chaos_stoneé   i4!  )Úexp)r   Úhmac_signatureÚ ÚAGENT_HMAC_SECRETÚdefault_freeexile_secretzutf-8T)Ú	sort_keysi'  )
Ú
session_idr   Útotal_duration_secÚactual_active_time_secÚ
exp_gainedÚmonsters_slainÚspirit_stones_lootedÚpotions_consumedÚreclaimed_timestampr*   )(r   r
   ÚLOCAL_TACTICALr   Úactivate_delegationr	   ÚTREASURE_HUNTERÚrecord_loot_harvestÚrecord_monster_slainÚreclaim_controlÚassertIsInstancer   Ú
assertTrueÚhasattrÚassertNotEqualr*   ÚosÚenvironÚgetÚencodeÚjsonÚdumpsr4   r/   r2   r6   ÚhmacÚnewÚhashlibÚsha256Ú	hexdigestÚassertEqualÚvalidate_harvest_reportr   r0   r1   r3   Úcopyr5   ÚassertFalse)r!   ÚcfgÚreportÚ
secret_keyÚ	drops_strÚpayloadÚexpected_sigÚtampered_reports           r"   Ú#test_reclaim_control_hmac_signaturez4TestAgentOrbHMAC.test_reclaim_control_hmac_signature'   s/  € Ý­Ô)GÐHÑHÔHˆØŒ×(Ò(¨Ð,BÅNÔDbÐdgÑhÔhÐhØŒ×(Ò(¨Ð,>ÀÑBÔBÐBØŒ×)Ò)¨!°Ð)Ñ6Ô6Ð6à”×-Ò-¸Ð-Ñ:Ô:ˆØ×Ò˜fÕ&=Ñ>Ô>Ð>ð 	�Š� Ð(8Ñ9Ô9Ñ:Ô:Ð:Ø×Ò˜FÔ1°2Ñ6Ô6Ð6õ ”Z—^’^Ð$7Ð9SÑTÔT×[Ò[Ð\cÑdÔdˆ
Ý”J˜vÔ:ÀdÐKÑKÔKˆ	ØÔ&Ðb¨Ô(9Ðb¸9ÐbÀfÔF`ÐbÐb×iÒiÐjqÑrÔrˆÝ”x 
¨GµW´^ÑDÔD×NÒNÑPÔPˆà×Ò˜Ô.°Ñ=Ô=Ð=Ø�Š˜œ×<Ò<¸VÑDÔDÑEÔEÐEõ 2ØÔ(ØÔ&Ø%Ô8Ø#)Ô#@ØÔ(¨5Ñ0Ø!Ô0Ø!'Ô!<×!AÒ!AÑ!CÔ!CØ#Ô4Ø &Ô :Ø!Ô0ð
ñ 
ô 
ˆð 	×Ò˜œ×=Ò=¸oÑNÔNÑOÔOÐOÐOÐOr$   N)Ú__name__Ú
__module__Ú__qualname__r#   rW   © r$   r"   r   r      s:   € € € € € ðZð Zð Zð#Pð #Pð #Pð #Pð #Pr$   r   Ú__main__)%ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚsysrA   ÚtimeÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úworld.server_engine_loopr   Úworld.martial_matrixr   Úworld.agent_orb_servicer   r   r   r   Úagent.agent_decision_corer	   Úagent.llm_provider_clientr
   r   rG   rI   rE   ÚTestCaser   rX   Úmainr[   r$   r"   ú<module>rs      sÊ  ðØ  € € € € € € € € € € € € €€€€Ø 
€
€
€
Ø 	€	€	€	Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \Ø „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ8Ñ#TÔ#TÑUÔUÑ VÔ VÐ Và 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hà €€€Ø €€€Ø €€€ð2Pð 2Pð 2Pð 2Pð 2P�xÔ(ñ 2Pô 2Pð 2Pðh ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr$   