alert_test.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package sqlstore
  2. import (
  3. "testing"
  4. "github.com/grafana/grafana/pkg/components/simplejson"
  5. m "github.com/grafana/grafana/pkg/models"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. func TestAlertingDataAccess(t *testing.T) {
  9. Convey("Testing Alerting data access", t, func() {
  10. InitTestDB(t)
  11. testDash := insertTestDashboard("dashboard with alerts", 1, 0, false, "alert")
  12. items := []*m.Alert{
  13. {
  14. PanelId: 1,
  15. DashboardId: testDash.Id,
  16. OrgId: testDash.OrgId,
  17. Name: "Alerting title",
  18. Message: "Alerting message",
  19. Settings: simplejson.New(),
  20. Frequency: 1,
  21. },
  22. }
  23. cmd := m.SaveAlertsCommand{
  24. Alerts: items,
  25. DashboardId: testDash.Id,
  26. OrgId: 1,
  27. UserId: 1,
  28. }
  29. err := SaveAlerts(&cmd)
  30. Convey("Can create one alert", func() {
  31. So(err, ShouldBeNil)
  32. })
  33. Convey("Can set new states", func() {
  34. Convey("new state ok", func() {
  35. cmd := &m.SetAlertStateCommand{
  36. AlertId: 1,
  37. State: m.AlertStateOK,
  38. }
  39. err = SetAlertState(cmd)
  40. So(err, ShouldBeNil)
  41. })
  42. Convey("can pause alert", func() {
  43. cmd := &m.PauseAllAlertCommand{
  44. Paused: true,
  45. }
  46. err = PauseAllAlerts(cmd)
  47. So(err, ShouldBeNil)
  48. Convey("cannot updated paused alert", func() {
  49. cmd := &m.SetAlertStateCommand{
  50. AlertId: 1,
  51. State: m.AlertStateOK,
  52. }
  53. err = SetAlertState(cmd)
  54. So(err, ShouldNotBeNil)
  55. })
  56. })
  57. })
  58. Convey("Can read properties", func() {
  59. alertQuery := m.GetAlertsQuery{DashboardId: testDash.Id, PanelId: 1, OrgId: 1, User: &m.SignedInUser{OrgRole: m.ROLE_ADMIN}}
  60. err2 := HandleAlertsQuery(&alertQuery)
  61. alert := alertQuery.Result[0]
  62. So(err2, ShouldBeNil)
  63. So(alert.Name, ShouldEqual, "Alerting title")
  64. So(alert.State, ShouldEqual, "pending")
  65. })
  66. Convey("Viewer cannot read alerts", func() {
  67. alertQuery := m.GetAlertsQuery{DashboardId: testDash.Id, PanelId: 1, OrgId: 1, User: &m.SignedInUser{OrgRole: m.ROLE_VIEWER}}
  68. err2 := HandleAlertsQuery(&alertQuery)
  69. So(err2, ShouldBeNil)
  70. So(alertQuery.Result, ShouldHaveLength, 0)
  71. })
  72. Convey("Alerts with same dashboard id and panel id should update", func() {
  73. modifiedItems := items
  74. modifiedItems[0].Name = "Name"
  75. modifiedCmd := m.SaveAlertsCommand{
  76. DashboardId: testDash.Id,
  77. OrgId: 1,
  78. UserId: 1,
  79. Alerts: modifiedItems,
  80. }
  81. err := SaveAlerts(&modifiedCmd)
  82. Convey("Can save alerts with same dashboard and panel id", func() {
  83. So(err, ShouldBeNil)
  84. })
  85. Convey("Alerts should be updated", func() {
  86. query := m.GetAlertsQuery{DashboardId: testDash.Id, OrgId: 1, User: &m.SignedInUser{OrgRole: m.ROLE_ADMIN}}
  87. err2 := HandleAlertsQuery(&query)
  88. So(err2, ShouldBeNil)
  89. So(len(query.Result), ShouldEqual, 1)
  90. So(query.Result[0].Name, ShouldEqual, "Name")
  91. Convey("Alert state should not be updated", func() {
  92. So(query.Result[0].State, ShouldEqual, "pending")
  93. })
  94. })
  95. Convey("Updates without changes should be ignored", func() {
  96. err3 := SaveAlerts(&modifiedCmd)
  97. So(err3, ShouldBeNil)
  98. })
  99. })
  100. Convey("Multiple alerts per dashboard", func() {
  101. multipleItems := []*m.Alert{
  102. {
  103. DashboardId: testDash.Id,
  104. PanelId: 1,
  105. Name: "1",
  106. OrgId: 1,
  107. Settings: simplejson.New(),
  108. },
  109. {
  110. DashboardId: testDash.Id,
  111. PanelId: 2,
  112. Name: "2",
  113. OrgId: 1,
  114. Settings: simplejson.New(),
  115. },
  116. {
  117. DashboardId: testDash.Id,
  118. PanelId: 3,
  119. Name: "3",
  120. OrgId: 1,
  121. Settings: simplejson.New(),
  122. },
  123. }
  124. cmd.Alerts = multipleItems
  125. err = SaveAlerts(&cmd)
  126. Convey("Should save 3 dashboards", func() {
  127. So(err, ShouldBeNil)
  128. queryForDashboard := m.GetAlertsQuery{DashboardId: testDash.Id, OrgId: 1, User: &m.SignedInUser{OrgRole: m.ROLE_ADMIN}}
  129. err2 := HandleAlertsQuery(&queryForDashboard)
  130. So(err2, ShouldBeNil)
  131. So(len(queryForDashboard.Result), ShouldEqual, 3)
  132. })
  133. Convey("should updated two dashboards and delete one", func() {
  134. missingOneAlert := multipleItems[:2]
  135. cmd.Alerts = missingOneAlert
  136. err = SaveAlerts(&cmd)
  137. Convey("should delete the missing alert", func() {
  138. query := m.GetAlertsQuery{DashboardId: testDash.Id, OrgId: 1, User: &m.SignedInUser{OrgRole: m.ROLE_ADMIN}}
  139. err2 := HandleAlertsQuery(&query)
  140. So(err2, ShouldBeNil)
  141. So(len(query.Result), ShouldEqual, 2)
  142. })
  143. })
  144. })
  145. Convey("When dashboard is removed", func() {
  146. items := []*m.Alert{
  147. {
  148. PanelId: 1,
  149. DashboardId: testDash.Id,
  150. Name: "Alerting title",
  151. Message: "Alerting message",
  152. },
  153. }
  154. cmd := m.SaveAlertsCommand{
  155. Alerts: items,
  156. DashboardId: testDash.Id,
  157. OrgId: 1,
  158. UserId: 1,
  159. }
  160. SaveAlerts(&cmd)
  161. err = DeleteDashboard(&m.DeleteDashboardCommand{
  162. OrgId: 1,
  163. Id: testDash.Id,
  164. })
  165. So(err, ShouldBeNil)
  166. Convey("Alerts should be removed", func() {
  167. query := m.GetAlertsQuery{DashboardId: testDash.Id, OrgId: 1, User: &m.SignedInUser{OrgRole: m.ROLE_ADMIN}}
  168. err2 := HandleAlertsQuery(&query)
  169. So(testDash.Id, ShouldEqual, 1)
  170. So(err2, ShouldBeNil)
  171. So(len(query.Result), ShouldEqual, 0)
  172. })
  173. })
  174. })
  175. }