moira
163 строки · 4.9 Кб
1package expression2
3import (4"fmt"5"testing"6
7. "github.com/smartystreets/goconvey/convey"8)
9
10type getExpressionValuesTest struct {11values TriggerExpression
12name string13expectedError error14expectedValue interface{}15}
16
17func TestExpression(t *testing.T) {18Convey("Test Default", t, func() {19warnValue := 60.020errorValue := 90.021result, err := (&TriggerExpression{MainTargetValue: 10.0, WarnValue: &warnValue, ErrorValue: &errorValue}).Evaluate()22So(err, ShouldBeNil)23So(result, ShouldResemble, "OK")24
25result, err = (&TriggerExpression{MainTargetValue: 60.0, WarnValue: &warnValue, ErrorValue: &errorValue}).Evaluate()26So(err, ShouldBeNil)27So(result, ShouldResemble, "WARN")28
29result, err = (&TriggerExpression{MainTargetValue: 90.0, WarnValue: &warnValue, ErrorValue: &errorValue}).Evaluate()30So(err, ShouldBeNil)31So(result, ShouldResemble, "ERROR")32
33warnValue = 30.034errorValue = 10.035result, err = (&TriggerExpression{MainTargetValue: 40.0, WarnValue: &warnValue, ErrorValue: &errorValue}).Evaluate()36So(err, ShouldBeNil)37So(result, ShouldResemble, "OK")38
39result, err = (&TriggerExpression{MainTargetValue: 20.0, WarnValue: &warnValue, ErrorValue: &errorValue}).Evaluate()40So(err, ShouldBeNil)41So(result, ShouldResemble, "WARN")42
43result, err = (&TriggerExpression{MainTargetValue: 10.0, WarnValue: &warnValue, ErrorValue: &errorValue}).Evaluate()44So(err, ShouldBeNil)45So(result, ShouldResemble, "ERROR")46
47result, err = (&TriggerExpression{MainTargetValue: 10.0, WarnValue: &warnValue}).Evaluate()48So(err, ShouldResemble, ErrInvalidExpression{fmt.Errorf("Error value and Warning value can not be empty")})49So(err.Error(), ShouldResemble, "Error value and Warning value can not be empty")50So(result, ShouldBeEmpty)51})52
53Convey("Test Custom", t, func() {54expression := "t1 > 10 && t2 > 3 ? ERROR : OK"55result, err := (&TriggerExpression{Expression: &expression, MainTargetValue: 11.0, AdditionalTargetsValues: map[string]float64{"t2": 4.0}}).Evaluate()56So(err, ShouldBeNil)57So(result, ShouldResemble, "ERROR")58
59expression = "min(t1, t2) > 10 ? ERROR : OK"60result, err = (&TriggerExpression{Expression: &expression, MainTargetValue: 11.0, AdditionalTargetsValues: map[string]float64{"t2": 4.0}}).Evaluate()61So(err, ShouldResemble, ErrInvalidExpression{fmt.Errorf("Functions is forbidden")})62So(result, ShouldBeEmpty)63})64}
65
66func TestGetExpressionValue(t *testing.T) {67floatVal := 10.068Convey("Test basic strings", t, func() {69getExpressionValuesTests := []getExpressionValuesTest{70{71name: "OK",72expectedValue: "OK",73},74{75name: "WARN",76expectedValue: "WARN",77},78{79name: "WARNING",80expectedValue: "WARN",81},82{83name: "ERROR",84expectedValue: "ERROR",85},86{87name: "NODATA",88expectedValue: "NODATA",89},90}91runGetExpressionValuesTest(getExpressionValuesTests)92})93
94Convey("Test no errors", t, func() {95{96getExpressionValuesTests := []getExpressionValuesTest{97{98values: TriggerExpression{WarnValue: &floatVal},99name: "WARN_VALUE",100expectedValue: floatVal,101},102{103values: TriggerExpression{ErrorValue: &floatVal},104name: "ERROR_VALUE",105expectedValue: floatVal,106},107{108values: TriggerExpression{MainTargetValue: 11.0},109name: "t1",110expectedValue: 11.0,111},112{113values: TriggerExpression{AdditionalTargetsValues: map[string]float64{"t2": 1.0}},114name: "t2",115expectedValue: 1.0,116},117{118values: TriggerExpression{AdditionalTargetsValues: map[string]float64{"t3": 4.0, "t2": 6.0}},119name: "t3",120expectedValue: 4.0,121},122{123values: TriggerExpression{PreviousState: "NODATA"},124name: "PREV_STATE",125expectedValue: "NODATA",126},127}128runGetExpressionValuesTest(getExpressionValuesTests)129}130})131
132Convey("Test errors", t, func() {133{134getExpressionValuesTests := []getExpressionValuesTest{135{136name: "WARN_VALUE",137expectedValue: nil,138expectedError: fmt.Errorf("No value with name WARN_VALUE"),139},140{141name: "ERROR_VALUE",142expectedValue: nil,143expectedError: fmt.Errorf("No value with name ERROR_VALUE"),144},145{146values: TriggerExpression{AdditionalTargetsValues: map[string]float64{"t3": 4.0, "t2": 6.0}},147name: "t4",148expectedValue: nil,149expectedError: fmt.Errorf("No value with name t4"),150},151}152runGetExpressionValuesTest(getExpressionValuesTests)153}154})155}
156
157func runGetExpressionValuesTest(getExpressionValuesTests []getExpressionValuesTest) {158for _, getExpressionValuesTest := range getExpressionValuesTests {159result, err := getExpressionValuesTest.values.Get(getExpressionValuesTest.name)160So(err, ShouldResemble, getExpressionValuesTest.expectedError)161So(result, ShouldResemble, getExpressionValuesTest.expectedValue)162}163}
164