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