diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 9c3c5a83..071a62c5 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -488,215 +488,215 @@ }, { "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/kube-openapi/pkg/common", diff --git a/tools/clientcmd/validation.go b/tools/clientcmd/validation.go index 2bae0c39..4c7b15b7 100644 --- a/tools/clientcmd/validation.go +++ b/tools/clientcmd/validation.go @@ -253,6 +253,10 @@ func validateAuthInfo(authInfoName string, authInfo clientcmdapi.AuthInfo) []err func validateContext(contextName string, context clientcmdapi.Context, config clientcmdapi.Config) []error { validationErrors := make([]error, 0) + if len(contextName) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("empty context name for %#v is not allowed", context)) + } + if len(context.AuthInfo) == 0 { validationErrors = append(validationErrors, fmt.Errorf("user was not specified for context %q", contextName)) } else if _, exists := config.AuthInfos[context.AuthInfo]; !exists { diff --git a/tools/clientcmd/validation_test.go b/tools/clientcmd/validation_test.go index 6441f148..fcf86ab0 100644 --- a/tools/clientcmd/validation_test.go +++ b/tools/clientcmd/validation_test.go @@ -62,6 +62,7 @@ func TestConfirmUsableBadInfoButOkConfig(t *testing.T) { okTest.testConfirmUsable("clean", t) badValidation.testConfig(t) } + func TestConfirmUsableBadInfoConfig(t *testing.T) { config := clientcmdapi.NewConfig() config.Clusters["missing ca"] = &clientcmdapi.Cluster{ @@ -83,6 +84,7 @@ func TestConfirmUsableBadInfoConfig(t *testing.T) { test.testConfirmUsable("first", t) } + func TestConfirmUsableEmptyConfig(t *testing.T) { config := clientcmdapi.NewConfig() test := configValidationTest{ @@ -92,6 +94,7 @@ func TestConfirmUsableEmptyConfig(t *testing.T) { test.testConfirmUsable("", t) } + func TestConfirmUsableMissingConfig(t *testing.T) { config := clientcmdapi.NewConfig() test := configValidationTest{ @@ -101,6 +104,7 @@ func TestConfirmUsableMissingConfig(t *testing.T) { test.testConfirmUsable("not-here", t) } + func TestValidateEmptyConfig(t *testing.T) { config := clientcmdapi.NewConfig() test := configValidationTest{ @@ -110,6 +114,7 @@ func TestValidateEmptyConfig(t *testing.T) { test.testConfig(t) } + func TestValidateMissingCurrentContextConfig(t *testing.T) { config := clientcmdapi.NewConfig() config.CurrentContext = "anything" @@ -120,6 +125,7 @@ func TestValidateMissingCurrentContextConfig(t *testing.T) { test.testConfig(t) } + func TestIsContextNotFound(t *testing.T) { config := clientcmdapi.NewConfig() config.CurrentContext = "anything" @@ -172,6 +178,7 @@ func TestValidateMissingReferencesConfig(t *testing.T) { test.testContext("anything", t) test.testConfig(t) } + func TestValidateEmptyContext(t *testing.T) { config := clientcmdapi.NewConfig() config.CurrentContext = "anything" @@ -185,6 +192,19 @@ func TestValidateEmptyContext(t *testing.T) { test.testConfig(t) } +func TestValidateEmptyContextName(t *testing.T) { + config := clientcmdapi.NewConfig() + config.CurrentContext = "anything" + config.Contexts[""] = &clientcmdapi.Context{Cluster: "missing", AuthInfo: "missing"} + test := configValidationTest{ + config: config, + expectedErrorSubstring: []string{"empty context name", "is not allowed"}, + } + + test.testContext("", t) + test.testConfig(t) +} + func TestValidateEmptyClusterInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.Clusters["empty"] = clientcmdapi.NewCluster() @@ -223,6 +243,7 @@ func TestValidateMissingCAFileClusterInfo(t *testing.T) { test.testCluster("missing ca", t) test.testConfig(t) } + func TestValidateCleanClusterInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.Clusters["clean"] = &clientcmdapi.Cluster{ @@ -235,6 +256,7 @@ func TestValidateCleanClusterInfo(t *testing.T) { test.testCluster("clean", t) test.testConfig(t) } + func TestValidateCleanWithCAClusterInfo(t *testing.T) { tempFile, _ := ioutil.TempFile("", "") defer os.Remove(tempFile.Name()) @@ -262,6 +284,7 @@ func TestValidateEmptyAuthInfo(t *testing.T) { test.testAuthInfo("error", t) test.testConfig(t) } + func TestValidateCertFilesNotFoundAuthInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.AuthInfos["error"] = &clientcmdapi.AuthInfo{ @@ -276,6 +299,7 @@ func TestValidateCertFilesNotFoundAuthInfo(t *testing.T) { test.testAuthInfo("error", t) test.testConfig(t) } + func TestValidateCertDataOverridesFiles(t *testing.T) { tempFile, _ := ioutil.TempFile("", "") defer os.Remove(tempFile.Name()) @@ -295,6 +319,7 @@ func TestValidateCertDataOverridesFiles(t *testing.T) { test.testAuthInfo("clean", t) test.testConfig(t) } + func TestValidateCleanCertFilesAuthInfo(t *testing.T) { tempFile, _ := ioutil.TempFile("", "") defer os.Remove(tempFile.Name()) @@ -311,6 +336,7 @@ func TestValidateCleanCertFilesAuthInfo(t *testing.T) { test.testAuthInfo("clean", t) test.testConfig(t) } + func TestValidateCleanTokenAuthInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ @@ -363,6 +389,7 @@ func (c configValidationTest) testContext(contextName string, t *testing.T) { } } } + func (c configValidationTest) testConfirmUsable(contextName string, t *testing.T) { err := ConfirmUsable(*c.config, contextName) @@ -382,6 +409,7 @@ func (c configValidationTest) testConfirmUsable(contextName string, t *testing.T } } } + func (c configValidationTest) testConfig(t *testing.T) { err := Validate(*c.config) @@ -404,6 +432,7 @@ func (c configValidationTest) testConfig(t *testing.T) { } } } + func (c configValidationTest) testCluster(clusterName string, t *testing.T) { errs := validateClusterInfo(clusterName, *c.config.Clusters[clusterName])