diff --git a/internal/benchrunner/runners/rally/runner.go b/internal/benchrunner/runners/rally/runner.go index 66550389ae..4ea059acca 100644 --- a/internal/benchrunner/runners/rally/runner.go +++ b/internal/benchrunner/runners/rally/runner.go @@ -924,17 +924,21 @@ func (r *runner) runRally(ctx context.Context) ([]rallyStat, error) { if err != nil { return nil, fmt.Errorf("could not open esrally report in path: %s: %w", r.svcInfo.Logs.Folder.Local, err) } + defer reportCSV.Close() - reader := csv.NewReader(reportCSV) + return parseRallyReport(reportCSV, r.svcInfo.Logs.Folder.Local, errOutput.String()) +} +func parseRallyReport(report io.Reader, logsPath string, stderr string) ([]rallyStat, error) { + reader := csv.NewReader(report) stats := make([]rallyStat, 0) for { - record, err := reader.Read() - if err == io.EOF { + record, readErr := reader.Read() + if readErr == io.EOF { break } - if err != nil { - return nil, fmt.Errorf("could not read esrally report in path: %s (stderr=%q): %w", r.svcInfo.Logs.Folder.Local, errOutput.String(), err) + if readErr != nil { + return nil, fmt.Errorf("could not read esrally report in path: %s (stderr=%q): %w", logsPath, stderr, readErr) } stats = append(stats, rallyStat{Metric: record[0], Task: record[1], Value: record[2], Unit: record[3]}) diff --git a/internal/benchrunner/runners/rally/runner_test.go b/internal/benchrunner/runners/rally/runner_test.go new file mode 100644 index 0000000000..7783c69885 --- /dev/null +++ b/internal/benchrunner/runners/rally/runner_test.go @@ -0,0 +1,24 @@ +package rally + +import ( + "strings" + "testing" +) + +func TestParseRallyReportReturnsStats(t *testing.T) { + stats, err := parseRallyReport(strings.NewReader("metric,task,value,unit\n"), "/tmp/rally", "") + if err != nil { + t.Fatalf("parseRallyReport returned error: %v", err) + } + if len(stats) != 1 { + t.Fatalf("expected 1 stat, got %d", len(stats)) + } + if stats[0] != (rallyStat{ + Metric: "metric", + Task: "task", + Value: "value", + Unit: "unit", + }) { + t.Fatalf("unexpected stat: %#v", stats[0]) + } +}