mirror of
https://github.com/grafana/grafana.git
synced 2025-09-28 05:34:07 +08:00
GoogleCloudMonitoring: use typed struct in newInstanceSettings (#58440)
This commit is contained in:

committed by
GitHub

parent
6ed35292fe
commit
9778d642df
@ -154,6 +154,13 @@ type datasourceInfo struct {
|
|||||||
decryptedSecureJSONData map[string]string
|
decryptedSecureJSONData map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type datasourceJSONData struct {
|
||||||
|
AuthenticationType string `json:"authenticationType"`
|
||||||
|
DefaultProject string `json:"defaultProject"`
|
||||||
|
ClientEmail string `json:"clientEmail"`
|
||||||
|
TokenURI string `json:"tokenUri"`
|
||||||
|
}
|
||||||
|
|
||||||
type datasourceService struct {
|
type datasourceService struct {
|
||||||
url string
|
url string
|
||||||
client *http.Client
|
client *http.Client
|
||||||
@ -161,40 +168,24 @@ type datasourceService struct {
|
|||||||
|
|
||||||
func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.InstanceFactoryFunc {
|
func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.InstanceFactoryFunc {
|
||||||
return func(settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
return func(settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
var jsonData map[string]interface{}
|
var jsonData datasourceJSONData
|
||||||
err := json.Unmarshal(settings.JSONData, &jsonData)
|
err := json.Unmarshal(settings.JSONData, &jsonData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error reading settings: %w", err)
|
return nil, fmt.Errorf("error reading settings: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
authType := jwtAuthentication
|
if jsonData.AuthenticationType == "" {
|
||||||
if authTypeOverride, ok := jsonData["authenticationType"].(string); ok && authTypeOverride != "" {
|
jsonData.AuthenticationType = jwtAuthentication
|
||||||
authType = authTypeOverride
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultProject string
|
|
||||||
if jsonData["defaultProject"] != nil {
|
|
||||||
defaultProject = jsonData["defaultProject"].(string)
|
|
||||||
}
|
|
||||||
|
|
||||||
var clientEmail string
|
|
||||||
if jsonData["clientEmail"] != nil {
|
|
||||||
clientEmail = jsonData["clientEmail"].(string)
|
|
||||||
}
|
|
||||||
|
|
||||||
var tokenUri string
|
|
||||||
if jsonData["tokenUri"] != nil {
|
|
||||||
tokenUri = jsonData["tokenUri"].(string)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dsInfo := &datasourceInfo{
|
dsInfo := &datasourceInfo{
|
||||||
id: settings.ID,
|
id: settings.ID,
|
||||||
updated: settings.Updated,
|
updated: settings.Updated,
|
||||||
url: settings.URL,
|
url: settings.URL,
|
||||||
authenticationType: authType,
|
authenticationType: jsonData.AuthenticationType,
|
||||||
defaultProject: defaultProject,
|
defaultProject: jsonData.DefaultProject,
|
||||||
clientEmail: clientEmail,
|
clientEmail: jsonData.ClientEmail,
|
||||||
tokenUri: tokenUri,
|
tokenUri: jsonData.TokenURI,
|
||||||
decryptedSecureJSONData: settings.DecryptedSecureJSONData,
|
decryptedSecureJSONData: settings.DecryptedSecureJSONData,
|
||||||
services: map[string]datasourceService{},
|
services: map[string]datasourceService{},
|
||||||
}
|
}
|
||||||
|
@ -13,11 +13,40 @@ import (
|
|||||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
"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/datasource"
|
||||||
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
|
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
|
||||||
|
"github.com/grafana/grafana/pkg/infra/httpclient"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestNewInstanceSettings(t *testing.T) {
|
||||||
|
t.Run("should create a new instance with empty settings", func(t *testing.T) {
|
||||||
|
cli := httpclient.NewProvider()
|
||||||
|
f := newInstanceSettings(cli)
|
||||||
|
dsInfo, err := f(backend.DataSourceInstanceSettings{
|
||||||
|
JSONData: json.RawMessage(`{}`),
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.NotNil(t, dsInfo)
|
||||||
|
assert.Equal(t, jwtAuthentication, dsInfo.(*datasourceInfo).authenticationType)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should create a new instance parsing settings", func(t *testing.T) {
|
||||||
|
cli := httpclient.NewProvider()
|
||||||
|
f := newInstanceSettings(cli)
|
||||||
|
dsInfo, err := f(backend.DataSourceInstanceSettings{
|
||||||
|
JSONData: json.RawMessage(`{"authenticationType": "test", "defaultProject": "test", "clientEmail": "test", "tokenUri": "test"}`),
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.NotNil(t, dsInfo)
|
||||||
|
dsInfoCasted := dsInfo.(*datasourceInfo)
|
||||||
|
assert.Equal(t, "test", dsInfoCasted.authenticationType)
|
||||||
|
assert.Equal(t, "test", dsInfoCasted.defaultProject)
|
||||||
|
assert.Equal(t, "test", dsInfoCasted.clientEmail)
|
||||||
|
assert.Equal(t, "test", dsInfoCasted.tokenUri)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestCloudMonitoring(t *testing.T) {
|
func TestCloudMonitoring(t *testing.T) {
|
||||||
service := &Service{}
|
service := &Service{}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user