package dav import "testing" func TestDiscoverEndpoints_contextURLOnly(t *testing.T) { obs := &Observation{ Discovery: DiscoveryResult{ContextURL: "https://dav.example.com/caldav/"}, } got := DiscoverEndpoints(obs) if len(got) != 1 { t.Fatalf("got %d endpoints, want 1: %+v", len(got), got) } if got[0].Host != "dav.example.com" || got[0].Port != 443 || got[0].Type != "tls" { t.Errorf("unexpected endpoint: %+v", got[0]) } } func TestDiscoverEndpoints_nonDefaultPort(t *testing.T) { obs := &Observation{ Discovery: DiscoveryResult{ContextURL: "https://dav.example.com:8443/caldav/"}, } got := DiscoverEndpoints(obs) if len(got) != 1 || got[0].Port != 8443 { t.Fatalf("unexpected: %+v", got) } } func TestDiscoverEndpoints_srvTargets(t *testing.T) { // SRV pointing to a different name than the domain → we must surface // the SRV target too, because that's the hostname the cert needs to // cover. obs := &Observation{ Discovery: DiscoveryResult{ ContextURL: "https://dav.example.com/caldav/", SecureSRV: []SRVRecord{ {Target: "dav-backend-1.example.net", Port: 443}, {Target: "dav-backend-2.example.net", Port: 443}, {Target: "dav.example.com", Port: 443}, // duplicate of context → deduped }, }, } got := DiscoverEndpoints(obs) if len(got) != 3 { t.Fatalf("expected 3 unique endpoints, got %d: %+v", len(got), got) } hosts := map[string]bool{} for _, e := range got { hosts[e.Host] = true } for _, want := range []string{"dav.example.com", "dav-backend-1.example.net", "dav-backend-2.example.net"} { if !hosts[want] { t.Errorf("missing host %q in %+v", want, got) } } } func TestDiscoverEndpoints_emptyOnNoContextURL(t *testing.T) { if got := DiscoverEndpoints(&Observation{}); got != nil { t.Errorf("expected nil, got %+v", got) } if got := DiscoverEndpoints(nil); got != nil { t.Errorf("expected nil for nil obs, got %+v", got) } }