|
|
@ -1,4 +1,4 @@ |
|
|
|
package influxdb |
|
|
|
package influxql |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"encoding/json" |
|
|
@ -13,6 +13,7 @@ import ( |
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/tsdb/influxdb/models" |
|
|
|
"github.com/grafana/grafana/pkg/util" |
|
|
|
"github.com/grafana/grafana/pkg/util" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -20,31 +21,29 @@ func prepare(text string) io.ReadCloser { |
|
|
|
return io.NopCloser(strings.NewReader(text)) |
|
|
|
return io.NopCloser(strings.NewReader(text)) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func addQueryToQueries(query Query) []Query { |
|
|
|
func generateQuery(query models.Query) *models.Query { |
|
|
|
var queries []Query |
|
|
|
if query.RefID == "" { |
|
|
|
query.RefID = "A" |
|
|
|
query.RefID = "A" |
|
|
|
query.RawQuery = "Test raw query" |
|
|
|
} |
|
|
|
queries = append(queries, query) |
|
|
|
if query.RawQuery == "" { |
|
|
|
return queries |
|
|
|
query.RawQuery = "Test raw query" |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return &query |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should handle invalid JSON", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should handle invalid JSON", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := `{ invalid }` |
|
|
|
response := `{ invalid }` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
require.Nil(t, result.Responses["A"].Frames) |
|
|
|
require.Nil(t, result.Frames) |
|
|
|
require.Error(t, result.Responses["A"].Error) |
|
|
|
require.Error(t, result.Error) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser should parse everything normally including nil bools and nil strings", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should parse everything normally including nil bools and nil strings", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -66,7 +65,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
labels, err := data.LabelsFromString("datacenter=America") |
|
|
|
labels, err := data.LabelsFromString("datacenter=America") |
|
|
|
require.Nil(t, err) |
|
|
|
require.Nil(t, err) |
|
|
|
|
|
|
|
|
|
|
@ -118,23 +117,20 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
) |
|
|
|
) |
|
|
|
boolFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
boolFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["A"] |
|
|
|
if diff := cmp.Diff(floatFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(floatFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
if diff := cmp.Diff(stringFrame, frame.Frames[1], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(stringFrame, result.Frames[1], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
if diff := cmp.Diff(boolFrame, frame.Frames[2], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(boolFrame, result.Frames[2], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser should parse metricFindQueries normally", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should parse metricFindQueries normally", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -155,8 +151,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
var queries []Query |
|
|
|
query := models.Query{RefID: "metricFindQuery"} |
|
|
|
queries = append(queries, Query{RefID: "metricFindQuery"}) |
|
|
|
|
|
|
|
newField := data.NewField("Value", nil, []string{ |
|
|
|
newField := data.NewField("Value", nil, []string{ |
|
|
|
"cpu", "disk", "logs", |
|
|
|
"cpu", "disk", "logs", |
|
|
|
}) |
|
|
|
}) |
|
|
@ -164,17 +159,14 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
newField, |
|
|
|
newField, |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, queries) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["metricFindQuery"] |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser should parse metricFindQueries->SHOW TAG VALUES normally", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should parse metricFindQueries->SHOW TAG VALUES normally", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -194,8 +186,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
var queries []Query |
|
|
|
query := models.Query{RawQuery: "SHOW TAG VALUES", RefID: "metricFindQuery"} |
|
|
|
queries = append(queries, Query{RawQuery: "SHOW TAG VALUES", RefID: "metricFindQuery"}) |
|
|
|
|
|
|
|
newField := data.NewField("Value", nil, []string{ |
|
|
|
newField := data.NewField("Value", nil, []string{ |
|
|
|
"cpu-total", "cpu0", "cpu1", |
|
|
|
"cpu-total", "cpu0", "cpu1", |
|
|
|
}) |
|
|
|
}) |
|
|
@ -203,46 +194,14 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
newField, |
|
|
|
newField, |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, queries) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["metricFindQuery"] |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser should parse two responses with different refIDs", func(t *testing.T) { |
|
|
|
|
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"results": [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"series": [{}] |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"series": [{}] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
|
|
|
|
var queries = addQueryToQueries(*query) |
|
|
|
|
|
|
|
queryB := &Query{} |
|
|
|
|
|
|
|
queryB.RefID = "B" |
|
|
|
|
|
|
|
queries = append(queries, *queryB) |
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, queries) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert.Len(t, result.Responses, 2) |
|
|
|
|
|
|
|
assert.Contains(t, result.Responses, "A") |
|
|
|
|
|
|
|
assert.Contains(t, result.Responses, "B") |
|
|
|
|
|
|
|
assert.NotContains(t, result.Responses, "C") |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser populates the RawQuery in the response meta ExecutedQueryString", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser populates the RawQuery in the response meta ExecutedQueryString", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -263,17 +222,14 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
query.RawQuery = "Test raw query" |
|
|
|
query.RawQuery = "Test raw query" |
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["A"] |
|
|
|
assert.Equal(t, result.Frames[0].Meta.ExecutedQueryString, "Test raw query") |
|
|
|
assert.Equal(t, frame.Frames[0].Meta.ExecutedQueryString, "Test raw query") |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser with invalid value-format", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser with invalid value-format", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -294,7 +250,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
|
|
|
|
|
|
|
|
newField := data.NewField("Value", nil, []*float64{ |
|
|
|
newField := data.NewField("Value", nil, []*float64{ |
|
|
|
util.Pointer(50.0), nil, util.Pointer(52.0), |
|
|
|
util.Pointer(50.0), nil, util.Pointer(52.0), |
|
|
@ -311,17 +267,14 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
) |
|
|
|
) |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["A"] |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser with invalid timestamp-format", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser with invalid timestamp-format", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -343,7 +296,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
|
|
|
|
|
|
|
|
newField := data.NewField("Value", nil, []*float64{ |
|
|
|
newField := data.NewField("Value", nil, []*float64{ |
|
|
|
util.Pointer(50.0), util.Pointer(52.0), |
|
|
|
util.Pointer(50.0), util.Pointer(52.0), |
|
|
@ -359,17 +312,14 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
) |
|
|
|
) |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["A"] |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser with alias", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser with alias", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -395,7 +345,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{Alias: "series alias"} |
|
|
|
query := models.Query{Alias: "series alias"} |
|
|
|
labels, err := data.LabelsFromString("/cluster/name/=Cluster/, @cluster@name@=Cluster@, cluster-name=Cluster, datacenter=America, dc.region.name=Northeast") |
|
|
|
labels, err := data.LabelsFromString("/cluster/name/=Cluster/, @cluster@name@=Cluster@, cluster-name=Cluster, datacenter=America, dc.region.name=Northeast") |
|
|
|
require.Nil(t, err) |
|
|
|
require.Nil(t, err) |
|
|
|
newField := data.NewField("Value", labels, []*float64{ |
|
|
|
newField := data.NewField("Value", labels, []*float64{ |
|
|
@ -410,31 +360,28 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
newField, |
|
|
|
newField, |
|
|
|
) |
|
|
|
) |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
t.Run("should parse aliases", func(t *testing.T) { |
|
|
|
t.Run("should parse aliases", func(t *testing.T) { |
|
|
|
frame := result.Responses["A"] |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $m $measurement", Measurement: "10m"} |
|
|
|
query = models.Query{Alias: "alias $m $measurement", Measurement: "10m"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name := "alias 10m 10m" |
|
|
|
name := "alias 10m 10m" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $col", Measurement: "10m"} |
|
|
|
query = models.Query{Alias: "alias $col", Measurement: "10m"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias mean" |
|
|
|
name = "alias mean" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
name = "alias sum" |
|
|
|
name = "alias sum" |
|
|
@ -444,13 +391,12 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
testFrame.Fields[1] = newField |
|
|
|
testFrame.Fields[1] = newField |
|
|
|
testFrame.Fields[1].Config = &data.FieldConfig{DisplayNameFromDS: name} |
|
|
|
testFrame.Fields[1].Config = &data.FieldConfig{DisplayNameFromDS: name} |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[1], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[1], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $tag_datacenter"} |
|
|
|
query = models.Query{Alias: "alias $tag_datacenter"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias America" |
|
|
|
name = "alias America" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
newField = data.NewField("Value", labels, []*float64{ |
|
|
|
newField = data.NewField("Value", labels, []*float64{ |
|
|
@ -458,13 +404,12 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
testFrame.Fields[1] = newField |
|
|
|
testFrame.Fields[1] = newField |
|
|
|
testFrame.Fields[1].Config = &data.FieldConfig{DisplayNameFromDS: name} |
|
|
|
testFrame.Fields[1].Config = &data.FieldConfig{DisplayNameFromDS: name} |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $tag_datacenter/$tag_datacenter"} |
|
|
|
query = models.Query{Alias: "alias $tag_datacenter/$tag_datacenter"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias America/America" |
|
|
|
name = "alias America/America" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
newField = data.NewField("Value", labels, []*float64{ |
|
|
|
newField = data.NewField("Value", labels, []*float64{ |
|
|
@ -472,183 +417,152 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
testFrame.Fields[1] = newField |
|
|
|
testFrame.Fields[1] = newField |
|
|
|
testFrame.Fields[1].Config = &data.FieldConfig{DisplayNameFromDS: name} |
|
|
|
testFrame.Fields[1].Config = &data.FieldConfig{DisplayNameFromDS: name} |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[col]]", Measurement: "10m"} |
|
|
|
query = models.Query{Alias: "alias [[col]]", Measurement: "10m"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias mean" |
|
|
|
name = "alias mean" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $0 $1 $2 $3 $4"} |
|
|
|
query = models.Query{Alias: "alias $0 $1 $2 $3 $4"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias cpu upc $2 $3 $4" |
|
|
|
name = "alias cpu upc $2 $3 $4" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $0, $1 - $2 - $3, $4: something"} |
|
|
|
query = models.Query{Alias: "alias $0, $1 - $2 - $3, $4: something"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias cpu, upc - $2 - $3, $4: something" |
|
|
|
name = "alias cpu, upc - $2 - $3, $4: something" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $1"} |
|
|
|
query = models.Query{Alias: "alias $1"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias upc" |
|
|
|
name = "alias upc" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias $5"} |
|
|
|
query = models.Query{Alias: "alias $5"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias $5" |
|
|
|
name = "alias $5" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "series alias"} |
|
|
|
query = models.Query{Alias: "series alias"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "series alias" |
|
|
|
name = "series alias" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[m]] [[measurement]]", Measurement: "10m"} |
|
|
|
query = models.Query{Alias: "alias [[m]] [[measurement]]", Measurement: "10m"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias 10m 10m" |
|
|
|
name = "alias 10m 10m" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[tag_datacenter]]"} |
|
|
|
query = models.Query{Alias: "alias [[tag_datacenter]]"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias America" |
|
|
|
name = "alias America" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[tag_dc.region.name]]"} |
|
|
|
query = models.Query{Alias: "alias [[tag_dc.region.name]]"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias Northeast" |
|
|
|
name = "alias Northeast" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[tag_cluster-name]]"} |
|
|
|
query = models.Query{Alias: "alias [[tag_cluster-name]]"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias Cluster" |
|
|
|
name = "alias Cluster" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[tag_/cluster/name/]]"} |
|
|
|
query = models.Query{Alias: "alias [[tag_/cluster/name/]]"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias Cluster/" |
|
|
|
name = "alias Cluster/" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias [[tag_@cluster@name@]]"} |
|
|
|
query = models.Query{Alias: "alias [[tag_@cluster@name@]]"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias Cluster@" |
|
|
|
name = "alias Cluster@" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
t.Run("shouldn't parse aliases", func(t *testing.T) { |
|
|
|
t.Run("shouldn't parse aliases", func(t *testing.T) { |
|
|
|
query = &Query{Alias: "alias words with no brackets"} |
|
|
|
query = models.Query{Alias: "alias words with no brackets"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame := result.Responses["A"] |
|
|
|
|
|
|
|
name := "alias words with no brackets" |
|
|
|
name := "alias words with no brackets" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias Test 1.5"} |
|
|
|
query = models.Query{Alias: "alias Test 1.5"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias Test 1.5" |
|
|
|
name = "alias Test 1.5" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = &Query{Alias: "alias Test -1"} |
|
|
|
query = models.Query{Alias: "alias Test -1"} |
|
|
|
result = parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result = ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
frame = result.Responses["A"] |
|
|
|
|
|
|
|
name = "alias Test -1" |
|
|
|
name = "alias Test -1" |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Name = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
testFrame.Fields[1].Config.DisplayNameFromDS = name |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(testFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser with errors", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser with errors", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
|
{ |
|
|
|
|
|
|
|
"series": [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"name": "cpu", |
|
|
|
|
|
|
|
"columns": ["time","mean","sum"], |
|
|
|
|
|
|
|
"tags": {"datacenter": "America"}, |
|
|
|
|
|
|
|
"values": [ |
|
|
|
|
|
|
|
[111,222,333], |
|
|
|
|
|
|
|
[111,222,333], |
|
|
|
|
|
|
|
[111,null,333] |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
"error": "query-timeout limit exceeded" |
|
|
|
"error": "query-timeout limit exceeded" |
|
|
|
} |
|
|
|
} |
|
|
@ -656,11 +570,7 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
var queries = addQueryToQueries(*query) |
|
|
|
|
|
|
|
queryB := &Query{} |
|
|
|
|
|
|
|
queryB.RefID = "B" |
|
|
|
|
|
|
|
queries = append(queries, *queryB) |
|
|
|
|
|
|
|
labels, err := data.LabelsFromString("datacenter=America") |
|
|
|
labels, err := data.LabelsFromString("datacenter=America") |
|
|
|
require.Nil(t, err) |
|
|
|
require.Nil(t, err) |
|
|
|
newField := data.NewField("Value", labels, []*float64{ |
|
|
|
newField := data.NewField("Value", labels, []*float64{ |
|
|
@ -677,32 +587,25 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
newField, |
|
|
|
newField, |
|
|
|
) |
|
|
|
) |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
result := parser.Parse(prepare(response), 200, queries) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["A"] |
|
|
|
require.EqualError(t, result.Error, "query-timeout limit exceeded") |
|
|
|
if diff := cmp.Diff(testFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require.EqualError(t, result.Responses["B"].Error, "query-timeout limit exceeded") |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser with top-level error", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser with top-level error", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"error": "error parsing query: found THING" |
|
|
|
"error": "error parsing query: found THING" |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
query := &Query{} |
|
|
|
query := models.Query{} |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, addQueryToQueries(*query)) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
require.Nil(t, result.Responses["A"].Frames) |
|
|
|
require.Nil(t, result.Frames) |
|
|
|
|
|
|
|
|
|
|
|
require.EqualError(t, result.Responses["A"].Error, "error parsing query: found THING") |
|
|
|
require.EqualError(t, result.Error, "error parsing query: found THING") |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
t.Run("Influxdb response parser parseNumber nil", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser parseNumber nil", func(t *testing.T) { |
|
|
@ -736,8 +639,6 @@ func TestInfluxdbResponseParser(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
func TestResponseParser_Parse_RetentionPolicy(t *testing.T) { |
|
|
|
func TestResponseParser_Parse_RetentionPolicy(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should parse metricFindQueries->SHOW RETENTION POLICIES normally", func(t *testing.T) { |
|
|
|
t.Run("Influxdb response parser should parse metricFindQueries->SHOW RETENTION POLICIES normally", func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response := ` |
|
|
|
response := ` |
|
|
|
{ |
|
|
|
{ |
|
|
|
"results": [ |
|
|
|
"results": [ |
|
|
@ -789,18 +690,16 @@ func TestResponseParser_Parse_RetentionPolicy(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
` |
|
|
|
` |
|
|
|
|
|
|
|
|
|
|
|
var queries []Query |
|
|
|
query := models.Query{RefID: "metricFindQuery", RawQuery: "SHOW RETENTION POLICIES"} |
|
|
|
queries = append(queries, Query{RefID: "metricFindQuery", RawQuery: "SHOW RETENTION POLICIES"}) |
|
|
|
|
|
|
|
policyFrame := data.NewFrame("", |
|
|
|
policyFrame := data.NewFrame("", |
|
|
|
data.NewField("Value", nil, []string{ |
|
|
|
data.NewField("Value", nil, []string{ |
|
|
|
"bar", "autogen", "5m_avg", "1m_avg", |
|
|
|
"bar", "autogen", "5m_avg", "1m_avg", |
|
|
|
}), |
|
|
|
}), |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
result := parser.Parse(prepare(response), 200, queries) |
|
|
|
result := ResponseParse(prepare(response), 200, generateQuery(query)) |
|
|
|
|
|
|
|
|
|
|
|
frame := result.Responses["metricFindQuery"] |
|
|
|
if diff := cmp.Diff(policyFrame, result.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
if diff := cmp.Diff(policyFrame, frame.Frames[0], data.FrameTestCompareOptions()...); diff != "" { |
|
|
|
|
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
t.Errorf("Result mismatch (-want +got):\n%s", diff) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
@ -810,7 +709,7 @@ func TestResponseParser_Parse(t *testing.T) { |
|
|
|
tests := []struct { |
|
|
|
tests := []struct { |
|
|
|
name string |
|
|
|
name string |
|
|
|
input string |
|
|
|
input string |
|
|
|
f func(t *testing.T, got *backend.QueryDataResponse) |
|
|
|
f func(t *testing.T, got backend.DataResponse) |
|
|
|
}{ |
|
|
|
}{ |
|
|
|
{ |
|
|
|
{ |
|
|
|
name: "Influxdb response parser with valid value when null values returned", |
|
|
|
name: "Influxdb response parser with valid value when null values returned", |
|
|
@ -823,7 +722,7 @@ func TestResponseParser_Parse(t *testing.T) { |
|
|
|
[102,52] |
|
|
|
[102,52] |
|
|
|
] |
|
|
|
] |
|
|
|
}]}]}`, |
|
|
|
}]}]}`, |
|
|
|
f: func(t *testing.T, got *backend.QueryDataResponse) { |
|
|
|
f: func(t *testing.T, got backend.DataResponse) { |
|
|
|
newField := data.NewField("Value", nil, []*float64{nil, nil, util.Pointer(52.0)}) |
|
|
|
newField := data.NewField("Value", nil, []*float64{nil, nil, util.Pointer(52.0)}) |
|
|
|
newField.Config = &data.FieldConfig{DisplayNameFromDS: "cpu.mean"} |
|
|
|
newField.Config = &data.FieldConfig{DisplayNameFromDS: "cpu.mean"} |
|
|
|
testFrame := data.NewFrame("cpu.mean", |
|
|
|
testFrame := data.NewFrame("cpu.mean", |
|
|
@ -836,7 +735,7 @@ func TestResponseParser_Parse(t *testing.T) { |
|
|
|
newField, |
|
|
|
newField, |
|
|
|
) |
|
|
|
) |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
assert.Equal(t, testFrame, got.Responses["A"].Frames[0]) |
|
|
|
assert.Equal(t, testFrame, got.Frames[0]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
@ -850,7 +749,7 @@ func TestResponseParser_Parse(t *testing.T) { |
|
|
|
[102,null] |
|
|
|
[102,null] |
|
|
|
] |
|
|
|
] |
|
|
|
}]}]}`, |
|
|
|
}]}]}`, |
|
|
|
f: func(t *testing.T, got *backend.QueryDataResponse) { |
|
|
|
f: func(t *testing.T, got backend.DataResponse) { |
|
|
|
newField := data.NewField("Value", nil, []*float64{nil, nil, nil}) |
|
|
|
newField := data.NewField("Value", nil, []*float64{nil, nil, nil}) |
|
|
|
newField.Config = &data.FieldConfig{DisplayNameFromDS: "cpu.mean"} |
|
|
|
newField.Config = &data.FieldConfig{DisplayNameFromDS: "cpu.mean"} |
|
|
|
testFrame := data.NewFrame("cpu.mean", |
|
|
|
testFrame := data.NewFrame("cpu.mean", |
|
|
@ -863,17 +762,16 @@ func TestResponseParser_Parse(t *testing.T) { |
|
|
|
newField, |
|
|
|
newField, |
|
|
|
) |
|
|
|
) |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
testFrame.Meta = &data.FrameMeta{ExecutedQueryString: "Test raw query"} |
|
|
|
assert.Equal(t, testFrame, got.Responses["A"].Frames[0]) |
|
|
|
assert.Equal(t, testFrame, got.Frames[0]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
for _, tt := range tests { |
|
|
|
for _, tt := range tests { |
|
|
|
t.Run(tt.name, func(t *testing.T) { |
|
|
|
t.Run(tt.name, func(t *testing.T) { |
|
|
|
parser := &ResponseParser{} |
|
|
|
got := ResponseParse(prepare(tt.input), 200, generateQuery(models.Query{})) |
|
|
|
got := parser.Parse(prepare(tt.input), 200, addQueryToQueries(Query{})) |
|
|
|
|
|
|
|
require.NotNil(t, got) |
|
|
|
require.NotNil(t, got) |
|
|
|
if tt.f != nil { |
|
|
|
if tt.f != nil { |
|
|
|
tt.f(t, got) |
|
|
|
tt.f(t, *got) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |