blob: 1a9765e7e2af2f1a6c5cc288759097a1ddfda039 [file] [log] [blame]
Jan Schär39f4f5c2024-10-29 09:41:50 +01001package node
2
3import (
4 "errors"
5 "testing"
6
7 "k8s.io/apimachinery/pkg/util/validation"
8)
9
10func TestValidateDomainName(t *testing.T) {
11 for _, te := range []struct {
12 in string
13 want error
14 }{
15 {"example.com", nil},
16 {"localhost", nil},
17 {"123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.1.example.com", nil},
18 {"123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.12.example.com", errDomainNameTooLong},
19 {"ex_ample.com", errDomainNameInvalid},
20 {"-.com", errDomainNameInvalid},
21 {"example-.com", errDomainNameInvalid},
22 {"-example.com", errDomainNameInvalid},
23 {"1-1.com", nil},
24 {"xn--h-0fa.com", nil},
25 {".", errDomainNameInvalid},
26 {"example..com", errDomainNameInvalid},
27 {"example.com.", errDomainNameInvalid},
28 {".example.com", errDomainNameInvalid},
29 {"0.example.com", nil},
30 {"01.example.com", nil},
31 {"012345678901234567890123456789012345678901234567890123456789012.example.com", nil},
32 {"0123456789012345678901234567890123456789012345678901234567890123.example.com", errDomainNameInvalid},
33 {"1.1.1.1", errDomainNameEndsInNumber},
34 {"example.123", errDomainNameEndsInNumber},
35 {"0123456789", errDomainNameEndsInNumber},
36 {"example.0x", errDomainNameEndsInNumber},
37 {"0x0123456789abcdef", errDomainNameEndsInNumber},
38 {"1.2.3.1a1", nil},
39 } {
40 if got := validateDomainName(te.in); !errors.Is(got, te.want) {
41 t.Errorf("%q: wanted %v, got %v", te.in, te.want, got)
42 }
43 if validateDomainName(te.in) == nil {
44 if errs := validation.IsDNS1123Subdomain(te.in); len(errs) > 0 {
45 t.Errorf("%q: is not a valid Kubernetes domain: %v", te.in, errs)
46 }
47 }
48 }
49}