§
    ÔÌ½jˆ#  ã                  óÖ   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ  G d„ d	ej        ¦  «        Zed
k    r ej        ¦   «          dS dS )zý
Unit Tests for 1M CCU Chat Load Benchmark Suite (tools/stress/chat_load_benchmark.py).
Verifies CLI Parsing, Percentile Math, 8-Channel Generation, Concurrent Publishers,
HMAC Queries, Memory Leak Slope Calculation, and End-to-End Benchmark Execution.
é    )ÚannotationsN)ÚList)ÚChatService)ÚChatChannelTypeÚChatMessageDTO)ÚBenchmarkConfigÚBenchmarkSummaryÚRoundMetricsÚ_dispatch_concurrent_workÚ_hmac_query_workerÚ_publisher_workerÚcalculate_percentilesÚexecute_roundÚgenerate_round_requestsÚ
parse_argsÚprovision_subscribersÚprovision_test_itemsÚrun_benchmarkc                  ór   — e Zd ZdZe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 )ÚTestChatLoadBenchmarkz:Unit test suite covering the 1M CCU stress benchmark tool.ÚreturnÚNonec                ób   — dd l }|                     ¦   «         r|                     ¦   «          d S d S )Nr   )ÚtracemallocÚ
is_tracingÚstop)Úclsr   s     ú<C:\Projects\FreeExile\tests\unit\test_chat_load_benchmark.pyÚtearDownClassz#TestChatLoadBenchmark.tearDownClass"   sD   € àÐÐÐØ×!Ò!Ñ#Ô#ð 	Ø×ÒÑÔÐÐÐð	ð 	ó    c              ƒ  ó4   K  — t          d¬¦  «        | _        d S )Né   )Úcluster_shards)r   Úchat_service)Úselfs    r   Ú
asyncSetUpz TestChatLoadBenchmark.asyncSetUp(   s   è è € Ý'°rÐ:Ñ:Ô:ˆÔÐÐr    c                óÎ  — t          g ¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         t          g d¢¦  «        }|                      |j        d¦  «         |                      |j        d	¦  «         |                      |j        d
¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         dS )z4Verifies CLI argument parser defaults and overrides.i@B iˆ  iè  é
   é   é@   )z--simulated-ccuÚ500000z--active-sample-subscribersÚ2000z--message-countÚ400z--concurrencyÚ8z--leak-check-roundsÚ2z--shardsÚ32i ¡ iÐ  i�  é   é   é    N)r   ÚassertEqualÚsimulated_ccuÚactive_sample_subscribersÚmessage_countÚconcurrencyÚleak_check_roundsr#   )r%   Údefault_cfgÚ
custom_cfgs      r   Ú&test_01_parse_args_defaults_and_customz<TestChatLoadBenchmark.test_01_parse_args_defaults_and_custom+   s_  € å  ‘n”nˆØ×Ò˜Ô2°IÑ>Ô>Ð>Ø×Ò˜Ô>ÀÑFÔFÐFØ×Ò˜Ô2°EÑ:Ô:Ð:Ø×Ò˜Ô0°"Ñ5Ô5Ð5Ø×Ò˜Ô6¸Ñ:Ô:Ð:Ø×Ò˜Ô3°RÑ8Ô8Ð8åð !
ð !
ð !
ñ ô ˆ
ð 	×Ò˜Ô1°7Ñ;Ô;Ð;Ø×Ò˜Ô=¸uÑEÔEÐEØ×Ò˜Ô1°3Ñ7Ô7Ð7Ø×Ò˜Ô/°Ñ3Ô3Ð3Ø×Ò˜Ô5°qÑ9Ô9Ð9Ø×Ò˜Ô2°BÑ7Ô7Ð7Ð7Ð7r    c                óŽ  — t          g ¦  «        }|                      |d         d¦  «         |                      |d         d¦  «         t          dg¦  «        }|                      |d         d¦  «         |                      |d         d¦  «         |                      |d         d¦  «         d„ t          dd¦  «        D ¦   «         }t          |¦  «        }|                      |d         d	¦  «         |                      |d
         d¦  «         |                      |d         d¦  «         |                      |d         d¦  «         dS )zEValidates statistical percentile calculation including p50, p95, p99.Úp50ç        Úp99g      /@Úavgc                ó,   — g | ]}t          |¦  «        ‘ŒS © )Úfloat)Ú.0Úxs     r   ú
