49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
|
package ipaddr
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestIsPrivateIP(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
ip string
|
||
|
private bool
|
||
|
}{
|
||
|
// IPv4 private addresses
|
||
|
{"10.0.0.1", true}, // private network address
|
||
|
{"100.64.0.1", true}, // shared address space
|
||
|
{"172.16.0.1", true}, // private network address
|
||
|
{"192.168.0.1", true}, // private network address
|
||
|
{"192.0.0.1", true}, // IANA address
|
||
|
{"192.0.2.1", true}, // documentation address
|
||
|
{"127.0.0.1", true}, // loopback address
|
||
|
{"169.254.0.1", true}, // link local address
|
||
|
|
||
|
// IPv4 public addresses
|
||
|
{"1.2.3.4", false},
|
||
|
|
||
|
// IPv6 private addresses
|
||
|
{"::1", true}, // loopback address
|
||
|
{"fe80::1", true}, // link local address
|
||
|
{"fc00::1", true}, // unique local address
|
||
|
{"fec0::1", true}, // site local address
|
||
|
{"2001:db8::1", true}, // documentation address
|
||
|
|
||
|
// IPv6 public addresses
|
||
|
{"2004:db6::1", false},
|
||
|
}
|
||
|
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.ip, func(t *testing.T) {
|
||
|
ip := net.ParseIP(tt.ip)
|
||
|
if ip == nil {
|
||
|
t.Fatalf("%s is not a valid ip address", tt.ip)
|
||
|
}
|
||
|
if got, want := isPrivate(ip), tt.private; got != want {
|
||
|
t.Fatalf("got %v for %v want %v", got, ip, want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|