@@ -1791,6 +1791,49 @@ def export_summary(skip_idle):
17911791 )
17921792 self .assertEqual (samples_total , 3 )
17931793
1794+ def test_jsonl_collector_splits_large_exports_into_chunks (self ):
1795+ jsonl_out = tempfile .NamedTemporaryFile (delete = False )
1796+ self .addCleanup (close_and_unlink , jsonl_out )
1797+
1798+ collector = JsonlCollector (1000 )
1799+
1800+ for i in range (257 ):
1801+ collector .collect (
1802+ [
1803+ MockInterpreterInfo (
1804+ 0 ,
1805+ [
1806+ MockThreadInfo (
1807+ 1 ,
1808+ [MockFrameInfo (f"file{ i } .py" , i + 1 , f"func{ i } " )],
1809+ )
1810+ ],
1811+ )
1812+ ]
1813+ )
1814+
1815+ collector .export (jsonl_out .name )
1816+
1817+ with open (jsonl_out .name , "r" , encoding = "utf-8" ) as f :
1818+ records = [json .loads (line ) for line in f ]
1819+
1820+ run_ids = {record ["run_id" ] for record in records }
1821+ self .assertEqual (len (run_ids ), 1 )
1822+ self .assertRegex (next (iter (run_ids )), r"^[0-9a-f]{32}$" )
1823+
1824+ _ , str_defs , frame_defs , agg_record , end_record = _jsonl_tables (records )
1825+ str_chunks = [record for record in records if record ["type" ] == "str_def" ]
1826+ frame_chunks = [record for record in records if record ["type" ] == "frame_def" ]
1827+ agg_chunks = [record for record in records if record ["type" ] == "agg" ]
1828+
1829+ self .assertEqual ([len (record ["defs" ]) for record in str_chunks ], [256 , 256 , 2 ])
1830+ self .assertEqual ([len (record ["defs" ]) for record in frame_chunks ], [256 , 1 ])
1831+ self .assertEqual ([len (record ["entries" ]) for record in agg_chunks ], [256 , 1 ])
1832+ self .assertEqual (len (str_defs ), 514 )
1833+ self .assertEqual (len (frame_defs ), 257 )
1834+ self .assertEqual (agg_record ["samples_total" ], 257 )
1835+ self .assertEqual (end_record ["samples_total" ], 257 )
1836+
17941837
17951838class TestRecursiveFunctionHandling (unittest .TestCase ):
17961839 """Tests for correct handling of recursive functions in cumulative stats."""
0 commit comments