8
"github.com/golang/mock/gomock"
9
. "github.com/smartystreets/goconvey/convey"
11
"go.avito.ru/DO/moira"
12
"go.avito.ru/DO/moira/metrics"
13
"go.avito.ru/DO/moira/mock/moira-alert"
16
func TestThrottling(t *testing.T) {
17
var trigger = moira.TriggerData{
18
ID: "triggerID-0000000000001",
20
Targets: []string{"test.target.5"},
23
Tags: []string{"test-tag"},
26
subID := "SubscriptionID-000000000000001"
28
var event = moira.NotificationEvent{
29
Metric: "generate.event.1",
32
TriggerID: trigger.ID,
33
SubscriptionID: &subID,
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)
45
expectedNext := now.Add(2 * time.Minute).Unix()
46
next, throttling := scheduler.GetDeliveryInfo(now, event, false, 1)
48
So(next.Unix(), ShouldEqual, expectedNext)
49
So(throttling, ShouldBeFalse)
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)
59
expectedNext := now.Add(8 * time.Minute).Unix()
60
next, throttling := scheduler.GetDeliveryInfo(now, event, true, 3)
62
So(next.Unix(), ShouldEqual, expectedNext)
63
So(throttling, ShouldBeTrue)
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()
70
dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
71
notifierMetrics := metrics.NewNotifierMetrics()
72
scheduler := NewScheduler(dataBase, notifierMetrics)
74
subID := "SubscriptionID-000000000000001"
75
testEvent := moira.NotificationEvent{
76
Metric: "generate.event.1",
79
TriggerID: trigger.ID,
80
SubscriptionID: &subID,
82
expectedNext := now.Unix()
84
next, throttling := scheduler.GetDeliveryInfo(now, testEvent, false, 0)
85
So(next.Unix(), ShouldEqual, expectedNext)
86
So(throttling, ShouldBeFalse)
89
Convey("Test no throttling and no subscription, should return now notification time", t, func() {
90
mockCtrl := gomock.NewController(t)
91
defer mockCtrl.Finish()
93
dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
94
notifierMetrics := metrics.NewNotifierMetrics()
95
scheduler := NewScheduler(dataBase, notifierMetrics)
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)