mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 04:04:00 -06:00
bb187ce4b1
Co-authored-by: Jean-Philippe Quémémer <jeanphilippe.quemener@grafana.com>
118 lines
2.9 KiB
Go
118 lines
2.9 KiB
Go
package v0alpha1_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
|
|
)
|
|
|
|
func TestParseQueriesIntoQueryDataRequest(t *testing.T) {
|
|
request := []byte(`{
|
|
"queries": [
|
|
{
|
|
"refId": "A",
|
|
"datasource": {
|
|
"type": "grafana-googlesheets-datasource",
|
|
"uid": "b1808c48-9fc9-4045-82d7-081781f8a553"
|
|
},
|
|
"cacheDurationSeconds": 300,
|
|
"spreadsheet": "spreadsheetID",
|
|
"datasourceId": 4,
|
|
"intervalMs": 30000,
|
|
"maxDataPoints": 794
|
|
},
|
|
{
|
|
"refId": "Z",
|
|
"datasource": "old",
|
|
"maxDataPoints": 10,
|
|
"timeRange": {
|
|
"from": "100",
|
|
"to": "200"
|
|
},
|
|
"queryType": "foo"
|
|
}
|
|
],
|
|
"from": "1692624667389",
|
|
"to": "1692646267389"
|
|
}`)
|
|
|
|
req := &query.QueryDataRequest{}
|
|
err := json.Unmarshal(request, req)
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, req.Queries, 2)
|
|
require.Equal(t, "b1808c48-9fc9-4045-82d7-081781f8a553", req.Queries[0].Datasource.UID)
|
|
require.Equal(t, "spreadsheetID", req.Queries[0].GetString("spreadsheet"))
|
|
|
|
// Write the query (with additional spreadsheetID) to JSON
|
|
out, err := json.MarshalIndent(req.Queries[0], "", " ")
|
|
require.NoError(t, err)
|
|
|
|
// And read it back with standard JSON marshal functions
|
|
query := &data.DataQuery{}
|
|
err = json.Unmarshal(out, query)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "spreadsheetID", query.GetString("spreadsheet"))
|
|
|
|
// The second query has an explicit time range, and legacy datasource name
|
|
out, err = json.MarshalIndent(req.Queries[1], "", " ")
|
|
require.NoError(t, err)
|
|
// fmt.Printf("%s\n", string(out))
|
|
require.JSONEq(t, `{
|
|
"datasource": {
|
|
"type": "", ` /* NOTE! this implies legacy naming */ +`
|
|
"uid": "old"
|
|
},
|
|
"maxDataPoints": 10,
|
|
"queryType": "foo",
|
|
"refId": "Z",
|
|
"timeRange": {
|
|
"from": "100",
|
|
"to": "200"
|
|
}
|
|
}`, string(out))
|
|
}
|
|
|
|
func TestGetResponseCode(t *testing.T) {
|
|
t.Run("return 200 if no errors in responses", func(t *testing.T) {
|
|
assert.Equal(t, 200, query.GetResponseCode(&backend.QueryDataResponse{
|
|
Responses: map[string]backend.DataResponse{
|
|
"A": {
|
|
Error: nil,
|
|
},
|
|
"B": {
|
|
Error: nil,
|
|
},
|
|
},
|
|
}))
|
|
})
|
|
t.Run("return 400 if there is an error in the responses", func(t *testing.T) {
|
|
assert.Equal(t, 400, query.GetResponseCode(&backend.QueryDataResponse{
|
|
Responses: map[string]backend.DataResponse{
|
|
"A": {
|
|
Error: fmt.Errorf("some wild error"),
|
|
},
|
|
},
|
|
}))
|
|
})
|
|
t.Run("return 400 if there is a partial error", func(t *testing.T) {
|
|
assert.Equal(t, 400, query.GetResponseCode(&backend.QueryDataResponse{
|
|
Responses: map[string]backend.DataResponse{
|
|
"A": {
|
|
Error: nil,
|
|
},
|
|
"B": {
|
|
Error: fmt.Errorf("some partial error"),
|
|
},
|
|
},
|
|
}))
|
|
})
|
|
}
|