§
    ÙÍ¾jñ  ã                   ó¸   — d Z 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
mZmZ ddlmZ ddlmZ  G d„ de	j        ¦  «        Zedk    r e	j        ¦   «          dS dS )	aº  
Adversarial Empirical Challenge Suite: Boss Gate & Server Spawn Validation.
Covers:
1. 1,000 randomized tile coordinates across real procedural maps:
   - 100% rejection on WALL, CHASM, WATER, BOSS_GATE, VOID.
   - 100% acceptance on FLOOR, PATH, POI, ENCOUNTER_*.
2. Safe Haven Purity (zone_player_hideout, zone_boundless_sanctuary):
   - 100% rejection of hostile spawns across 200 trials.
   - Explicit verification of target dummy exemption.
3. Server Boss Gate Lifecycle & Mutation:
   - BOSS_GATE spawn rejection, breach mutation, walkable flag.
4. Out-of-Bounds & Extreme Coordinate Fuzzing (negative, large, sys.maxsize).
5. Dual signature compatibility (positional vs keyword arguments).
é    N)ÚTileTypeÚMapGridData)ÚProceduralMapEngine)Ú
ZoneEnginec                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú)TestBossGateAndSpawnValidationAdversarialc                 óR   — t          ¦   «         | _        t          j        ¦   «          d S )N)r   Úenginer   Úclear_zone_maps)Úselfs    ú_C:\Projects\FreeExile\tests\security_fuzzing\test_boss_gate_and_spawn_validation_adversarial.pyÚsetUpz/TestBossGateAndSpawnValidationAdversarial.setUp   s"   € Ý ‘l”lˆŒÝÔ+Ñ-Ô-Ð-Ð-Ð-ó    c                 óÜ  — g d¢}t          j        d¦  «         d}d}|D �]ƒ}t          j        |d¬¦  «        }t          j        ||¦  «         t          d¦  «        D �]D}t          j        d|j        dz   ¦  «        }t          j        d|j        dz   ¦  «        }t          j	        |||¦  «        }	| j
                             |||¬	¦  «        \  }
}|	t          j        t          j        t          j        t          j        t          j        fv s|	                     ¦   «         sB|                      |
d
|	j        › d|› d|› d�¦  «         |                      d|¦  «         |dz  }�Œ|                      |
d
|	j        › d|› d|› d�¦  «         |                      d|¦  «         |dz  }�ŒF�Œ…|                      |dd¦  «         |                      |dd¦  «         |                      ||z   dd¦  «         dS )z>Generates actual maps and tests 1,000 randomized tile lookups.)Úzone_tang_kiem_nhaiÚzone_ancient_sword_barrowÚzone_boundless_sandstormi‰(5r   i9  ©Úseedi^  éûÿÿÿé   ©ÚtxÚtyzTile z at (z, z) should be rejected!õ   khÃ´ng thá»ƒ Ä‘i quaé   z) should be allowed!u
   há»£p lá»‡iô  z/Should have tested significant impassable tileséd   z-Should have tested significant passable tilesiè  z$Must test at least 1,000 coordinatesN)Úrandomr   r   Úgenerate_wilderness_mapÚset_zone_mapÚrangeÚrandintÚwidthÚheightÚget_tile_typer
   Úvalidate_monster_spawnr   ÚWALLÚCHASMÚWATERÚ	BOSS_GATEÚVOIDÚis_passableÚassertFalseÚnameÚassertInÚ
assertTrueÚassertGreaterÚassertGreaterEqual)r   ÚzonesÚimpassable_countÚpassable_countÚzone_idÚmap_dataÚ_r   r   Ú	tile_typeÚallowedÚreasons               r   ÚCtest_01_randomized_coordinates_reject_impassable_tiles_1000_sampleszmTestBossGateAndSpawnValidationAdversarial.test_01_randomized_coordinates_reject_impassable_tiles_1000_samples   s1  € à`Ð`Ð`ˆÝŒ�HÑÔÐàÐØˆàð 	(ñ 	(ˆGÝ*ÔBÀ7ÐQUÐVÑVÔVˆHÝÔ,¨W°hÑ?Ô?Ð?õ ˜3‘Z”Zð (ñ (�Ý”^ B¨¬¸Ñ(:Ñ;Ô;�Ý”^ B¨¬¸!Ñ(;Ñ<Ô<�å/Ô=¸gÀrÈ2ÑNÔN�	Ø"&¤+×"DÒ"DÀWÐQSÐXZÐ"DÑ"[Ô"[‘�˜à¥¤µ´ÅÄÕPXÔPbÕdlÔdqÐ rÐrÐrð  {D÷  {Pò  {Pñ  {Rô  {RÐrØ×$Ò$ WÐ.j°i´nÐ.jÐ.jÈ2Ð.jÐ.jÐQSÐ.jÐ.jÐ.jÑkÔkÐkØ—M’MÐ"8¸&ÑAÔAÐAØ$¨Ñ)Ð$Ñ$à—O’O GÐ-h°Y´^Ð-hÐ-hÈ"Ð-hÐ-hÐPRÐ-hÐ-hÐ-hÑiÔiÐiØ—M’M ,°Ñ7Ô7Ð7Ø" aÑ'�N‘Nñ(ð  	×ÒÐ+¨SÐ2cÑdÔdÐdØ×Ò˜>¨3Ð0_Ñ`Ô`Ð`Ø×ÒÐ 0°>Ñ AÀ4ÐIoÑpÔpÐpÐpÐpr   c                 óÊ  — ddg}t          j        d¦  «         |D �]Æ}|                      | j                             |¦  «        ¦  «         t          d¦  «        D �]…}t          j        dd¦  «        }t          j        dd¦  «        }t          j        dd¦  «        }t          j        dd¦  «        }| j                             |d	¬
¦  «        \  }}	|                      |¦  «         |  	                    d|	¦  «         | j                             |d	||¬¦  «        \  }}	|                      |¦  «         |  	                    d|	¦  «         | j                             |d	||¬¦  «        \  }}	|                      |¦  «         |  	                    d|	¦  «         | j                             |d||¬¦  «        \  }
}|  
                    |
