
    /hh                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKJr  \
R                  (       d  \R                  " S5      eS rS r " S S5      r " S	 S
\5      r " S S\5      r " S S5      r " S S\\R*                  5      r " S S\\R*                  5      r " S S\\R*                  5      r " S S\\R*                  5      r " S S\R*                  5      r\S:X  a  \R8                  " 5         gg)    N)support)findfileztest module requires subprocessc                 P    [         R                  R                  [        U SS95      $ )N
dtracedata)subdir)ospathabspathr   )filenames    9/opt/python-3.13.8/usr/lib/python3.13/test/test_dtrace.pyr
   r
      s    77??8H\BCC    c                    [         R                  " SSU 5      n  U R                  5        Vs/ s H5  nU(       d  M  UR                  S5      (       a  M$  UR	                  S5      PM7     nnUR                  S S9  U Vs/ s H  oS   PM	     nnSR                  U5      $ s  snf s  snf ! [        [        4 a    [        S	R                  U 5      5      ef = f)
Nz\[[0-9]+ refs\] #	c                     [        U S   5      $ )Nr   )int)rows    r   <lambda>(normalize_trace_output.<locals>.<lambda>&   s    CAKr   )key   
z%tracer produced unparsable output:
{})resub
splitlines
startswithsplitsortjoin
IndexError
ValueErrorAssertionErrorformat)outputr   results      r   normalize_trace_outputr'      s     VV&F3F
 ((*
* >>#. CIIdO* 	 

 	/0$*+FSa&F+yy  
 ,
# 
4;;FC
 	

s3   B) BBB(B) >B$B) 
B) )+Cc                   N    \ rS rSrSrSr/ rS	S jrS	S jrS	S jr	S	S jr
S rSrg)
TraceBackend/   Nc           	      :   [        U R                  [        XR                  -   5      [        US-   5      US95      n[	        [        XR                  -   S-   5      5       nUR                  5       R                  5       nS S S 5        XS4$ ! , (       d  f       WU4$ = f)Nz.py)script_filepython_fileoptimize_pythonz	.expected)r'   trace_pythonr
   	EXTENSIONopenreadrstrip)selfnamer.   actual_outputfexpected_outputs         r   run_caseTraceBackend.run_case4   s    .t/@/@~~ 56u-+ 0A 0- .
 '$/+=>?1ffhoo/O @  // @?  //s   B		
Bc                 B    U R                   U/-   nU(       a  USU/-  nU$ )Nz-c)COMMAND)r4   r,   
subcommandcommands       r   generate_trace_command#TraceBackend.generate_trace_command?   s)    ,,+.j))Gr   c                     U R                  X5      n[        R                  " U[        R                  [        R                  SS9R                  5       u  pEU$ )NTstdoutstderruniversal_newlines)r?   
subprocessPopenPIPESTDOUTcommunicate)r4   r,   r=   r>   rC   _s         r   traceTraceBackend.traceE   sM    --kF$$W,6OO,6,=,=8<> ?Jkm 	 r   c                     / nU(       a  UR                  S/U-  5        SR                  [        R                  /U-   U/-   5      nU R	                  X5      $ )Nz-O )extendr    sys
executablerL   )r4   r,   r-   r.   python_flagsr=   s         r   r/   TraceBackend.trace_pythonM   sO     89XXs~~.=MN
zz+22r   c                 @    U R                  [        SU R                  -   5      5      nUR                  5       nUS:w  a3  [        R                  " SR                  U R                  S   U5      5      eg ! [        [
        [        4 a  n[        U5      n S nAN_S nAff = f)Nassert_usablezprobe: successz{}(1) failed: {}r   )rL   r
   r0   stripFileNotFoundErrorNotADirectoryErrorPermissionErrorstrunittestSkipTestr$   r<   )r4   r%   fnfes      r   rV   TraceBackend.assert_usableT   s    	ZZ$..(H IJF\\^F %%##"))$,,q/6B  & "#5G 	YF	s   7A3 3BBB N)__name__
__module____qualname____firstlineno__r0   r<   COMMAND_ARGSr9   r?   rL   r/   rV   __static_attributes__r`   r   r   r)   r)   /   s*    IGL	03	r   r)   c                        \ rS rSrSr/ SQrSrg)DTraceBackend`   z.d)dtracez-qz-sr`   Nrb   rc   rd   re   r0   r<   rg   r`   r   r   ri   ri   `   s    I$Gr   ri   c                        \ rS rSrSrSS/rSrg)SystemTapBackende   z.stpstapz-gr`   Nrl   r`   r   r   rn   rn   e   s    ItnGr   rn   c                   N    \ rS rSrSrSrSr\S 5       rS r	S r
S rS rS	 rS
rg)
TraceTestsj   Nr   c                 8    U R                   R                  5         g ra   )backendrV   r4   s    r   
setUpClassTraceTests.setUpClassr   s    ""$r   c                 p    U R                   R                  XR                  S9u  p#U R                  X#5        g )N)r.   )ru   r9   r.   assertEqual)r4   r5   r6   r8   s       r   r9   TraceTests.run_casev   s5    )-)>)>"6"6 *? *8&8r   c                 &    U R                  S5        g )N
call_stackr9   rv   s    r   test_function_entry_return%TraceTests.test_function_entry_return{   s    l#r   c                 4  ^ ^ [        / SQ5      n[        [        S5      5       nUR                  5       mS S S 5        UU 4S jnU" S5       H  nUR	                  UR
                  5        M      T R                  [        5       U5        g ! , (       d  f       NZ= f)N)CALL_FUNCTIONCALL_FUNCTION_EXCALL_FUNCTION_KWzcall_stack.pyc                    > [        TSSTR                  S9nUR                   HL  n[        U[        R
                  5      (       d  M$  UR                  U :X  d  M6  [        R                  " U5      s  $    / $ )Nz<string>exec)sourcer   modeoptimize)	compiler.   	co_consts
isinstancetypesCodeTypeco_namedisget_instructions)funcnamecodeccode_stringr4   s      r   get_function_instructionsFTraceTests.test_verify_call_opcodes.<locals>.get_function_instructions   sb    +$. &$($8$8:D
 ^^a00QYY(5J//22 $ Ir   start)setr1   r
   r2   discardopnamerz   )r4   opcodesr7   r   instructionr   s   `    @r   test_verify_call_opcodes#TraceTests.test_verify_call_opcodes~   st     OP'/*+q&&(K ,
	 5W=KOOK../ > 	(% ,+s   B		
Bc                 &    U R                  S5        g )Ngcr~   rv   s    r   test_gcTraceTests.test_gc   s    dr   c                 &    U R                  S5        g )Nliner~   rv   s    r   	test_lineTraceTests.test_line   s    fr   r`   )rb   rc   rd   re   maxDiffru   r.   classmethodrw   r9   r   r   r   r   rg   r`   r   r   rr   rr   j   s>    G GO% %9
$)2r   rr   c                   &    \ rS rSr\" 5       rSrSrg)DTraceNormalTests   r   r`   Nrb   rc   rd   re   ri   ru   r.   rg   r`   r   r   r   r          oGOr   r   c                   &    \ rS rSr\" 5       rSrSrg)DTraceOptimizedTests      r`   Nr   r`   r   r   r   r      r   r   r   c                   &    \ rS rSr\" 5       rSrSrg)SystemTapNormalTests   r   r`   Nrb   rc   rd   re   rn   ru   r.   rg   r`   r   r   r   r           GOr   r   c                   &    \ rS rSr\" 5       rSrSrg)SystemTapOptimizedTests   r   r`   Nr   r`   r   r   r   r      r   r   r   c                   d    \ rS rSr\S 5       r\S 5       rS rS r	\
R                  S 5       rSrg)	CheckDtraceProbes   c                     [         R                  " S5      (       a:  U R                  5       u  p[        R                  (       a  [        SU SU 35        g g [        R                  " S5      e)NWITH_DTRACEzreadelf version: .z9CPython must be configured with the --with-dtrace option.)	sysconfigget_config_varget_readelf_versionr   verboseprintr\   r]   )clsreadelf_major_versionreadelf_minor_versions      r   rw   CheckDtraceProbes.setUpClass   s_    ##M22;>;R;R;T8!)*?)@BWAXYZ  ##$_``r   c            
      n    SS/n [         R                  " U [         R                  [         R                  SS9nU   UR                  5       u  p#S S S 5        UR                  (       a3  [        SSR                  U 5      < SUR                   SW< S	W< 35      e [        R                  " SW5      nUc  [        R                  " SU 35      e[        UR                  S5      5      [        UR                  S5      5      4$ ! , (       d  f       N= f! [         a    [        R                  " S
5      ef = f)Nreadelfz	--versionTrB   zCommand rO   z failed with exit code z	: stdout=z stderr=z!Couldn't find readelf on the pathz!^(?:GNU) readelf.*?\b(\d+)\.(\d+)z!Unable to parse readelf version: r   r   )rF   rG   rH   rJ   
returncode	Exceptionr    OSErrorr\   r]   r   searchr   group)cmdprocversionrD   matchs        r   r   %CheckDtraceProbes.get_readelf_version   s!   	Ik*C##!!#'	D "&"2"2"4  sxx}/ 0&&*oo%6 7%[
<   		>H=##&Gy$QRR5;;q>"CA$777%   	I##$GHH	Is#   9D DAD 
DD !D4c                     SS[         R                  /n[        R                  " U[        R                  [        R
                  SS9R                  5       u  p#U$ )Nr   z-nTrB   )rQ   rR   rF   rG   rH   rI   rJ   )r4   r>   rC   rK   s       r   get_readelf_output$CheckDtraceProbes.get_readelf_output   sM    dCNN3$$??$$#	

 +- 	 r   c                     U R                  5       n/ SQnU H,  nU R                  US9   U R                  X15        S S S 5        M.     g ! , (       d  f       M@  = f)N)zName: import__find__load__donezName: import__find__load__startzName: auditzName: gc__startzName: gc__done
probe_namer   subTestassertIn)r4   readelf_outputavailable_probe_namesr   s       r   test_check_probes#CheckDtraceProbes.test_check_probes   sM    002!
 0J4j9 54 044   A
A	c                     U R                  5       n/ SQnU H,  nU R                  US9   U R                  X15        S S S 5        M.     g ! , (       d  f       M@  = f)N)zName: function__entryzName: function__returnz
Name: liner   r   )r4   r   missing_probe_namesr   s       r   test_missing_probes%CheckDtraceProbes.test_missing_probes   sM    002
 .J4j9 54 .44r   r`   N)rb   rc   rd   re   r   rw   staticmethodr   r   r   r\   expectedFailurer   rg   r`   r   r   r   r      sN    a a 8 8:: : :r   r   __main__)r   os.pathr   r   rF   rQ   r   r   r\   testr   test.supportr   has_subprocess_supportr]   r
   r'   r)   ri   rn   rr   TestCaser   r   r   r   r   rb   mainr`   r   r   <module>r      s    
  	  
     ! %%


=
>>D
2. .b%L %
| 
1 1h
H$5$5 
:x'8'8 
:x'8'8 
j(*;*; O:)) O:d zMMO r   