CloudMonitoring: Improve error message (#46599)

This commit is contained in:
Andres Martinez Gotor 2022-03-16 01:37:48 -07:00 committed by GitHub
parent 5ae3e3f6f7
commit 727204ed5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 2 deletions

View File

@ -72,6 +72,8 @@ func ProvideService(httpClientProvider httpclient.Provider, tracer tracing.Trace
tracer: tracer,
httpClientProvider: httpClientProvider,
im: datasource.NewInstanceManager(newInstanceSettings(httpClientProvider)),
gceDefaultProjectGetter: utils.GCEDefaultProject,
}
s.resourceHandler = httpadapter.New(s.newResourceMux())
@ -91,7 +93,10 @@ func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthReque
defaultProject, err := s.getDefaultProject(ctx, *dsInfo)
if err != nil {
return nil, err
return &backend.CheckHealthResult{
Status: backend.HealthStatusError,
Message: err.Error(),
}, nil
}
url := fmt.Sprintf("%v/v3/projects/%v/metricDescriptors", dsInfo.services[cloudMonitor].url, defaultProject)
@ -128,6 +133,9 @@ type Service struct {
tracer tracing.Tracer
resourceHandler backend.CallResourceHandler
// mocked in tests
gceDefaultProjectGetter func(ctx context.Context) (string, error)
}
type QueryModel struct {
@ -612,7 +620,7 @@ func (s *Service) createRequest(ctx context.Context, dsInfo *datasourceInfo, pro
func (s *Service) getDefaultProject(ctx context.Context, dsInfo datasourceInfo) (string, error) {
if dsInfo.authenticationType == gceAuthentication {
return utils.GCEDefaultProject(ctx)
return s.gceDefaultProjectGetter(ctx)
}
return dsInfo.defaultProject, nil
}

View File

@ -1,7 +1,9 @@
package cloudmonitoring
import (
"context"
"encoding/json"
"fmt"
"net/url"
"reflect"
"strings"
@ -9,6 +11,8 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/datasource"
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@ -933,3 +937,29 @@ func baseReq() *backend.QueryDataRequest {
}
return query
}
func TestCheckHealth(t *testing.T) {
t.Run("and using GCE authentation should return proper error", func(t *testing.T) {
im := datasource.NewInstanceManager(func(s backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
return &datasourceInfo{
authenticationType: gceAuthentication,
}, nil
})
service := &Service{
im: im,
gceDefaultProjectGetter: func(ctx context.Context) (string, error) {
return "", fmt.Errorf("not found!")
},
}
res, err := service.CheckHealth(context.Background(), &backend.CheckHealthRequest{
PluginContext: backend.PluginContext{
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{},
},
})
assert.Nil(t, err)
assert.Equal(t, &backend.CheckHealthResult{
Status: backend.HealthStatusError,
Message: "not found!",
}, res)
})
}