¦  «         |  	                    d|¦  «         �Œ‡�ŒÈdS )zXVerifies 100% rejection of hostile monster spawns in Safe Haven zones across 200 trials.Úzone_player_hideoutÚzone_boundless_sanctuaryi'  r   g      IÀg      I@iìÿÿÿé2   F)Úis_dummyu=   NghiÃªm cáº¥m sáº£n sinh quÃ¡i váº­t trong khu vá»±c An ToÃ n)rA   ÚxÚy)rA   r   r   Tu   KhÃ´i Lá»—i Luyá»‡n VÃµN)r   r   r-   r
   Úcan_spawn_hostile_monstersr!   Úuniformr"   r&   r/   r0   )r   Ú
safe_zonesr6   r8   ÚrxÚryÚrtxÚrtyr:   ÚmsgÚdummy_allowedÚ	dummy_msgs               r   Ú6test_02_safe_haven_strict_purity_100_percent_rejectionz`TestBossGateAndSpawnValidationAdversarial.test_02_safe_haven_strict_purity_100_percent_rejection?   sþ  € à+Ð-GÐHˆ
ÝŒ�DÑÔÐà!ð 	Dñ 	DˆGØ×Ò˜Tœ[×CÒCÀGÑLÔLÑMÔMÐMå˜3‘Z”Zð Dñ D�Ý”^ E¨4Ñ0Ô0�Ý”^ E¨4Ñ0Ô0�Ý”n S¨"Ñ-Ô-�Ý”n S¨"Ñ-Ô-�ð  $œ{×AÒAÀ'ÐTYÐAÑZÔZ‘�˜Ø× Ò  Ñ)Ô)Ð)Ø—’Ð]Ð_bÑcÔcÐcð  $œ{×AÒAÀ'ÐTYÐ]_ÐceÐAÑfÔf‘�˜Ø× Ò  Ñ)Ô)Ð)Ø—’Ð]Ð_bÑcÔcÐcð  $œ{×AÒAÀ'ÐTYÐ^aÐfiÐAÑjÔj‘�˜Ø× Ò  Ñ)Ô)Ð)Ø—’Ð]Ð_bÑcÔcÐcð ,0¬;×+MÒ+MÈgÐ`dÐilÐqtÐ+MÑ+uÔ+uÑ(�˜yØ—’ Ñ.Ô.Ð.Ø—’Ð7¸ÑCÔCÐCÑCñ1Dð	Dð 	Dr   c                 óž  — d}t          j        |d¬¦  «        }t          j        ||¦  «         |                      |j        ¦  «         |j        \  }}|                      |j        |         |         j        t          j	        ¦  «         |  
                    |j        |         |         j        ¦  «         | j                             |||¬¦  «        \  }}|  
                    |¦  «         |                      d|¦  «         t          ¦   «                              |¦  «        }|                      |¦  «         |                      |j        ¦  «         |                      |j        |         |         j        ¦  «         |j                             ||f¦  «        }|r6|                      |j        ¦  «         |  
                    |j        ¦  «         dS dS )zAVerifies server-side boss gate tile blocking and breach mutation.r   i	  r   r   r*   N)r   r   r    ÚassertIsNotNoneÚ	boss_gateÚassertEqualÚtilesr9   r   r*   r-   Úwalkabler
   r&   r/   Úbreach_boss_gater0   Úboss_gate_breachedÚ	obstaclesÚgetÚis_destroyedÚblocks_movement)	r   r6   r7   ÚgxÚgyr:   r;   ÚbreachedÚobss	            r   Ú/test_03_boss_gate_server_lifecycle_and_mutationzYTestBossGateAndSpawnValidationAdversarial.test_03_boss_gate_server_lifecycle_and_mutationa   s«  € à'ˆÝ&Ô>¸wÈSÐQÑQÔQˆÝÔ(¨°(Ñ;Ô;Ð;à×Ò˜XÔ/Ñ0Ô0Ð0ØÔ#‰ˆˆBð 	×Ò˜œ¨Ô+¨BÔ/Ô9½8Ô;MÑNÔNÐNØ×Ò˜œ¨Ô+¨BÔ/Ô8Ñ9Ô9Ð9Øœ+×<Ò<¸WÈÐPRÐ<ÑSÔS‰ˆ�Ø×Ò˜Ñ!Ô!Ð!Ø�Š�k 6Ñ*Ô*Ð*õ 'Ñ(Ô(×9Ò9¸(ÑCÔCˆØ�Š˜Ñ!Ô!Ð!Ø�Š˜Ô3Ñ4Ô4Ð4Ø�Š˜œ rÔ*¨2Ô.Ô7Ñ8Ô8Ð8ð Ô ×$Ò$ b¨" XÑ.Ô.ˆØð 	2Ø�OŠO˜CÔ,Ñ-Ô-Ð-Ø×Ò˜SÔ0Ñ1Ô1Ð1Ð1Ð1ð	2ð 	2r   c                 ó.  — d}t          j        |d¬¦  «        }t          j        ||¦  «         ddd|j        |j        f|j        dz   dfd|j        dz   ft
          j        d	ft
          j         d	fd	t
          j        fd	t
          j         fg
}|D ]†\  }}t          j        |||¦  «        }|                      |t          j
        ¦  «         | j                             |||¬
