fix(gui/web): 修复丢包率和 NAT 类型显示 (#2643)

This commit is contained in:
刚刚 authored and GitHub committed 2026-10-08 00:51:06 +08:00
1 parent eb32d2a930
commit 4837468d43
8 files changed
+239 -49

No files matched your search

+67
View File
@@ -540,4 +540,71 @@ mod tests {
assert_eq!(pair.get_loss_rate(), Some(0.0));
}
#[cfg(feature = "json-rpc")]
#[test]
fn peer_route_pair_json_omits_zero_loss_rate_and_preserves_nonzero_loss_rate() {
let pair = PeerRoutePair {
peer: Some(PeerInfo {
conns: vec![
PeerConnInfo {
conn_id: "zero-loss".to_owned(),
loss_rate: 0.0,
..Default::default()
},
PeerConnInfo {
conn_id: "nonzero-loss".to_owned(),
loss_rate: 0.25,
..Default::default()
},
],
..Default::default()
}),
..Default::default()
};
let json = serde_json::to_value(pair).unwrap();
let conns = json["peer"]["conns"].as_array().unwrap();
assert!(!conns[0].as_object().unwrap().contains_key("loss_rate"));
assert_eq!(conns[1]["loss_rate"], serde_json::json!(0.25));
}
#[cfg(feature = "json-rpc")]
#[test]
fn peer_route_pair_json_stun_info_uses_enum_names_and_omits_unknown_nat() {
use super::instance::Route;
use crate::proto::common::{NatType, StunInfo};
let known = PeerRoutePair {
route: Some(Route {
stun_info: Some(StunInfo {
udp_nat_type: NatType::FullCone as i32,
tcp_nat_type: NatType::NoPat as i32,
..Default::default()
}),
..Default::default()
}),
..Default::default()
};
let unknown = PeerRoutePair {
route: Some(Route {
stun_info: Some(StunInfo::default()),
..Default::default()
}),
..Default::default()
};
let known_json = serde_json::to_value(known).unwrap();
assert_eq!(
known_json["route"]["stun_info"]["udp_nat_type"],
serde_json::json!("FullCone")
);
assert_eq!(
known_json["route"]["stun_info"]["tcp_nat_type"],
serde_json::json!("NoPAT")
);
let unknown_json = serde_json::to_value(unknown).unwrap();
assert_eq!(unknown_json["route"]["stun_info"], serde_json::json!({}));
}
}