in nfm-common/src/network.rs [352:421]
fn test_sock_stats_add_with_last_agg_timestamp() {
let stats1 = SockStats {
last_touched_us: 100,
rtt_count: 5,
rtt_latest_us: 20,
rtt_smoothed_us: 30,
..Default::default()
};
let stats2 = SockStats {
last_touched_us: 200,
rtt_count: 7,
rtt_latest_us: 25,
rtt_smoothed_us: 35,
..Default::default()
};
// Adding with an old timestamp adds 'em all.
let last_agg_ts: u64 = 99;
let expected = SockStats {
last_touched_us: 200,
rtt_count: 12,
rtt_latest_us: 20,
rtt_smoothed_us: 35,
..Default::default()
};
let mut actual = stats1.clone();
actual.add_from(&stats2, last_agg_ts);
assert_eq!(actual, expected);
let mut actual = stats2.clone();
actual.add_from(&stats1, last_agg_ts);
assert_eq!(actual, expected);
// Adding with a last-touched on the aggregation threshold also adds 'em all.
let last_agg_ts: u64 = stats1.last_touched_us;
let mut actual = stats1.clone();
actual.add_from(&stats2, last_agg_ts);
assert_eq!(actual, expected);
let mut actual = stats2.clone();
actual.add_from(&stats1, last_agg_ts);
assert_eq!(actual, expected);
// Adding with the newest timestamp adds all fields but for RTT, using only newer stats.
let last_agg_ts: u64 = stats2.last_touched_us;
let expected = SockStats {
last_touched_us: 200,
rtt_count: 12,
rtt_latest_us: 25,
rtt_smoothed_us: 35,
..Default::default()
};
let mut actual = stats1.clone();
actual.add_from(&stats2, last_agg_ts);
assert_eq!(actual, expected);
let mut actual = stats2.clone();
actual.add_from(&stats1, last_agg_ts);
assert_eq!(actual, expected);
// Adding with all old stats leaves us with the first RTT unchanged.
let last_agg_ts: u64 = 300;
let expected = SockStats {
last_touched_us: 200,
rtt_count: 12,
rtt_latest_us: 20,
rtt_smoothed_us: 30,
..Default::default()
};
let mut actual = stats1.clone();
actual.add_from(&stats2, last_agg_ts);
assert_eq!(actual, expected);
}