From 94ade19787b98d7a49cbf9191bd2b499d6c3dd68 Mon Sep 17 00:00:00 2001 From: Gregory Albouy Date: Fri, 28 Oct 2022 16:54:06 +0200 Subject: [PATCH 1/3] wip: get benchttp/sdk@v0.2 --- runner/go.mod | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runner/go.mod b/runner/go.mod index b666aea..2c0daec 100644 --- a/runner/go.mod +++ b/runner/go.mod @@ -2,9 +2,13 @@ module github.com/benchttp/desktop/runner go 1.17 -require github.com/benchttp/engine v0.1.1 +require ( + github.com/benchttp/sdk v0.1.1 +) require ( golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/benchttp/sdk => ../../engine From bb487b14f18f85e9faab43cfdbcf6bec82c19d5b Mon Sep 17 00:00:00 2001 From: Gregory Albouy Date: Fri, 28 Oct 2022 16:56:22 +0200 Subject: [PATCH 2/3] chore: adapt code to new API --- runner/httpclient/handle.go | 19 ++++++++++--------- runner/httpclient/response/progress.go | 4 ++-- runner/httpclient/response/report.go | 10 +++++----- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/runner/httpclient/handle.go b/runner/httpclient/handle.go index bdc0f7a..dfa20cd 100644 --- a/runner/httpclient/handle.go +++ b/runner/httpclient/handle.go @@ -7,8 +7,8 @@ import ( "net/http" "time" - "github.com/benchttp/engine/configparse" - "github.com/benchttp/engine/runner" + "github.com/benchttp/sdk/benchttp" + "github.com/benchttp/sdk/configparse" "github.com/benchttp/desktop/runner/httpclient/response" ) @@ -22,18 +22,19 @@ func handle(w http.ResponseWriter, r *http.Request) { return } - cfg, err := configparse.JSON(b) - if err != nil { + runner := benchttp.DefaultRunner() + runner.OnProgress = streamProgress(w) + if err := configparse.JSON(b, &runner); err != nil { clientError(w, err) return } - rep, err := runner.New(streamProgress(w)).Run(r.Context(), cfg) - var invalidConfigError *runner.InvalidConfigError + rep, err := runner.Run(r.Context()) + var invalidConfigError *benchttp.InvalidRunnerError switch { case err == nil: // Pass through. - case err == runner.ErrCanceled: + case err == benchttp.ErrCanceled: clientError(w, err) return case errors.As(err, &invalidConfigError): @@ -55,8 +56,8 @@ func handle(w http.ResponseWriter, r *http.Request) { } } -func streamProgress(w http.ResponseWriter) func(runner.RecordingProgress) { - return func(progress runner.RecordingProgress) { +func streamProgress(w http.ResponseWriter) func(benchttp.RecordingProgress) { + return func(progress benchttp.RecordingProgress) { if err := response.Progress(progress).EncodeJSON(w); err != nil { internalError(w, err) } diff --git a/runner/httpclient/response/progress.go b/runner/httpclient/response/progress.go index 7a3674b..be93ab5 100644 --- a/runner/httpclient/response/progress.go +++ b/runner/httpclient/response/progress.go @@ -3,10 +3,10 @@ package response import ( "time" - "github.com/benchttp/engine/runner" + "github.com/benchttp/sdk/benchttp" ) -func Progress(in runner.RecordingProgress) Response { +func Progress(in benchttp.RecordingProgress) Response { return newResponse(progressResponse{ Done: in.Done, Error: in.Error, diff --git a/runner/httpclient/response/report.go b/runner/httpclient/response/report.go index c4ba4aa..52a4c33 100644 --- a/runner/httpclient/response/report.go +++ b/runner/httpclient/response/report.go @@ -3,10 +3,10 @@ package response import ( "time" - "github.com/benchttp/engine/runner" + "github.com/benchttp/sdk/benchttp" ) -func Report(rep *runner.Report) Response { +func Report(rep *benchttp.Report) Response { return newResponse(reportResponse{ Metadata: metadataResponse{ FinishedAt: rep.Metadata.FinishedAt, @@ -87,7 +87,7 @@ type requestFailureResponse struct { Reason string `json:"reason"` } -func toTestResultsResponse(testResults []runner.TestCaseResult) []testResultResponse { +func toTestResultsResponse(testResults []benchttp.TestCaseResult) []testResultResponse { resp := make([]testResultResponse, len(testResults)) for i, r := range testResults { resp[i] = testResultResponse{ @@ -104,7 +104,7 @@ func toTestResultsResponse(testResults []runner.TestCaseResult) []testResultResp return resp } -func toTimeStatsResponse(stats runner.MetricsTimeStats) timeStatsResponse { +func toTimeStatsResponse(stats benchttp.MetricsTimeStats) timeStatsResponse { return timeStatsResponse{ Min: stats.Min, Max: stats.Max, @@ -116,7 +116,7 @@ func toTimeStatsResponse(stats runner.MetricsTimeStats) timeStatsResponse { } } -func toRequestEventTimesResponse(in map[string]runner.MetricsTimeStats) map[string]timeStatsResponse { +func toRequestEventTimesResponse(in map[string]benchttp.MetricsTimeStats) map[string]timeStatsResponse { resp := map[string]timeStatsResponse{} for k, v := range in { resp[k] = toTimeStatsResponse(v) From e50bed9d9f1086661eda967188dcd56b1a0f6dae Mon Sep 17 00:00:00 2001 From: Gregory Albouy Date: Thu, 3 Nov 2022 08:37:21 +0100 Subject: [PATCH 3/3] chore: use configio.Decoder --- runner/httpclient/handle.go | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/runner/httpclient/handle.go b/runner/httpclient/handle.go index dfa20cd..eb5e1df 100644 --- a/runner/httpclient/handle.go +++ b/runner/httpclient/handle.go @@ -2,13 +2,12 @@ package httpclient import ( "errors" - "io" "log" "net/http" "time" "github.com/benchttp/sdk/benchttp" - "github.com/benchttp/sdk/configparse" + "github.com/benchttp/sdk/configio" "github.com/benchttp/desktop/runner/httpclient/response" ) @@ -16,29 +15,24 @@ import ( func handle(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") - b, err := io.ReadAll(r.Body) - if err != nil { - internalError(w, err) - return - } - runner := benchttp.DefaultRunner() runner.OnProgress = streamProgress(w) - if err := configparse.JSON(b, &runner); err != nil { + + if err := configio.NewJSONDecoder(r.Body).DecodeRunner(&runner); err != nil { clientError(w, err) return } - rep, err := runner.Run(r.Context()) - var invalidConfigError *benchttp.InvalidRunnerError + report, err := runner.Run(r.Context()) + var errInvalidRunner *benchttp.InvalidRunnerError switch { case err == nil: // Pass through. case err == benchttp.ErrCanceled: clientError(w, err) return - case errors.As(err, &invalidConfigError): - clientError(w, invalidConfigError.Errors...) + case errors.As(err, &errInvalidRunner): + clientError(w, errInvalidRunner.Errors...) return default: internalError(w, err) @@ -50,7 +44,7 @@ func handle(w http.ResponseWriter, r *http.Request) { // The issue is likely on the read side (front-end), but this is // the easiest fix for now. time.Sleep(10 * time.Millisecond) - if err := response.Report(rep).EncodeJSON(w); err != nil { + if err := response.Report(report).EncodeJSON(w); err != nil { internalError(w, err) return }