moira

Форк
0
/
pattern_test.go 
99 строк · 3.5 Кб
1
package controller
2

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

7
	"github.com/golang/mock/gomock"
8
	"github.com/satori/go.uuid"
9
	. "github.com/smartystreets/goconvey/convey"
10

11
	"go.avito.ru/DO/moira"
12
	"go.avito.ru/DO/moira/api"
13
	"go.avito.ru/DO/moira/api/dto"
14
	"go.avito.ru/DO/moira/mock/moira-alert"
15
	"go.avito.ru/DO/moira/test-helpers"
16
)
17

18
func TestDeletePattern(t *testing.T) {
19
	mockCtrl := gomock.NewController(t)
20
	dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
21

22
	Convey("Success", t, func() {
23
		dataBase.EXPECT().RemovePattern("super.puper.pattern").Return(nil)
24
		err := DeletePattern(dataBase, "super.puper.pattern")
25
		So(err, ShouldBeNil)
26
	})
27

28
	Convey("Error", t, func() {
29
		expected := fmt.Errorf("Oooops! Can not remove pattern")
30
		dataBase.EXPECT().RemovePattern("super.puper.pattern").Return(expected)
31
		err := DeletePattern(dataBase, "super.puper.pattern")
32
		So(err, ShouldResemble, api.ErrorInternalServer(expected))
33
	})
34
}
35

36
func TestGetAllPatterns(t *testing.T) {
37
	mockCtrl := gomock.NewController(t)
38
	defer mockCtrl.Finish()
39

40
	dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
41
	logger := test_helpers.GetTestLogger()
42

43
	pattern1 := "my.first.pattern"
44
	pattern2 := "my.second.pattern"
45

46
	Convey("One pattern more triggers", t, func() {
47
		triggers := []*dto.TriggerModel{{ID: uuid.NewV4().String()}, {ID: uuid.NewV4().String()}}
48
		metrics := []string{"my.first.metric"}
49
		dataBase.EXPECT().GetPatterns().Return([]string{pattern1}, nil)
50
		expectGettingPatternList(dataBase, pattern1, triggers, metrics)
51
		list, err := GetAllPatterns(dataBase, logger)
52
		So(err, ShouldBeNil)
53
		So(list, ShouldResemble, &dto.PatternList{
54
			List: []dto.PatternData{{Metrics: metrics, Pattern: pattern1, Triggers: []dto.TriggerModel{*triggers[0], *triggers[1]}}},
55
		})
56
	})
57

58
	Convey("Many patterns one trigger", t, func() {
59
		triggers1 := []*dto.TriggerModel{{ID: "1111"}, {ID: "111111"}}
60
		triggers2 := []*dto.TriggerModel{{ID: "22222"}}
61
		metrics1 := []string{"my.first.metric"}
62
		metrics2 := []string{"my.second.metric"}
63
		dataBase.EXPECT().GetPatterns().Return([]string{pattern1, pattern2}, nil)
64
		expectGettingPatternList(dataBase, pattern1, triggers1, metrics1)
65
		expectGettingPatternList(dataBase, pattern2, triggers2, metrics2)
66
		list, err := GetAllPatterns(dataBase, logger)
67
		So(err, ShouldBeNil)
68
		So(list.List, ShouldHaveLength, 2)
69
		for _, patternStat := range list.List {
70
			if patternStat.Pattern == pattern1 {
71
				So(patternStat, ShouldResemble, dto.PatternData{Metrics: metrics1, Pattern: pattern1, Triggers: []dto.TriggerModel{*triggers1[0], *triggers1[1]}})
72
			}
73
			if patternStat.Pattern == pattern2 {
74
				So(patternStat, ShouldResemble, dto.PatternData{Metrics: metrics2, Pattern: pattern2, Triggers: []dto.TriggerModel{*triggers2[0]}})
75
			}
76
		}
77
	})
78

79
	Convey("Test errors", t, func() {
80
		Convey("GetPatterns error", func() {
81
			expected := fmt.Errorf("Oh no!!!11 Cant get patterns")
82
			dataBase.EXPECT().GetPatterns().Return(nil, expected)
83
			list, err := GetAllPatterns(dataBase, logger)
84
			So(err, ShouldResemble, api.ErrorInternalServer(expected))
85
			So(list, ShouldBeNil)
86
		})
87
	})
88
}
89

90
func expectGettingPatternList(database *mock_moira_alert.MockDatabase, pattern string, triggers []*dto.TriggerModel, metrics []string) {
91
	tr := make([]*moira.Trigger, 0)
92
	for _, trigger := range triggers {
93
		tr = append(tr, trigger.ToMoiraTrigger())
94
	}
95

96
	database.EXPECT().GetPatternTriggerIDs(pattern).Return([]string{pattern}, nil)
97
	database.EXPECT().GetTriggers([]string{pattern}).Return(tr, nil)
98
	database.EXPECT().GetPatternMetrics(pattern).Return(metrics, nil)
99
}
100

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

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

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

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