Query library: requiresDevMode dummy backend (#56466)
* query library - dummy backend * fix tests * dont explicitly marshall backend dataresponse * skip integration tests * null check for tests * added query library to codeowners * null check for tests * lint
This commit is contained in:
@@ -0,0 +1,289 @@
|
||||
package querylibrary_tests
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||
"github.com/grafana/grafana/pkg/services/querylibrary"
|
||||
"github.com/grafana/grafana/pkg/tsdb/grafanads"
|
||||
)
|
||||
|
||||
func TestCreateAndDelete(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping integration test")
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
|
||||
defer cancel()
|
||||
|
||||
testCtx := createTestContext(t)
|
||||
|
||||
err := testCtx.client.update(ctx, &querylibrary.Query{
|
||||
UID: "",
|
||||
Title: "first query",
|
||||
Tags: []string{},
|
||||
Description: "",
|
||||
Time: querylibrary.Time{
|
||||
From: "now-15m",
|
||||
To: "now-30m",
|
||||
},
|
||||
Queries: []*simplejson.Json{
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]string{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"refId": "A",
|
||||
}),
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]string{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "list",
|
||||
"path": "img",
|
||||
"refId": "B",
|
||||
}),
|
||||
},
|
||||
Variables: []*simplejson.Json{},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
search, err := testCtx.client.search(ctx, querylibrary.QuerySearchOptions{
|
||||
Query: "",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, search, 1)
|
||||
|
||||
info := search[0]
|
||||
require.Equal(t, "query", info.kind)
|
||||
require.Equal(t, "first query", info.name)
|
||||
require.Equal(t, "General", info.location)
|
||||
require.Equal(t, []string{grafanads.DatasourceUID, grafanads.DatasourceUID}, info.dsUIDs)
|
||||
|
||||
err = testCtx.client.delete(ctx, info.uid)
|
||||
require.NoError(t, err)
|
||||
|
||||
search, err = testCtx.client.search(ctx, querylibrary.QuerySearchOptions{
|
||||
Query: "",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, search, 0)
|
||||
|
||||
query, err := testCtx.client.get(ctx, info.uid)
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, query)
|
||||
}
|
||||
|
||||
func createQuery(t *testing.T, ctx context.Context, testCtx testContext) string {
|
||||
t.Helper()
|
||||
|
||||
err := testCtx.client.update(ctx, &querylibrary.Query{
|
||||
UID: "",
|
||||
Title: "first query",
|
||||
Tags: []string{},
|
||||
Description: "",
|
||||
Time: querylibrary.Time{
|
||||
From: "now-15m",
|
||||
To: "now-30m",
|
||||
},
|
||||
Queries: []*simplejson.Json{
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]string{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"refId": "A",
|
||||
}),
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]string{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "list",
|
||||
"path": "img",
|
||||
"refId": "B",
|
||||
}),
|
||||
},
|
||||
Variables: []*simplejson.Json{},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
search, err := testCtx.client.search(ctx, querylibrary.QuerySearchOptions{
|
||||
Query: "",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, search, 1)
|
||||
return search[0].uid
|
||||
}
|
||||
|
||||
func TestDashboardGetWithLatestSavedQueries(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping integration test")
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
|
||||
defer cancel()
|
||||
|
||||
testCtx := createTestContext(t)
|
||||
|
||||
queryUID := createQuery(t, ctx, testCtx)
|
||||
|
||||
dashUID, err := testCtx.client.createDashboard(ctx, simplejson.NewFromAny(map[string]interface{}{
|
||||
"dashboard": map[string]interface{}{
|
||||
"title": "my-new-dashboard",
|
||||
"panels": []interface{}{
|
||||
map[string]interface{}{
|
||||
"id": int64(1),
|
||||
"gridPos": map[string]interface{}{
|
||||
"h": 6,
|
||||
"w": 6,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
},
|
||||
},
|
||||
map[string]interface{}{
|
||||
"id": int64(2),
|
||||
"gridPos": map[string]interface{}{
|
||||
"h": 6,
|
||||
"w": 6,
|
||||
"x": 6,
|
||||
"y": 0,
|
||||
},
|
||||
"savedQueryLink": map[string]interface{}{
|
||||
"ref": map[string]string{
|
||||
"uid": queryUID,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"folderId": 0,
|
||||
"message": "",
|
||||
"overwrite": true,
|
||||
}))
|
||||
require.NoError(t, err)
|
||||
|
||||
dashboard, err := testCtx.client.getDashboard(ctx, dashUID)
|
||||
require.NoError(t, err)
|
||||
|
||||
panelsAsArray, err := dashboard.Dashboard.Get("panels").Array()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Len(t, panelsAsArray, 2)
|
||||
|
||||
secondPanel := simplejson.NewFromAny(panelsAsArray[1])
|
||||
require.Equal(t, []interface{}{
|
||||
map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"refId": "A",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "list",
|
||||
"path": "img",
|
||||
"refId": "B",
|
||||
},
|
||||
}, secondPanel.Get("targets").MustArray())
|
||||
require.Equal(t, map[string]interface{}{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
}, secondPanel.Get("datasource").MustMap())
|
||||
|
||||
// update, expect changes when getting dashboards
|
||||
err = testCtx.client.update(ctx, &querylibrary.Query{
|
||||
UID: queryUID,
|
||||
Title: "first query",
|
||||
Tags: []string{},
|
||||
Description: "",
|
||||
Time: querylibrary.Time{
|
||||
From: "now-15m",
|
||||
To: "now-30m",
|
||||
},
|
||||
Queries: []*simplejson.Json{
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"refId": "A",
|
||||
}),
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": "different-datasource-uid",
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"path": "img",
|
||||
"refId": "B",
|
||||
}),
|
||||
simplejson.NewFromAny(map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": "different-datasource-uid-2",
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"path": "img",
|
||||
"refId": "C",
|
||||
}),
|
||||
},
|
||||
Variables: []*simplejson.Json{},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
dashboard, err = testCtx.client.getDashboard(ctx, dashUID)
|
||||
require.NoError(t, err)
|
||||
|
||||
panelsAsArray, err = dashboard.Dashboard.Get("panels").Array()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Len(t, panelsAsArray, 2)
|
||||
|
||||
secondPanel = simplejson.NewFromAny(panelsAsArray[1])
|
||||
require.Equal(t, []interface{}{
|
||||
map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": grafanads.DatasourceUID,
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"refId": "A",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": "different-datasource-uid",
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"path": "img",
|
||||
"refId": "B",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"datasource": map[string]interface{}{
|
||||
"uid": "different-datasource-uid-2",
|
||||
"type": "datasource",
|
||||
},
|
||||
"queryType": "randomWalk",
|
||||
"path": "img",
|
||||
"refId": "C",
|
||||
},
|
||||
}, secondPanel.Get("targets").MustArray())
|
||||
require.Equal(t, map[string]interface{}{
|
||||
"uid": "-- Mixed --",
|
||||
"type": "datasource",
|
||||
}, secondPanel.Get("datasource").MustMap())
|
||||
}
|
||||
Reference in New Issue
Block a user