fn test_sock_stats_add_with_last_agg_timestamp()

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);
    }