executor_test.go 3.2 KB

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