a ze@sddlZddlZddlZddlZddlZddlZddlZddlm Z ddZ ddZ GdddZ Gd d d e Z Gd d d e ZGd ddZGdddeejZGdddeejZGdddeejZGdddeejZedkredS)N)findfilecCstjt|ddS)NZ dtracedata)Zsubdir)ospathabspathr)filenamerD/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_dtrace.pyr src Csttdd|}zsz*normalize_trace_output..cSs t|dS)Nr)int)rrrr z(normalize_trace_output..)keycSsg|] }|dqS)rrrrrr!r z%tracer produced unparsable output: {}N) resub splitlinessortjoin IndexError ValueErrorAssertionErrorformat)outputresultrrrnormalize_trace_outputs  r#c@sHeZdZdZdZgZd ddZd ddZdddZddd Z d d Z dS) TraceBackendNcCspt|jt||jt|d|d}tt||jd}|}Wdn1s^0Y||fS)Nz.py) script_file python_fileoptimize_pythonz .expected)r# trace_pythonr EXTENSIONopenreadrstrip)selfnamer' actual_outputfexpected_outputrrrrun_case.s  *zTraceBackend.run_casecCs |j|g}|r|d|g7}|S)Nz-c)COMMAND)r-r% subcommandcommandrrrgenerate_trace_command9s  z#TraceBackend.generate_trace_commandcCs.|||}tj|tjtjdd\}}|S)NT)stdoutstderruniversal_newlines)r6 subprocessPopenPIPESTDOUT communicate)r-r%r4r5r7_rrrtrace?s zTraceBackend.tracecCs<g}|r|dg|dtjg||g}|||S)Nz-O )extendrsys executabler@)r-r%r&r'Z python_flagsr4rrrr(Gs zTraceBackend.trace_pythonc Csxz |td|j}|}Wn2tttfyR}zt|}WYd}~n d}~00|dkrtt d |j d|dS)N assert_usablezprobe: successz{}(1) failed: {}r) r@rr)stripFileNotFoundErrorNotADirectoryErrorPermissionErrorstrunittestZSkipTestr r3)r-r!ZfnferrrrENs zTraceBackend.assert_usable)N)N)N)N) __name__ __module__ __qualname__r)r3Z COMMAND_ARGSr2r6r@r(rErrrrr$)s   r$c@seZdZdZgdZdS) DTraceBackendz.d)Zdtracez-qz-sNrLrMrNr)r3rrrrrOZsrOc@seZdZdZddgZdS)SystemTapBackendz.stpZstapz-gNrPrrrrrQ_srQc@sLeZdZdZdZdZeddZddZddZ d d Z d d Z d dZ dS) TraceTestsNrcCs|jdS)N)backendrEr-rrr setUpClasslszTraceTests.setUpClasscCs&|jj||jd\}}|||dS)N)r')rSr2r' assertEqual)r-r.r/r1rrrr2ps zTraceTests.run_casecCs|ddS)NZ call_stackr2rTrrrtest_function_entry_returnusz%TraceTests.test_function_entry_returncsztgd}ttd}|Wdn1s60Yfdd}|dD]}||jqVt|dS)z9Ensure our call stack test hits all function call opcodes)Z CALL_FUNCTIONZCALL_FUNCTION_EXZCALL_FUNCTION_KWz call_stack.pyNcsFtddjd}|jD](}t|tjr|j|krt|SqgS)Nzexec)sourcermodeoptimize) compiler' co_consts isinstancetypesCodeTypeco_namedisZget_instructions)funcnamecodecZ code_stringr-rrget_function_instructionss zFTraceTests.test_verify_call_opcodes..get_function_instructionsstart)setr*rr+discardopnamerV)r-Zopcodesr0rhZ instructionrrgrtest_verify_call_opcodesxs & z#TraceTests.test_verify_call_opcodescCs|ddS)NgcrWrTrrrtest_gcszTraceTests.test_gccCs|ddS)NlinerWrTrrr test_lineszTraceTests.test_line) rLrMrNZmaxDiffrSr' classmethodrUr2rXrmrorqrrrrrRds rRc@seZdZeZdZdS)DTraceNormalTestsrNrLrMrNrOrSr'rrrrrssrsc@seZdZeZdZdS)DTraceOptimizedTestsNrtrrrrrusruc@seZdZeZdZdS)SystemTapNormalTestsrNrLrMrNrQrSr'rrrrrwsrwc@seZdZeZdZdS)SystemTapOptimizedTestsrvNrxrrrrrysry__main__)rcZos.pathrrr:rCr`rKZ test.supportrrr#r$rOrQrRZTestCasersrurwryrLZ test_mainrrrrs& 14