Files
grafana/pkg/expr/reader_test.go
Gábor Farkas 2cea7af2f5 datasources: querier: handle reducer-settings-mode correctly (#94595)
* datasources: querier: handle reducer-settings-mode correctly

* Try to fix linting error

"unnecessary leading newline (whitespace)"

---------

Co-authored-by: Sam Jewell <sam.jewell@grafana.com>
2024-10-17 08:38:14 +02:00

144 lines
2.6 KiB
Go

package expr
import (
"encoding/json"
"testing"
"github.com/grafana/grafana-plugin-sdk-go/data/utils/jsoniter"
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/stretchr/testify/require"
)
func TestReaderReduceMode(t *testing.T) {
testData := []struct {
name string
bytes []byte
expectedError string
}{
{
name: "no_settings",
bytes: []byte(`
{
"refId": "B",
"datasource": {
"type": "__expr__",
"uid": "__expr__"
},
"reducer": "last",
"expression": "A",
"window": "",
"type": "reduce"
}
`),
expectedError: "",
},
{
name: "mode_dropnn",
bytes: []byte(`
{
"refId": "B",
"datasource": {
"type": "__expr__",
"uid": "__expr__"
},
"reducer": "last",
"expression": "A",
"window": "",
"settings": {
"mode": "dropNN"
},
"type": "reduce"
}
`),
expectedError: "",
},
{
name: "mode_replacenn",
bytes: []byte(`
{
"refId": "B",
"datasource": {
"type": "__expr__",
"uid": "__expr__"
},
"reducer": "last",
"expression": "A",
"window": "",
"settings": {
"mode": "replaceNN",
"replaceWithValue": 42
},
"type": "reduce"
}
`),
expectedError: "",
},
{
name: "mode_strict",
bytes: []byte(`
{
"refId": "B",
"datasource": {
"type": "__expr__",
"uid": "__expr__"
},
"reducer": "last",
"expression": "A",
"window": "",
"settings": {
"mode": ""
},
"type": "reduce"
}
`),
expectedError: "",
},
{
name: "mode_invalid",
bytes: []byte(`
{
"refId": "B",
"datasource": {
"type": "__expr__",
"uid": "__expr__"
},
"reducer": "last",
"expression": "A",
"window": "",
"settings": {
"mode": "invalid-mode"
},
"type": "reduce"
}
`),
expectedError: "unsupported reduce mode",
},
}
for _, test := range testData {
t.Run("TestReduceReader:"+test.name, func(t *testing.T) {
var q data.DataQuery
err := json.Unmarshal(test.bytes, &q)
require.NoError(t, err)
raw, err := json.Marshal(q)
require.NoError(t, err)
iter, err := jsoniter.ParseBytes(jsoniter.ConfigDefault, raw)
require.NoError(t, err)
reader := NewExpressionQueryReader(featuremgmt.WithFeatures())
_, err = reader.ReadQuery(q, iter)
if test.expectedError == "" {
require.NoError(t, err)
} else {
require.ErrorContains(t, err, test.expectedError)
}
})
}
}