100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
package probe
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
func TestHumanizeBitsPerSecond(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
rate float64
|
|
want string
|
|
}{
|
|
{name: "bits", rate: 999, want: "999 bit/s"},
|
|
{name: "kilobits", rate: 1500, want: "1.50 kbit/s"},
|
|
{name: "megabits", rate: 2500000, want: "2.50 Mbit/s"},
|
|
{name: "gigabits", rate: 4200000000, want: "4.20 Gbit/s"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := HumanizeBitsPerSecond(tt.rate); got != tt.want {
|
|
t.Fatalf("HumanizeBitsPerSecond(%v) = %q, want %q", tt.rate, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseNetDev(t *testing.T) {
|
|
data := []byte(`Inter-| Receive | Transmit
|
|
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
|
|
lo: 1000 0 0 0 0 0 0 0 2000 0 0 0 0 0 0 0
|
|
eth0: 12345 1 0 0 0 0 0 0 67890 2 0 0 0 0 0 0
|
|
`)
|
|
|
|
stats, err := parseNetDev(data, "eth0")
|
|
if err != nil {
|
|
t.Fatalf("parseNetDev() error = %v", err)
|
|
}
|
|
if stats.RXBytes != 12345 || stats.TXBytes != 67890 {
|
|
t.Fatalf("stats = %+v, want rx 12345 tx 67890", stats)
|
|
}
|
|
}
|
|
|
|
func TestLittleEndianHexIPv4(t *testing.T) {
|
|
ip, err := littleEndianHexIPv4("0102A8C0")
|
|
if err != nil {
|
|
t.Fatalf("littleEndianHexIPv4() error = %v", err)
|
|
}
|
|
if !ip.Equal(net.IPv4(192, 168, 2, 1)) {
|
|
t.Fatalf("ip = %v, want 192.168.2.1", ip)
|
|
}
|
|
}
|
|
|
|
func TestParseLinuxDefaultGateway(t *testing.T) {
|
|
t.Run("explicit gateway default route", func(t *testing.T) {
|
|
data := []byte(`Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
|
|
eth0 00000000 0102A8C0 0003 0 0 100 00000000 0 0 0
|
|
`)
|
|
|
|
ip, err := parseLinuxDefaultGateway(data, "eth0")
|
|
if err != nil {
|
|
t.Fatalf("parseLinuxDefaultGateway() error = %v", err)
|
|
}
|
|
if !ip.Equal(net.IPv4(192, 168, 2, 1)) {
|
|
t.Fatalf("ip = %v, want 192.168.2.1", ip)
|
|
}
|
|
})
|
|
|
|
t.Run("point to point peer route", func(t *testing.T) {
|
|
data := []byte(`Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
|
|
ppp0 00000000 00000000 0001 0 0 0 00000000 0 0 0
|
|
ppp0 0100400A 00000000 0005 0 0 0 FFFFFFFF 0 0 0
|
|
`)
|
|
|
|
ip, err := parseLinuxDefaultGateway(data, "ppp0")
|
|
if err != nil {
|
|
t.Fatalf("parseLinuxDefaultGateway() error = %v", err)
|
|
}
|
|
if !ip.Equal(net.IPv4(10, 64, 0, 1)) {
|
|
t.Fatalf("ip = %v, want 10.64.0.1", ip)
|
|
}
|
|
})
|
|
|
|
t.Run("prefers explicit gateway over peer route", func(t *testing.T) {
|
|
data := []byte(`Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
|
|
ppp0 00000000 FE00400A 0003 0 0 0 00000000 0 0 0
|
|
ppp0 0100400A 00000000 0005 0 0 0 FFFFFFFF 0 0 0
|
|
`)
|
|
|
|
ip, err := parseLinuxDefaultGateway(data, "ppp0")
|
|
if err != nil {
|
|
t.Fatalf("parseLinuxDefaultGateway() error = %v", err)
|
|
}
|
|
if !ip.Equal(net.IPv4(10, 64, 0, 254)) {
|
|
t.Fatalf("ip = %v, want 10.64.0.254", ip)
|
|
}
|
|
})
|
|
}
|