package resolver import ( "context" "testing" "git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/netbox" ) func TestPrimaryIPStrategy_Name(t *testing.T) { s := &PrimaryIPStrategy{} if s.Name() != "primary_ip" { t.Errorf("Name: got %q, want %q", s.Name(), "primary_ip") } } func TestPrimaryIPStrategy_IPv4(t *testing.T) { s := &PrimaryIPStrategy{} e := &netbox.HostEntry{PrimaryIP4: "10.0.0.1", PrimaryIP6: "::1"} ip, err := s.Resolve(context.Background(), e, nil) if err != nil { t.Fatalf("unexpected error: %v", err) } if ip != "10.0.0.1" { t.Errorf("got %q, want IPv4 %q", ip, "10.0.0.1") } } func TestPrimaryIPStrategy_IPv6Fallback(t *testing.T) { s := &PrimaryIPStrategy{} e := &netbox.HostEntry{PrimaryIP6: "::1"} ip, err := s.Resolve(context.Background(), e, nil) if err != nil { t.Fatalf("unexpected error: %v", err) } if ip != "::1" { t.Errorf("got %q, want IPv6 %q", ip, "::1") } } func TestPrimaryIPStrategy_NoIP(t *testing.T) { s := &PrimaryIPStrategy{} _, err := s.Resolve(context.Background(), &netbox.HostEntry{}, nil) if err != ErrNoIP { t.Errorf("got %v, want ErrNoIP", err) } } func TestManagementSubnetStrategy_Name(t *testing.T) { s, _ := NewManagementSubnetStrategy([]string{"10.0.0.0/8"}) if s.Name() != "management_subnet" { t.Errorf("Name: got %q, want %q", s.Name(), "management_subnet") } } func TestManagementSubnetStrategy_InvalidCIDR(t *testing.T) { _, err := NewManagementSubnetStrategy([]string{"not-a-cidr"}) if err == nil { t.Error("invalid CIDR should return an error") } } func TestManagementSubnetStrategy_EmptyCIDRs(t *testing.T) { s, _ := NewManagementSubnetStrategy([]string{}) _, err := s.Resolve(context.Background(), &netbox.HostEntry{}, nil) if err != ErrNoIP { t.Errorf("empty subnets should return ErrNoIP, got %v", err) } } func TestManagementSubnetStrategy_MultipleCIDRs(t *testing.T) { _, err := NewManagementSubnetStrategy([]string{"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"}) if err != nil { t.Fatalf("valid CIDRs should not error: %v", err) } } func TestInterfaceNameStrategy_Name(t *testing.T) { s := &InterfaceNameStrategy{name: "mgmt0"} if s.Name() != "interface_name" { t.Errorf("Name: got %q, want %q", s.Name(), "interface_name") } } func TestInterfaceNameStrategy_UnknownKind(t *testing.T) { s := &InterfaceNameStrategy{name: "eth0"} _, err := s.Resolve(context.Background(), &netbox.HostEntry{Kind: "unknown"}, nil) if err == nil { t.Error("unknown kind should return an error") } }