Skip to content

Commit d37f07a

Browse files
committed
test edge cases
1 parent e3d8aff commit d37f07a

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

Lib/test/test_profiling/test_sampling_profiler/test_collectors.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,6 +1738,80 @@ def test_jsonl_collector_export_exact_output(self):
17381738
),
17391739
)
17401740

1741+
def test_jsonl_collector_export_includes_mode_in_meta(self):
1742+
jsonl_out = tempfile.NamedTemporaryFile(delete=False)
1743+
self.addCleanup(close_and_unlink, jsonl_out)
1744+
1745+
collector = JsonlCollector(1000, mode=PROFILING_MODE_CPU)
1746+
collector.collect(
1747+
[
1748+
MockInterpreterInfo(
1749+
0,
1750+
[MockThreadInfo(1, [MockFrameInfo("file.py", 10, "func")])],
1751+
)
1752+
]
1753+
)
1754+
collector.export(jsonl_out.name)
1755+
1756+
with open(jsonl_out.name, "r", encoding="utf-8") as f:
1757+
records = [json.loads(line) for line in f]
1758+
1759+
meta_record = next(record for record in records if record["type"] == "meta")
1760+
self.assertEqual(meta_record["mode"], "cpu")
1761+
1762+
def test_jsonl_collector_export_empty_profile(self):
1763+
jsonl_out = tempfile.NamedTemporaryFile(delete=False)
1764+
self.addCleanup(close_and_unlink, jsonl_out)
1765+
1766+
collector = JsonlCollector(1000)
1767+
collector.run_id = "run-123"
1768+
collector.export(jsonl_out.name)
1769+
1770+
with open(jsonl_out.name, "r", encoding="utf-8") as f:
1771+
records = [json.loads(line) for line in f]
1772+
1773+
self.assertEqual([record["type"] for record in records], ["meta", "end"])
1774+
self.assertEqual(records[0]["sample_interval_usec"], 1000)
1775+
self.assertEqual(records[0]["run_id"], "run-123")
1776+
self.assertEqual(records[1]["samples_total"], 0)
1777+
self.assertEqual(records[1]["run_id"], "run-123")
1778+
1779+
def test_jsonl_collector_recursive_frames_counted_once_per_sample(self):
1780+
jsonl_out = tempfile.NamedTemporaryFile(delete=False)
1781+
self.addCleanup(close_and_unlink, jsonl_out)
1782+
1783+
collector = JsonlCollector(1000)
1784+
collector.collect(
1785+
[
1786+
MockInterpreterInfo(
1787+
0,
1788+
[
1789+
MockThreadInfo(
1790+
1,
1791+
[
1792+
MockFrameInfo("recursive.py", 10, "recursive_func"),
1793+
MockFrameInfo("recursive.py", 10, "recursive_func"),
1794+
MockFrameInfo("recursive.py", 10, "recursive_func"),
1795+
],
1796+
)
1797+
],
1798+
)
1799+
]
1800+
)
1801+
collector.export(jsonl_out.name)
1802+
1803+
with open(jsonl_out.name, "r", encoding="utf-8") as f:
1804+
records = [json.loads(line) for line in f]
1805+
1806+
_, _, frame_defs, agg_record, end_record = _jsonl_tables(records)
1807+
self.assertEqual(len(frame_defs), 1)
1808+
self.assertEqual(
1809+
agg_record["entries"],
1810+
[{"frame_id": frame_defs[0]["frame_id"], "self": 1, "cumulative": 1}],
1811+
)
1812+
self.assertEqual(agg_record["samples_total"], 1)
1813+
self.assertEqual(end_record["samples_total"], 1)
1814+
17411815
def test_jsonl_collector_skip_idle_filters_threads(self):
17421816
jsonl_out = tempfile.NamedTemporaryFile(delete=False)
17431817
self.addCleanup(close_and_unlink, jsonl_out)

0 commit comments

Comments
 (0)