grafana/pkg/services/queryhistory/queryhistory_details_test.go
Piotr Jamróz 6750e881e3
Query History: Use a search index on new queries to filter in mixed data sources (#88979)
* Add search index table

* Stab a test

* Add more tests

* Add basic index

* Switch to UID and add a test for the index

* Improve tests coverage

* Remove redundant whitespaces

* Load all data source APIs when query history is loaded

* Fix column type

* Fix migration

* Clean-up the index

* Fix linting

* Fix migrations

* Fix migrations

* Fix migrations

* Rename index to details
2024-07-16 11:47:21 +02:00

62 lines
4.2 KiB
Go

package queryhistory
import (
"testing"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/stretchr/testify/require"
)
var mixedQuery []byte = []byte(`[{"alias":"","bucketAggs":[{"field":"@timestamp","id":"2","settings":{"interval":"auto"},"type":"date_histogram"}],"datasource":{"type":"elasticsearch","uid":"gdev-elasticsearch"},"key":"Q-15d3139f-a942-491c-8fb6-46982475ab07-0","metrics":[{"id":"1","type":"count"}],"query":"test","refId":"A","timeField":"@timestamp"},{"datasource":{"type":"loki","uid":"gdev-loki"},"editorMode":"code","expr":"test","key":"Q-67b4a119-37dd-4276-beac-4ec76b089f10-0","queryType":"range","refId":"B"}]`)
var mixedQueryWithDuplicates = []byte(`[{"alias":"","bucketAggs":[{"field":"@timestamp","id":"2","settings":{"interval":"auto"},"type":"date_histogram"}],"datasource":{"type":"elasticsearch","uid":"gdev-elasticsearch"},"key":"Q-15d3139f-a942-491c-8fb6-46982475ab07-0","metrics":[{"id":"1","type":"count"}],"query":"test","refId":"A","timeField":"@timestamp"},{"datasource":{"type":"loki","uid":"gdev-loki"},"editorMode":"code","expr":"test","key":"Q-67b4a119-37dd-4276-beac-4ec76b089f10-0","queryType":"range","refId":"B"},{"datasource":{"type":"loki","uid":"gdev-loki"},"editorMode":"code","expr":"test2","key":"Q-28825351-32c3-4c46-98b4-b8cfffae0b42-2","queryType":"range","refId":"C"}]`)
var nonMixedQuery = []byte(`[{"datasource":{"type":"loki","uid":"gdev-loki"},"editorMode":"code","expr":"test","key":"Q-95a6d6ef-7a5e-4e2a-a212-f1f2df4a349a-0","queryType":"range","refId":"A"},{"datasource":{"type":"loki","uid":"gdev-loki"},"editorMode":"code","expr":"test 2","key":"Q-b838fc6b-bcd7-4538-962a-d35209a8783f-1","queryType":"range","refId":"B"}]`)
var mixedQueryMissingDatasource = []byte(`[{"alias":"","bucketAggs":[{"field":"@timestamp","id":"2","settings":{"interval":"auto"},"type":"date_histogram"}],"key":"Q-15d3139f-a942-491c-8fb6-46982475ab07-0","metrics":[{"id":"1","type":"count"}],"query":"test","refId":"A","timeField":"@timestamp"},{"datasource":{"type":"loki","uid":"PDDA8E780A17E7EF1"},"editorMode":"code","expr":"test","key":"Q-67b4a119-37dd-4276-beac-4ec76b089f10-0","queryType":"range","refId":"B"}]`)
var mixedQueryMissingUID = []byte(`[{"alias":"","bucketAggs":[{"field":"@timestamp","id":"2","settings":{"interval":"auto"},"type":"date_histogram"}],"datasource":{"type":"elasticsearch"},"key":"Q-15d3139f-a942-491c-8fb6-46982475ab07-0","metrics":[{"id":"1","type":"count"}],"query":"test","refId":"A","timeField":"@timestamp"},{"datasource":{"type":"loki","uid":"PDDA8E780A17E7EF1"},"editorMode":"code","expr":"test","key":"Q-67b4a119-37dd-4276-beac-4ec76b089f10-0","queryType":"range","refId":"B"}]`)
var invalidJSON = []byte(`{`)
func TestQueryHistoryDetails(t *testing.T) {
t.Run("should return error when json is invalid", func(t *testing.T) {
json, _ := simplejson.NewJson(invalidJSON)
_, err := FindDataSourceUIDs(json)
require.Error(t, err)
})
t.Run("should return no error when data source uid is missing", func(t *testing.T) {
json, _ := simplejson.NewJson(mixedQueryMissingUID)
_, err := FindDataSourceUIDs(json)
require.NoError(t, err)
})
t.Run("should return no error when data source property is missing", func(t *testing.T) {
json, _ := simplejson.NewJson(mixedQueryMissingDatasource)
_, err := FindDataSourceUIDs(json)
require.NoError(t, err)
})
t.Run("should find data source uids in mixed queries", func(t *testing.T) {
json, _ := simplejson.NewJson(mixedQuery)
uids, err := FindDataSourceUIDs(json)
require.NoError(t, err)
require.Len(t, uids, 2)
require.Equal(t, uids[0], "gdev-elasticsearch")
require.Equal(t, uids[1], "gdev-loki")
})
t.Run("should find data source uids in non-mixed queries", func(t *testing.T) {
json, _ := simplejson.NewJson(nonMixedQuery)
uids, err := FindDataSourceUIDs(json)
require.NoError(t, err)
require.Len(t, uids, 1)
require.Equal(t, uids[0], "gdev-loki")
})
t.Run("should remove duplicated uids", func(t *testing.T) {
json, _ := simplejson.NewJson(mixedQueryWithDuplicates)
uids, err := FindDataSourceUIDs(json)
require.NoError(t, err)
require.Len(t, uids, 2)
require.Equal(t, uids[0], "gdev-elasticsearch")
require.Equal(t, uids[1], "gdev-loki")
})
}