
    i                         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
Z
ddlZej                  j                  dd       d Zd Zedk(  r e        yy)aN  Tests for Story 1.04 (Track B): ExecutionTelemetry Interceptor

Black Box Tests:
  BB1: pre_execute passes payload through unchanged + logs dispatch_start
  BB2: post_execute logs dispatch_complete with positive duration_ms
  BB3: on_error logs dispatch_error with error_type field
  BB4: on_correction logs dispatch_correction with attempt number

White Box Tests:
  WB1: _start_times populated during pre_execute
  WB2: _start_times consumed (removed) in post_execute
  WB3: All events are append-only (multiple writes visible in file)
  WB4: isinstance check + correct priority metadata
    Nz/mnt/e/genesis-systemc                     g }t        | d      5 }|D ]9  }|j                         }|s|j                  t        j                  |             ; 	 d d d        |S # 1 sw Y   |S xY w)Nr)openstripappendjsonloads)patheventsflines       6/mnt/e/genesis-system/tests/track_b/test_story_1_04.py_read_eventsr      sb    F	dC 0A 	0D::<Ddjj./	00
 M0
 Ms   A&AA#c                      t        j                  ddd      5 } | j                  d d d        t        j                  d<   dd l}dt        j                  v r"|j                  t        j                  d          ddl	m
} dd	lm  |       fd
}t        j                   |              t        j                         dt        j                  v rt        j                  d= t!        d       y # 1 sw Y   xY w)Nwz.jsonlF)modesuffixdeleteEVENTS_LOG_PATHr   z%core.interceptors.execution_telemetry)ExecutionTelemetryInterceptor)BaseInterceptorc                   5  K   ddddd} j                  |        d {   }|| u }|st        j                  d|fd|| f      dt        j                         v st        j
                  |      rt        j                  |      ndd	t        j                         v st        j
                  |       rt        j                  |       nd	d
z  }t        j                  d      dz   d|iz  }t        t        j                  |            d }t               }t        |      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  t              rt        j                  t              nddt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	t        j                  d      dz   d|	iz  }
t        t        j                  |
            d x}x}}|d   }|d   }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d|d          dz   d|iz  }	t        t        j                  |	            d x}x}}|d    }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|d"   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|d#   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}d$}||v }|st        j                  d%|fd&||f      t        j                  |      d't        j                         v st        j
                  |      rt        j                  |      nd'd(z  }d)d*|iz  }t        t        j                  |            d x}}t        d+       d,d l}|j                  d-       j                  d.d/i|        d {    t               }|D cg c]  }|d   d0k(  s| }}t        |      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  t              rt        j                  t              ndd1t        j                         v st        j
                  |      rt        j                  |      nd1t        j                  |      t        j                  |      dz  }	t        j                  d2      dz   d|	iz  }
t        t        j                  |
            d x}x}}|d   }|d    }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|d.   }d/}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|d3   }d,}||kD  }|st        j                  d4|fd5||f      t        j                  |      t        j                  |      dz  }t        j                  d6|d3          dz   d|iz  }	t        t        j                  |	            d x}x}}d$}||v }|st        j                  d%|fd&||f      t        j                  |      d7t        j                         v st        j
                  |      rt        j                  |      nd7d(z  }d)d*|iz  }t        t        j                  |            d x}}t        d8|d3           j!                  t#        d9      d d:i       d {    t               }|D cg c]  }|d   d;k(  s| }}t        |      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  t              rt        j                  t              ndd<t        j                         v st        j
                  |      rt        j                  |      nd<t        j                  |      t        j                  |      dz  }	t        j                  d=      dz   d|	iz  }
t        t        j                  |
            d x}x}}|d   }|d    }d:}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|d>   }d?}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|d@   }d9}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}d$}||v }|st        j                  d%|fd&||f      t        j                  |      dAt        j                         v st        j
                  |      rt        j                  |      ndAd(z  }d)d*|iz  }t        t        j                  |            d x}}t        dB       j%                  dCdDdEdF       d {   }t               }|D cg c]  }|d   dGk(  s| }}t        |      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  t              rt        j                  t              nddHt        j                         v st        j
                  |      rt        j                  |      ndHt        j                  |      t        j                  |      dz  }	t        j                  dI      dz   d|	iz  }
t        t        j                  |
            d x}x}}|d   }|d    }dC}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}|dJ   }dD}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d!d|iz  }	t        t        j                  |	            d x}x}}d$}||v }|st        j                  d%|fd&||f      t        j                  |      dKt        j                         v st        j
                  |      rt        j                  |      ndKd(z  }d)d*|iz  }t        t        j                  |            d x}}|dL   }dE}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  dM      dz   d|iz  }	t        t        j                  |	            d x}x}}t        dN       d dOi}j                  |       d {    dO}j&                  }||v }|st        j                  d%|fdP||f      t        j                  |      dQt        j                         v st        j
                        rt        j                        ndQt        j                  |      dRz  }t        j                  dS      dTz   dU|iz  }t        t        j                  |            d x}x}}t        dV       j                  d.dWi|       d {    dO}j&                  }||v}|st        j                  dX|fdY||f      t        j                  |      dQt        j                         v st        j
                        rt        j                        ndQt        j                  |      dRz  }t        j                  dZ      dTz   dU|iz  }t        t        j                  |            d x}x}}t        d[       t               }t        |      }d\}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  t              rt        j                  t              nddt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	t        j                  d]t        |             dz   d|	iz  }