<listcomp>zLTestChatLoadBenchmark.test_02_calculate_percentiles_math.<locals>.<listcomp>O   s   € Ð0Ð0Ð0˜Q•�a‘”Ð0Ð0Ð0r    é   ée   g     €I@Úp95g      X@g      Y@g     @I@N)r   r4   Úrange)r%   ÚemptyÚsingleÚdataÚstatss        r   Ú"test_02_calculate_percentiles_mathz8TestChatLoadBenchmark.test_02_calculate_percentiles_mathD   s6  € å% bÑ)Ô)ˆØ×Ò˜˜uœ sÑ+Ô+Ð+Ø×Ò˜˜uœ sÑ+Ô+Ð+å&¨ vÑ.Ô.ˆØ×Ò˜ œ¨Ñ-Ô-Ð-Ø×Ò˜ œ¨Ñ-Ô-Ð-Ø×Ò˜ œ¨Ñ-Ô-Ð-à0Ð0¥%¨¨3¡-¤-Ð0Ñ0Ô0ˆÝ% dÑ+Ô+ˆØ×Ò˜˜uœ tÑ,Ô,Ð,Ø×Ò˜˜uœ tÑ,Ô,Ð,Ø×Ò˜˜uœ uÑ-Ô-Ð-Ø×Ò˜˜uœ tÑ,Ô,Ð,Ð,Ð,r    c                óº  — t          | j        d¬¦  «        }|                      t          |¦  «        d¦  «         |D ]ž\  }}|                      |                     d¦  «        ¦  «         |                      t          |¦  «        ¦  «         | j                             ||¦  «        }|                      |j        ¦  «         |  	                    |j
        ¦  «         ŒŸdS )z>Verifies cryptographic item snapshots are generated and valid.é   ©ÚcountÚbench_item_blade_N)r   r$   r4   ÚlenÚ
assertTrueÚ
startswithÚboolÚquery_item_snapshotÚis_validÚassertIsNotNoneÚitem_snapshot)r%   Ú	snapshotsÚuuid_strÚsigÚress        r   Útest_03_provision_test_itemsz2TestChatLoadBenchmark.test_03_provision_test_itemsV   sÏ   € å(¨Ô):À!ÐDÑDÔDˆ	Ø×Ò�˜Y™œ¨Ñ+Ô+Ð+Ø&ð 	4ð 	4‰MˆH�cØ�OŠO˜H×/Ò/Ð0CÑDÔDÑEÔEÐEØ�OŠO�D ™IœIÑ&Ô&Ð&ØÔ#×7Ò7¸À#ÑFÔFˆCØ�OŠO˜CœLÑ)Ô)Ð)Ø× Ò  Ô!2Ñ3Ô3Ð3Ð3ð	4ð 	4r    c                ó  — g }t          | j        d|j        ¬¦  «        }|                      |d¦  «         | j        j        j        }|                      t          |                     d¦  «        ¦  «        d¦  «         |                      t          |                     d¦  «        ¦  «        d¦  «         |                      t          |                     d¦  «        ¦  «        d¦  «         |                      t          |                     d¦  «        ¦  «        d¦  «         |                      t          |                     d¦  «        ¦  «        d¦  «         |                      t          |                     d	¦  «        ¦  «        d¦  «         d
S )zJVerifies subscriber handles are registered across shards for all channels.é2   ©rT   ÚsinkÚworldr   ÚsystemÚrecruitzzone:zone_mainzguild:guild_mainzparty:party_mainN)r   r$   ÚappendÚassertGreaterÚcluster_routerÚregistryrV   Úget_callbacks)r%   Ú	deliveredrT   Úregs       r   Útest_04_provision_subscribersz3TestChatLoadBenchmark.test_04_provision_subscribersa   sV  € à*,ˆ	Ý% dÔ&7¸rÈ	ÔHXÐYÑYÔYˆØ×Ò˜5 "Ñ%Ô%Ð%ØÔÔ.Ô7ˆØ×Ò�3˜s×0Ò0°Ñ9Ô9Ñ:Ô:¸AÑ>Ô>Ð>Ø×Ò�3˜s×0Ò0°Ñ:Ô:Ñ;Ô;¸QÑ?Ô?Ð?Ø×Ò�3˜s×0Ò0°Ñ;Ô;Ñ<Ô<¸aÑ@Ô@Ð@Ø×Ò�3˜s×0Ò0Ð1AÑBÔBÑCÔCÀQÑGÔGÐGØ×Ò�3˜s×0Ò0Ð1CÑDÔDÑEÔEÀqÑIÔIÐIØ×Ò�3˜s×0Ò0Ð1CÑDÔDÑEÔEÀqÑIÔIÐIÐIÐIr    c                ó<  — t          dd¬¦  «        }|                      t          |¦  «        d¦  «         d„ |D ¦   «         }|                      t          |¦  «        d¦  «         |                      t          j        |¦  «         |                      t          j        |¦  «         |                      t          j        |¦  «         |                      t          j        |¦  «         |                      t          j	        |¦  «         |                      t          j
        |¦  «         |                      t          j        |¦  «         |                      t          j        |¦  «         d„ |D ¦   «         }|                      t          d„ |D ¦   «         ¦  «        ¦  «         dS )	z<Verifies round request generator covers all 8 channel types.rH   é(   ©Ú	round_idxÚtotal_countc                ó   — h | ]	}|j         ’Œ
