From ed026a0f1f3aa843f3f2b1499d68c0a0dcbb86f8 Mon Sep 17 00:00:00 2001 From: houseme Date: Sun, 6 Sep 2026 01:32:21 +0800 Subject: [PATCH] test(scanner): reject unobserved enumeration budget evidence Co-Authored-By: heihutu Co-Authored-By: zhi22915 --- scripts/diagnose_scanner_enumeration_restart.py | 2 ++ scripts/test_diagnose_scanner_enumeration_restart.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/scripts/diagnose_scanner_enumeration_restart.py b/scripts/diagnose_scanner_enumeration_restart.py index a25ef46df..951c164a7 100644 --- a/scripts/diagnose_scanner_enumeration_restart.py +++ b/scripts/diagnose_scanner_enumeration_restart.py @@ -33,6 +33,8 @@ def validate_report(report, *, round_number, pid, objects, budget): "versions_retained", "bytes_retained", "objects_processed"): if type(report.get(key)) is not int or not 0 <= report[key] <= 1048576: raise ValueError(f"invalid bounded counter: {key}") + if report["raw_entries"] == 0: + raise ValueError("nonempty fixture must observe raw entries; budget hook may not have run") if report["raw_entries"] > budget: raise ValueError("raw-entry budget exceeded; no unbudgeted tail is permitted") if type(report.get("snapshot_complete")) is not bool: diff --git a/scripts/test_diagnose_scanner_enumeration_restart.py b/scripts/test_diagnose_scanner_enumeration_restart.py index 4c503c9a4..efe5f2ddd 100644 --- a/scripts/test_diagnose_scanner_enumeration_restart.py +++ b/scripts/test_diagnose_scanner_enumeration_restart.py @@ -42,6 +42,12 @@ class ReportTests(unittest.TestCase): with self.assertRaises(ValueError): self.validate(report) + def test_complete_coverage_without_entry_observation_rejected(self): + report = self.report() + report["raw_entries"] = 0 + with self.assertRaises(ValueError): + self.validate(report) + def test_missing_wrong_type_and_negative_counter_rejected(self): for value in (None, True, -1, "8", 1048577): with self.subTest(value=value):