From 26466074973b247fd6b5a08670d5c0ed137147c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kenan=20Faruk=20=C3=87ak=C4=B1r?= Date: Tue, 18 Apr 2023 18:02:35 +0300 Subject: [PATCH] wrap csv error --- core/scenario/testdata/csv.go | 22 +++++++++++----------- core/scenario/testdata/csv_test.go | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/core/scenario/testdata/csv.go b/core/scenario/testdata/csv.go index f85bc1c5..17515d9f 100644 --- a/core/scenario/testdata/csv.go +++ b/core/scenario/testdata/csv.go @@ -42,24 +42,18 @@ func ReadCsv(conf types.CsvConf) ([]map[string]interface{}, error) { var reader io.Reader var pUrl *url.URL - var csvReqError RemoteCsvError if pUrl, err = url.ParseRequestURI(conf.Path); err == nil && pUrl.IsAbs() { // url req, err := http.NewRequest(http.MethodGet, conf.Path, nil) if err != nil { - csvReqError.msg = "can not create request" - csvReqError.wrappedErr = err - return nil, csvReqError + return nil, wrapAsCsvError("can not create request", err) } resp, err := http.DefaultClient.Do(req) if err != nil { - csvReqError.msg = "can not send request" - csvReqError.wrappedErr = err - return nil, csvReqError + return nil, wrapAsCsvError("can not get response", err) } if !(resp.StatusCode >= 200 && resp.StatusCode <= 299) { - csvReqError.msg = fmt.Sprintf("request to remote url failed: %d", resp.StatusCode) - return nil, csvReqError + return nil, wrapAsCsvError(fmt.Sprintf("request to remote url failed: %d", resp.StatusCode), nil) } reader = resp.Body defer resp.Body.Close() @@ -71,8 +65,7 @@ func ReadCsv(conf types.CsvConf) ([]map[string]interface{}, error) { reader = f defer f.Close() } else { - csvReqError.msg = fmt.Sprintf("can not parse path: %s", conf.Path) - return nil, csvReqError + return nil, wrapAsCsvError(fmt.Sprintf("can not parse path: %s", conf.Path), err) } // read csv values using csv.Reader @@ -152,3 +145,10 @@ func emptyLine(row []string) bool { } return true } + +func wrapAsCsvError(msg string, err error) RemoteCsvError { + var csvReqError RemoteCsvError + csvReqError.msg = msg + csvReqError.wrappedErr = err + return csvReqError +} diff --git a/core/scenario/testdata/csv_test.go b/core/scenario/testdata/csv_test.go index 94708fdd..ffa0946f 100644 --- a/core/scenario/testdata/csv_test.go +++ b/core/scenario/testdata/csv_test.go @@ -58,6 +58,25 @@ func TestReadCsv_RemoteErr(t *testing.T) { if !errors.As(err, &remoteCsvErr) { t.Errorf("Expected: %v, Found: %v", remoteCsvErr, err) } + if remoteCsvErr.Error() != "can not get response" { + t.Errorf("Expected: %v, Found: %v", "can not get response", remoteCsvErr.msg) + } + if remoteCsvErr.Unwrap() == nil { + t.Errorf("Expected: %v, Found: %v", "not nil", remoteCsvErr.Unwrap()) + } +} + +func TestWrapAsRemoteCsvError(t *testing.T) { + msg := "xxyy" + csvErr := wrapAsCsvError(msg, fmt.Errorf("error")) + + var remoteCsvErr RemoteCsvError + if !errors.As(csvErr, &remoteCsvErr) { + t.Errorf("Expected: %v, Found: %v", remoteCsvErr, csvErr) + } + if remoteCsvErr.Error() != msg { + t.Errorf("Expected: %v, Found: %v", msg, remoteCsvErr.msg) + } } func TestReadCsv(t *testing.T) {