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