diff --git a/changes/15916-client-errors b/changes/15916-client-errors new file mode 100644 index 0000000000..b8e55ddb1b --- /dev/null +++ b/changes/15916-client-errors @@ -0,0 +1 @@ +* improve the HTTP client used by `fleetctl` and `fleetd` to prevent errors for 204 responses. diff --git a/orbit/changes/15916-client-errors b/orbit/changes/15916-client-errors new file mode 100644 index 0000000000..b8e55ddb1b --- /dev/null +++ b/orbit/changes/15916-client-errors @@ -0,0 +1 @@ +* improve the HTTP client used by `fleetctl` and `fleetd` to prevent errors for 204 responses. diff --git a/server/service/base_client.go b/server/service/base_client.go index 0f9e82ce16..dc771b74a0 100644 --- a/server/service/base_client.go +++ b/server/service/base_client.go @@ -63,7 +63,7 @@ func (bc *baseClient) parseResponse(verb, path string, response *http.Response, bc.setServerCapabilities(response) - if responseDest != nil { + if responseDest != nil && response.StatusCode != http.StatusNoContent { b, err := io.ReadAll(response.Body) if err != nil { return fmt.Errorf("reading response body: %w", err) diff --git a/server/service/base_client_test.go b/server/service/base_client_test.go index 8dd18db85a..291e97b19f 100644 --- a/server/service/base_client_test.go +++ b/server/service/base_client_test.go @@ -70,6 +70,20 @@ func TestParseResponseOK(t *testing.T) { require.Equal(t, "ok", resDest.Test) } +func TestParseResponseOKNoContent(t *testing.T) { + bc, err := newBaseClient("https://test.com", true, "", "", nil, fleet.CapabilityMap{}) + require.NoError(t, err) + response := &http.Response{ + StatusCode: http.StatusNoContent, + Body: io.NopCloser(bytes.NewBufferString("")), + } + + var resDest struct{ Err error } + err = bc.parseResponse("", "", response, &resDest) + require.NoError(t, err) + require.Nil(t, resDest.Err) +} + func TestParseResponseGeneralErrors(t *testing.T) { t.Run("general HTTP errors", func(t *testing.T) { bc, err := newBaseClient("https://test.com", true, "", "", nil, fleet.CapabilityMap{})