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