Add a check in ConfirmUsable() to validate the contextName

This commit is contained in:
Angus Salkeld 2016-09-01 11:35:11 +10:00
parent 3269849ded
commit e9cad12e5f
3 changed files with 27 additions and 13 deletions

View File

@ -263,6 +263,21 @@ func (config *DirectClientConfig) ConfigAccess() ConfigAccess {
// but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible. // but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible.
func (config *DirectClientConfig) ConfirmUsable() error { func (config *DirectClientConfig) ConfirmUsable() error {
validationErrors := make([]error, 0) validationErrors := make([]error, 0)
var contextName string
if len(config.contextName) != 0 {
contextName = config.contextName
} else {
contextName = config.config.CurrentContext
}
if len(contextName) > 0 {
_, exists := config.config.Contexts[contextName]
if !exists {
validationErrors = append(validationErrors, &errContextNotFound{contextName})
}
}
validationErrors = append(validationErrors, validateAuthInfo(config.getAuthInfoName(), config.getAuthInfo())...) validationErrors = append(validationErrors, validateAuthInfo(config.getAuthInfoName(), config.getAuthInfo())...)
validationErrors = append(validationErrors, validateClusterInfo(config.getClusterName(), config.getCluster())...) validationErrors = append(validationErrors, validateClusterInfo(config.getClusterName(), config.getCluster())...)
// when direct client config is specified, and our only error is that no server is defined, we should // when direct client config is specified, and our only error is that no server is defined, we should

View File

@ -20,10 +20,10 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"reflect" "reflect"
"strings"
"testing" "testing"
"github.com/imdario/mergo" "github.com/imdario/mergo"
"k8s.io/kubernetes/pkg/client/restclient"
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
) )
@ -357,22 +357,20 @@ func TestCreateMissingContextNoDefault(t *testing.T) {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }
} }
func TestCreateMissingContext(t *testing.T) { func TestCreateMissingContext(t *testing.T) {
const expectedErrorContains = "Context was not found for specified context" const expectedErrorContains = "context was not found for specified context: not-present"
config := createValidTestConfig() config := createValidTestConfig()
clientBuilder := NewNonInteractiveClientConfig(*config, "not-present", &ConfigOverrides{ clientBuilder := NewNonInteractiveClientConfig(*config, "not-present", &ConfigOverrides{
ClusterDefaults: DefaultCluster, ClusterDefaults: DefaultCluster,
}, nil) }, nil)
clientConfig, err := clientBuilder.ClientConfig() _, err := clientBuilder.ClientConfig()
if err != nil { if err == nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Expected error: %v", expectedErrorContains)
} }
if !strings.Contains(err.Error(), expectedErrorContains) {
expectedConfig := &restclient.Config{Host: clientConfig.Host} t.Fatalf("Expected error: %v, but got %v", expectedErrorContains, err)
if !reflect.DeepEqual(expectedConfig, clientConfig) {
t.Errorf("Expected %#v, got %#v", expectedConfig, clientConfig)
} }
} }

View File

@ -49,12 +49,13 @@ func TestKubectlValidation(t *testing.T) {
// Enable swagger api on master. // Enable swagger api on master.
components.KubeMaster.InstallSwaggerAPI() components.KubeMaster.InstallSwaggerAPI()
cluster := clientcmdapi.NewCluster() cluster := clientcmdapi.NewCluster()
cluster.Server = components.ApiServer.URL cluster.Server = components.ApiServer.URL
cluster.InsecureSkipTLSVerify = true cluster.InsecureSkipTLSVerify = true
cfg.Contexts = map[string]*clientcmdapi.Context{"test": ctx}
cfg.CurrentContext = "test"
overrides := clientcmd.ConfigOverrides{ overrides := clientcmd.ConfigOverrides{
ClusterInfo: *cluster, ClusterInfo: *cluster,
Context: *ctx,
CurrentContext: "test",
} }
cmdConfig := clientcmd.NewNonInteractiveClientConfig(*cfg, "test", &overrides, nil) cmdConfig := clientcmd.NewNonInteractiveClientConfig(*cfg, "test", &overrides, nil)
factory := util.NewFactory(cmdConfig) factory := util.NewFactory(cmdConfig)