|
|
|
@ -14,6 +14,36 @@ func (f *FakeCondition) Eval(context *EvalContext) (*ConditionResult, error) { |
|
|
|
|
return &ConditionResult{}, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestAlertRuleFrequencyParsing(t *testing.T) { |
|
|
|
|
tcs := []struct { |
|
|
|
|
input string |
|
|
|
|
err error |
|
|
|
|
result int64 |
|
|
|
|
}{ |
|
|
|
|
{input: "10s", result: 10}, |
|
|
|
|
{input: "10m", result: 600}, |
|
|
|
|
{input: "1h", result: 3600}, |
|
|
|
|
{input: "1o", result: 1}, |
|
|
|
|
{input: "0s", err: ErrFrequencyCannotBeZeroOrLess}, |
|
|
|
|
{input: "0m", err: ErrFrequencyCannotBeZeroOrLess}, |
|
|
|
|
{input: "0h", err: ErrFrequencyCannotBeZeroOrLess}, |
|
|
|
|
{input: "0", err: ErrFrequencyCannotBeZeroOrLess}, |
|
|
|
|
{input: "-1s", err: ErrFrequencyCouldNotBeParsed}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, tc := range tcs { |
|
|
|
|
r, err := getTimeDurationStringToSeconds(tc.input) |
|
|
|
|
if err != tc.err { |
|
|
|
|
t.Errorf("expected error: '%v' got: '%v'", tc.err, err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if r != tc.result { |
|
|
|
|
t.Errorf("expected result: %d got %d", tc.result, r) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestAlertRuleModel(t *testing.T) { |
|
|
|
|
Convey("Testing alert rule", t, func() { |
|
|
|
|
|
|
|
|
@ -21,26 +51,6 @@ func TestAlertRuleModel(t *testing.T) { |
|
|
|
|
return &FakeCondition{}, nil |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("Can parse seconds", func() { |
|
|
|
|
seconds, _ := getTimeDurationStringToSeconds("10s") |
|
|
|
|
So(seconds, ShouldEqual, 10) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("Can parse minutes", func() { |
|
|
|
|
seconds, _ := getTimeDurationStringToSeconds("10m") |
|
|
|
|
So(seconds, ShouldEqual, 600) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("Can parse hours", func() { |
|
|
|
|
seconds, _ := getTimeDurationStringToSeconds("1h") |
|
|
|
|
So(seconds, ShouldEqual, 3600) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("defaults to seconds", func() { |
|
|
|
|
seconds, _ := getTimeDurationStringToSeconds("1o") |
|
|
|
|
So(seconds, ShouldEqual, 1) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("should return err for empty string", func() { |
|
|
|
|
_, err := getTimeDurationStringToSeconds("") |
|
|
|
|
So(err, ShouldNotBeNil) |
|
|
|
@ -89,5 +99,35 @@ func TestAlertRuleModel(t *testing.T) { |
|
|
|
|
So(len(alertRule.Notifications), ShouldEqual, 2) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("can construct alert rule model with invalid frequency", func() { |
|
|
|
|
json := ` |
|
|
|
|
{ |
|
|
|
|
"name": "name2", |
|
|
|
|
"description": "desc2", |
|
|
|
|
"noDataMode": "critical", |
|
|
|
|
"enabled": true, |
|
|
|
|
"frequency": "0s", |
|
|
|
|
"conditions": [ { "type": "test", "prop": 123 } ], |
|
|
|
|
"notifications": [] |
|
|
|
|
}` |
|
|
|
|
|
|
|
|
|
alertJSON, jsonErr := simplejson.NewJson([]byte(json)) |
|
|
|
|
So(jsonErr, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
alert := &m.Alert{ |
|
|
|
|
Id: 1, |
|
|
|
|
OrgId: 1, |
|
|
|
|
DashboardId: 1, |
|
|
|
|
PanelId: 1, |
|
|
|
|
Frequency: 0, |
|
|
|
|
|
|
|
|
|
Settings: alertJSON, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
alertRule, err := NewRuleFromDBAlert(alert) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(alertRule.Frequency, ShouldEqual, 60) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|