result_handler_test.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package alerting
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/services/alerting/alertstates"
  8. . "github.com/smartystreets/goconvey/convey"
  9. )
  10. func TestAlertResultHandler(t *testing.T) {
  11. Convey("Test result Handler", t, func() {
  12. resultHandler := ResultHandlerImpl{}
  13. mockResult := &AlertResult{
  14. State: alertstates.Ok,
  15. AlertJob: &AlertJob{
  16. Rule: &AlertRule{
  17. Id: 1,
  18. OrgId: 1,
  19. },
  20. },
  21. }
  22. mockAlertState := &m.AlertState{}
  23. bus.ClearBusHandlers()
  24. bus.AddHandler("test", func(query *m.GetLastAlertStateQuery) error {
  25. query.Result = mockAlertState
  26. return nil
  27. })
  28. Convey("Should update", func() {
  29. Convey("when no earlier alert state", func() {
  30. mockAlertState = nil
  31. So(resultHandler.shouldUpdateState(mockResult), ShouldBeTrue)
  32. })
  33. Convey("alert state have changed", func() {
  34. mockAlertState = &m.AlertState{
  35. NewState: alertstates.Critical,
  36. }
  37. mockResult.State = alertstates.Ok
  38. So(resultHandler.shouldUpdateState(mockResult), ShouldBeTrue)
  39. })
  40. Convey("last alert state was 15min ago", func() {
  41. now := time.Now()
  42. mockAlertState = &m.AlertState{
  43. NewState: alertstates.Critical,
  44. Created: now.Add(time.Minute * -30),
  45. }
  46. mockResult.State = alertstates.Critical
  47. mockResult.ExeuctionTime = time.Now()
  48. So(resultHandler.shouldUpdateState(mockResult), ShouldBeTrue)
  49. })
  50. })
  51. })
  52. }