|
|
@@ -7,6 +7,7 @@ import (
|
|
|
"flag"
|
|
|
"net"
|
|
|
"net/netip"
|
|
|
+ "reflect"
|
|
|
"sync/atomic"
|
|
|
"testing"
|
|
|
"time"
|
|
|
@@ -267,6 +268,45 @@ func TestIsMajorChangeFrom(t *testing.T) {
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+func TestForeachInterface(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ addrs []net.Addr
|
|
|
+ want []string
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "Mixed_IPv4_and_IPv6",
|
|
|
+ addrs: []net.Addr{
|
|
|
+ &net.IPNet{IP: net.IPv4(1, 2, 3, 4), Mask: net.CIDRMask(24, 32)},
|
|
|
+ &net.IPAddr{IP: net.IP{5, 6, 7, 8}, Zone: ""},
|
|
|
+ &net.IPNet{IP: net.ParseIP("2001:db8::1"), Mask: net.CIDRMask(64, 128)},
|
|
|
+ &net.IPAddr{IP: net.ParseIP("2001:db8::2"), Zone: ""},
|
|
|
+ },
|
|
|
+ want: []string{"1.2.3.4", "5.6.7.8", "2001:db8::1", "2001:db8::2"},
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tt := range tests {
|
|
|
+ t.Run(tt.name, func(t *testing.T) {
|
|
|
+ var got []string
|
|
|
+ ifaces := InterfaceList{
|
|
|
+ {
|
|
|
+ Interface: &net.Interface{Name: "eth0"},
|
|
|
+ AltAddrs: tt.addrs,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ ifaces.ForeachInterface(func(iface Interface, prefixes []netip.Prefix) {
|
|
|
+ for _, prefix := range prefixes {
|
|
|
+ ip := prefix.Addr()
|
|
|
+ got = append(got, ip.String())
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if !reflect.DeepEqual(got, tt.want) {
|
|
|
+ t.Errorf("got %q, want %q", got, tt.want)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
type testOSMon struct {
|
|
|
osMon
|