|
|
@@ -4,93 +4,39 @@ import (
|
|
|
"testing"
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/tsdb"
|
|
|
- . "github.com/smartystreets/goconvey/convey"
|
|
|
)
|
|
|
|
|
|
func TestInfluxdbQueryPart(t *testing.T) {
|
|
|
- Convey("Influxdb query parts", t, func() {
|
|
|
-
|
|
|
- queryContext := &tsdb.TsdbQuery{TimeRange: tsdb.NewTimeRange("5m", "now")}
|
|
|
- query := &Query{}
|
|
|
-
|
|
|
- Convey("render field ", func() {
|
|
|
- part, err := NewQueryPart("field", []string{"value"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "value")
|
|
|
- So(res, ShouldEqual, `"value"`)
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render nested part", func() {
|
|
|
- part, err := NewQueryPart("derivative", []string{"10s"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "mean(value)")
|
|
|
- So(res, ShouldEqual, "derivative(mean(value), 10s)")
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render bottom", func() {
|
|
|
- part, err := NewQueryPart("bottom", []string{"3"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "value")
|
|
|
- So(res, ShouldEqual, "bottom(value, 3)")
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render time with $interval", func() {
|
|
|
- part, err := NewQueryPart("time", []string{"$interval"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "")
|
|
|
- So(res, ShouldEqual, "time($interval)")
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render time with auto", func() {
|
|
|
- part, err := NewQueryPart("time", []string{"auto"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "")
|
|
|
- So(res, ShouldEqual, "time($__interval)")
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render spread", func() {
|
|
|
- part, err := NewQueryPart("spread", []string{})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "value")
|
|
|
- So(res, ShouldEqual, `spread(value)`)
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render suffix", func() {
|
|
|
- part, err := NewQueryPart("math", []string{"/ 100"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "mean(value)")
|
|
|
- So(res, ShouldEqual, "mean(value) / 100")
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render alias", func() {
|
|
|
- part, err := NewQueryPart("alias", []string{"test"})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "mean(value)")
|
|
|
- So(res, ShouldEqual, `mean(value) AS "test"`)
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render count distinct", func() {
|
|
|
- part, err := NewQueryPart("count", []string{})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "distinct(value)")
|
|
|
- So(res, ShouldEqual, `count(distinct(value))`)
|
|
|
- })
|
|
|
-
|
|
|
- Convey("render mode", func() {
|
|
|
- part, err := NewQueryPart("mode", []string{})
|
|
|
- So(err, ShouldBeNil)
|
|
|
-
|
|
|
- res := part.Render(query, queryContext, "value")
|
|
|
- So(res, ShouldEqual, `mode(value)`)
|
|
|
- })
|
|
|
- })
|
|
|
+ tcs := []struct {
|
|
|
+ mode string
|
|
|
+ input string
|
|
|
+ params []string
|
|
|
+ expected string
|
|
|
+ }{
|
|
|
+ {mode: "field", params: []string{"value"}, input: "value", expected: `"value"`},
|
|
|
+ {mode: "derivative", params: []string{"10s"}, input: "mean(value)", expected: `derivative(mean(value), 10s)`},
|
|
|
+ {mode: "bottom", params: []string{"3"}, input: "value", expected: `bottom(value, 3)`},
|
|
|
+ {mode: "time", params: []string{"$interval"}, input: "", expected: `time($interval)`},
|
|
|
+ {mode: "time", params: []string{"auto"}, input: "", expected: `time($__interval)`},
|
|
|
+ {mode: "spread", params: []string{}, input: "value", expected: `spread(value)`},
|
|
|
+ {mode: "math", params: []string{"/ 100"}, input: "mean(value)", expected: `mean(value) / 100`},
|
|
|
+ {mode: "alias", params: []string{"test"}, input: "mean(value)", expected: `mean(value) AS "test"`},
|
|
|
+ {mode: "count", params: []string{}, input: "distinct(value)", expected: `count(distinct(value))`},
|
|
|
+ {mode: "mode", params: []string{}, input: "value", expected: `mode(value)`},
|
|
|
+ }
|
|
|
+
|
|
|
+ queryContext := &tsdb.TsdbQuery{TimeRange: tsdb.NewTimeRange("5m", "now")}
|
|
|
+ query := &Query{}
|
|
|
+
|
|
|
+ for _, tc := range tcs {
|
|
|
+ part, err := NewQueryPart(tc.mode, tc.params)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("Expected NewQueryPart to not return an error. error: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ res := part.Render(query, queryContext, tc.input)
|
|
|
+ if res != tc.expected {
|
|
|
+ t.Errorf("expected %v to render into %s", tc, tc.expected)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|