mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-28 09:08:58 +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)));
|
||||
}
|
||||
|
||||
#[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]
|
||||
fn records_msgpack_decode_error_metric_with_codec_label() {
|
||||
let export = ExportMetricsServiceRequest {
|
||||
|
||||
@@ -3166,6 +3166,36 @@ mod tests {
|
||||
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]
|
||||
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");
|
||||
|
||||
Reference in New Issue
Block a user