mirror of https://github.com/vishvananda/netlink
146 lines
2.7 KiB
Go
146 lines
2.7 KiB
Go
package netlink
|
|
|
|
import (
|
|
"reflect"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
func TestAttrsToInetDiagTCPInfoResp(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
attrs []syscall.NetlinkRouteAttr
|
|
expected *InetDiagTCPInfoResp
|
|
wantFail bool
|
|
}{
|
|
{
|
|
name: "Empty",
|
|
attrs: []syscall.NetlinkRouteAttr{},
|
|
expected: &InetDiagTCPInfoResp{},
|
|
},
|
|
{
|
|
name: "BBRInfo Only",
|
|
attrs: []syscall.NetlinkRouteAttr{
|
|
{
|
|
Attr: syscall.RtAttr{
|
|
Len: 20,
|
|
Type: INET_DIAG_BBRINFO,
|
|
},
|
|
Value: []byte{
|
|
100, 0, 0, 0, 0, 0, 0, 0,
|
|
111, 0, 0, 0,
|
|
222, 0, 0, 0,
|
|
123, 0, 0, 0,
|
|
},
|
|
},
|
|
},
|
|
expected: &InetDiagTCPInfoResp{
|
|
TCPBBRInfo: &TCPBBRInfo{
|
|
BBRBW: 100,
|
|
BBRMinRTT: 111,
|
|
BBRPacingGain: 222,
|
|
BBRCwndGain: 123,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "TCPInfo Only",
|
|
attrs: []syscall.NetlinkRouteAttr{
|
|
{
|
|
Attr: syscall.RtAttr{
|
|
Len: 232,
|
|
Type: INET_DIAG_INFO,
|
|
},
|
|
Value: tcpInfoData,
|
|
},
|
|
},
|
|
expected: &InetDiagTCPInfoResp{
|
|
TCPInfo: tcpInfo,
|
|
},
|
|
},
|
|
{
|
|
name: "TCPInfo + TCPBBR",
|
|
attrs: []syscall.NetlinkRouteAttr{
|
|
{
|
|
Attr: syscall.RtAttr{
|
|
Len: 232,
|
|
Type: INET_DIAG_INFO,
|
|
},
|
|
Value: tcpInfoData,
|
|
},
|
|
{
|
|
Attr: syscall.RtAttr{
|
|
Len: 20,
|
|
Type: INET_DIAG_BBRINFO,
|
|
},
|
|
Value: []byte{
|
|
100, 0, 0, 0, 0, 0, 0, 0,
|
|
111, 0, 0, 0,
|
|
222, 0, 0, 0,
|
|
123, 0, 0, 0,
|
|
},
|
|
},
|
|
},
|
|
expected: &InetDiagTCPInfoResp{
|
|
TCPInfo: tcpInfo,
|
|
TCPBBRInfo: &TCPBBRInfo{
|
|
BBRBW: 100,
|
|
BBRMinRTT: 111,
|
|
BBRPacingGain: 222,
|
|
BBRCwndGain: 123,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "TCPBBR + TCPInfo (reverse)",
|
|
attrs: []syscall.NetlinkRouteAttr{
|
|
{
|
|
Attr: syscall.RtAttr{
|
|
Len: 20,
|
|
Type: INET_DIAG_BBRINFO,
|
|
},
|
|
Value: []byte{
|
|
100, 0, 0, 0, 0, 0, 0, 0,
|
|
111, 0, 0, 0,
|
|
222, 0, 0, 0,
|
|
123, 0, 0, 0,
|
|
},
|
|
},
|
|
{
|
|
Attr: syscall.RtAttr{
|
|
Len: 232,
|
|
Type: INET_DIAG_INFO,
|
|
},
|
|
Value: tcpInfoData,
|
|
},
|
|
},
|
|
expected: &InetDiagTCPInfoResp{
|
|
TCPInfo: tcpInfo,
|
|
TCPBBRInfo: &TCPBBRInfo{
|
|
BBRBW: 100,
|
|
BBRMinRTT: 111,
|
|
BBRPacingGain: 222,
|
|
BBRCwndGain: 123,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
res, err := attrsToInetDiagTCPInfoResp(test.attrs, nil)
|
|
if err != nil && !test.wantFail {
|
|
t.Errorf("Unexpected failure for test %q", test.name)
|
|
continue
|
|
}
|
|
|
|
if err == nil && test.wantFail {
|
|
t.Errorf("Unexpected success for test %q", test.name)
|
|
continue
|
|
}
|
|
|
|
if !reflect.DeepEqual(test.expected, res) {
|
|
t.Errorf("Unexpected failure for test %q", test.name)
|
|
}
|
|
}
|
|
}
|