74 lines
2.3 KiB
Go
74 lines
2.3 KiB
Go
/*
|
|
Copyright 2014 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
|
|
// For reference:
|
|
// https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation_test.go#L15475-L15518
|
|
|
|
package lifted
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
|
)
|
|
|
|
func TestValidateResourceNames(t *testing.T) {
|
|
table := []struct {
|
|
input string
|
|
success bool
|
|
expect string
|
|
}{
|
|
{"memory", true, ""},
|
|
{"cpu", true, ""},
|
|
{"storage", true, ""},
|
|
{"requests.cpu", true, ""},
|
|
{"requests.memory", true, ""},
|
|
{"requests.storage", true, ""},
|
|
{"limits.cpu", true, ""},
|
|
{"limits.memory", true, ""},
|
|
{"network", false, ""},
|
|
{"disk", false, ""},
|
|
{"", false, ""},
|
|
{".", false, ""},
|
|
{"..", false, ""},
|
|
{"my.favorite.app.co/12345", true, ""},
|
|
{"my.favorite.app.co/_12345", false, ""},
|
|
{"my.favorite.app.co/12345_", false, ""},
|
|
{"kubernetes.io/..", false, ""},
|
|
{"kubernetes.io/" + strings.Repeat("a", 63), true, ""},
|
|
{"kubernetes.io/" + strings.Repeat("a", 64), false, ""},
|
|
{"kubernetes.io//", false, ""},
|
|
{"kubernetes.io", false, ""},
|
|
{"kubernetes.io/will/not/work/", false, ""},
|
|
}
|
|
for k, item := range table {
|
|
err := validateResourceName(item.input, field.NewPath("field"))
|
|
if len(err) != 0 && item.success {
|
|
t.Errorf("expected no failure for input %q", item.input)
|
|
} else if len(err) == 0 && !item.success {
|
|
t.Errorf("expected failure for input %q", item.input)
|
|
for i := range err {
|
|
detail := err[i].Detail
|
|
if detail != "" && !strings.Contains(detail, item.expect) {
|
|
t.Errorf("%d: expected error detail either empty or %s, got %s", k, item.expect, detail)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|