@ -7,6 +7,7 @@ import (
"flag"
"flag"
"net"
"net"
"net/netip"
"net/netip"
"reflect"
"sync/atomic"
"sync/atomic"
"testing"
"testing"
"time"
"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 {
type testOSMon struct {
osMon
osMon