From 6cbaa18cf64c38e289015259e09fe76857c3ebfe Mon Sep 17 00:00:00 2001 From: Todd Treece <360020+toddtreece@users.noreply.github.com> Date: Thu, 12 May 2022 11:09:58 -0400 Subject: [PATCH] Prometheus: Add golden JSON tests (#48941) --- pkg/tsdb/prometheus/buffered/framing_test.go | 20 +++- .../range_infinity.result.golden.json | 63 ++++++++++ .../testdata/range_missing.result.golden.json | 56 +++++++++ .../testdata/range_nan.result.golden.json | 56 +++++++++ .../testdata/range_simple.result.golden.json | 112 ++++++++++++++++++ 5 files changed, 305 insertions(+), 2 deletions(-) create mode 100644 pkg/tsdb/prometheus/testdata/range_infinity.result.golden.json create mode 100644 pkg/tsdb/prometheus/testdata/range_missing.result.golden.json create mode 100644 pkg/tsdb/prometheus/testdata/range_nan.result.golden.json create mode 100644 pkg/tsdb/prometheus/testdata/range_simple.result.golden.json diff --git a/pkg/tsdb/prometheus/buffered/framing_test.go b/pkg/tsdb/prometheus/buffered/framing_test.go index 1bc75c102c7..40a2ead8fb5 100644 --- a/pkg/tsdb/prometheus/buffered/framing_test.go +++ b/pkg/tsdb/prometheus/buffered/framing_test.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "io" + "io/ioutil" "net/http" "os" "path/filepath" @@ -22,6 +23,8 @@ import ( apiv1 "github.com/prometheus/client_golang/api/prometheus/v1" ) +var update = false + func TestMatrixResponses(t *testing.T) { tt := []struct { name string @@ -37,7 +40,7 @@ func TestMatrixResponses(t *testing.T) { t.Run(test.name, func(t *testing.T) { queryFileName := filepath.Join("../testdata", test.filepath+".query.json") responseFileName := filepath.Join("../testdata", test.filepath+".result.json") - goldenFileName := filepath.Join("../testdata", test.filepath+".result.golden.txt") + goldenFileName := filepath.Join("../testdata", test.filepath+".result.golden") query, err := loadStoredPrometheusQuery(queryFileName) require.NoError(t, err) @@ -52,7 +55,20 @@ func TestMatrixResponses(t *testing.T) { dr, found := result.Responses["A"] require.True(t, found) - require.NoError(t, experimental.CheckGoldenDataResponse(goldenFileName, &dr, true)) + actual, err := json.MarshalIndent(&dr, "", " ") + require.NoError(t, err) + + // nolint:gosec + // We can ignore the gosec G304 because this is a test with static defined paths + expected, err := ioutil.ReadFile(goldenFileName + ".json") + if err != nil || update { + err = os.WriteFile(goldenFileName+".json", actual, 0600) + require.NoError(t, err) + } + + require.JSONEq(t, string(expected), string(actual)) + + require.NoError(t, experimental.CheckGoldenDataResponse(goldenFileName+".txt", &dr, update)) }) } } diff --git a/pkg/tsdb/prometheus/testdata/range_infinity.result.golden.json b/pkg/tsdb/prometheus/testdata/range_infinity.result.golden.json new file mode 100644 index 00000000000..5327904e05b --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_infinity.result.golden.json @@ -0,0 +1,63 @@ +{ + "frames": [ + { + "schema": { + "name": "1 / 0", + "meta": { + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: 1 / 0\nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "Value", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + }, + "labels": {}, + "config": { + "displayNameFromDS": "1 / 0" + } + } + ] + }, + "data": { + "values": [ + [ + 1641889530000, + 1641889531000, + 1641889532000 + ], + [ + null, + null, + null + ] + ], + "entities": [ + null, + { + "Inf": [ + 0, + 1, + 2 + ] + } + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_missing.result.golden.json b/pkg/tsdb/prometheus/testdata/range_missing.result.golden.json new file mode 100644 index 00000000000..99155255d2c --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_missing.result.golden.json @@ -0,0 +1,56 @@ +{ + "frames": [ + { + "schema": { + "name": "go_goroutines{job=\"prometheus\"}", + "meta": { + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: test1\nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "Value", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + }, + "labels": { + "__name__": "go_goroutines", + "job": "prometheus" + }, + "config": { + "displayNameFromDS": "go_goroutines{job=\"prometheus\"}" + } + } + ] + }, + "data": { + "values": [ + [ + 1641889533000, + 1641889534000, + 1641889537000 + ], + [ + 21, + 32, + 43 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_nan.result.golden.json b/pkg/tsdb/prometheus/testdata/range_nan.result.golden.json new file mode 100644 index 00000000000..d33e61b5923 --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_nan.result.golden.json @@ -0,0 +1,56 @@ +{ + "frames": [ + { + "schema": { + "name": "{handler=\"/api/v1/query_range\", job=\"prometheus\"}", + "meta": { + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: \nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "Value", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + }, + "labels": { + "handler": "/api/v1/query_range", + "job": "prometheus" + }, + "config": { + "displayNameFromDS": "{handler=\"/api/v1/query_range\", job=\"prometheus\"}" + } + } + ] + }, + "data": { + "values": [ + [ + 1641889530000, + 1641889531000, + 1641889532000 + ], + [ + null, + null, + null + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_simple.result.golden.json b/pkg/tsdb/prometheus/testdata/range_simple.result.golden.json new file mode 100644 index 00000000000..462e1a46a4d --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_simple.result.golden.json @@ -0,0 +1,112 @@ +{ + "frames": [ + { + "schema": { + "name": "prometheus_http_requests_total{code=\"200\", handler=\"/api/v1/query_range\", job=\"prometheus\"}", + "meta": { + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: \nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "Value", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + }, + "labels": { + "__name__": "prometheus_http_requests_total", + "code": "200", + "handler": "/api/v1/query_range", + "job": "prometheus" + }, + "config": { + "displayNameFromDS": "prometheus_http_requests_total{code=\"200\", handler=\"/api/v1/query_range\", job=\"prometheus\"}" + } + } + ] + }, + "data": { + "values": [ + [ + 1641889530123, + 1641889531123, + 1641889532123 + ], + [ + 21, + 32, + 43 + ] + ] + } + }, + { + "schema": { + "name": "prometheus_http_requests_total{code=\"400\", handler=\"/api/v1/query_range\", job=\"prometheus\"}", + "meta": { + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: \nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "Value", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + }, + "labels": { + "__name__": "prometheus_http_requests_total", + "code": "400", + "handler": "/api/v1/query_range", + "job": "prometheus" + }, + "config": { + "displayNameFromDS": "prometheus_http_requests_total{code=\"400\", handler=\"/api/v1/query_range\", job=\"prometheus\"}" + } + } + ] + }, + "data": { + "values": [ + [ + 1641889530123, + 1641889531123, + 1641889532123 + ], + [ + 54, + 65, + 76 + ] + ] + } + } + ] +} \ No newline at end of file