From 9d02b4546f88ebcfc1b1e6b5a517e4efae0417ac Mon Sep 17 00:00:00 2001 From: matthew-hull-bright Date: Fri, 11 Sep 2026 15:17:26 +0100 Subject: [PATCH] fix/allow bodyless 2xx --- terraform/provider/litellm/utils.go | 8 +++++++ terraform/provider/litellm/utils_test.go | 30 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/terraform/provider/litellm/utils.go b/terraform/provider/litellm/utils.go index 88ef74d78e8..5033285e824 100644 --- a/terraform/provider/litellm/utils.go +++ b/terraform/provider/litellm/utils.go @@ -54,6 +54,10 @@ func handleAPIResponse(resp *http.Response, reqBody interface{}, client *Client) resp.Status, client.redactSensitiveData(string(bodyBytes)), client.redactSensitiveData(string(reqBodyBytes))) } + if len(bodyBytes) == 0 || string(bodyBytes) == "null" { + return &ModelResponse{}, nil + } + var modelResp ModelResponse if err := json.Unmarshal(bodyBytes, &modelResp); err != nil { return nil, fmt.Errorf("failed to parse response: %v", err) @@ -143,6 +147,10 @@ func handleMCPAPIResponse(resp *http.Response, result interface{}, client *Clien resp.Status, client.redactSensitiveData(string(bodyBytes))) } + if len(bodyBytes) == 0 || string(bodyBytes) == "null" { + return nil + } + if err := json.Unmarshal(bodyBytes, result); err != nil { return fmt.Errorf("failed to parse response: %v", err) } diff --git a/terraform/provider/litellm/utils_test.go b/terraform/provider/litellm/utils_test.go index e942dde288f..2a3f5edb701 100644 --- a/terraform/provider/litellm/utils_test.go +++ b/terraform/provider/litellm/utils_test.go @@ -52,6 +52,22 @@ func TestHandleAPIResponseAcceptsFullSuccessRange(t *testing.T) { } } +func TestHandleAPIResponseAcceptsEmptyBodyOn2xx(t *testing.T) { + rec := httptest.NewRecorder() + rec.WriteHeader(http.StatusNoContent) + resp := rec.Result() + + client := NewClient("http://localhost:4000", "test-key", true) + got, err := handleAPIResponse(resp, map[string]interface{}{"model_name": "gpt-4o"}, client) + + if err != nil { + t.Fatalf("handleAPIResponse returned unexpected error for empty-body 204: %v", err) + } + if got == nil { + t.Fatal("handleAPIResponse returned nil ModelResponse for empty-body 204") + } +} + func TestHandleMCPAPIResponseAcceptsFullSuccessRange(t *testing.T) { tests := []struct { name string @@ -96,3 +112,17 @@ func TestHandleMCPAPIResponseAcceptsFullSuccessRange(t *testing.T) { }) } } + +func TestHandleMCPAPIResponseAcceptsEmptyBodyOn2xx(t *testing.T) { + rec := httptest.NewRecorder() + rec.WriteHeader(http.StatusNoContent) + resp := rec.Result() + + client := NewClient("http://localhost:4000", "test-key", true) + var mcpResp MCPServerResponse + err := handleMCPAPIResponse(resp, &mcpResp, client) + + if err != nil { + t.Fatalf("handleMCPAPIResponse returned unexpected error for empty-body 204: %v", err) + } +}