fn test_build_report()

in nfm-controller/src/reports/report.rs [183:294]


    fn test_build_report() {
        let mut report = NfmReport::new();

        let mut context = SockContext {
            is_client: false,
            address_family: AF_INET,
            local_ipv4: 16909060,
            remote_ipv4: 84281096,
            local_ipv6: [0; 16],
            remote_ipv6: [0; 16],
            local_port: 443,
            remote_port: 28015,
            ..Default::default()
        };
        let stats = NetworkStats {
            sockets_connecting: 4,
            sockets_established: 3,
            sockets_closing: 2,
            sockets_closed: 1,

            sockets_completed: 44,
            severed_connect: 2,
            severed_establish: 1,

            connect_attempts: 14,
            bytes_received: 43,
            bytes_delivered: 47,
            segments_received: 53,
            segments_delivered: 59,

            retrans_syn: 20,
            retrans_est: 19,
            retrans_close: 18,
            rtos_syn: 17,
            rtos_est: 16,
            rtos_close: 15,

            connect_us: MetricHistogram {
                count: 2,
                min: 12,
                max: 13,
                sum: 25,
            },
            rtt_us: MetricHistogram {
                count: 3,
                min: 14,
                max: 15,
                sum: 44,
            },
            rtt_smoothed_us: MetricHistogram {
                count: 4,
                min: 16,
                max: 17,
                sum: 66,
            },
        };
        let mut process_stats = ProcessStats::default();
        process_stats.usage.push(UsageStats {
            cpu_util: 0.040,
            mem_used_kb: 512,
            mem_used_ratio: 0.06,
            sockets_tracked: 49,
        });
        let grouped_iface_stats = GroupedInterfaceStats {
            interface_id: "iface-id-1".to_string(),
            stats: NetworkInterfaceStats {
                bw_in_allowance_exceeded: 211,
                bw_out_allowance_exceeded: 223,
                conntrack_allowance_exceeded: 227,
                linklocal_allowance_exceeded: 229,
                pps_allowance_exceeded: 233,
                conntrack_allowance_available: 239,
            },
        };
        let host_stats = HostStats {
            interface_stats: vec![grouped_iface_stats],
        };

        // From the perspective of a server, the local port is the service port.
        context.is_client = false;
        let mut flow = FlowProperties::try_from(&context).unwrap();
        let mut agg_results = AggregateResults {
            flow,
            stats: stats.clone(),
        };
        let mut env_metadata = EnvMetadata::default();
        env_metadata.insert(
            "instance_id".into(),
            ReportValue::String("instance-id".into()),
        );
        report.set_network_stats(vec![agg_results]);
        report.set_process_stats(process_stats);
        report.set_host_stats(host_stats);
        report.set_env_metadata(env_metadata);
        report.set_service_metadata(ServiceMetadata::new("test-service", "1.0", "build-time"));

        let expected: NfmReport =
            serde_json::from_str(&fs::read_to_string("../test-data/report1.json").unwrap())
                .unwrap();
        assert_eq!(report, expected);

        // From the perspective of a client, the remote port is the service port.
        context.is_client = true;
        flow = FlowProperties::try_from(&context).unwrap();
        agg_results = AggregateResults { flow, stats };
        report.set_network_stats(vec![agg_results]);

        let expected: NfmReport =
            serde_json::from_str(&fs::read_to_string("../test-data/report2.json").unwrap())
                .unwrap();
        assert_eq!(report, expected);
    }