t        t        j                  |
            d x}x}}|D cg c]  }|d   	 }}d}||v }|st        j                  d%|fd&||f      t        j                  |      d^t        j                         v st        j
                  |      rt        j                  |      nd^d(z  }d)d*|iz  }t        t        j                  |            d x}}d0}||v }|st        j                  d%|fd&||f      t        j                  |      d^t        j                         v st        j
                  |      rt        j                  |      nd^d(z  }d)d*|iz  }t        t        j                  |            d x}}d;}||v }|st        j                  d%|fd&||f      t        j                  |      d^t        j                         v st        j
                  |      rt        j                  |      nd^d(z  }d)d*|iz  }t        t        j                  |            d x}}dG}||v }|st        j                  d%|fd&||f      t        j                  |      d^t        j                         v st        j
                  |      rt        j                  |      nd^d(z  }d)d*|iz  }t        t        j                  |            d x}}t        d_t        |       d`       t)              }|st        j                  da      dbz   dct        j                         v st        j
                  t(              rt        j                  t(              ndcdQt        j                         v st        j
                        rt        j                        ndQddt        j                         v st        j
                        rt        j                        nddt        j                  |      dez  }t        t        j                  |            d }j*                  }|j,                  }df}||k(  }|st        j                  d|fdg||f      dQt        j                         v st        j
                        rt        j                        ndQt        j                  |      t        j                  |      t        j                  |      dhz  }didj|iz  }t        t        j                  |            d x}x}x}}j*                  }|j.                  }d,}||k(  }|st        j                  d|fdk||f      dQt        j                         v st        j
                        rt        j                        ndQt        j                  |      t        j                  |      t        j                  |      dhz  }t        j                  dlj*                  j.                         dmz   dj|iz  }t        t        j                  |            d x}x}x}}j*                  }|j0                  }dn}||u }|st        j                  d|fdo||f      dQt        j                         v st        j
                        rt        j                        ndQt        j                  |      t        j                  |      t        j                  |      dhz  }didj|iz  }t        t        j                  |            d x}x}x}}t        dp       y 7 97 $c c}w 7 fc c}w 7 c c}w 7 
(7 	'c c}w w)qNztest-001buildtestpro)task_idtypeprompttier)is)z%(py0)s is %(py2)sresultpayload)py0py2z;pre_execute MUST return the same dict object (pass-through)z
>assert %(py4)spy4   )>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)slenr   )r#   py1py3py6z+Expected at least 1 event after pre_executez
>assert %(py8)spy8eventdispatch_start)==)z%(py1)s == %(py4)s)r)   r%   zExpected dispatch_start, got z
>assert %(py6)sr+   r   zassert %(py6)s	task_typer   	timestamp)in)z%(py1)s in %(py3)s	start_evt)r)   r*   zassert %(py5)spy5z<BB1 PASSED: pre_execute pass-through + dispatch_start loggedr   g{Gz?status	completeddispatch_completecomplete_eventsz+Expected at least 1 dispatch_complete eventduration_ms)>)z%(py1)s > %(py4)szduration_ms should be > 0, got c_evtz6BB2 PASSED: dispatch_complete logged with duration_ms=z
test errorztest-002dispatch_errorerror_eventsz(Expected at least 1 dispatch_error event
error_type
ValueError	error_msge_evtz9BB3 PASSED: dispatch_error logged with correct error_typeztest-003   x)r   attemptdatadispatch_correctioncorr_eventsz-Expected at least 1 dispatch_correction eventrE   corr_evtrF   z0on_correction must return the correction_payloadzMBB4 PASSED: dispatch_correction logged with attempt=2, payload passed throughztest-004)z4%(py1)s in %(py5)s
{%(py5)s = %(py3)s._start_times
}	telemetry)r)   r*   r5   z5_start_times should contain task_id after pre_executez
>assert %(py7)spy7z5WB1 PASSED: _start_times populated during pre_executeok)not in)z8%(py1)s not in %(py5)s
{%(py5)s = %(py3)s._start_times
}z:_start_times should not contain task_id after post_executez1WB2 PASSED: _start_times consumed in post_execute   z.Expected >= 6 events total (append-only), got event_typesu&   WB3 PASSED: Append-only confirmed — z events in filez#Must be instance of BaseInterceptorz7
>assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   )r#   r)   r$   r%   execution_telemetry)zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.metadata
}.name
} == %(py7)s)r#   r$   r%   rK   zassert %(py9)spy9)zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.metadata
}.priority
} == %(py7)sz"Priority should be 0 (first), got z
>assert %(py9)sT)zM%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.metadata
}.enabled
} is %(py7)sz@WB4 PASSED: isinstance BaseInterceptor, priority=0, enabled=True)pre_execute
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanationr   r(   printtimesleeppost_executeon_errorr@   on_correction_start_timesrP   metadatanamepriorityenabled)!r"   r!   @py_assert1@py_format3@py_format5r   @py_assert2@py_assert5@py_assert4@py_format7@py_format9r4   @py_assert0@py_assert3@py_format4@py_format6r^   er9   r<   r>   rB   corr_resultrH   rI   payload2@py_format8rO   @py_assert6@py_format10r   rJ   test_logs!                                 r   	run_testsz+test_execution_telemetry.<locals>.run_tests3   sS    ('VUZ[ ,,W55 ___v______v___v_____________"_______h'6{NaN{aNNN{aNNNNNNsNNNsNNNNNN6NNN6NNN{NNNaNNN!NNNNNNNN2J	!k%5k!%55kkk!%5kkk!kkk%5kkk9VW`ahWiVj7kkkkkkkk#1z1#z1111#z111#111z1111111%00%0000%000%0000000000 )E) E)))) E))) )))E)))))))'{i''''{i'''{''''''i'''i'''''''LM 	

