in nfm-controller/src/events/sock_cache.rs [406:460]
fn test_get_sock_deltas_all_new_stats() {
let mut sock_cache = SockCache::new();
let mut sock_stream: HashMap<SockKey, AggSockStats> = HashMap::new();
// Create a slew of sockets in the incoming stream.
let sock_keys: Vec<u64> = vec![99, 101, 4, 55, 19, 79];
let now_us = 2049;
for sock_key in sock_keys.iter() {
sock_stream.insert(
*sock_key,
AggSockStats {
cpus: vec![*sock_key as u32 % 2, 100],
stats: SockStats {
last_touched_us: sock_key * 3,
bytes_delivered: sock_key * 4,
..Default::default()
},
},
);
// Also add a context in cache.
let context = SockContext {
address_family: AF_INET,
..Default::default()
};
let result = sock_cache.add_context(*sock_key, context, now_us);
assert_eq!(
result,
SockOperationResult {
completed: 1,
partial: 0,
failed: 0,
}
);
}
// On nothing before should yield all of the after.
let expected_deltas = sock_stream.clone();
let result = sock_cache.update_stats_and_get_deltas(&mut sock_stream, STALENESS_TS);
assert_eq!(
result,
SockOperationResult {
completed: sock_keys.len().try_into().unwrap(),
partial: 0,
failed: 0,
}
);
assert_eq!(sock_cache.len(), sock_keys.len());
assert_eq!(sock_stream, expected_deltas);
let (min, max, avg) = sock_cache.num_cpus();
assert_eq!(min, 2);
assert_eq!(max, 2);
assert!((2.0 - avg).abs() < 0.01);
}