blob: 1a9765e7e2af2f1a6c5cc288759097a1ddfda039 [file] [log] [blame]
package node
import (
"errors"
"testing"
"k8s.io/apimachinery/pkg/util/validation"
)
func TestValidateDomainName(t *testing.T) {
for _, te := range []struct {
in string
want error
}{
{"example.com", nil},
{"localhost", nil},
{"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},
{"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},
{"ex_ample.com", errDomainNameInvalid},
{"-.com", errDomainNameInvalid},
{"example-.com", errDomainNameInvalid},
{"-example.com", errDomainNameInvalid},
{"1-1.com", nil},
{"xn--h-0fa.com", nil},
{".", errDomainNameInvalid},
{"example..com", errDomainNameInvalid},
{"example.com.", errDomainNameInvalid},
{".example.com", errDomainNameInvalid},
{"0.example.com", nil},
{"01.example.com", nil},
{"012345678901234567890123456789012345678901234567890123456789012.example.com", nil},
{"0123456789012345678901234567890123456789012345678901234567890123.example.com", errDomainNameInvalid},
{"1.1.1.1", errDomainNameEndsInNumber},
{"example.123", errDomainNameEndsInNumber},
{"0123456789", errDomainNameEndsInNumber},
{"example.0x", errDomainNameEndsInNumber},
{"0x0123456789abcdef", errDomainNameEndsInNumber},
{"1.2.3.1a1", nil},
} {
if got := validateDomainName(te.in); !errors.Is(got, te.want) {
t.Errorf("%q: wanted %v, got %v", te.in, te.want, got)
}
if validateDomainName(te.in) == nil {
if errs := validation.IsDNS1123Subdomain(te.in); len(errs) > 0 {
t.Errorf("%q: is not a valid Kubernetes domain: %v", te.in, errs)
}
}
}
}