test: Add comprehensive test cases for isPrivateIP function
Expand test coverage from 5 cases to 26 cases: - Public IPv4/IPv6 addresses - All RFC1918 private ranges (10.x, 172.16-31.x, 192.168.x) - Loopback addresses (127.x.x.x, ::1) - Link-local addresses (169.254.x.x, fe80::) - Link-local multicast (224.0.0.x, ff02::) - Unique local IPv6 (fc00::/7, fd00::) - Edge cases: empty string, invalid IP, invalid format - Addresses with port numbers Coverage unchanged at 93.8% (remaining 6.2% is defensive error handling for hardcoded valid CIDRs).
This commit is contained in:
parent
ef380df362
commit
37cc97952f
1 changed files with 37 additions and 3 deletions
|
|
@ -44,17 +44,51 @@ func TestGetClientIPUsesForwardedForTrustedProxy(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestIsPrivateIP(t *testing.T) {
|
||||
t.Helper()
|
||||
cases := []struct {
|
||||
name string
|
||||
ip string
|
||||
want bool
|
||||
}{
|
||||
// Public IPs
|
||||
{"public IPv4", "198.51.100.42", false},
|
||||
{"private IPv4", "10.1.2.3", true},
|
||||
{"public IPv4 Google DNS", "8.8.8.8", false},
|
||||
{"public IPv6", "2001:4860:4860::8888", false},
|
||||
|
||||
// Private IPv4 ranges (RFC1918)
|
||||
{"private IPv4 10.x.x.x", "10.1.2.3", true},
|
||||
{"private IPv4 10.0.0.0", "10.0.0.0", true},
|
||||
{"private IPv4 10.255.255.255", "10.255.255.255", true},
|
||||
{"private IPv4 172.16.x.x", "172.16.0.1", true},
|
||||
{"private IPv4 172.31.x.x", "172.31.255.255", true},
|
||||
{"private IPv4 192.168.x.x", "192.168.1.100", true},
|
||||
|
||||
// Loopback
|
||||
{"loopback IPv4", "127.0.0.1", true},
|
||||
{"link-local IPv6", "fe80::1", true},
|
||||
{"loopback IPv4 127.0.0.0", "127.0.0.0", true},
|
||||
{"loopback IPv4 127.255.255.255", "127.255.255.255", true},
|
||||
{"loopback IPv6", "::1", true},
|
||||
{"loopback IPv6 with port", "[::1]:8443", true},
|
||||
|
||||
// Link-local
|
||||
{"link-local IPv4", "169.254.1.1", true},
|
||||
{"link-local IPv6", "fe80::1", true},
|
||||
|
||||
// Link-local multicast
|
||||
{"link-local multicast IPv4", "224.0.0.1", true},
|
||||
{"link-local multicast IPv6", "ff02::1", true},
|
||||
|
||||
// Unique local IPv6 (fc00::/7)
|
||||
{"unique local IPv6 fc00", "fc00::1", true},
|
||||
{"unique local IPv6 fd00", "fd00::1", true},
|
||||
|
||||
// Edge cases - empty/invalid
|
||||
{"empty string", "", false},
|
||||
{"invalid IP", "not-an-ip", false},
|
||||
{"invalid format", "999.999.999.999", false},
|
||||
|
||||
// With port numbers
|
||||
{"private IPv4 with port", "192.168.1.1:8080", true},
|
||||
{"public IPv4 with port", "8.8.8.8:53", false},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
|
|
|
|||
Loading…
Reference in a new issue