moira
99 строк · 3.5 Кб
1package controller
2
3import (
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
18func TestDeletePattern(t *testing.T) {
19mockCtrl := gomock.NewController(t)
20dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
21
22Convey("Success", t, func() {
23dataBase.EXPECT().RemovePattern("super.puper.pattern").Return(nil)
24err := DeletePattern(dataBase, "super.puper.pattern")
25So(err, ShouldBeNil)
26})
27
28Convey("Error", t, func() {
29expected := fmt.Errorf("Oooops! Can not remove pattern")
30dataBase.EXPECT().RemovePattern("super.puper.pattern").Return(expected)
31err := DeletePattern(dataBase, "super.puper.pattern")
32So(err, ShouldResemble, api.ErrorInternalServer(expected))
33})
34}
35
36func TestGetAllPatterns(t *testing.T) {
37mockCtrl := gomock.NewController(t)
38defer mockCtrl.Finish()
39
40dataBase := mock_moira_alert.NewMockDatabase(mockCtrl)
41logger := test_helpers.GetTestLogger()
42
43pattern1 := "my.first.pattern"
44pattern2 := "my.second.pattern"
45
46Convey("One pattern more triggers", t, func() {
47triggers := []*dto.TriggerModel{{ID: uuid.NewV4().String()}, {ID: uuid.NewV4().String()}}
48metrics := []string{"my.first.metric"}
49dataBase.EXPECT().GetPatterns().Return([]string{pattern1}, nil)
50expectGettingPatternList(dataBase, pattern1, triggers, metrics)
51list, err := GetAllPatterns(dataBase, logger)
52So(err, ShouldBeNil)
53So(list, ShouldResemble, &dto.PatternList{
54List: []dto.PatternData{{Metrics: metrics, Pattern: pattern1, Triggers: []dto.TriggerModel{*triggers[0], *triggers[1]}}},
55})
56})
57
58Convey("Many patterns one trigger", t, func() {
59triggers1 := []*dto.TriggerModel{{ID: "1111"}, {ID: "111111"}}
60triggers2 := []*dto.TriggerModel{{ID: "22222"}}
61metrics1 := []string{"my.first.metric"}
62metrics2 := []string{"my.second.metric"}
63dataBase.EXPECT().GetPatterns().Return([]string{pattern1, pattern2}, nil)
64expectGettingPatternList(dataBase, pattern1, triggers1, metrics1)
65expectGettingPatternList(dataBase, pattern2, triggers2, metrics2)
66list, err := GetAllPatterns(dataBase, logger)
67So(err, ShouldBeNil)
68So(list.List, ShouldHaveLength, 2)
69for _, patternStat := range list.List {
70if patternStat.Pattern == pattern1 {
71So(patternStat, ShouldResemble, dto.PatternData{Metrics: metrics1, Pattern: pattern1, Triggers: []dto.TriggerModel{*triggers1[0], *triggers1[1]}})
72}
73if patternStat.Pattern == pattern2 {
74So(patternStat, ShouldResemble, dto.PatternData{Metrics: metrics2, Pattern: pattern2, Triggers: []dto.TriggerModel{*triggers2[0]}})
75}
76}
77})
78
79Convey("Test errors", t, func() {
80Convey("GetPatterns error", func() {
81expected := fmt.Errorf("Oh no!!!11 Cant get patterns")
82dataBase.EXPECT().GetPatterns().Return(nil, expected)
83list, err := GetAllPatterns(dataBase, logger)
84So(err, ShouldResemble, api.ErrorInternalServer(expected))
85So(list, ShouldBeNil)
86})
87})
88}
89
90func expectGettingPatternList(database *mock_moira_alert.MockDatabase, pattern string, triggers []*dto.TriggerModel, metrics []string) {
91tr := make([]*moira.Trigger, 0)
92for _, trigger := range triggers {
93tr = append(tr, trigger.ToMoiraTrigger())
94}
95
96database.EXPECT().GetPatternTriggerIDs(pattern).Return([]string{pattern}, nil)
97database.EXPECT().GetTriggers([]string{pattern}).Return(tr, nil)
98database.EXPECT().GetPatternMetrics(pattern).Return(metrics, nil)
99}
100