4$$h%<gFFFh'&,R'
>Q0Q1RR?#WqW#q(WWW#qWWWWWWsWWWsWWWWWW?WWW?WWW#WWWqWWW*WWWWWWWW#Y-:-:----:------:-------X-+-+----+------+-------]#aaa#a'aaa#aaaa#aaaaaaa+J5Q^K_J`)aaaaaaaa#{e####{e###{######e###e#######Fu]G[F\]^   L!9Iz;RSSSh'#)LaQwZ;K-KLL< QAQ A%QQQ AQQQQQQsQQQsQQQQQQ<QQQ<QQQ QQQAQQQ'QQQQQQQQR Y-:-:----:------:-------\"2l2"l2222"l222"222l2222222[!1\1!\1111!\111!111\1111111#{e####{e###{######e###e#######IJ &33
WXbe4fggh'"(PQAgJ:O,OqPP;U1U1$UUU1UUUUUUsUUUsUUUUUU;UUU;UUUUUU1UUU&UUUUUUUUr?	"0j0"j0000"j000"000j0000000	"'a'"a''''"a'''"'''a'''''''&{h&&&&{h&&&{&&&&&&h&&&h&&&&&&&6"]c]"c)]]]"c]]]"]]]c]]]+]]]]]]]]]^ z*##H---lY33lz33lllz3lllzllllllYlllYlll3lll5llllllllEF $$h%5x@@@u!7!7uz!77uuuz!7uuuzuuuuuuuuuuuu!7uuu9uuuuuuuuAB h'6{_a_{a___{a______s___s______6___6___{___a___#QRUV\R]Q^!________+12aqz22.;....;.........;...;......."1"k1111"k111"111111k111k1111111.;....;.........;...;.......$3$3333$333$33333333333333336s6{m?ST )_5\5\\7\\\\\\\z\\\z\\\\\\)\\\)\\\\\\_\\\_\\\5\\\\\\!!?!&&?*??&*?????&*???????y???y???!???&???*????????!!s!**sas*a/sss*assssssysssysss!sss*sssasss3UV_VhVhVqVqUr1ssssssss!!1!))1T1)T1111)T111111y111y111!111)111T1111111PQ_ 6  	G S 	TL hP 	.
 	A 3s   Ai>AiTAi>7Ai8Ai>AiAiN Ai>=Ai#>Ai>Ai&Ai&#M6Ai>Ai+Ai>-Ai.;Ai.?NAi>AAi3ADAi>EAi6EH.Ai>M>Ai9N
[Ai>iAi>iAi>i&Ai>i.Ai>i6Ai>i9Ai>uL   
ALL 8 TESTS PASSED — Story 1.04 (Track B): ExecutionTelemetry Interceptor)tempfileNamedTemporaryFilere   osenviron	importlibsysmodulesreload%core.interceptors.execution_telemetryr   "core.interceptors.base_interceptorr   asynciorununlinkr]   )r   r   r   r{   r   rJ   rz   s       @@@r   test_execution_telemetryr   "   s    		$	$#hu	M QR66 %-BJJ ! .#++=%LMNSB-/IRRh KK	 IIhBJJ&JJ()	
YZU s   C44C=__main__)__doc__builtinsrV   _pytest.assertion.rewrite	assertionrewriterT   r   r   r~   r|   r   r
   insertr   r   __name__     r   <module>r      sT       	  
 * +l[^ z r   