code: func (config *DirectClientConfig) ConfirmUsable() error {
  	validationErrors := make([]error, 0)
  	validationErrors = append(validationErrors, validateAuthInfo(config.getAuthInfoName(), config.getAuthInfo())...)
  	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
  	// 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.