Skip to content

Commit

Permalink
fix: handle http response code 4XX/5XX as errors (datreeio#756)
Browse files Browse the repository at this point in the history
* fix: handle http response code 4XX/5XX as errors

* fix: add http and network errors to IsNetworkError
  • Loading branch information
myishay committed Aug 9, 2022
1 parent 8cfc3a1 commit 59906e9
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 29 deletions.
4 changes: 2 additions & 2 deletions pkg/cliClient/cliClient_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ func test_requestEvaluationPrerunData_network_error(offlineMode string, expected
}{
status: http.StatusInternalServerError,
body: nil,
error: errors.New("network error"),
error: errors.New("http error"),
},
},
expected: struct {
Expand Down Expand Up @@ -678,7 +678,7 @@ func test_sendEvaluationResult_network_error(offlineMode string, expectedRespons
}{
status: http.StatusInternalServerError,
body: nil,
error: errors.New("network error"),
error: errors.New("http error"),
},
},
expected: struct {
Expand Down
32 changes: 7 additions & 25 deletions pkg/httpClient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,45 +60,27 @@ func (c *Client) Request(method string, resourceURI string, body interface{}, he
}

response, err := c.httpClient.Do(request)
if response != nil {
responseBody.StatusCode = response.StatusCode
}

if err != nil {
return responseBody, err
}

defer response.Body.Close()

b, err := io.ReadAll(response.Body)
responseBody.Body = b

if err != nil {
return responseBody, err
}

if response.StatusCode > 500 {
responseBody.StatusCode = response.StatusCode
return responseBody, fmt.Errorf("network error")
}

if response.StatusCode > 399 {
var errorJson map[string]interface{}
err = json.Unmarshal(b, &errorJson)
if err != nil {
return responseBody, err
}

responseBody = Response{
StatusCode: response.StatusCode,
Body: b,
}

return responseBody, fmt.Errorf(fmt.Sprintf("%v", errorJson["message"]))
}

if err != nil {
return responseBody, err
return responseBody, fmt.Errorf("http error: %s", string(b))
}

responseBody = Response{
StatusCode: response.StatusCode,
Body: b,
}
return responseBody, nil
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/networkValidator/validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func TestNetworkValidatorOtherError(t *testing.T) {

func test_identifyNetworkError_network_error(validator *NetworkValidator, offlineMode string) error {
validator.SetOfflineMode(offlineMode)
return validator.IdentifyNetworkError(errors.New("network error"))
return validator.IdentifyNetworkError(errors.New("http error"))
}

func test_identifyNoInternet_noSuchHost_network_error(validator *NetworkValidator, offlineMode string) error {
Expand Down
2 changes: 1 addition & 1 deletion pkg/utils/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func ParseErrorToString(err interface{}) string {
}

func IsNetworkError(err error) bool {
networkErrors := []string{"network error", "connection refused", "no such host", "i/o timeout", "server misbehaving"}
networkErrors := []string{"network error", "connection refused", "no such host", "i/o timeout", "server misbehaving", "http error"}
return stringInSliceContains(err.Error(), networkErrors) || isUrlErrorType(err)
}

Expand Down

0 comments on commit 59906e9

Please sign in to comment.