diff --git a/pkg/tsdb/elasticsearch/response_bench_test.go b/pkg/tsdb/elasticsearch/response_bench_test.go new file mode 100644 index 00000000000..e5ffd1ae57f --- /dev/null +++ b/pkg/tsdb/elasticsearch/response_bench_test.go @@ -0,0 +1,91 @@ +package elasticsearch + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +// To avoid compiler optimizations eliminating the function under test +// we are storing the result to a package level variable +var Result queryDataTestResult + +func BenchmarkSimpleMetricResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("metric_simple") + responseBytes := getResponseBytesFromTestsDataFile("metric_simple") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkComplexMetricResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("metric_complex") + responseBytes := getResponseBytesFromTestsDataFile("metric_complex") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkMultiMetricResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("metric_multi") + responseBytes := getResponseBytesFromTestsDataFile("metric_multi") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkRawDataResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("raw_data") + responseBytes := getResponseBytesFromTestsDataFile("raw_data") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkRawDocumentResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("raw_document") + responseBytes := getResponseBytesFromTestsDataFile("raw_document") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkLogsResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("logs") + responseBytes := getResponseBytesFromTestsDataFile("logs") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func getQueriesBytesFromTestsDataFile(fileName string) []byte { + queriesName := filepath.Join("testdata_response", fileName+".queries.json") + queriesBytes, _ := os.ReadFile(filepath.Clean(queriesName)) + return queriesBytes +} + +func getResponseBytesFromTestsDataFile(fileName string) []byte { + responseName := filepath.Join("testdata_response", fileName+".response.json") + responseBytes, _ := os.ReadFile(filepath.Clean(responseName)) + return responseBytes +}