S rC   )Úchannel©rE   Úrs     r   ú	<setcomp>zSTestChatLoadBenchmark.test_05_generate_round_requests_8_channels.<locals>.<setcomp>r   s   € Ð2Ð2Ð2¨˜!œ)Ð2Ð2Ð2r    r1   c                ó<   — g | ]}|j         t          j        k    ¯|‘ŒS rC   )rx   r   ÚWHISPERry   s     r   rG   zTTestChatLoadBenchmark.test_05_generate_round_requests_8_channels.<locals>.<listcomp>~   s'   € ÐLÐLÐL˜! q¤yµOÔ4KÒ'KÐ'K�AÐ'KÐ'KÐ'Kr    c              3  ó,   K  — | ]}|j         d k    V — ŒdS )r   N)Ú	target_id)rE   Úws     r   ú	<genexpr>zSTestChatLoadBenchmark.test_05_generate_round_requests_8_channels.<locals>.<genexpr>   s(   è è € Ð>Ð>°˜AœK¨!šOÐ>Ð>Ð>Ð>Ð>Ð>r    N)r   r4   rV   ÚassertInr   ÚWORLDÚZONEÚGUILDÚPARTYr}   ÚSYSTEMÚRECRUITÚFEEDBACKrW   Úall)r%   ÚreqsÚchannels_foundÚwhisperss       r   Ú*test_05_generate_round_requests_8_channelsz@TestChatLoadBenchmark.test_05_generate_round_requests_8_channelsn   s^  € å&°ÀÐCÑCÔCˆØ×Ò�˜T™œ BÑ'Ô'Ð'Ø2Ð2¨TÐ2Ñ2Ô2ˆØ×Ò�˜^Ñ,Ô,¨aÑ0Ô0Ð0Ø�Š•oÔ+¨^Ñ<Ô<Ð<Ø�Š•oÔ*¨NÑ;Ô;Ð;Ø�Š•oÔ+¨^Ñ<Ô<Ð<Ø�Š•oÔ+¨^Ñ<Ô<Ð<Ø�Š•oÔ-¨~Ñ>Ô>Ð>Ø�Š•oÔ,¨nÑ=Ô=Ð=Ø�Š•oÔ-¨~Ñ>Ô>Ð>Ø�Š•oÔ.°Ñ?Ô?Ð?ð MÐL˜tÐLÑLÔLˆØ�Š�Ð>Ð>°XÐ>Ñ>Ô>Ñ>Ô>Ñ?Ô?Ð?Ð?Ð?r    c              ƒ  óF  ‡‡‡K  — t          | j        dd„ ¬¦  «         t          | j        d¬¦  «        }t          dd¬¦  «        }g Š| j        j        Š| j        j        j        Šdˆˆfd„}dˆˆfd„}|| j        _        || j        j        _        	 t          | j        ||dd¬¦  «        ƒ d{V —†\  }}}}‰| j        _        ‰| j        j        _        n"# ‰| j        _        ‰| j        j        _        w xY w|                      |d¦  «         |  	                    |d¦  «         |                      |d¦  «         |                      t          |¦  «        d¦  «         |                      t          d„ |D ¦   «         ¦  «        ¦  «         d„ t          ‰¦  «        D ¦   «         }	d„ t          ‰¦  «        D ¦   «         }
|                      t          |	¦  «        dk    ot          |
¦  «        dk    ¦  «         |                      t          |
¦  «        t!          |	¦  «        d¦  «         dS )zFTests concurrent worker execution with genuine coroutine interleaving.r(   c                ó   — d S ©NrC   ©Ú_s    r   ú<lambda>zUTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers.<locals>.<lambda>ƒ   ó   € È$€ r    re   rR   rS   rH   é   rt   ÚreqÚAnyr   c              “  óT   •K  — ‰                      d¦  «          ‰| ¦  «        ƒ d {V —†S )NÚPUB©rj   )r—   Ú	orig_sendÚtraces    €€r   Útracked_sendzYTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers.<locals>.tracked_sendŠ   s9   øè è € Ø�LŠL˜ÑÔÐØ"˜ 3™œÐ'Ð'Ð'Ð'Ð'Ð'Ð'r    r_   Ústrr`   c                óF   •— ‰                      d¦  «          ‰| |¦  «        S )NÚQUERYr›   )r_   r`   Ú
orig_queryr�   s     €€r   Útracked_queryzZTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers.<locals>.tracked_queryŽ   s'   ø€ Ø�LŠL˜Ñ!Ô!Ð!Ø�:˜h¨Ñ,Ô,Ð,r    r2   )r$   Úrequestsr^   Úquery_countr8   Nr   c              3  ó"   K  — | ]
}|d k    V — ŒdS )r?   NrC   )rE   Úlats     r   r�   zVTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers.<locals>.<genexpr>¡   s&   è è € Ð7Ð7¨3˜C 3šJÐ7Ð7Ð7Ð7Ð7Ð7r    c                ó$   — g | ]\  }}|d k    ¯|‘ŒS )rš   rC   ©rE   ÚiÚkinds      r   rG   zWTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers.<locals>.<listcomp>¢   s!   € ÐFÐFÐF™˜˜D¸Àº¸�1¸¸¸r    c                ó$   — g | ]\  }}|d k    ¯|‘ŒS )r¡   rC   r©   s      r   rG   zWTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers.<locals>.<listcomp>£   s!   € ÐFÐFÐF‘w�q˜$°d¸g²o°o�°o°o°or    z$Workers must interleave concurrently)r—   r˜   r   r˜   )r_   rŸ   r`   rŸ   r   r˜   )r   r$   r   r   Úhandle_send_chatÚitem_link_servicerZ   r   r4   rk   rV   rW   rŠ   Ú	enumerateÚ
assertLessÚminÚmax)r%   r^   r‹   rž   r£   ÚacceptedÚdelivÚhmac_okÚlatsÚpub_idxÚq_idxr¢   rœ   r�   s              @@@r   Ú-test_06_concurrent_publisher_and_hmac_workerszCTestChatLoadBenchmark.test_06_concurrent_publisher_and_hmac_workers�   sq  øøøè è € å˜dÔ/°rÀÀÐOÑOÔOÐOÝ(¨Ô):À!ÐDÑDÔDˆ	Ý&°ÀÐCÑCÔCˆØˆØÔ%Ô6ˆ	ØÔ&Ô8ÔLˆ
ð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð .:ˆÔÔ*ØBOˆÔÔ+Ô?ð	QÝ3LØ!Ô.¸ÈØ¨Að4ñ 4ô 4ð .ð .ð .ð .ð .ð .Ñ*ˆH�e˜W dð
 2;ˆDÔÔ.ØFPˆDÔÔ/ÔCÐCøð 2;ˆDÔÔ.ØFPˆDÔÔ/ÔCÐPÐPÐPÐPà×Ò˜ 2Ñ&Ô&Ð&Ø×Ò˜5 !Ñ$Ô$Ð$Ø×Ò˜ "Ñ%Ô%Ð%Ø×Ò�˜T™œ BÑ'Ô'Ð'Ø�Š�Ð7Ð7°$Ð7Ñ7Ô7Ñ7Ô7Ñ8Ô8Ð8ØFÐF¥I¨eÑ$4Ô$4ÐFÑFÔFˆØFÐF¥)¨EÑ"2Ô"2ÐFÑFÔFˆØ�Š�˜G™œ qÒ(Ð;­S°©Z¬Z¸!ª^Ñ<Ô<Ð<Ø�Š�˜E™
œ
¥C¨¡L¤LÐ2XÑYÔYÐYÐYÐYs   Â$C ÃC1c              ƒ  óv  K  — t          | j        d¬¦  «        }t          | j        dd„ ¬¦  «         t          dddd¬	¦  «        }t	          d
|| j        |¦  «        ƒ d{V —†}|                      |j        d
¦  «         |                      |j        d¦  «         |                      |j	        d¦  «         |                      |j
        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         dS )zFVerifies round execution captures valid metrics and latency telemetry.é   rS   r(   c                ó   — d S r‘   rC   r’   s    r   r”   zGTestChatLoadBenchmark.test_07_execute_round_telemetry.<locals>.<lambda>ª   r•   r    re   r"   r2   r1   )r7   r8   Úitem_query_countr#   rH   Nr   r?   g      .@g       @)r   r$   r   r   r   r4   Úround_indexÚmessages_acceptedrk   Údeliveries_countÚduration_secÚthroughput_msg_per_secÚhmac_queries_passedr°   Úp99_msÚhmac_p99_ms)r%   r^   ÚconfigÚms       r   Útest_07_execute_round_telemetryz5TestChatLoadBenchmark.test_07_execute_round_telemetry§   s;  è è € å(¨Ô):À!ÐDÑDÔDˆ	Ý˜dÔ/°rÀÀÐOÑOÔOÐOÝ ¨r¸qÐSTÐegÐhÑhÔhˆÝ  6¨4Ô+<¸iÑHÔHÐHÐHÐHÐHÐHÐHˆØ×Ò˜œ¨Ñ*Ô*Ð*Ø×Ò˜Ô,¨bÑ1Ô1Ð1Ø×Ò˜1Ô-¨qÑ1Ô1Ð1Ø×Ò˜1œ>¨3Ñ/Ô/Ð/Ø×Ò˜1Ô3°SÑ9Ô9Ð9Ø×Ò˜Ô.°Ñ2Ô2Ð2Ø�Š˜œ $Ñ'Ô'Ð'Ø�Š˜œ sÑ+Ô+Ð+Ð+Ð+r    c           	   ƒ  óì  K  — t          ddddddd¬¦  «        }t          |¦  «        ƒ d{V —†}|                      |t          ¦  «         |                      t          |j        ¦  «        d¦  «         |                      |j        ¦  «         |                      |j	        ¦  «         |                      |j
        ¦  «         |                      |j        ¦  «         |                      |j        d	¦  «         dS )
zNExecutes full multi-round benchmark on scaled parameters and verifies summary.i'  rd   r3   r»   r2   r"   )r5   r6   r7   r8   r9   r#   r½   Ngš™™™™™©?)r   r   ÚassertIsInstancer	   r4   rV   Úround_metricsrW   Úsla_latency_passedÚsla_hmac_passedÚsla_leak_passedÚoverall_passedÚassertLessEqualÚresidual_growth_mb)r%   rÆ   Úsummarys      r   Ú test_08_end_to_end_benchmark_runz6TestChatLoadBenchmark.test_08_end_to_end_benchmark_run¶   sû   è è € å Ø Ø&(ØØØØØð
ñ 
ô 
ˆõ & fÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-ˆØ×Ò˜gÕ'7Ñ8Ô8Ð8Ø×Ò�˜WÔ2Ñ3Ô3°QÑ7Ô7Ð7Ø�Š˜Ô2Ñ3Ô3Ð3Ø�Š˜Ô/Ñ0Ô0Ð0Ø�Š˜Ô/Ñ0Ô0Ð0Ø�Š˜Ô.Ñ/Ô/Ð/Ø×Ò˜WÔ7¸Ñ>Ô>Ð>Ð>Ð>r    N)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r&   r<   rP   rb   rq   rŽ   r¹   rÈ   rÓ   rC   r    r   r   r      sù   € € € € € ØDÐDàðð ð ñ „[ðð
;ð ;ð ;ð ;ð8ð 8ð 8ð 8ð2-ð -ð -ð -ð$	4ð 	4ð 	4ð 	4ðJð Jð Jð Jð@ð @ð @ð @ð&$Zð $Zð $Zð $ZðL,ð ,ð ,ð ,ð?ð ?ð ?ð ?ð ?ð ?r    r   Ú__main__)r×   Ú
__future__r   ÚunittestÚtypingr   Úserver.chat.chat_servicer   Úserver.chat.chat_typesr   r   Ú tools.stress.chat_load_benchmarkr   r	   r
   r   r   r   r   r   r   r   r   r   r   ÚIsolatedAsyncioTestCaser   rÔ   ÚmainrC   r    r   ú<module>râ      sZ  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð"i?ð i?ð i?ð i?ð i?˜HÔ<ñ i?ô i?ð i?ðX ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr    