diff --git a/metrics/notifier.go b/metrics/notifier.go index ebec0dddf..3af294d63 100644 --- a/metrics/notifier.go +++ b/metrics/notifier.go @@ -1,6 +1,8 @@ package metrics -import "time" +import ( + "time" +) // NotifierMetrics is a collection of metrics used in notifier. type NotifierMetrics struct { @@ -73,6 +75,7 @@ func (metrics *NotifierMetrics) MarkSendingFailed() { func (metrics *NotifierMetrics) MarkNotifierIsAlive(isAlive bool) { if isAlive { metrics.notifierIsAlive.Mark(1) + return } metrics.notifierIsAlive.Mark(0) diff --git a/notifier/alive_watcher.go b/notifier/alive_watcher.go index 82963ca69..3ce57e632 100644 --- a/notifier/alive_watcher.go +++ b/notifier/alive_watcher.go @@ -2,7 +2,6 @@ package notifier import ( "context" - "fmt" "time" "github.com/moira-alert/moira" @@ -54,13 +53,10 @@ func (watcher *AliveWatcher) stateChecker(ctx context.Context) { func (watcher *AliveWatcher) checkNotifierState() { state, _ := watcher.database.GetNotifierState() - fmt.Println(state) if state != moira.SelfStateOK { watcher.notifierMetrics.MarkNotifierIsAlive(false) - fmt.Println("Marked as not alive") return } watcher.notifierMetrics.MarkNotifierIsAlive(true) - fmt.Println("Marked as alive") } diff --git a/notifier/alive_watcher_test.go b/notifier/alive_watcher_test.go index a59128568..40fc6c6c0 100644 --- a/notifier/alive_watcher_test.go +++ b/notifier/alive_watcher_test.go @@ -1,12 +1,12 @@ package notifier import ( + "context" "errors" "testing" "time" "github.com/moira-alert/moira" - logging "github.com/moira-alert/moira/logging/zerolog_adapter" "github.com/moira-alert/moira/metrics" . "github.com/smartystreets/goconvey/convey" "go.uber.org/mock/gomock" @@ -27,20 +27,15 @@ func initAliveMeter(mockCtrl *gomock.Controller) (*mock_metrics.MockRegistry, *m } func TestAliveWatcher_checkNotifierState(t *testing.T) { - logger, _ = logging.GetLogger("test alive watcher") - mockCtrl := gomock.NewController(t) - dataBase := mock_moira_alert.NewMockDatabase(mockCtrl) defer mockCtrl.Finish() - testConf := Config{ - CheckNotifierStateTimeout: time.Second * 10, - } + dataBase := mock_moira_alert.NewMockDatabase(mockCtrl) mockRegistry, mockAliveMeter := initAliveMeter(mockCtrl) testNotifierMetrics := metrics.ConfigureNotifierMetrics(mockRegistry, "") - aliveWatcher := NewAliveWatcher(logger, dataBase, testConf, testNotifierMetrics) + aliveWatcher := NewAliveWatcher(nil, dataBase, Config{}, testNotifierMetrics) Convey("checkNotifierState", t, func() { Convey("when OK", func() { @@ -77,3 +72,41 @@ func TestAliveWatcher_checkNotifierState(t *testing.T) { }) }) } + +func TestAliveWatcher_Start(t *testing.T) { + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + logger := mock_moira_alert.NewMockLogger(mockCtrl) + eventsBuilder := mock_moira_alert.NewMockEventBuilder(mockCtrl) + logger.EXPECT().Info().Return(eventsBuilder).AnyTimes() + + dataBase := mock_moira_alert.NewMockDatabase(mockCtrl) + + testConf := Config{ + CheckNotifierStateTimeout: time.Second, + } + + mockRegistry, mockAliveMeter := initAliveMeter(mockCtrl) + testNotifierMetrics := metrics.ConfigureNotifierMetrics(mockRegistry, "") + + aliveWatcher := NewAliveWatcher(logger, dataBase, testConf, testNotifierMetrics) + + Convey("AliveWatcher stops on cancel", t, func() { + eventsBuilder.EXPECT().Interface("check_timeout_seconds", testConf.CheckNotifierStateTimeout.Seconds()).Return(eventsBuilder) + eventsBuilder.EXPECT().Msg("Moira Notifier alive watcher started") + + eventsBuilder.EXPECT().Msg("Moira Notifier alive watcher stopped") + + dataBase.EXPECT().GetNotifierState().Return(moira.SelfStateOK, nil).AnyTimes() + mockAliveMeter.EXPECT().Mark(int64(1)).AnyTimes() + + ctx, cancel := context.WithCancel(context.Background()) + aliveWatcher.Start(ctx) + + select { + case <-time.After(time.Second * 3): + cancel() + } + }) +}