Skip to content

Commit

Permalink
Refactoring error handling (#85)
Browse files Browse the repository at this point in the history
* Fix linting

* Update error handling & messages
  • Loading branch information
radulucut authored Jan 12, 2024
1 parent 1f1cadb commit b042a59
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 47 deletions.
20 changes: 10 additions & 10 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ func PostAPI(measurement model.PostMeasurement) (model.PostResponse, bool, error
// Format post data
postData, err := json.Marshal(measurement)
if err != nil {
return model.PostResponse{}, false, errors.New("err: failed to marshal post data - please report this bug")
return model.PostResponse{}, false, errors.New("failed to marshal post data - please report this bug")
}

// Create a new request
req, err := http.NewRequest("POST", ApiUrl, bytes.NewBuffer(postData))
if err != nil {
return model.PostResponse{}, false, errors.New("err: failed to create request - please report this bug")
return model.PostResponse{}, false, errors.New("failed to create request - please report this bug")
}
req.Header.Set("User-Agent", userAgent())
req.Header.Set("Accept-Encoding", "br")
Expand All @@ -35,7 +35,7 @@ func PostAPI(measurement model.PostMeasurement) (model.PostResponse, bool, error
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return model.PostResponse{}, false, errors.New("err: request failed - please try again later")
return model.PostResponse{}, false, errors.New("request failed - please try again later")
}
defer resp.Body.Close()

Expand All @@ -46,7 +46,7 @@ func PostAPI(measurement model.PostMeasurement) (model.PostResponse, bool, error

err = json.NewDecoder(resp.Body).Decode(&data)
if err != nil {
return model.PostResponse{}, false, errors.New("err: invalid error format returned - please report this bug")
return model.PostResponse{}, false, errors.New("invalid error format returned - please report this bug")
}

// 422 error
Expand All @@ -56,19 +56,20 @@ func PostAPI(measurement model.PostMeasurement) (model.PostResponse, bool, error

// 400 error
if data.Error.Type == "validation_error" {
resErr := ""
for _, v := range data.Error.Params {
fmt.Printf("err: %s\n", v)
resErr += fmt.Sprintf(" - %s\n", v)
}
return model.PostResponse{}, true, errors.New("invalid parameters - please check the help for more information")
return model.PostResponse{}, true, fmt.Errorf("invalid parameters\n%sPlease check the help for more information", resErr)
}

// 500 error
if data.Error.Type == "api_error" {
return model.PostResponse{}, false, errors.New("err: internal server error - please try again later")
return model.PostResponse{}, false, errors.New("internal server error - please try again later")
}

// If the error type is unknown
return model.PostResponse{}, false, fmt.Errorf("err: unknown error response: %s", data.Error.Type)
return model.PostResponse{}, false, fmt.Errorf("unknown error response: %s", data.Error.Type)
}

// Read the response body
Expand All @@ -81,8 +82,7 @@ func PostAPI(measurement model.PostMeasurement) (model.PostResponse, bool, error
var data model.PostResponse
err = json.NewDecoder(bodyReader).Decode(&data)
if err != nil {
fmt.Println(err)
return model.PostResponse{}, false, errors.New("err: invalid post measurement format returned - please report this bug")
return model.PostResponse{}, false, fmt.Errorf("invalid post measurement format returned - please report this bug: %s", err)
}

return data, false, nil
Expand Down
7 changes: 5 additions & 2 deletions client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,10 @@ func testPostValidation(t *testing.T) {
client.ApiUrl = server.URL

_, showHelp, err := client.PostAPI(opts)
assert.EqualError(t, err, "invalid parameters - please check the help for more information")
assert.EqualError(t, err, `invalid parameters
- "measurement" does not match any of the allowed types
- "target" does not match any of the allowed types
Please check the help for more information`)
assert.True(t, showHelp)
}

Expand All @@ -111,7 +114,7 @@ func testPostInternalError(t *testing.T) {
client.ApiUrl = server.URL

_, showHelp, err := client.PostAPI(opts)
assert.EqualError(t, err, "err: internal server error - please try again later")
assert.EqualError(t, err, "internal server error - please try again later")
assert.False(t, showHelp)
}

Expand Down
20 changes: 10 additions & 10 deletions cmd/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func testLocationsMultipleWhitespace(t *testing.T) {
}

func testCreateLocationsSessionLastMeasurement(t *testing.T) {
saveMeasurementID(measurementID1)
_ = saveMeasurementID(measurementID1)
locations, isPreviousMeasurementId, err := createLocations("@1")
assert.Equal(t, []model.Locations{{Magic: measurementID1}}, locations)
assert.True(t, isPreviousMeasurementId)
Expand All @@ -92,8 +92,8 @@ func testCreateLocationsSessionLastMeasurement(t *testing.T) {
}

func testCreateLocationsSessionFirstMeasurement(t *testing.T) {
saveMeasurementID(measurementID1)
saveMeasurementID(measurementID2)
_ = saveMeasurementID(measurementID1)
_ = saveMeasurementID(measurementID2)
locations, isPreviousMeasurementId, err := createLocations("@-1")
assert.Equal(t, []model.Locations{{Magic: measurementID2}}, locations)
assert.True(t, isPreviousMeasurementId)
Expand All @@ -106,10 +106,10 @@ func testCreateLocationsSessionFirstMeasurement(t *testing.T) {
}

func testCreateLocationsSessionMeasurementAtIndex(t *testing.T) {
saveMeasurementID(measurementID1)
saveMeasurementID(measurementID2)
saveMeasurementID(measurementID3)
saveMeasurementID(measurementID4)
_ = saveMeasurementID(measurementID1)
_ = saveMeasurementID(measurementID2)
_ = saveMeasurementID(measurementID3)
_ = saveMeasurementID(measurementID4)
locations, isPreviousMeasurementId, err := createLocations("@2")
assert.Equal(t, []model.Locations{{Magic: measurementID2}}, locations)
assert.True(t, isPreviousMeasurementId)
Expand Down Expand Up @@ -149,7 +149,7 @@ func testCreateLocationsSessionInvalidIndex(t *testing.T) {
assert.False(t, isPreviousMeasurementId)
assert.Equal(t, ErrInvalidIndex, err)

saveMeasurementID(measurementID1)
_ = saveMeasurementID(measurementID1)
locations, isPreviousMeasurementId, err = createLocations("@2")
assert.Nil(t, locations)
assert.False(t, isPreviousMeasurementId)
Expand Down Expand Up @@ -180,7 +180,7 @@ func TestSaveMeasurementID(t *testing.T) {
}

func testSaveMeasurementIDNewSession(t *testing.T) {
saveMeasurementID(measurementID1)
_ = saveMeasurementID(measurementID1)
assert.FileExists(t, getMeasurementsPath())
b, err := os.ReadFile(getMeasurementsPath())
assert.NoError(t, err)
Expand All @@ -197,7 +197,7 @@ func testSaveMeasurementIDExistingSession(t *testing.T) {
if err != nil {
t.Fatalf("Failed to create measurements file: %s", err)
}
saveMeasurementID(measurementID2)
_ = saveMeasurementID(measurementID2)
b, err := os.ReadFile(getMeasurementsPath())
assert.NoError(t, err)
expected := []byte(measurementID1 + "\n" + measurementID2 + "\n")
Expand Down
9 changes: 4 additions & 5 deletions cmd/dns.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,18 +85,17 @@ Using the dig format @resolver. For example:

res, showHelp, err := client.PostAPI(opts)
if err != nil {
if showHelp {
return err
if !showHelp {
cmd.SilenceUsage = true
}
fmt.Println(err)
return nil
return err
}

// Save measurement ID to history
if !isPreviousMeasurementId {
err := saveMeasurementID(res.ID)
if err != nil {
fmt.Printf("warning: %s\n", err)
fmt.Printf("Warning: %s\n", err)
}
}

Expand Down
9 changes: 4 additions & 5 deletions cmd/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,18 +155,17 @@ func httpCmdRun(cmd *cobra.Command, args []string) error {

res, showHelp, err := client.PostAPI(*opts)
if err != nil {
if showHelp {
return err
if !showHelp {
cmd.SilenceUsage = true
}
fmt.Println(err)
return nil
return err
}

// Save measurement ID to history
if !isPreviousMeasurementId {
err := saveMeasurementID(res.ID)
if err != nil {
fmt.Printf("warning: %s\n", err)
fmt.Printf("Warning: %s\n", err)
}
}

Expand Down
9 changes: 4 additions & 5 deletions cmd/mtr.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,18 +72,17 @@ Examples:

res, showHelp, err := client.PostAPI(opts)
if err != nil {
if showHelp {
return err
if !showHelp {
cmd.SilenceUsage = true
}
fmt.Println(err)
return nil
return err
}

// Save measurement ID to history
if !isPreviousMeasurementId {
err := saveMeasurementID(res.ID)
if err != nil {
fmt.Printf("warning: %s\n", err)
fmt.Printf("Warning: %s\n", err)
}
}

Expand Down
9 changes: 4 additions & 5 deletions cmd/ping.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,17 @@ Examples:

res, showHelp, err := client.PostAPI(opts)
if err != nil {
if showHelp {
return err
if !showHelp {
cmd.SilenceUsage = true
}
fmt.Println(err)
return nil
return err
}

// Save measurement ID to history
if !isPreviousMeasurementId {
err := saveMeasurementID(res.ID)
if err != nil {
fmt.Printf("warning: %s\n", err)
fmt.Printf("Warning: %s\n", err)
}
}

Expand Down
9 changes: 4 additions & 5 deletions cmd/traceroute.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,18 +74,17 @@ Examples:

res, showHelp, err := client.PostAPI(opts)
if err != nil {
if showHelp {
return err
if !showHelp {
cmd.SilenceUsage = true
}
fmt.Println(err)
return nil
return err
}

// Save measurement ID to history
if !isPreviousMeasurementId {
err := saveMeasurementID(res.ID)
if err != nil {
fmt.Printf("warning: %s\n", err)
fmt.Printf("Warning: %s\n", err)
}
}

Expand Down

0 comments on commit b042a59

Please sign in to comment.