From 98502eaaf0e406a9200a0b76f570e48d97a3425a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1zgar=20Ozan?= Date: Tue, 29 Sep 2026 14:15:03 +0300 Subject: [PATCH] test(perf): assert p99 siblings of unmeasured optional metrics are pruned A missing percentile row reads back as 0.0 rather than None, so a p99 PD or steady-ITL column left in the detail table would pass the existing None checks while showing a made-up measurement. Check all six optional keys against the columns, values and sample_counts in the non-PD and mixed-run cases. --- tests/perf/test_perf_archive.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/tests/perf/test_perf_archive.py b/tests/perf/test_perf_archive.py index 3d697bb5a..e0cacabe8 100644 --- a/tests/perf/test_perf_archive.py +++ b/tests/perf/test_perf_archive.py @@ -89,6 +89,17 @@ def _make_db(sub_dir: str, *, n_success: int, n_failed: int) -> None: conn.close() +# Avg and p99 columns of the optional generation metrics (PD handoff, steady ITL). +_OPTIONAL_KEYS = ( + 'avg_pd_handoff_latency', + 'p99_pd_handoff_latency', + 'avg_pd_handoff_overhead', + 'p99_pd_handoff_overhead', + 'avg_steady_itl', + 'p99_steady_itl', +) + + class TestPerfArchive(unittest.TestCase): def setUp(self): @@ -115,6 +126,16 @@ def setUp(self): def tearDown(self): shutil.rmtree(self.tmp, ignore_errors=True) + def _assert_optional_columns_pruned(self, body): + # The p99 siblings matter most: a missing percentile row reads back as 0.0, + # not None, so a p99 column left behind would look like a real measurement. + column_keys = {column['key'] for column in body['summary_columns']} + for key in _OPTIONAL_KEYS: + self.assertNotIn(key, column_keys) + for row in body['summary_rows']: + self.assertNotIn(key, row['values']) + self.assertNotIn(key, row['sample_counts']) + def test_list_finds_both_layouts(self): res = self.client.get('/api/v1/perf/list', query_string={'root_path': self.tmp}) self.assertEqual(res.status_code, 200) @@ -150,8 +171,7 @@ def test_detail_returns_summary_fields(self): column_keys = {column['key'] for column in body['summary_columns']} self.assertEqual(set(values), column_keys) self.assertNotIn(None, list(values.values())) - self.assertNotIn('avg_pd_handoff_latency', values) - self.assertNotIn('avg_steady_itl', values) + self._assert_optional_columns_pruned(body) self.assertEqual(body['total_requests'], 2) self.assertNotIn('summary_sample_counts', body) self.assertNotIn('metric_semantics', body) @@ -185,6 +205,7 @@ def test_detail_prunes_pd_column_when_partially_measured(self): for row in body['summary_rows']: self.assertEqual(set(row['values']), column_keys) self.assertNotIn(None, list(row['values'].values())) + self._assert_optional_columns_pruned(body) def test_history_report_serves_existing_html(self): res = self.client.get('/api/v1/perf/history/report', query_string={'root_path': self.tmp, 'path': self.cli_rel})