diff --git a/crates/ecstore/src/set_disk/mod.rs b/crates/ecstore/src/set_disk/mod.rs index af8d33442..5f2922c5a 100644 --- a/crates/ecstore/src/set_disk/mod.rs +++ b/crates/ecstore/src/set_disk/mod.rs @@ -7391,6 +7391,12 @@ mod tests { let (should_heal, _, _) = should_heal_object_on_disk(&err, &[], &meta, &latest_meta); assert!(should_heal); + let err = Some(DiskError::FileCorrupt); + let (should_heal, is_meta, reason) = should_heal_object_on_disk(&err, &[], &meta, &latest_meta); + assert!(should_heal); + assert!(is_meta); + assert_eq!(reason, Some(DiskError::FileCorrupt)); + // Test with no error and no part errors let (should_heal, _, _) = should_heal_object_on_disk(&None, &[CHECK_PART_SUCCESS], &meta, &latest_meta); assert!(!should_heal); diff --git a/crates/filemeta/src/filemeta.rs b/crates/filemeta/src/filemeta.rs index d654d2c8a..0fb46887c 100644 --- a/crates/filemeta/src/filemeta.rs +++ b/crates/filemeta/src/filemeta.rs @@ -1481,6 +1481,17 @@ mod test { assert_eq!(err, Error::FileCorrupt, "CRC mismatch must classify as FileCorrupt, got: {err}"); } + #[test] + fn test_is_indexed_meta_reports_file_corrupt_on_crc_mismatch() { + let fm = FileMeta::default(); + let mut buf = fm.marshal_msg().expect("serialize default FileMeta"); + let idx = 8 + 5; + buf[idx] ^= 0xff; + + let err = FileMeta::is_indexed_meta(&buf).expect_err("corrupted indexed metadata must fail"); + assert_eq!(err, Error::FileCorrupt, "indexed CRC mismatch must classify as FileCorrupt, got: {err}"); + } + #[test] fn test_unmarshal_rejects_absurd_version_count() { let mut meta = Vec::new();