test(filemeta): cover legacy delete marker decoding (#2333)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: houseme <housemecn@gmail.com>
Co-authored-by: heihutu <heihutu@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
安正超
2026-03-31 22:08:45 +08:00
committed by GitHub
parent 8893de1cad
commit bd36cf3588
5 changed files with 102 additions and 20 deletions
+44
View File
@@ -2966,6 +2966,38 @@ mod tests {
assert!(fi.uses_legacy_checksum);
}
#[test]
fn legacy_meta_v2_delete_marker_decodes_into_delete_fileinfo_via_struct() {
let version_id = sample_version_id();
let mod_time = sample_mod_time();
let version = LegacyMetaV2Version {
version_type: LegacyMetaV2VersionType::DeleteMarker,
object: None,
delete_marker: Some(LegacyMetaV2DeleteMarker {
version_id: version_id.as_bytes().to_vec(),
mod_time: Some(mod_time),
meta_sys: HashMap::from([("x-minio-internal".to_string(), b"present".to_vec())]),
}),
write_version: 7,
};
let decoded = FileMetaVersion::try_from(version).unwrap();
assert_eq!(decoded.version_type, VersionType::Delete);
assert!(decoded.uses_legacy_checksum);
assert!(decoded.object.is_none());
let delete_marker = decoded.delete_marker.as_ref().expect("delete marker should be decoded");
assert_eq!(delete_marker.version_id, Some(version_id));
assert_eq!(delete_marker.mod_time, Some(mod_time));
let fi = decoded.into_fileinfo("bucket", "deleted.txt", true);
assert!(fi.deleted);
assert_eq!(fi.version_id, Some(version_id));
assert_eq!(fi.mod_time, Some(mod_time));
assert_eq!(fi.metadata.get("x-minio-internal").map(String::as_str), Some("present"));
}
#[test]
fn legacy_meta_v2_delete_marker_rejects_invalid_uuid_bytes() {
let payload = LegacyDeleteVersionFixture {
@@ -2983,4 +3015,16 @@ mod tests {
let err = FileMetaVersion::try_from(encoded.as_slice()).expect_err("invalid legacy delete marker UUID must fail");
assert!(err.to_string().contains("legacy version_id must be 16 bytes"));
}
#[test]
fn legacy_meta_v2_delete_marker_rejects_invalid_uuid_bytes_via_struct() {
let err = MetaDeleteMarker::try_from(LegacyMetaV2DeleteMarker {
version_id: vec![1, 2, 3],
mod_time: Some(sample_mod_time()),
meta_sys: HashMap::new(),
})
.expect_err("invalid legacy delete-marker version ids should be rejected");
assert!(err.to_string().contains("legacy version_id must be 16 bytes"));
}
}