mirror of
https://github.com/pocket-id/pocket-id.git
synced 2025-12-15 17:53:03 +03:00
160 lines
3.7 KiB
Go
160 lines
3.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/pocket-id/pocket-id/backend/internal/common"
|
|
)
|
|
|
|
func TestIsLocalhostIP(t *testing.T) {
|
|
tests := []struct {
|
|
ip string
|
|
expected bool
|
|
}{
|
|
{"127.0.0.1", true},
|
|
{"127.255.255.255", true},
|
|
{"::1", true},
|
|
{"192.168.1.1", false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
ip := net.ParseIP(tt.ip)
|
|
if got := IsLocalhostIP(ip); got != tt.expected {
|
|
t.Errorf("IsLocalhostIP(%s) = %v, want %v", tt.ip, got, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIsPrivateLanIP(t *testing.T) {
|
|
tests := []struct {
|
|
ip string
|
|
expected bool
|
|
}{
|
|
{"10.0.0.1", true},
|
|
{"172.16.5.4", true},
|
|
{"192.168.100.200", true},
|
|
{"8.8.8.8", false},
|
|
{"::1", false}, // IPv6 should return false
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
ip := net.ParseIP(tt.ip)
|
|
if got := IsPrivateLanIP(ip); got != tt.expected {
|
|
t.Errorf("IsPrivateLanIP(%s) = %v, want %v", tt.ip, got, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIsTailscaleIP(t *testing.T) {
|
|
tests := []struct {
|
|
ip string
|
|
expected bool
|
|
}{
|
|
{"100.64.0.1", true},
|
|
{"100.127.255.254", true},
|
|
{"8.8.8.8", false},
|
|
{"::1", false}, // IPv6 should return false
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
ip := net.ParseIP(tt.ip)
|
|
if got := IsTailscaleIP(ip); got != tt.expected {
|
|
t.Errorf("IsTailscaleIP(%s) = %v, want %v", tt.ip, got, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIsLocalIPv6(t *testing.T) {
|
|
// Save and restore env config
|
|
origRanges := common.EnvConfig.LocalIPv6Ranges
|
|
defer func() { common.EnvConfig.LocalIPv6Ranges = origRanges }()
|
|
|
|
common.EnvConfig.LocalIPv6Ranges = "fd00::/8,fc00::/7"
|
|
localIPv6Ranges = nil // reset
|
|
loadLocalIPv6Ranges()
|
|
|
|
tests := []struct {
|
|
ip string
|
|
expected bool
|
|
}{
|
|
{"fd00::1", true},
|
|
{"fc00::abcd", true},
|
|
{"::1", false}, // loopback handled separately
|
|
{"192.168.1.1", false}, // IPv4 should return false
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
ip := net.ParseIP(tt.ip)
|
|
if got := IsLocalIPv6(ip); got != tt.expected {
|
|
t.Errorf("IsLocalIPv6(%s) = %v, want %v", tt.ip, got, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIsPrivateIP(t *testing.T) {
|
|
// Save and restore env config
|
|
origRanges := common.EnvConfig.LocalIPv6Ranges
|
|
defer func() { common.EnvConfig.LocalIPv6Ranges = origRanges }()
|
|
|
|
common.EnvConfig.LocalIPv6Ranges = "fd00::/8"
|
|
localIPv6Ranges = nil // reset
|
|
loadLocalIPv6Ranges()
|
|
|
|
tests := []struct {
|
|
ip string
|
|
expected bool
|
|
}{
|
|
{"127.0.0.1", true}, // localhost
|
|
{"192.168.1.1", true}, // private LAN
|
|
{"100.64.0.1", true}, // Tailscale
|
|
{"fd00::1", true}, // local IPv6
|
|
{"8.8.8.8", false}, // public IPv4
|
|
{"2001:4860:4860::8888", false}, // public IPv6
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
ip := net.ParseIP(tt.ip)
|
|
if got := IsPrivateIP(ip); got != tt.expected {
|
|
t.Errorf("IsPrivateIP(%s) = %v, want %v", tt.ip, got, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestListContainsIP(t *testing.T) {
|
|
_, ipNet1, _ := net.ParseCIDR("10.0.0.0/8")
|
|
_, ipNet2, _ := net.ParseCIDR("192.168.0.0/16")
|
|
|
|
list := []*net.IPNet{ipNet1, ipNet2}
|
|
|
|
tests := []struct {
|
|
ip string
|
|
expected bool
|
|
}{
|
|
{"10.1.1.1", true},
|
|
{"192.168.5.5", true},
|
|
{"172.16.0.1", false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
ip := net.ParseIP(tt.ip)
|
|
if got := listContainsIP(list, ip); got != tt.expected {
|
|
t.Errorf("listContainsIP(%s) = %v, want %v", tt.ip, got, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInit_LocalIPv6Ranges(t *testing.T) {
|
|
// Save and restore env config
|
|
origRanges := common.EnvConfig.LocalIPv6Ranges
|
|
defer func() { common.EnvConfig.LocalIPv6Ranges = origRanges }()
|
|
|
|
common.EnvConfig.LocalIPv6Ranges = "fd00::/8, invalidCIDR ,fc00::/7"
|
|
localIPv6Ranges = nil
|
|
loadLocalIPv6Ranges()
|
|
|
|
if len(localIPv6Ranges) != 2 {
|
|
t.Errorf("expected 2 valid IPv6 ranges, got %d", len(localIPv6Ranges))
|
|
}
|
|
}
|