mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-24 05:06:28 +00:00
test(internode): pin JSON fallback compatibility (#5330)
Co-authored-by: heihutu <heihutu@gmail.com>
This commit is contained in:
@@ -616,6 +616,41 @@ fn records_msgpack_decode_metric_with_codec_label() {
|
|||||||
assert_eq!(values.get(&key).and_then(|points| points.get(&7)).copied(), Some((11, 5)));
|
assert_eq!(values.get(&key).and_then(|points| points.get(&7)).copied(), Some((11, 5)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn records_msgpack_fallback_metric_with_direction_and_message_labels() {
|
||||||
|
let export = ExportMetricsServiceRequest {
|
||||||
|
resource_metrics: vec![ResourceMetrics {
|
||||||
|
scope_metrics: vec![ScopeMetrics {
|
||||||
|
metrics: vec![Metric {
|
||||||
|
name: MSGPACK_JSON_FALLBACK_COUNTER.to_string(),
|
||||||
|
data: Some(metric::Data::Sum(Sum {
|
||||||
|
data_points: vec![NumberDataPoint {
|
||||||
|
attributes: vec![
|
||||||
|
metric_attribute(DIRECTION_LABEL, FALLBACK_RESPONSE_DIRECTION),
|
||||||
|
metric_attribute(MESSAGE_LABEL, "RenameDataResp"),
|
||||||
|
],
|
||||||
|
start_time_unix_nano: 7,
|
||||||
|
time_unix_nano: 11,
|
||||||
|
value: Some(number_data_point::Value::AsInt(14)),
|
||||||
|
..Default::default()
|
||||||
|
}],
|
||||||
|
..Default::default()
|
||||||
|
})),
|
||||||
|
..Default::default()
|
||||||
|
}],
|
||||||
|
..Default::default()
|
||||||
|
}],
|
||||||
|
..Default::default()
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
let mut values = BTreeMap::new();
|
||||||
|
|
||||||
|
record_msgpack_fallback_metrics(&export, &mut values);
|
||||||
|
|
||||||
|
let key = msgpack_fallback_metric_key(FALLBACK_RESPONSE_DIRECTION, "RenameDataResp");
|
||||||
|
assert_eq!(values.get(&key).and_then(|points| points.get(&7)).copied(), Some((11, 14)));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn records_msgpack_decode_error_metric_with_codec_label() {
|
fn records_msgpack_decode_error_metric_with_codec_label() {
|
||||||
let export = ExportMetricsServiceRequest {
|
let export = ExportMetricsServiceRequest {
|
||||||
|
|||||||
@@ -3166,6 +3166,36 @@ mod tests {
|
|||||||
assert!(after > before, "successful response JSON decode should increment traffic metrics");
|
assert!(after > before, "successful response JSON decode should increment traffic metrics");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn rename_data_response_accepts_legacy_json_without_decode_error() {
|
||||||
|
crate::cluster::rpc::runtime_sources::reset_internode_metrics_for_test();
|
||||||
|
let response = RenameDataResp {
|
||||||
|
old_data_dir: Some(Uuid::new_v4()),
|
||||||
|
sign: Some(vec![0x14, 0x35]),
|
||||||
|
old_current_size: Some(crate::disk::OldCurrentSize::Present(64 * 1024)),
|
||||||
|
};
|
||||||
|
let json = serde_json::to_string(&response).expect("legacy rename_data JSON response should encode");
|
||||||
|
let decode_before = rustfs_io_metrics::internode_metrics::global_internode_metrics().msgpack_json_decode_total_for_test();
|
||||||
|
let decode_errors_before = crate::cluster::rpc::runtime_sources::internode_msgpack_json_decode_error_total_for_test();
|
||||||
|
|
||||||
|
let decoded = decode_msgpack_or_json::<RenameDataResp>(&[], &json, "RenameDataResp")
|
||||||
|
.expect("legacy rename_data JSON response should decode");
|
||||||
|
let decode_after = rustfs_io_metrics::internode_metrics::global_internode_metrics().msgpack_json_decode_total_for_test();
|
||||||
|
let decode_errors_after = crate::cluster::rpc::runtime_sources::internode_msgpack_json_decode_error_total_for_test();
|
||||||
|
|
||||||
|
assert_eq!(decoded.old_data_dir, response.old_data_dir);
|
||||||
|
assert_eq!(decoded.sign, response.sign);
|
||||||
|
assert_eq!(decoded.old_current_size, response.old_current_size);
|
||||||
|
assert!(
|
||||||
|
decode_after > decode_before,
|
||||||
|
"legacy JSON response should increment successful decode traffic"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
decode_errors_after, decode_errors_before,
|
||||||
|
"legacy JSON compatibility fallback must stay observable without becoming a decode error"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn read_multiple_response_payload_len_prefers_msgpack_and_falls_back_to_json() {
|
fn read_multiple_response_payload_len_prefers_msgpack_and_falls_back_to_json() {
|
||||||
let bin_a = encode_msgpack(&sample_read_multiple_resp("a", b"binary")).expect("msgpack should encode");
|
let bin_a = encode_msgpack(&sample_read_multiple_resp("a", b"binary")).expect("msgpack should encode");
|
||||||
|
|||||||
Reference in New Issue
Block a user