code: func (config *DirectClientConfig) ConfirmUsable() error {
  	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})
  		}
  	}
  
  	authInfoName, _ := config.getAuthInfoName()
  	authInfo, _ := config.getAuthInfo()
  	validationErrors = append(validationErrors, validateAuthInfo(authInfoName, authInfo)...)
  	clusterName, _ := config.getClusterName()
  	cluster, _ := config.getCluster()
  	validationErrors = append(validationErrors, validateClusterInfo(clusterName, cluster)...)
  	// when direct client config is specified, and our only error is that no server is defined, we should
  	// return a standard "no config" error
  	if len(validationErrors) == 1 && validationErrors[0] == ErrEmptyCluster {
  		return newErrConfigurationInvalid([]error{ErrEmptyConfig})
  	}
  	return newErrConfigurationInvalid(validationErrors)
  }
docs: // ConfirmUsable looks a particular context and determines if that particular part of the config is useable.  There might still be errors in the config,
  // but no errors in the sections requested or referenced.  It does not return early so that it can find as many errors as possible.