165 lines
4.4 KiB
Zig
165 lines
4.4 KiB
Zig
const std = @import("std");
|
|
|
|
pub const IPerfReturn = struct {
|
|
start: struct {
|
|
connected: []struct {
|
|
socket: u64,
|
|
local_host: []const u8,
|
|
local_port: u16,
|
|
remote_host: []const u8,
|
|
remote_port: u16,
|
|
},
|
|
version: []const u8,
|
|
system_info: []const u8,
|
|
sock_bufsize: ?u64 = null,
|
|
sndbuf_actual: ?u64 = null,
|
|
rcvbuf_actual: ?u64 = null,
|
|
timestamp: ?struct {
|
|
time: []const u8,
|
|
timesecs: u64,
|
|
} = null,
|
|
accepted_connection: ?struct {
|
|
host: []const u8,
|
|
port: u16,
|
|
} = null,
|
|
cookie: ?[]const u8 = null,
|
|
tcp_mss_default: ?u64 = null,
|
|
target_bitrate: ?u64 = null,
|
|
fq_rate: ?u64 = null,
|
|
test_start: ?struct {
|
|
protocol: []const u8,
|
|
num_streams: u64,
|
|
blksize: u64,
|
|
omit: u64,
|
|
duration: u64,
|
|
bytes: u64,
|
|
blocks: u64,
|
|
reverse: u64,
|
|
tos: u64,
|
|
target_bitrate: u64,
|
|
bidir: u64,
|
|
fqrate: u64,
|
|
},
|
|
},
|
|
intervals: []struct {
|
|
streams: []struct {
|
|
socket: u64,
|
|
start: f128,
|
|
end: f128,
|
|
seconds: f128,
|
|
bytes: u64,
|
|
bits_per_second: f128,
|
|
retransmits: ?u64 = null,
|
|
snd_cwnd: ?u64 = null,
|
|
snd_wnd: ?u64 = null,
|
|
rtt: ?u64 = null,
|
|
rttvar: ?u64 = null,
|
|
pmtu: ?u64 = null,
|
|
omitted: bool,
|
|
sender: bool,
|
|
},
|
|
sum: struct {
|
|
start: f128,
|
|
end: f128,
|
|
seconds: f128,
|
|
bytes: u64,
|
|
bits_per_second: f128,
|
|
retransmits: ?u64 = null,
|
|
omitted: bool,
|
|
sender: bool,
|
|
},
|
|
},
|
|
end: struct {
|
|
streams: ?[]struct {
|
|
sender: struct {
|
|
socket: u64,
|
|
start: f128,
|
|
end: f128,
|
|
seconds: f128,
|
|
bytes: u64,
|
|
bits_per_second: f128,
|
|
retransmits: ?u64 = null,
|
|
max_snd_cwnd: ?u64 = null,
|
|
max_snd_wnd: ?u64 = null,
|
|
max_rtt: ?u64 = null,
|
|
min_rtt: ?u64 = null,
|
|
mean_rtt: ?u64 = null,
|
|
sender: bool,
|
|
},
|
|
receiver: struct {
|
|
socket: u64,
|
|
start: f128,
|
|
end: f128,
|
|
seconds: f128,
|
|
bytes: u64,
|
|
bits_per_second: f128,
|
|
sender: bool,
|
|
},
|
|
} = null,
|
|
sum_sent: ?struct {
|
|
start: f128,
|
|
end: f128,
|
|
seconds: f128,
|
|
bytes: u64,
|
|
bits_per_second: f128,
|
|
retransmits: ?u64 = null,
|
|
sender: bool,
|
|
} = null,
|
|
sum_received: ?struct {
|
|
start: f128,
|
|
end: f128,
|
|
seconds: f128,
|
|
bytes: u64,
|
|
bits_per_second: f128,
|
|
sender: bool,
|
|
} = null,
|
|
cpu_utilization_percent: ?struct {
|
|
host_total: f128,
|
|
host_user: f128,
|
|
host_system: f128,
|
|
remote_total: f128,
|
|
remote_user: f128,
|
|
remote_system: f128,
|
|
} = null,
|
|
receiver_tcp_congestion: ?[]const u8 = null,
|
|
sender_tcp_congestion: ?[]const u8 = null,
|
|
},
|
|
@"error": ?[]const u8 = null,
|
|
};
|
|
|
|
test "test-receiver-1" {
|
|
const input = @embedFile("test/test-receiver-1.json");
|
|
const result = try std.json.parseFromSlice(
|
|
IPerfReturn,
|
|
std.testing.allocator,
|
|
input,
|
|
.{},
|
|
);
|
|
defer result.deinit();
|
|
try std.testing.expect(result.value.@"error" == null);
|
|
}
|
|
|
|
test "test-receiver-2" {
|
|
const input = @embedFile("test/test-receiver-2.json");
|
|
const result = try std.json.parseFromSlice(
|
|
IPerfReturn,
|
|
std.testing.allocator,
|
|
input,
|
|
.{},
|
|
);
|
|
defer result.deinit();
|
|
try std.testing.expect(result.value.@"error" == null);
|
|
}
|
|
|
|
test "test-sender-1" {
|
|
const input = @embedFile("test/test-sender-1.json");
|
|
const result = try std.json.parseFromSlice(
|
|
IPerfReturn,
|
|
std.testing.allocator,
|
|
input,
|
|
.{},
|
|
);
|
|
defer result.deinit();
|
|
try std.testing.expect(result.value.@"error" == null);
|
|
}
|