moira

Форк
0
/
scheduler_test.go 
104 строки · 3.3 Кб
1
package notifier
2

3
import (
4
	"fmt"
5
	"testing"
6
	"time"
7

8
	"github.com/golang/mock/gomock"
9
	. "github.com/smartystreets/goconvey/convey"
10

11
	"go.avito.ru/DO/moira"
12
	"go.avito.ru/DO/moira/metrics"
13
	"go.avito.ru/DO/moira/mock/moira-alert"
14
)
15

16
func TestThrottling(t *testing.T) {
17
	var trigger = moira.TriggerData{
18
		ID:         "triggerID-0000000000001",
19
		Name:       "test trigger",
20
		Targets:    []string{"test.target.5"},
21
		WarnValue:  10,
22
		ErrorValue: 20,
23
		Tags:       []string{"test-tag"},
24
	}
25

26
	subID := "SubscriptionID-000000000000001"
27

28
	var event = moira.NotificationEvent{
29
		Metric:         "generate.event.1",
30
		State:          moira.OK,
31
		OldState:       moira.WARN,
32
		TriggerID:      trigger.ID,
33
		SubscriptionID: &subID,
34
	}
35

36
	now := time.Now()
37

38
	Convey("Test sendFail more than 0, and no throttling, should send message in one minute", t, func() {
39
		mockCtrl := gomock.NewController(t)
40
		defer mockCtrl.Finish()
41
		dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
42
		notifierMetrics := metrics.NewNotifierMetrics()
43
		scheduler := NewScheduler(dataBase, notifierMetrics)
44

45
		expectedNext := now.Add(2 * time.Minute).Unix()
46
		next, throttling := scheduler.GetDeliveryInfo(now, event, false, 1)
47

48
		So(next.Unix(), ShouldEqual, expectedNext)
49
		So(throttling, ShouldBeFalse)
50
	})
51

52
	Convey("Test sendFail more than 0, and has throttling, should send message in one minute", t, func() {
53
		mockCtrl := gomock.NewController(t)
54
		defer mockCtrl.Finish()
55
		dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
56
		notifierMetrics := metrics.NewNotifierMetrics()
57
		scheduler := NewScheduler(dataBase, notifierMetrics)
58

59
		expectedNext := now.Add(8 * time.Minute).Unix()
60
		next, throttling := scheduler.GetDeliveryInfo(now, event, true, 3)
61

62
		So(next.Unix(), ShouldEqual, expectedNext)
63
		So(throttling, ShouldBeTrue)
64
	})
65

66
	Convey("Test event state is TEST and no send fails, should return now notification time", t, func() {
67
		mockCtrl := gomock.NewController(t)
68
		defer mockCtrl.Finish()
69

70
		dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
71
		notifierMetrics := metrics.NewNotifierMetrics()
72
		scheduler := NewScheduler(dataBase, notifierMetrics)
73

74
		subID := "SubscriptionID-000000000000001"
75
		testEvent := moira.NotificationEvent{
76
			Metric:         "generate.event.1",
77
			State:          moira.TEST,
78
			OldState:       moira.WARN,
79
			TriggerID:      trigger.ID,
80
			SubscriptionID: &subID,
81
		}
82
		expectedNext := now.Unix()
83

84
		next, throttling := scheduler.GetDeliveryInfo(now, testEvent, false, 0)
85
		So(next.Unix(), ShouldEqual, expectedNext)
86
		So(throttling, ShouldBeFalse)
87
	})
88

89
	Convey("Test no throttling and no subscription, should return now notification time", t, func() {
90
		mockCtrl := gomock.NewController(t)
91
		defer mockCtrl.Finish()
92

93
		dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
94
		notifierMetrics := metrics.NewNotifierMetrics()
95
		scheduler := NewScheduler(dataBase, notifierMetrics)
96

97
		dataBase.EXPECT().GetTriggerThrottling(trigger.ID).Times(1).Return(time.Unix(0, 0), time.Unix(0, 0))
98
		dataBase.EXPECT().GetSubscription(*event.SubscriptionID).Times(1).Return(moira.SubscriptionData{}, fmt.Errorf("Error while read subscription"))
99
		expectedNext := now.Unix()
100
		next, throttling := scheduler.GetDeliveryInfo(now, event, false, 0)
101
		So(next.Unix(), ShouldEqual, expectedNext)
102
		So(throttling, ShouldBeFalse)
103
	})
104
}
105

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.