c088d003f2
* Have the first iteration * Prepare bench testing * rename the test files * Remove unnecessary test file * Introduce influxqlStreamingParser feature flag * Apply streaming parser feature flag * Add new tests * More tests * return executedQueryString only in first frame * add frame meta and config * Update golden json files * Support tags/labels * more tests * more tests * Don't change original response_parser.go * provide context * create util package * don't pass the row * update converter with formatted frameName * add executedQueryString info only to first frame * update golden files * rename * update test file * use pointer values * update testdata * update parsing * update converter for null values * prepare converter for table response * clean up * return timeField in fields * handle no time column responses * better nil field handling * refactor the code * add table tests * fix config for table * table response format * fix value * if there is no time column set name * linting * refactoring * handle the status code * add tracing * Update pkg/tsdb/influxdb/influxql/converter/converter_test.go Co-authored-by: İnanç Gümüş <m@inanc.io> * fix import * update test data * sanity * sanity * linting * simplicity * return empty rsp * rename to prevent confusion * nullableJson field type for null values * better handling null values * remove duplicate test file * fix healthcheck * use util for pointer * move bench test to root * provide fake feature manager * add more tests * partial fix for null values in table response format * handle partial null fields * comments for easy testing * move frameName allocation in readSeries * one less append operation * performance improvement by making string conversion once pkg: github.com/grafana/grafana/pkg/tsdb/influxdb/influxql │ stream2.txt │ stream3.txt │ │ sec/op │ sec/op vs base │ ParseJson-10 314.4m ± 1% 303.9m ± 1% -3.34% (p=0.000 n=10) │ stream2.txt │ stream3.txt │ │ B/op │ B/op vs base │ ParseJson-10 425.2Mi ± 0% 382.7Mi ± 0% -10.00% (p=0.000 n=10) │ stream2.txt │ stream3.txt │ │ allocs/op │ allocs/op vs base │ ParseJson-10 7.224M ± 0% 6.689M ± 0% -7.41% (p=0.000 n=10) * add comment lines --------- Co-authored-by: İnanç Gümüş <m@inanc.io>
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package querydata
|
|
|
|
import (
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana-plugin-sdk-go/experimental"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/grafana/grafana/pkg/tsdb/influxdb/models"
|
|
)
|
|
|
|
const (
|
|
shouldUpdate = false
|
|
testPath = "../testdata"
|
|
)
|
|
|
|
var testFiles = []string{
|
|
"all_values_are_null",
|
|
"influx_select_all_from_cpu",
|
|
"one_measurement_with_two_columns",
|
|
"response_with_weird_tag",
|
|
"some_values_are_null",
|
|
"simple_response",
|
|
"multiple_series_with_tags_and_multiple_columns",
|
|
"multiple_series_with_tags",
|
|
"empty_response",
|
|
"metric_find_queries",
|
|
"show_tag_values_response",
|
|
"retention_policy",
|
|
"simple_response_with_diverse_data_types",
|
|
"multiple_measurements",
|
|
"string_column_with_null_value",
|
|
"string_column_with_null_value2",
|
|
"many_columns",
|
|
"response_with_nil_bools_and_nil_strings",
|
|
"invalid_value_format",
|
|
}
|
|
|
|
func TestReadInfluxAsTimeSeries(t *testing.T) {
|
|
for _, f := range testFiles {
|
|
t.Run(f, runScenario(f, "time_series"))
|
|
}
|
|
}
|
|
|
|
func TestReadInfluxAsTable(t *testing.T) {
|
|
for _, f := range testFiles {
|
|
t.Run(f, runScenario(f, "table"))
|
|
}
|
|
}
|
|
|
|
func runScenario(tf string, resultFormat string) func(t *testing.T) {
|
|
return func(t *testing.T) {
|
|
f, err := os.Open(path.Join(testPath, filepath.Clean(tf+".json")))
|
|
require.NoError(t, err)
|
|
|
|
var rsp *backend.DataResponse
|
|
|
|
query := &models.Query{
|
|
RawQuery: "Test raw query",
|
|
UseRawQuery: true,
|
|
ResultFormat: resultFormat,
|
|
}
|
|
|
|
rsp = ResponseParse(f, 200, query)
|
|
|
|
if strings.Contains(tf, "error") {
|
|
require.Error(t, rsp.Error)
|
|
return
|
|
}
|
|
require.NoError(t, rsp.Error)
|
|
|
|
fname := tf + "." + resultFormat + ".golden"
|
|
experimental.CheckGoldenJSONResponse(t, testPath, fname, rsp, shouldUpdate)
|
|
}
|
|
}
|