a zez@sPddlZddlZddlZddlZddlZddlmZddlmZm Z m Z ddl m Z z ddl Z WneyvdZ Yn0edZdZddZd d Zd d Zd dZddZddZddZGdddejZGdddejZGdddejZGdddejZGdddejZee dudGd d!d!ejZ e!d"krLe"dS)#N)patch)assert_python_okassert_python_failure interpreter_requires_environment)support)i@cCsZg}td}t|D]:}|j}|j|}||j|fd}|j}|durqRqt|S)Nr) sys _getframerangef_codef_linenoappend co_filenamef_backtuple)nframeZ lineno_deltaframesframeindexcodelinenorI/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_tracemalloc.py get_framess   rcCs<t}|t}t|d}d|}|t|tt||fS)Nr x) tracemallocget_traceback_limitEMPTY_STRING_SIZEr Tracebackminlen)sizerZ bytes_lenrdatarrrallocate_bytes"s  r%cCs4d}gd}t||}gd}t||}||fS)N)r )a.pyr&b.pyr'r'r r&r*r+r.r&B)r,r r r. rr )r'r'r')r&r&r0r.)r&r0r.)r-)c.pyBr )rSnapshot)traceback_limit raw_tracessnapshotZ raw_traces2 snapshot2rrrcreate_snapshots)s   rEcCst||fSN)rZ_FramefilenamerrrrrJsrcGs t|SrF)rr )rrrr tracebackMsrIcCs t||fSrF)rIrGrrrtraceback_linenoPsrJcCs t|dSNr)rJ)rHrrrtraceback_filenameSsrLc@seZdZddZdS) TestTracebackcCsntddd}||dd||dddd}d }|||d |d |||d d |d dS)N)returncWsttj|SrF)reprrr )argsrrrget_reprYsz)TestTraceback.test_repr..get_reprrzrz))f1r )f2r&z@(, )z r&z total_nframe=2>)str assertEqual)selfrQrZexp_repr_framesrrr test_reprXs    zTestTraceback.test_reprN)__name__ __module__ __qualname__rXrrrrrMWsrMc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zeeed!d"d#d$Zd%S)&TestTracemallocEnabledcCs tr|dtddS)N+tracemalloc must be stopped before the testr )r is_tracingskipTeststartrWrrrsetUpks zTestTracemallocEnabled.setUpcCs tdSrFrstoprarrrtearDownqszTestTracemallocEnabled.tearDowncCsRddtdD}t}||dtt}||d|||dS)NcSsg|] }tdqS){r%).0countrrr urzFTestTracemallocEnabled.test_get_tracemalloc_memory..ir)r rZget_tracemalloc_memoryassertGreaterEqual clear_tracesassertLessEqual)rWr$r#size2rrrtest_get_tracemalloc_memoryts  z2TestTracemallocEnabled.test_get_tracemalloc_memorycCs2td}t|\}}t|}|||dSN90)rrlr%get_object_tracebackrVrWobj_sizeobj obj_tracebackrIrrrtest_get_object_traceback~s   z0TestTracemallocEnabled.test_get_object_tracebackcCshttg}d}g}t}t|d}t|tt||}t |}| || ||dS)N) rrlr gc_collectrrr r!r"rrassertIsNotNonerV)rWrurrrvrIrrrtest_new_references   z)TestTracemallocEnabled.test_new_referencecCsd}t|ttjdttdt|\}}t|}|t|d|||ttdt|\}}t|}|t|d|||dS)Nr(rr ) rrd assertRaises ValueErrorr`r%rrrVr")rWrtobj2obj2_tracebackrIrurvrrrtest_set_traceback_limits       z/TestTracemallocEnabled.test_set_traceback_limitcCs.|D]}|d|jkr|Sq|ddS)Nr&ztrace not found)_framesfail)rWtracesrItracerrr find_traces z!TestTracemallocEnabled.find_tracec Csztd}t|\}}t}|||}||t|\}}}} ||||||jt |tgdSrp) rrlr% _get_tracesrZassertIsInstancerrVrrd) rWrtrurvrrdomainr#rIlengthrrrtest_get_tracess     z&TestTracemallocEnabled.test_get_tracescsddfddfdd}ttdd}||\}}||\}}t}tt|j|_tt|j|_|||}|||} |\} } } } | \}}}}||| dS) NcSst|SrFrgr#rrrallocate_bytes2szPTestTracemallocEnabled.test_get_traces_intern_traceback..allocate_bytes2cs|SrFrr)rrrallocate_bytes3szPTestTracemallocEnabled.test_get_traces_intern_traceback..allocate_bytes3cs|SrFrr)rrrallocate_bytes4szPTestTracemallocEnabled.test_get_traces_intern_traceback..allocate_bytes4r-rf) rrdr`rrreversedrrZassertIs)rWrrtZobj1Zobj1_tracebackr~rrZtrace1Ztrace2Zdomain1size1Z traceback1Zlength1Zdomain2rn traceback2Zlength2r)rrr test_get_traces_intern_tracebacks          z7TestTracemallocEnabled.test_get_traces_intern_tracebackc Csd}d}tt|\}}t\}}||||||||||||||d}t\}}|||||||||||t|tdt|\}}t\}}|||t|tddS)N)rr) rrlr%get_traced_memoryrkrm assertLessrVrd) rWZ max_errorrtrurvr#Z peak_sizernZ peak_size2rrrtest_get_traced_memorys*          z-TestTracemallocEnabled.test_get_traced_memorycCs@td\}}t|}||tt|}||dS)Nrf)r%rrrrzrl assertIsNone)rWrurvrIrrrrtest_clear_tracess     z(TestTracemallocEnabled.test_clear_tracesc Csttttd}t\}}tt\}}||||||d}t |\}}t\} } || | | | ||| ||dS)Nir) rrlsumlistr rZ reset_peakrkrr% assertGreater) rWZ large_sumrZpeak1rnZpeak2rtrurvZsize3Zpeak3rrrtest_reset_peak s        z&TestTracemallocEnabled.test_reset_peakcCs0t|tt|tdSrF)rrd assertFalser^r` assertTruerarrrtest_is_tracing$sz&TestTracemallocEnabled.test_is_tracingcCstd\}}t}||jdjjd|tj | tj tj tj tj }||j|jt|t}tWdn1s0Y|t|jddS)Nrfr r(zLthe tracemalloc module must be tracing memory allocations to take a snapshot)r%r take_snapshotrrrI total_nframedumprTESTFN addCleanupunlinkr@loadrVrdr| RuntimeErrorrU exception)rWrusourcerCrDcmrrr test_snapshot+s   & z$TestTracemallocEnabled.test_snapshotcCsJt}d|_|tj|tjtjtj tj}| |jddS)Nnew) rrZ test_attrrrrrrr@rrV)rWrCrDrrrtest_snapshot_save_attrDs  z.TestTracemallocEnabled.test_snapshot_save_attrcCs6ts dSd}t|\}}t|}|dur2dSdS)Nr&rqr.r)rr^r%rrrsrrr fork_childOs  z!TestTracemallocEnabled.fork_childforkzneed os.fork()c CsHt}|s6d}z|}Wt|qDt|0ntj|dddS)Nr r)exitcode)osrr_exitrZ wait_process)rWpidrrrr test_fork\s z TestTracemallocEnabled.test_forkN)rYrZr[rbrerorwr{rrrrrrrrrrrunittestZ skipUnlesshasattrrrrrrrr\js$ $   r\c@sxeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZdS) TestSnapshoticCsdg}t}|tjtddd|tjtddd|tjtd|dt}||jd|t |j d|j d }||j d||j j d |t |j d||j d jd ||j d jd Wdn1s0YdS) N)rr2)r)r(r^T)Z return_valuerr2rr rr(r*r&) contextlib ExitStack enter_contextrobjectrrrVrAr"rr#rIrrHr)rWrBstackrCrrrrtest_create_snapshotns(     z!TestSnapshot.test_create_snapshotc Cst\}}tdd}tddd}tddd}t|jj}||f}||jjgd||jj||||f}||jjgd|d } || ||| j|j|| j|j| t |j|dS) NFr,Tr*r&r2)r'r'r'r/r6)r'r'r'r/r) rErFilterrr_traces filter_tracesrVZ assertIsNotr| TypeError) rWrCrDfilter1filter2Zfilter3original_traces snapshot3Z snapshot4Z snapshot5rrrtest_filter_tracess       zTestSnapshot.test_filter_tracescCszt\}}tjdddd}tjdddd}t|jj}||f}||jjgd||f}||jjgddS)NFr*r rT)r'r'r'r3r6)rErrrrrrrV)rWrCrDrrrrrrrtest_filter_traces_domains    z&TestSnapshot.test_filter_traces_domaincCsht\}}tjddd}tjddd}||f}||jjgd||f}||jjdgdS)NFr.rT)r'r'r'r/r3r6)rEr DomainFilterrrVrr)rWrCrDrrrrrr test_filter_traces_domain_filters    z-TestSnapshot.test_filter_traces_domain_filterc Cs(t\}}tdd}tdd}tdd}tdd}tdd }|d }||t|d dt|d d t|ddt|ddg|d } || t|ddt|ddt|d d g||d } || t|ddddt|ddddt|ddddt|ddddt|d dd dgdS)Nr:rr*r&r2r,r r>r?rr4r.r7r<r;r)rErJ statisticsrVr Statistic compare_to StatisticDiff) rWrCrDtb_0tb_a_2tb_a_5tb_b_1Ztb_c_578stats1stats2rrrrtest_snapshot_group_by_lines6                z(TestSnapshot.test_snapshot_group_by_linec Cst\}}td}td}td}td}|d}||t|ddt|dd t|d dg|d}||t|d d t|d dg||d} || t|d dd dt|d d ddt|ddddt|ddddgdS)Nr:r*r,r>rHr4r r-r7ir2r<r;rrrr)rErLrrVrrrr) rWrCrDrtb_atb_bZtb_crrdiffrrrtest_snapshot_group_by_files.         z(TestSnapshot.test_snapshot_group_by_filec Cs6t\}}tdd}tdd}td}td}|d}||t|ddt|d d t|d dt|d dgtd }|d} || t|dd t|ddt|d d g||d} || t|ddd dt|ddddt|ddddt|ddddt|d dd dg|jt |jddddS)Nr)r+r1r5r9rIr4r rr.r7r&r=rr<r;rrrrT)Z cumulative) rErIrrVrrrrr|r}) rWrCrDZtb1Ztb2Ztb3Ztb4rZtb5rrrrr test_snapshot_group_by_tracebacks<             z-TestSnapshot.test_snapshot_group_by_tracebackc Cst\}}td}td}td}tdd}tdd}tdd}tdd} |dd } || t|d dt|d dt|d dg|d d } || t|ddt| d dt|ddt|d dt|ddgdS)Nr:r*r,r&r2r r-rHTbrr7rr4rr.)rErLrJrrVrr) rWrCrDrrrrrrZtb_b_4statsrrr!test_snapshot_group_by_cumulativeAs,               z.TestSnapshot.test_snapshot_group_by_cumulativecCsVt\}}|jd}|t|d|j}|t|d|d}|t|ddS)Nrz b.py:4: 10 Bzb.py:4)rErrVrUrI)rWrCrDrrIrrrrtest_trace_format]s  zTestSnapshot.test_trace_formatcCs0t\}}|d}|d}|t|ddS)Nrrz(b.py:1: size=66 B, count=1, average=66 B)rErrVrUrWrCrDrstatrrrtest_statistic_formatfs    z"TestSnapshot.test_statistic_formatcCs2t\}}||d}|d}|t|ddS)Nrrz;a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B)rErrVrUrrrrtest_statistic_diff_formatms    z'TestSnapshot.test_statistic_diff_formatcCs`t\}}||jdd|jd|jdf|jdj}||dd|d|dfdS)Nr&rr )rErVrrI)rWrCrDrIrrr test_slicests  zTestSnapshot.test_slicescCst\}}dd}tjjd|d|jdj}||gd||jddd d g||jd dd d g||jddgd||jdddd d g||jd ddd d gWdn1s0YdS)NcSs d||fS)Nz <%s, %s>rrGrrrgetlinesz3TestSnapshot.test_format_traceback..getlineztracemalloc.linecache.getline)Z side_effectr) File "b.py", line 4  File "a.py", line 2 r )limitrrrrrT)most_recent_first)rrrr)rr)rErZmockrrrIrVformat)rWrCrDrtbrrrtest_format_traceback}s@   z"TestSnapshot.test_format_tracebackN)rYrZr[maxDiffrrrrrrrrrrrrrrrrrrks&#&  rc@s8eZdZdZddZddZddZdd Zd d Zd S) TestFiltersrcCstdd}||jd||jd||j||jdtdddd}||jd||jd||jd||jdtjddddd}||jd||jd||jd||jd|t t |dddS)NTabcFztest.pyrf) inclusivefilename_patternr all_framesr) rrrVrrrrrr|AttributeErrorsetattrrWfrrrtest_filter_attributess   z"TestFilters.test_filter_attributescCstdd}||dd||dd||dd||dd||dd||ddtdd}||dd||dd||dd||dd||dd||ddtddd}||dd||dd||dd||dd||dd||ddtddd}||dd||dd||dd||dd||dd||ddtddd}||dd||dd||dd||dd||dd||ddtddd}||dd||dd||dd||dd||dd||dddS)NTrrr2r(12356F)rrr _match_framerrrrrtest_filter_matchsT  zTestFilters.test_filter_matchcCsxdd}||ddd||ddd||ddd||ddd||ddd||ddddS)NcSst||}||dSrKrrr)rrHpatternrrrrfnmatchs z7TestFilters.test_filter_match_filename..fnmatchTrrr:F)rrrWrrrrtest_filter_match_filenamesz&TestFilters.test_filter_match_filenamecCsdd}||dd||dd||dd||dd||dd||dd||dd||dd||dd ||dd ||dd ||dd ||d d||dd ||dd||dd||dd||dd||dd||dd||ddtjdkr||dd||dd||dd||ddn@||dd||dd||dd||ddtjdkr4||d d!||d!d ||d"d#||d$d%n@||d d!||d!d ||d"d#||d$d%||d&ddS)'NcSstd|}||dS)NTrr)rHrfilterrrrrs z=TestFilters.test_filter_match_filename_joker..fnmatchr*Zabcddefza*zabc*zb*zabcd*za*cZabcdcxza*cxZabbZabcdceZabcdeza*c*eZ abcbdefegza*bd*egZabcddZ abcbdefefza.pycr*ntZaBCZABcZaBcDezAb*dEza.PYza.PYCza/bza\bza/b\cza\b/cza/b/cza\b\cza.pyo)rrrnamerrrr test_filter_match_filename_jokersR  z,TestFilters.test_filter_match_filename_jokercCsDd}d}d}d}tjdddd}||||||||||||tjdddd}||||||||||||tjdddd}||||||||||||tjdddd}||||||||||||tjdd dd}||||||||||||tjdd dd}||||||||||||tjdd dd}||||||||||||dS) N)r))r,r.)r+)r,r2))r>r2r9r8Tr,)rFr:)rrrZ_match_tracebackr)rWt1t2Zt3unknownrrrrtest_filter_match_traceCsNz#TestFilters.test_filter_match_traceN) rYrZr[rrrrr rrrrrrs 4 Erc@seZdZddZeedddZddZdd Z d d Z d d Z ddZ ddZ ddZddZeedudddZdS)TestCommandLinecCs,d}td|\}}}|}||ddS)N3import tracemalloc; print(tracemalloc.is_tracing())-cFalserrstriprVrWrokstdoutstderrrrr test_env_var_disabled_by_defaultusz0TestCommandLine.test_env_var_disabled_by_defaultz6Cannot run -E tests when PYTHON env vars are required.cCs2d}tdd|dd\}}}|}||ddS)zAPYTHON* environment variables must be ignored when -E is present.rz-Er1ZPYTHONTRACEMALLOCrNrrrrrtest_env_var_ignored_with_E|sz+TestCommandLine.test_env_var_ignored_with_EcCs0d}td|dd\}}}|}||ddS)Nrr0rrrrrrrtest_env_var_disabledsz%TestCommandLine.test_env_var_disabledcCs0d}td|dd\}}}|}||ddS)NrrrrsTruerrrrrtest_env_var_enabled_at_startupsz/TestCommandLine.test_env_var_enabled_at_startupcCs0d}td|dd\}}}|}||ddS)Ntr|dd|_d|_t|jd|_t|j|_dS)Nr]r2rfr) rr^r_rr#r%ruidptrrarrrrbs  zTestCAPI.setUpcCs tdSrFrcrarrrreszTestCAPI.tearDowncCs*t|j|j}|dur"t|SdSdSrF)r:Ztracemalloc_get_tracebackrr=rr )rWrrrr get_tracebacks zTestCAPI.get_tracebackFr cCs$t|d}t|j|j|j||S)Nr )rr:Ztracemalloc_trackrr=r#)rW release_gilrrrrrtracks  zTestCAPI.trackcCst|j|jdSrF)r:Ztracemalloc_untrackrr=rarrruntrackszTestCAPI.untrackcCs6t}td|j}||g}tdd|jDS)NTcss|] }|jVqdSrFr)rhrrrr rz-TestCAPI.get_traced_memory..)rrrrrrr)rWrCZ domain_filterrrrrs zTestCAPI.get_traced_memorycCsRd}t|td}|||}||t||||jdS)Nr2r)rr`rr@rVr>r r#)rWr?rr#rrrr check_tracks    zTestCAPI.check_trackcCs|ddS)NFrCrarrr test_trackszTestCAPI.test_trackcCs|ddS)NTrDrarrrtest_track_without_gil szTestCAPI.test_track_without_gilcCs<d}t|||j|d}||t|dS)Nr2r*)rr`r@rVr>r )rWrrrrrtest_track_already_trackeds   z#TestCAPI.test_track_already_trackedcCsjt||||||j|| |||d||dSrK) rr`r@rzr>rVrr#rArrarrr test_untrackszTestCAPI.test_untrackcCsTtt|t|Wdn1s80Y||dSrF)rr`rdr|rr@rr>rarrrtest_stop_track+s  &zTestCAPI.test_stop_trackcCsNt|t|t|Wdn1s@0YdSrF)rr`r@rdr|rrArarrrtest_stop_untrack3s  zTestCAPI.test_stop_untrackN)Fr )rYrZr[rrbrer>r@rArrCrErFrGrHrIrJrrrrr;s    r;__main__)#rrr rrZ unittest.mockrZtest.support.script_helperrrrtestrr: ImportError getsizeofrr+rr%rErrIrJrLZTestCaserMr\rrrr9r;rYmainrrrrsD       !8T\k