mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-12 08:06:54 +00:00
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:
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,18 +37,22 @@ pub fn record_capacity_current_bytes(used_bytes: u64) {
|
||||
|
||||
/// Record capacity update completion.
|
||||
#[inline(always)]
|
||||
pub fn record_capacity_update_completed(source: &str, duration: Duration, used_bytes: u64, is_estimated: bool) {
|
||||
counter!("rustfs.capacity.update.total", "source" => source.to_string()).increment(1);
|
||||
histogram!("rustfs.capacity.update.duration.seconds", "source" => source.to_string()).record(duration.as_secs_f64());
|
||||
histogram!("rustfs.capacity.update.bytes", "source" => source.to_string()).record(used_bytes as f64);
|
||||
counter!("rustfs.capacity.update.estimated.total", "source" => source.to_string(), "estimated" => is_estimated.to_string())
|
||||
.increment(1);
|
||||
pub fn record_capacity_update_completed(source: &'static str, duration: Duration, used_bytes: u64, is_estimated: bool) {
|
||||
counter!("rustfs.capacity.update.total", "source" => source).increment(1);
|
||||
histogram!("rustfs.capacity.update.duration.seconds", "source" => source).record(duration.as_secs_f64());
|
||||
histogram!("rustfs.capacity.update.bytes", "source" => source).record(used_bytes as f64);
|
||||
counter!(
|
||||
"rustfs.capacity.update.estimated.total",
|
||||
"source" => source,
|
||||
"estimated" => if is_estimated { "true" } else { "false" }
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
|
||||
/// Record failed capacity update.
|
||||
#[inline(always)]
|
||||
pub fn record_capacity_update_failed(source: &str) {
|
||||
counter!("rustfs.capacity.update.failures", "source" => source.to_string()).increment(1);
|
||||
pub fn record_capacity_update_failed(source: &'static str) {
|
||||
counter!("rustfs.capacity.update.failures", "source" => source).increment(1);
|
||||
}
|
||||
|
||||
/// Record capacity write activity.
|
||||
@@ -88,5 +92,9 @@ pub fn record_capacity_dynamic_timeout(timeout: Duration) {
|
||||
#[inline(always)]
|
||||
pub fn record_capacity_scan_sampling(sampled_count: usize, estimated: bool) {
|
||||
histogram!("rustfs.capacity.scan.sampled.count").record(sampled_count as f64);
|
||||
counter!("rustfs.capacity.scan.estimated.total", "estimated" => estimated.to_string()).increment(1);
|
||||
counter!(
|
||||
"rustfs.capacity.scan.estimated.total",
|
||||
"estimated" => if estimated { "true" } else { "false" }
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ impl EventName {
|
||||
"s3:ObjectRemoved:DeleteMarkerCreated" => Ok(EventName::ObjectRemovedDeleteMarkerCreated),
|
||||
"s3:ObjectRemoved:NoOP" => Ok(EventName::ObjectRemovedNoOP),
|
||||
"s3:ObjectRemoved:DeleteAllVersions" => Ok(EventName::ObjectRemovedDeleteAllVersions),
|
||||
"s3:LifecycleDelMarkerExpiration:Delete" => Ok(EventName::LifecycleExpirationDeleteMarkerCreated),
|
||||
"s3:LifecycleDelMarkerExpiration:Delete" => Ok(EventName::LifecycleDelMarkerExpirationDelete),
|
||||
"s3:LifecycleExpiration:*" => Ok(EventName::LifecycleExpirationAll),
|
||||
"s3:LifecycleExpiration:Delete" => Ok(EventName::LifecycleExpirationDelete),
|
||||
"s3:LifecycleExpiration:DeleteMarkerCreated" => Ok(EventName::LifecycleExpirationDeleteMarkerCreated),
|
||||
@@ -178,7 +178,7 @@ impl EventName {
|
||||
"s3:ObjectRestore:Post" => Ok(EventName::ObjectRestorePost),
|
||||
"s3:ObjectRestore:Completed" => Ok(EventName::ObjectRestoreCompleted),
|
||||
"s3:ObjectTransition:Failed" => Ok(EventName::ObjectTransitionFailed),
|
||||
"s3:ObjectTransition:Complete" => Ok(EventName::LifecycleTransition),
|
||||
"s3:ObjectTransition:Complete" => Ok(EventName::ObjectTransitionComplete),
|
||||
"s3:ObjectTransition:*" => Ok(EventName::ObjectTransitionAll),
|
||||
"s3:LifecycleTransition" => Ok(EventName::LifecycleTransition),
|
||||
"s3:IntelligentTiering" => Ok(EventName::IntelligentTiering),
|
||||
@@ -650,10 +650,13 @@ mod tests {
|
||||
EventName::parse("s3:ObjectCreated:DeleteTagging").unwrap(),
|
||||
EventName::ObjectTaggingDelete
|
||||
);
|
||||
assert_eq!(EventName::parse("s3:ObjectTransition:Complete").unwrap(), EventName::LifecycleTransition);
|
||||
assert_eq!(
|
||||
EventName::parse("s3:ObjectTransition:Complete").unwrap(),
|
||||
EventName::ObjectTransitionComplete
|
||||
);
|
||||
assert_eq!(
|
||||
EventName::parse("s3:LifecycleDelMarkerExpiration:Delete").unwrap(),
|
||||
EventName::LifecycleExpirationDeleteMarkerCreated
|
||||
EventName::LifecycleDelMarkerExpirationDelete
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user