code: func ConfirmUsable(config clientcmdapi.Config, passedContextName string) error {
  	validationErrors := make([]error, 0)
  
  	if clientcmdapi.IsConfigEmpty(&config) {
  		return newErrConfigurationInvalid([]error{ErrEmptyConfig})
  	}
  
  	var contextName string
  	if len(passedContextName) != 0 {
  		contextName = passedContextName
  	} else {
  		contextName = config.CurrentContext
  	}
  
  	if len(contextName) == 0 {
  		return ErrNoContext
  	}
  
  	context, exists := config.Contexts[contextName]
  	if !exists {
  		validationErrors = append(validationErrors, &errContextNotFound{contextName})
  	}
  
  	if exists {
  		validationErrors = append(validationErrors, validateContext(contextName, *context, config)...)
  		validationErrors = append(validationErrors, validateAuthInfo(context.AuthInfo, *config.AuthInfos[context.AuthInfo])...)
  		validationErrors = append(validationErrors, validateClusterInfo(context.Cluster, *config.Clusters[context.Cluster])...)
  	}
  
  	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.