fn test_sock_to_flow_rtt_add()

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