executor_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package alerting
  2. import (
  3. m "github.com/grafana/grafana/pkg/models"
  4. . "github.com/smartystreets/goconvey/convey"
  5. "testing"
  6. )
  7. func TestAlertingExecutor(t *testing.T) {
  8. Convey("Test alert execution", t, func() {
  9. executor := &ExecutorImpl{}
  10. Convey("single time serie", func() {
  11. Convey("Show return ok since avg is above 2", func() {
  12. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "sum"}
  13. timeSeries := []*m.TimeSeries{
  14. m.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  15. }
  16. result := executor.ValidateRule(rule, timeSeries)
  17. So(result.State, ShouldEqual, m.AlertStateOk)
  18. })
  19. Convey("Show return critical since below 2", func() {
  20. rule := m.AlertRule{CritLevel: 10, CritOperator: "<", Aggregator: "sum"}
  21. timeSeries := []*m.TimeSeries{
  22. m.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  23. }
  24. result := executor.ValidateRule(rule, timeSeries)
  25. So(result.State, ShouldEqual, m.AlertStateCritical)
  26. })
  27. Convey("Show return critical since sum is above 10", func() {
  28. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "sum"}
  29. timeSeries := []*m.TimeSeries{
  30. m.NewTimeSeries("test1", [][2]float64{{9, 0}, {9, 0}}),
  31. }
  32. result := executor.ValidateRule(rule, timeSeries)
  33. So(result.State, ShouldEqual, m.AlertStateCritical)
  34. })
  35. Convey("Show return ok since avg is below 10", func() {
  36. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "avg"}
  37. timeSeries := []*m.TimeSeries{
  38. m.NewTimeSeries("test1", [][2]float64{{9, 0}, {9, 0}}),
  39. }
  40. result := executor.ValidateRule(rule, timeSeries)
  41. So(result.State, ShouldEqual, m.AlertStateOk)
  42. })
  43. Convey("Show return ok since min is below 10", func() {
  44. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "min"}
  45. timeSeries := []*m.TimeSeries{
  46. m.NewTimeSeries("test1", [][2]float64{{11, 0}, {9, 0}}),
  47. }
  48. result := executor.ValidateRule(rule, timeSeries)
  49. So(result.State, ShouldEqual, m.AlertStateOk)
  50. })
  51. Convey("Show return ok since max is above 10", func() {
  52. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "max"}
  53. timeSeries := []*m.TimeSeries{
  54. m.NewTimeSeries("test1", [][2]float64{{1, 0}, {11, 0}}),
  55. }
  56. result := executor.ValidateRule(rule, timeSeries)
  57. So(result.State, ShouldEqual, m.AlertStateCritical)
  58. })
  59. })
  60. Convey("muliple time series", func() {
  61. Convey("both are ok", func() {
  62. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "sum"}
  63. timeSeries := []*m.TimeSeries{
  64. m.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  65. m.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  66. }
  67. result := executor.ValidateRule(rule, timeSeries)
  68. So(result.State, ShouldEqual, m.AlertStateOk)
  69. })
  70. Convey("first serie is good, second is critical", func() {
  71. rule := m.AlertRule{CritLevel: 10, CritOperator: ">", Aggregator: "sum"}
  72. timeSeries := []*m.TimeSeries{
  73. m.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  74. m.NewTimeSeries("test1", [][2]float64{{11, 0}}),
  75. }
  76. result := executor.ValidateRule(rule, timeSeries)
  77. So(result.State, ShouldEqual, m.AlertStateCritical)
  78. })
  79. })
  80. })
  81. }