alertmanager_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package notifiers
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/grafana/grafana/pkg/components/simplejson"
  6. "github.com/grafana/grafana/pkg/infra/log"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/services/alerting"
  9. . "github.com/smartystreets/goconvey/convey"
  10. )
  11. func TestWhenAlertManagerShouldNotify(t *testing.T) {
  12. tcs := []struct {
  13. prevState m.AlertStateType
  14. newState m.AlertStateType
  15. expect bool
  16. }{
  17. {
  18. prevState: m.AlertStatePending,
  19. newState: m.AlertStateOK,
  20. expect: false,
  21. },
  22. {
  23. prevState: m.AlertStateAlerting,
  24. newState: m.AlertStateOK,
  25. expect: true,
  26. },
  27. {
  28. prevState: m.AlertStateOK,
  29. newState: m.AlertStatePending,
  30. expect: false,
  31. },
  32. {
  33. prevState: m.AlertStateUnknown,
  34. newState: m.AlertStatePending,
  35. expect: false,
  36. },
  37. }
  38. for _, tc := range tcs {
  39. am := &AlertmanagerNotifier{log: log.New("test.logger")}
  40. evalContext := alerting.NewEvalContext(context.TODO(), &alerting.Rule{
  41. State: tc.prevState,
  42. })
  43. evalContext.Rule.State = tc.newState
  44. res := am.ShouldNotify(context.TODO(), evalContext, &m.AlertNotificationState{})
  45. if res != tc.expect {
  46. t.Errorf("got %v expected %v", res, tc.expect)
  47. }
  48. }
  49. }
  50. func TestAlertmanagerNotifier(t *testing.T) {
  51. Convey("Alertmanager notifier tests", t, func() {
  52. Convey("Parsing alert notification from settings", func() {
  53. Convey("empty settings should return error", func() {
  54. json := `{ }`
  55. settingsJSON, _ := simplejson.NewJson([]byte(json))
  56. model := &m.AlertNotification{
  57. Name: "alertmanager",
  58. Type: "alertmanager",
  59. Settings: settingsJSON,
  60. }
  61. _, err := NewAlertmanagerNotifier(model)
  62. So(err, ShouldNotBeNil)
  63. })
  64. Convey("from settings", func() {
  65. json := `{ "url": "http://127.0.0.1:9093/" }`
  66. settingsJSON, _ := simplejson.NewJson([]byte(json))
  67. model := &m.AlertNotification{
  68. Name: "alertmanager",
  69. Type: "alertmanager",
  70. Settings: settingsJSON,
  71. }
  72. not, err := NewAlertmanagerNotifier(model)
  73. alertmanagerNotifier := not.(*AlertmanagerNotifier)
  74. So(err, ShouldBeNil)
  75. So(alertmanagerNotifier.Url, ShouldEqual, "http://127.0.0.1:9093/")
  76. })
  77. })
  78. })
  79. }