in nfm-controller/src/events/network_event.rs [398:544]
fn test_sock_to_flow_rtt_add() {
// No RTT measurements taken.
let mut net_stats = NetworkStats {
rtt_us: MetricHistogram {
count: 0,
min: 0,
max: 0,
sum: 0,
},
rtt_smoothed_us: MetricHistogram {
count: 0,
min: 0,
max: 0,
sum: 0,
},
..Default::default()
};
let sock_stats = SockStats {
rtt_count: 0,
rtt_latest_us: 0,
rtt_smoothed_us: 0,
..Default::default()
};
let expected_net_stats = NetworkStats {
sockets_connecting: 1,
rtt_us: MetricHistogram {
count: 0,
min: 0,
max: 0,
sum: 0,
},
rtt_smoothed_us: MetricHistogram {
count: 0,
min: 0,
max: 0,
sum: 0,
},
..Default::default()
};
net_stats.add_from(&sock_stats);
assert_eq!(net_stats, expected_net_stats);
// RTTs with no count.
let sock_stats = SockStats {
rtt_count: 0,
rtt_latest_us: 1,
rtt_smoothed_us: 2,
..Default::default()
};
let expected_net_stats = NetworkStats {
sockets_connecting: 2,
rtt_us: MetricHistogram {
count: 0,
min: 0,
max: 0,
sum: 0,
},
rtt_smoothed_us: MetricHistogram {
count: 0,
min: 0,
max: 0,
sum: 0,
},
..Default::default()
};
net_stats.add_from(&sock_stats);
assert_eq!(net_stats, expected_net_stats);
// A new min and max.
let sock_stats = SockStats {
rtt_count: 1,
rtt_latest_us: 10,
rtt_smoothed_us: 3,
..Default::default()
};
let expected_net_stats = NetworkStats {
sockets_connecting: 3,
rtt_us: MetricHistogram {
count: 1,
min: 10,
max: 10,
sum: 10,
},
rtt_smoothed_us: MetricHistogram {
count: 1,
min: 3,
max: 3,
sum: 3,
},
..Default::default()
};
net_stats.add_from(&sock_stats);
assert_eq!(net_stats, expected_net_stats);
// A new min, but no smoothed measurement. Notice that multiple RTT occurrences increase
// our sampled count by just 1.
let sock_stats = SockStats {
rtt_count: 12,
rtt_latest_us: 5,
..Default::default()
};
let expected_net_stats = NetworkStats {
sockets_connecting: 4,
rtt_us: MetricHistogram {
count: 2,
min: 5,
max: 10,
sum: 15,
},
rtt_smoothed_us: MetricHistogram {
count: 1,
min: 3,
max: 3,
sum: 3,
},
..Default::default()
};
net_stats.add_from(&sock_stats);
assert_eq!(net_stats, expected_net_stats);
// A new max with multiple observations, leading to one sampled.
let sock_stats = SockStats {
rtt_count: 29,
rtt_latest_us: 20,
rtt_smoothed_us: 25,
..Default::default()
};
let expected_net_stats = NetworkStats {
sockets_connecting: 5,
rtt_us: MetricHistogram {
count: 3,
min: 5,
max: 20,
sum: 35,
},
rtt_smoothed_us: MetricHistogram {
count: 2,
min: 3,
max: 25,
sum: 28,
},
..Default::default()
};
net_stats.add_from(&sock_stats);
assert_eq!(net_stats, expected_net_stats);
}