mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 03:20:11 +00:00
92 lines
2.8 KiB
Go
92 lines
2.8 KiB
Go
package api
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/config"
|
|
"github.com/rcourtman/pulse-go-rewrite/pkg/proxmox"
|
|
)
|
|
|
|
func TestFindExistingIPOverride(t *testing.T) {
|
|
endpoints := []config.ClusterEndpoint{
|
|
{NodeName: "node1", IPOverride: "10.0.0.10"},
|
|
{NodeName: "node2", IPOverride: "10.0.0.11"},
|
|
}
|
|
|
|
if got := findExistingIPOverride("node2", endpoints); got != "10.0.0.11" {
|
|
t.Fatalf("findExistingIPOverride = %q, want 10.0.0.11", got)
|
|
}
|
|
if got := findExistingIPOverride("missing", endpoints); got != "" {
|
|
t.Fatalf("findExistingIPOverride = %q, want empty", got)
|
|
}
|
|
}
|
|
|
|
func TestExtractIPFromHost(t *testing.T) {
|
|
ip := extractIPFromHost("https://10.1.1.5:8006")
|
|
if ip == nil || !ip.Equal(net.ParseIP("10.1.1.5")) {
|
|
t.Fatalf("extractIPFromHost returned %v, want 10.1.1.5", ip)
|
|
}
|
|
|
|
ip = extractIPFromHost("10.2.3.4")
|
|
if ip == nil || !ip.Equal(net.ParseIP("10.2.3.4")) {
|
|
t.Fatalf("extractIPFromHost returned %v, want 10.2.3.4", ip)
|
|
}
|
|
}
|
|
|
|
func TestIPsOnSameNetwork(t *testing.T) {
|
|
if !ipsOnSameNetwork(net.ParseIP("10.0.0.1"), net.ParseIP("10.0.0.50")) {
|
|
t.Fatalf("expected 10.0.0.1 and 10.0.0.50 to match")
|
|
}
|
|
if ipsOnSameNetwork(net.ParseIP("10.0.0.1"), net.ParseIP("10.1.0.1")) {
|
|
t.Fatalf("expected 10.0.0.1 and 10.1.0.1 to differ")
|
|
}
|
|
|
|
ipv6a := net.ParseIP("2001:db8::1")
|
|
ipv6b := net.ParseIP("2001:db8::2")
|
|
if !ipsOnSameNetwork(ipv6a, ipv6b) {
|
|
t.Fatalf("expected IPv6 addresses to match")
|
|
}
|
|
}
|
|
|
|
func TestFindPreferredIP(t *testing.T) {
|
|
interfaces := []proxmox.NodeNetworkInterface{
|
|
{Active: 0, Address: "10.0.0.10", CIDR: "10.0.0.10/24"},
|
|
{Active: 1, Address: "10.0.0.11", CIDR: "10.0.0.11/24"},
|
|
{Active: 1, Address: "10.0.1.10", CIDR: "10.0.1.10/24"},
|
|
}
|
|
|
|
ref := net.ParseIP("10.0.0.50")
|
|
if got := findPreferredIP(interfaces, ref); got != "10.0.0.11" {
|
|
t.Fatalf("findPreferredIP = %q, want 10.0.0.11", got)
|
|
}
|
|
|
|
if got := findPreferredIP(nil, ref); got != "" {
|
|
t.Fatalf("findPreferredIP = %q, want empty", got)
|
|
}
|
|
}
|
|
|
|
func TestFindPreferredIP_UsesMostSpecificMatchingSubnet(t *testing.T) {
|
|
interfaces := []proxmox.NodeNetworkInterface{
|
|
{Active: 1, Address: "10.15.5.20", CIDR: "10.15.5.20/24"},
|
|
{Active: 1, Address: "10.15.2.20", CIDR: "10.15.2.20/24"},
|
|
{Active: 1, Address: "10.15.0.20", CIDR: "10.15.0.20/16"},
|
|
}
|
|
|
|
ref := net.ParseIP("10.15.2.99")
|
|
if got := findPreferredIP(interfaces, ref); got != "10.15.2.20" {
|
|
t.Fatalf("findPreferredIP = %q, want 10.15.2.20", got)
|
|
}
|
|
}
|
|
|
|
func TestFindPreferredIP_FallbackDoesNotTreatDifferentThirdOctetAsSameSubnet(t *testing.T) {
|
|
interfaces := []proxmox.NodeNetworkInterface{
|
|
{Active: 1, Address: "10.15.5.20"},
|
|
{Active: 1, Address: "10.15.2.20"},
|
|
}
|
|
|
|
ref := net.ParseIP("10.15.2.99")
|
|
if got := findPreferredIP(interfaces, ref); got != "10.15.2.20" {
|
|
t.Fatalf("findPreferredIP fallback = %q, want 10.15.2.20", got)
|
|
}
|
|
}
|