mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 04:59:15 -06:00
166 lines
4.9 KiB
Go
166 lines
4.9 KiB
Go
package sqlstore
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
m "github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) {
|
|
data["id"] = dashboard.Id
|
|
|
|
saveCmd := m.SaveDashboardCommand{
|
|
OrgId: dashboard.OrgId,
|
|
Overwrite: true,
|
|
Dashboard: simplejson.NewFromAny(data),
|
|
}
|
|
|
|
err := SaveDashboard(&saveCmd)
|
|
So(err, ShouldBeNil)
|
|
}
|
|
|
|
func TestGetDashboardVersion(t *testing.T) {
|
|
Convey("Testing dashboard version retrieval", t, func() {
|
|
InitTestDB(t)
|
|
|
|
Convey("Get a Dashboard ID and version ID", func() {
|
|
savedDash := insertTestDashboard("test dash 26", 1, 0, false, "diff")
|
|
|
|
query := m.GetDashboardVersionQuery{
|
|
DashboardId: savedDash.Id,
|
|
Version: savedDash.Version,
|
|
OrgId: 1,
|
|
}
|
|
|
|
err := GetDashboardVersion(&query)
|
|
So(err, ShouldBeNil)
|
|
So(savedDash.Id, ShouldEqual, query.DashboardId)
|
|
So(savedDash.Version, ShouldEqual, query.Version)
|
|
|
|
dashCmd := m.GetDashboardQuery{
|
|
OrgId: savedDash.OrgId,
|
|
Uid: savedDash.Uid,
|
|
}
|
|
|
|
err = GetDashboard(&dashCmd)
|
|
So(err, ShouldBeNil)
|
|
eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data)
|
|
So(eq, ShouldEqual, true)
|
|
})
|
|
|
|
Convey("Attempt to get a version that doesn't exist", func() {
|
|
query := m.GetDashboardVersionQuery{
|
|
DashboardId: int64(999),
|
|
Version: 123,
|
|
OrgId: 1,
|
|
}
|
|
|
|
err := GetDashboardVersion(&query)
|
|
So(err, ShouldNotBeNil)
|
|
So(err, ShouldEqual, m.ErrDashboardVersionNotFound)
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestGetDashboardVersions(t *testing.T) {
|
|
Convey("Testing dashboard versions retrieval", t, func() {
|
|
InitTestDB(t)
|
|
savedDash := insertTestDashboard("test dash 43", 1, 0, false, "diff-all")
|
|
|
|
Convey("Get all versions for a given Dashboard ID", func() {
|
|
query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
|
|
|
|
err := GetDashboardVersions(&query)
|
|
So(err, ShouldBeNil)
|
|
So(len(query.Result), ShouldEqual, 1)
|
|
})
|
|
|
|
Convey("Attempt to get the versions for a non-existent Dashboard ID", func() {
|
|
query := m.GetDashboardVersionsQuery{DashboardId: int64(999), OrgId: 1}
|
|
|
|
err := GetDashboardVersions(&query)
|
|
So(err, ShouldNotBeNil)
|
|
So(err, ShouldEqual, m.ErrNoVersionsForDashboardId)
|
|
So(len(query.Result), ShouldEqual, 0)
|
|
})
|
|
|
|
Convey("Get all versions for an updated dashboard", func() {
|
|
updateTestDashboard(savedDash, map[string]interface{}{
|
|
"tags": "different-tag",
|
|
})
|
|
|
|
query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
|
|
err := GetDashboardVersions(&query)
|
|
|
|
So(err, ShouldBeNil)
|
|
So(len(query.Result), ShouldEqual, 2)
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestDeleteExpiredVersions(t *testing.T) {
|
|
Convey("Testing dashboard versions clean up", t, func() {
|
|
InitTestDB(t)
|
|
versionsToKeep := 5
|
|
versionsToWrite := 10
|
|
setting.DashboardVersionsToKeep = versionsToKeep
|
|
|
|
savedDash := insertTestDashboard("test dash 53", 1, 0, false, "diff-all")
|
|
for i := 0; i < versionsToWrite-1; i++ {
|
|
updateTestDashboard(savedDash, map[string]interface{}{
|
|
"tags": "different-tag",
|
|
})
|
|
}
|
|
|
|
Convey("Clean up old dashboard versions", func() {
|
|
err := DeleteExpiredVersions(&m.DeleteExpiredVersionsCommand{})
|
|
So(err, ShouldBeNil)
|
|
|
|
query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
|
|
GetDashboardVersions(&query)
|
|
|
|
So(len(query.Result), ShouldEqual, versionsToKeep)
|
|
// Ensure latest versions were kept
|
|
So(query.Result[versionsToKeep-1].Version, ShouldEqual, versionsToWrite-versionsToKeep+1)
|
|
So(query.Result[0].Version, ShouldEqual, versionsToWrite)
|
|
})
|
|
|
|
Convey("Don't delete anything if there're no expired versions", func() {
|
|
setting.DashboardVersionsToKeep = versionsToWrite
|
|
|
|
err := DeleteExpiredVersions(&m.DeleteExpiredVersionsCommand{})
|
|
So(err, ShouldBeNil)
|
|
|
|
query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1, Limit: versionsToWrite}
|
|
GetDashboardVersions(&query)
|
|
|
|
So(len(query.Result), ShouldEqual, versionsToWrite)
|
|
})
|
|
|
|
Convey("Don't delete more than MAX_VERSIONS_TO_DELETE per iteration", func() {
|
|
versionsToWriteBigNumber := MAX_VERSIONS_TO_DELETE + versionsToWrite
|
|
for i := 0; i < versionsToWriteBigNumber-versionsToWrite; i++ {
|
|
updateTestDashboard(savedDash, map[string]interface{}{
|
|
"tags": "different-tag",
|
|
})
|
|
}
|
|
|
|
err := DeleteExpiredVersions(&m.DeleteExpiredVersionsCommand{})
|
|
So(err, ShouldBeNil)
|
|
|
|
query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1, Limit: versionsToWriteBigNumber}
|
|
GetDashboardVersions(&query)
|
|
|
|
// Ensure we have at least versionsToKeep versions
|
|
So(len(query.Result), ShouldBeGreaterThanOrEqualTo, versionsToKeep)
|
|
// Ensure we haven't deleted more than MAX_VERSIONS_TO_DELETE rows
|
|
So(versionsToWriteBigNumber-len(query.Result), ShouldBeLessThanOrEqualTo, MAX_VERSIONS_TO_DELETE)
|
|
})
|
|
})
|
|
}
|