dashboard_version_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package sqlstore
  2. import (
  3. "reflect"
  4. "testing"
  5. . "github.com/smartystreets/goconvey/convey"
  6. "github.com/grafana/grafana/pkg/components/simplejson"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/setting"
  9. )
  10. func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) {
  11. data["title"] = dashboard.Title
  12. saveCmd := m.SaveDashboardCommand{
  13. OrgId: dashboard.OrgId,
  14. Overwrite: true,
  15. Dashboard: simplejson.NewFromAny(data),
  16. }
  17. err := SaveDashboard(&saveCmd)
  18. So(err, ShouldBeNil)
  19. }
  20. func TestGetDashboardVersion(t *testing.T) {
  21. Convey("Testing dashboard version retrieval", t, func() {
  22. InitTestDB(t)
  23. Convey("Get a Dashboard ID and version ID", func() {
  24. savedDash := insertTestDashboard("test dash 26", 1, 0, false, "diff")
  25. query := m.GetDashboardVersionQuery{
  26. DashboardId: savedDash.Id,
  27. Version: savedDash.Version,
  28. OrgId: 1,
  29. }
  30. err := GetDashboardVersion(&query)
  31. So(err, ShouldBeNil)
  32. So(savedDash.Id, ShouldEqual, query.DashboardId)
  33. So(savedDash.Version, ShouldEqual, query.Version)
  34. dashCmd := m.GetDashboardQuery{
  35. OrgId: savedDash.OrgId,
  36. Slug: savedDash.Slug,
  37. }
  38. err = GetDashboard(&dashCmd)
  39. So(err, ShouldBeNil)
  40. dashCmd.Result.Data.Del("uid")
  41. eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data)
  42. So(eq, ShouldEqual, true)
  43. })
  44. Convey("Attempt to get a version that doesn't exist", func() {
  45. query := m.GetDashboardVersionQuery{
  46. DashboardId: int64(999),
  47. Version: 123,
  48. OrgId: 1,
  49. }
  50. err := GetDashboardVersion(&query)
  51. So(err, ShouldNotBeNil)
  52. So(err, ShouldEqual, m.ErrDashboardVersionNotFound)
  53. })
  54. })
  55. }
  56. func TestGetDashboardVersions(t *testing.T) {
  57. Convey("Testing dashboard versions retrieval", t, func() {
  58. InitTestDB(t)
  59. savedDash := insertTestDashboard("test dash 43", 1, 0, false, "diff-all")
  60. Convey("Get all versions for a given Dashboard ID", func() {
  61. query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
  62. err := GetDashboardVersions(&query)
  63. So(err, ShouldBeNil)
  64. So(len(query.Result), ShouldEqual, 1)
  65. })
  66. Convey("Attempt to get the versions for a non-existent Dashboard ID", func() {
  67. query := m.GetDashboardVersionsQuery{DashboardId: int64(999), OrgId: 1}
  68. err := GetDashboardVersions(&query)
  69. So(err, ShouldNotBeNil)
  70. So(err, ShouldEqual, m.ErrNoVersionsForDashboardId)
  71. So(len(query.Result), ShouldEqual, 0)
  72. })
  73. Convey("Get all versions for an updated dashboard", func() {
  74. updateTestDashboard(savedDash, map[string]interface{}{
  75. "tags": "different-tag",
  76. })
  77. query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
  78. err := GetDashboardVersions(&query)
  79. So(err, ShouldBeNil)
  80. So(len(query.Result), ShouldEqual, 2)
  81. })
  82. })
  83. }
  84. func TestDeleteExpiredVersions(t *testing.T) {
  85. Convey("Testing dashboard versions clean up", t, func() {
  86. InitTestDB(t)
  87. versionsToKeep := 5
  88. versionsToWrite := 10
  89. setting.DashboardVersionsToKeep = versionsToKeep
  90. savedDash := insertTestDashboard("test dash 53", 1, 0, false, "diff-all")
  91. for i := 0; i < versionsToWrite-1; i++ {
  92. updateTestDashboard(savedDash, map[string]interface{}{
  93. "tags": "different-tag",
  94. })
  95. }
  96. Convey("Clean up old dashboard versions", func() {
  97. err := DeleteExpiredVersions(&m.DeleteExpiredVersionsCommand{})
  98. So(err, ShouldBeNil)
  99. query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
  100. GetDashboardVersions(&query)
  101. So(len(query.Result), ShouldEqual, versionsToKeep)
  102. // Ensure latest versions were kept
  103. So(query.Result[versionsToKeep-1].Version, ShouldEqual, versionsToWrite-versionsToKeep+1)
  104. So(query.Result[0].Version, ShouldEqual, versionsToWrite)
  105. })
  106. Convey("Don't delete anything if there're no expired versions", func() {
  107. setting.DashboardVersionsToKeep = versionsToWrite
  108. err := DeleteExpiredVersions(&m.DeleteExpiredVersionsCommand{})
  109. So(err, ShouldBeNil)
  110. query := m.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1}
  111. GetDashboardVersions(&query)
  112. So(len(query.Result), ShouldEqual, versionsToWrite)
  113. })
  114. })
  115. }