package util import ( "reflect" "testing" ) func TestHostnameMatchSpecCandidates(t *testing.T) { testcases := []struct { Hostname string ExpectedSpecs []string }{ { Hostname: "", ExpectedSpecs: nil, }, { Hostname: "a", ExpectedSpecs: []string{"a", "*"}, }, { Hostname: "foo.bar", ExpectedSpecs: []string{"foo.bar", "*.bar", "*.*"}, }, } for _, tc := range testcases { specs := HostnameMatchSpecCandidates(tc.Hostname) if !reflect.DeepEqual(specs, tc.ExpectedSpecs) { t.Errorf("%s: Expected %#v, got %#v", tc.Hostname, tc.ExpectedSpecs, specs) } } } func TestHostnameMatches(t *testing.T) { testcases := []struct { Hostname string Spec string ExpectedMatch bool }{ // Empty hostname matches nothing {Hostname: "", Spec: "", ExpectedMatch: false}, // Empty spec matches nothing {Hostname: "a", Spec: "", ExpectedMatch: false}, // Exact match {Hostname: "a", Spec: "a", ExpectedMatch: true}, // Single segment wildcard match {Hostname: "a", Spec: "*", ExpectedMatch: true}, // Mismatched segment count should not match {Hostname: "a", Spec: "*.a", ExpectedMatch: false}, {Hostname: "a", Spec: "*.*", ExpectedMatch: false}, // Exact match, multi-segment {Hostname: "a.b", Spec: "a.b", ExpectedMatch: true}, // Wildcard subdomain match {Hostname: "a.b", Spec: "*.b", ExpectedMatch: true}, // Multi-level wildcard match {Hostname: "a.b", Spec: "*.*", ExpectedMatch: true}, // Only subdomain wildcards are allowed {Hostname: "a.b", Spec: "a.*", ExpectedMatch: false}, // Mismatched segment count should not match {Hostname: "a.b", Spec: "*.a.b", ExpectedMatch: false}, } for i, tc := range testcases { matches := HostnameMatches(tc.Hostname, tc.Spec) if matches != tc.ExpectedMatch { t.Errorf("%d: Expected match=%v, got %v (hostname=%s, specs=%v)", i, tc.ExpectedMatch, matches, tc.Hostname, tc.Spec) } } }