¦  «        \  }}|                      |¦  «         |                      d|¦  «         Œ‡dS )z8Fuzzes extreme, negative, and out-of-bounds coordinates.r   é{   r   )éÿÿÿÿrb   )éayþÿé
   )rd   rc   r   r   r   r   r   N)r   r   r    r#   r$   ÚsysÚmaxsizer%   rR   r   r'   r
   r&   r-   r/   )	r   r6   r7   Úextreme_coordsr   r   r9   r:   r;   s	            r   Ú&test_04_adversarial_coordinate_fuzzingzPTestBossGateAndSpawnValidationAdversarial.test_04_adversarial_coordinate_fuzzing}   s/  € à'ˆÝ&Ô>¸wÈSÐQÑQÔQˆÝÔ(¨°(Ñ;Ô;Ð;ð ØØØŒ^˜Xœ_Ð-ØŒ^˜cÑ! 1Ð%Ø�” #Ñ%Ð&ÝŒ[˜!ÐÝŒkˆ\˜1ÐØ•”ÐØ•”�Ðð
ˆð %ð 	:ð 	:‰FˆB�å+Ô9¸'À2ÀrÑJÔJˆIØ×Ò˜Y­¬Ñ6Ô6Ð6à"œk×@Ò@ÀÈRÐTVÐ@ÑWÔW‰OˆG�VØ×Ò˜WÑ%Ô%Ð%Ø�MŠMÐ0°&Ñ9Ô9Ð9Ð9ð	:ð 	:r   c                 ó
  — d}t          j        |d¬¦  «        }t          j        ||¦  «         | j                             |dd¦  «        \  }}| j                             |dd¬¦  «        \  }}|                      ||¦  «         dS )zDEnsures backward compatibility between positional and keyword calls.r   ix  r   r   r   N)r   r   r    r
   r&   rR   )r   r6   r7   Úallowed_posr8   Ú
allowed_kws         r   Ú"test_05_dual_invocation_signatureszLTestBossGateAndSpawnValidationAdversarial.test_05_dual_invocation_signatures™   sŠ   € à'ˆÝ&Ô>¸wÈSÐQÑQÔQˆÝÔ(¨°(Ñ;Ô;Ð;ð œ×;Ò;¸GÀQÈÑJÔJ‰ˆ�Qàœ×:Ò:¸7ÀqÈQÐ:ÑOÔO‰ˆ
�Aà×Ò˜ jÑ1Ô1Ð1Ð1Ð1r   N)	Ú__name__Ú
__module__Ú__qualname__r   r<   rN   r_   rh   rl   © r   r   r   r      sv   € € € € € ð.ð .ð .ðqð qð qðB Dð  Dð  DðD2ð 2ð 2ð8:ð :ð :ð82ð 2ð 2ð 2ð 2r   r   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arr   re   ÚunittestÚserver.world.map_data_typesr   r   Ú"server.world.procedural_map_enginer   Úserver.world.zone_enginer   ÚTestCaser   rm   Úmainrp   r   r   ú<module>r      sÞ   ððð ð € € € € € € € € € € € € €€€€Ø 
€
€
€
Ø €€€à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø BÐ BÐ BÐ BÐ BÐ BØ /Ð /Ð /Ð /Ð /Ð /ðK2ð K2ð K2ð K2ð K2°Ô0Añ K2ô K2ð K2ð\ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   