33359aee6c
I also did some mild file renaming to try and get the dashboards package closer in line with the sqlstore split design doc.
139 lines
3.9 KiB
Go
139 lines
3.9 KiB
Go
//go:build integration
|
|
// +build integration
|
|
|
|
package database
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDashboardProvisioningTest(t *testing.T) {
|
|
sqlStore := sqlstore.InitTestDB(t)
|
|
dashboardStore := ProvideDashboardStore(sqlStore)
|
|
|
|
folderCmd := models.SaveDashboardCommand{
|
|
OrgId: 1,
|
|
FolderId: 0,
|
|
IsFolder: true,
|
|
Dashboard: simplejson.NewFromAny(map[string]interface{}{
|
|
"id": nil,
|
|
"title": "test dashboard",
|
|
}),
|
|
}
|
|
|
|
dash, err := dashboardStore.SaveDashboard(folderCmd)
|
|
require.Nil(t, err)
|
|
|
|
saveDashboardCmd := models.SaveDashboardCommand{
|
|
OrgId: 1,
|
|
IsFolder: false,
|
|
FolderId: dash.Id,
|
|
Dashboard: simplejson.NewFromAny(map[string]interface{}{
|
|
"id": nil,
|
|
"title": "test dashboard",
|
|
}),
|
|
}
|
|
|
|
t.Run("Saving dashboards with provisioning meta data", func(t *testing.T) {
|
|
now := time.Now()
|
|
|
|
provisioning := &models.DashboardProvisioning{
|
|
Name: "default",
|
|
ExternalId: "/var/grafana.json",
|
|
Updated: now.Unix(),
|
|
}
|
|
|
|
dash, err := dashboardStore.SaveProvisionedDashboard(saveDashboardCmd, provisioning)
|
|
require.Nil(t, err)
|
|
require.NotNil(t, dash)
|
|
require.NotEqual(t, 0, dash.Id)
|
|
dashId := dash.Id
|
|
|
|
t.Run("Deleting orphaned provisioned dashboards", func(t *testing.T) {
|
|
saveCmd := models.SaveDashboardCommand{
|
|
OrgId: 1,
|
|
IsFolder: false,
|
|
FolderId: dash.Id,
|
|
Dashboard: simplejson.NewFromAny(map[string]interface{}{
|
|
"id": nil,
|
|
"title": "another_dashboard",
|
|
}),
|
|
}
|
|
provisioning := &models.DashboardProvisioning{
|
|
Name: "another_reader",
|
|
ExternalId: "/var/grafana.json",
|
|
Updated: now.Unix(),
|
|
}
|
|
|
|
anotherDash, err := dashboardStore.SaveProvisionedDashboard(saveCmd, provisioning)
|
|
require.Nil(t, err)
|
|
|
|
query := &models.GetDashboardsQuery{DashboardIds: []int64{anotherDash.Id}}
|
|
err = dashboardStore.GetDashboards(context.Background(), query)
|
|
require.Nil(t, err)
|
|
require.NotNil(t, query.Result)
|
|
|
|
deleteCmd := &models.DeleteOrphanedProvisionedDashboardsCommand{ReaderNames: []string{"default"}}
|
|
require.Nil(t, dashboardStore.DeleteOrphanedProvisionedDashboards(context.Background(), deleteCmd))
|
|
|
|
query = &models.GetDashboardsQuery{DashboardIds: []int64{dash.Id, anotherDash.Id}}
|
|
err = dashboardStore.GetDashboards(context.Background(), query)
|
|
require.Nil(t, err)
|
|
|
|
require.Equal(t, 1, len(query.Result))
|
|
require.Equal(t, dashId, query.Result[0].Id)
|
|
})
|
|
|
|
t.Run("Can query for provisioned dashboards", func(t *testing.T) {
|
|
rslt, err := dashboardStore.GetProvisionedDashboardData("default")
|
|
require.Nil(t, err)
|
|
|
|
require.Equal(t, 1, len(rslt))
|
|
require.Equal(t, dashId, rslt[0].DashboardId)
|
|
require.Equal(t, now.Unix(), rslt[0].Updated)
|
|
})
|
|
|
|
t.Run("Can query for one provisioned dashboard", func(t *testing.T) {
|
|
data, err := dashboardStore.GetProvisionedDataByDashboardID(dash.Id)
|
|
require.Nil(t, err)
|
|
require.NotNil(t, data)
|
|
})
|
|
|
|
t.Run("Can query for none provisioned dashboard", func(t *testing.T) {
|
|
data, err := dashboardStore.GetProvisionedDataByDashboardID(3000)
|
|
require.Nil(t, err)
|
|
require.Nil(t, data)
|
|
})
|
|
|
|
t.Run("Deleting folder should delete provision meta data", func(t *testing.T) {
|
|
deleteCmd := &models.DeleteDashboardCommand{
|
|
Id: dash.Id,
|
|
OrgId: 1,
|
|
}
|
|
|
|
require.Nil(t, dashboardStore.DeleteDashboard(context.Background(), deleteCmd))
|
|
|
|
data, err := dashboardStore.GetProvisionedDataByDashboardID(dash.Id)
|
|
require.Nil(t, err)
|
|
require.Nil(t, data)
|
|
})
|
|
|
|
t.Run("UnprovisionDashboard should delete provisioning metadata", func(t *testing.T) {
|
|
require.Nil(t, dashboardStore.UnprovisionDashboard(context.Background(), dashId))
|
|
|
|
data, err := dashboardStore.GetProvisionedDataByDashboardID(dashId)
|
|
require.Nil(t, err)
|
|
require.Nil(t, data)
|
|
})
|
|
})
|
|
}
|