mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-19 11:06:17 +00:00
test: expand snapshot coverage (#4024)
This commit is contained in:
@@ -95,13 +95,36 @@ impl std::error::Error for CapabilitySnapshotError {}
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use serde_json::Value;
|
||||
|
||||
fn sorted_json_value(value: Value) -> Value {
|
||||
match value {
|
||||
Value::Array(values) => Value::Array(values.into_iter().map(sorted_json_value).collect()),
|
||||
Value::Object(object) => {
|
||||
let mut entries: Vec<_> = object.into_iter().collect();
|
||||
entries.sort_by(|(left, _), (right, _)| left.cmp(right));
|
||||
|
||||
Value::Object(
|
||||
entries
|
||||
.into_iter()
|
||||
.map(|(key, value)| (key, sorted_json_value(value)))
|
||||
.collect(),
|
||||
)
|
||||
}
|
||||
value => value,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn capability_status_serializes_unknown_and_unsupported_states() {
|
||||
let unknown = CapabilityStatus::unknown();
|
||||
let unsupported = CapabilityStatus::unsupported().with_reason("target does not expose profiler");
|
||||
|
||||
let encoded = serde_json::to_string(&(unknown, unsupported)).expect("serialize capability statuses");
|
||||
let encoded = serde_json::to_string(&(&unknown, &unsupported)).expect("serialize capability statuses");
|
||||
insta::assert_json_snapshot!(
|
||||
"capability_status_contract",
|
||||
sorted_json_value(serde_json::to_value((&unknown, &unsupported)).expect("capability statuses should serialize"))
|
||||
);
|
||||
let decoded: (CapabilityStatus, CapabilityStatus) =
|
||||
serde_json::from_str(&encoded).expect("deserialize capability statuses");
|
||||
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: crates/storage-api/src/capability.rs
|
||||
expression: "serde_json::to_value((&unknown,\n&unsupported)).expect(\"capability statuses should serialize\")"
|
||||
---
|
||||
[
|
||||
{
|
||||
"state": "unknown"
|
||||
},
|
||||
{
|
||||
"reason": "target does not expose profiler",
|
||||
"state": "unsupported"
|
||||
}
|
||||
]
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
---
|
||||
source: crates/storage-api/src/topology.rs
|
||||
expression: "serde_json::to_value(&snapshot).expect(\"topology snapshot should serialize\")"
|
||||
---
|
||||
{
|
||||
"capabilities": {
|
||||
"failure_domain_labels": {
|
||||
"state": "supported"
|
||||
},
|
||||
"media_labels": {
|
||||
"state": "supported"
|
||||
},
|
||||
"numa": {
|
||||
"state": "unknown"
|
||||
},
|
||||
"profiling": {
|
||||
"state": "supported"
|
||||
}
|
||||
},
|
||||
"pools": [
|
||||
{
|
||||
"labels": {
|
||||
"additional": {
|
||||
"room": "a"
|
||||
},
|
||||
"media": null,
|
||||
"node": null,
|
||||
"numa_node": null,
|
||||
"rack": null,
|
||||
"zone": null
|
||||
},
|
||||
"pool_id": null,
|
||||
"pool_index": 0,
|
||||
"sets": [
|
||||
{
|
||||
"disks": [
|
||||
{
|
||||
"capabilities": {
|
||||
"failure_domain": {
|
||||
"state": "unknown"
|
||||
},
|
||||
"media_type": {
|
||||
"state": "supported"
|
||||
},
|
||||
"numa": {
|
||||
"reason": "not reported",
|
||||
"state": "unsupported"
|
||||
},
|
||||
"profiling": {
|
||||
"state": "disabled"
|
||||
}
|
||||
},
|
||||
"disk_id": "disk-2",
|
||||
"disk_index": 2,
|
||||
"labels": {
|
||||
"additional": {
|
||||
"slot": "nvme0"
|
||||
},
|
||||
"media": "ssd",
|
||||
"node": null,
|
||||
"numa_node": null,
|
||||
"rack": null,
|
||||
"zone": null
|
||||
},
|
||||
"pool_index": 0,
|
||||
"set_index": 1
|
||||
}
|
||||
],
|
||||
"labels": {
|
||||
"media": null,
|
||||
"node": null,
|
||||
"numa_node": null,
|
||||
"rack": null,
|
||||
"zone": null
|
||||
},
|
||||
"pool_index": 0,
|
||||
"set_id": null,
|
||||
"set_index": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -95,6 +95,25 @@ pub trait TopologySnapshotProvider: Send + Sync + Debug {
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::CapabilityState;
|
||||
use serde_json::Value;
|
||||
|
||||
fn sorted_json_value(value: Value) -> Value {
|
||||
match value {
|
||||
Value::Array(values) => Value::Array(values.into_iter().map(sorted_json_value).collect()),
|
||||
Value::Object(object) => {
|
||||
let mut entries: Vec<_> = object.into_iter().collect();
|
||||
entries.sort_by(|(left, _), (right, _)| left.cmp(right));
|
||||
|
||||
Value::Object(
|
||||
entries
|
||||
.into_iter()
|
||||
.map(|(key, value)| (key, sorted_json_value(value)))
|
||||
.collect(),
|
||||
)
|
||||
}
|
||||
value => value,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn topology_snapshot_allows_missing_and_extra_labels() {
|
||||
@@ -141,6 +160,10 @@ mod tests {
|
||||
}"#;
|
||||
|
||||
let snapshot: TopologySnapshot = serde_json::from_str(raw).expect("deserialize topology snapshot");
|
||||
insta::assert_json_snapshot!(
|
||||
"topology_snapshot_contract",
|
||||
sorted_json_value(serde_json::to_value(&snapshot).expect("topology snapshot should serialize"))
|
||||
);
|
||||
let disk = &snapshot.pools[0].sets[0].disks[0];
|
||||
|
||||
assert_eq!(snapshot.pools[0].labels.zone, None);
|
||||
|
||||
Reference in New Issue
Block a user