From 1aafe477ec773eb86ca2dd77fe8a1cfb3faed57f Mon Sep 17 00:00:00 2001 From: houseme Date: Sat, 5 Sep 2026 21:05:13 +0800 Subject: [PATCH] test(scanner): verify joint checkpoint coverage metadata Co-Authored-By: heihutu Co-Authored-By: zhi22915 --- crates/scanner/src/scanner/tests.rs | 3 ++- .../src/scanner_folder/tests/checkpoint_fixture.rs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/scanner/src/scanner/tests.rs b/crates/scanner/src/scanner/tests.rs index 41eaa6405..0d1f64c1b 100644 --- a/crates/scanner/src/scanner/tests.rs +++ b/crates/scanner/src/scanner/tests.rs @@ -8631,7 +8631,8 @@ fn scoped_scan_remote_dirty_coverage_invalidates_local_bucket_current() { new_plan, crate::scanner_io::DataUsageCacheReuseOptions { require_source: true, - tier_registry_generation: None + tier_registry_generation: None, + checkpoint_identity: None, }, ), crate::scanner_io::DataUsageCacheScanState::Prepared { diff --git a/crates/scanner/src/scanner_folder/tests/checkpoint_fixture.rs b/crates/scanner/src/scanner_folder/tests/checkpoint_fixture.rs index 688a22858..eb10f02e6 100644 --- a/crates/scanner/src/scanner_folder/tests/checkpoint_fixture.rs +++ b/crates/scanner/src/scanner_folder/tests/checkpoint_fixture.rs @@ -298,6 +298,20 @@ fn checkpoint_fixture_roundtrip_retains_verified_scope_but_old_reader_rebuilds() assert!(!old_view.info.snapshot_complete); } +#[test] +fn checkpoint_fixture_optional_coverage_metadata_roundtrips_together() { + let (mut cache, _) = bound_checkpoint(); + cache.info.scan_coverage_digest = Some(DataUsageScanPlanDigest([77; 32])); + let encoded = cache.marshal_msg().expect("encode every optional coverage field"); + let decoded = DataUsageCache::unmarshal(&encoded).expect("decode combined W03/W04 metadata map"); + assert_eq!(decoded.info.scan_identity, cache.info.scan_identity); + assert_eq!(decoded.info.scan_progress, cache.info.scan_progress); + assert_eq!(decoded.info.scan_coverage_receipt, cache.info.scan_coverage_receipt); + assert_eq!(decoded.info.scan_coverage_digest, cache.info.scan_coverage_digest); + assert_eq!(decoded.validated_scan_frontier(), Some("bucket/static")); + assert!(!decoded.info.snapshot_complete); +} + #[test] fn checkpoint_fixture_unchanged_complete_plan_keeps_existing_rescan_policy() { let (mut cache, identity) = bound_checkpoint();