From 98fb823dc2d296a06d60fcc3a885f4077234ff99 Mon Sep 17 00:00:00 2001 From: matthew-hull-bright Date: Fri, 11 Sep 2026 13:41:47 +0100 Subject: [PATCH] fix/mcp resource deletion --- .../litellm/resource_mcp_server_crud.go | 2 +- .../litellm/resource_mcp_server_crud_test.go | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/terraform/provider/litellm/resource_mcp_server_crud.go b/terraform/provider/litellm/resource_mcp_server_crud.go index 2a8980960f1..1c956d88f69 100644 --- a/terraform/provider/litellm/resource_mcp_server_crud.go +++ b/terraform/provider/litellm/resource_mcp_server_crud.go @@ -270,7 +270,7 @@ func resourceLiteLLMMCPServerDelete(d *schema.ResourceData, m interface{}) error defer resp.Body.Close() // For delete operations, we expect a simple string response - if resp.StatusCode != 200 { + if resp.StatusCode < 200 || resp.StatusCode >= 300 { return fmt.Errorf("failed to delete MCP server: unexpected status code %d", resp.StatusCode) } diff --git a/terraform/provider/litellm/resource_mcp_server_crud_test.go b/terraform/provider/litellm/resource_mcp_server_crud_test.go index 17300701954..8c67fbe6405 100644 --- a/terraform/provider/litellm/resource_mcp_server_crud_test.go +++ b/terraform/provider/litellm/resource_mcp_server_crud_test.go @@ -1,11 +1,59 @@ package litellm import ( + "net/http" + "net/http/httptest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) +func TestMCPServerDeleteAcceptsFullSuccessRange(t *testing.T) { + tests := []struct { + name string + statusCode int + wantErr bool + }{ + {name: "200 OK", statusCode: http.StatusOK, wantErr: false}, + {name: "202 Accepted", statusCode: http.StatusAccepted, wantErr: false}, + {name: "404 Not Found", statusCode: http.StatusNotFound, wantErr: true}, + {name: "500 Internal Server Error", statusCode: http.StatusInternalServerError, wantErr: true}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(tt.statusCode) + })) + defer srv.Close() + + d := schema.TestResourceDataRaw(t, resourceLiteLLMMCPServer().Schema, map[string]interface{}{ + "server_name": "gh", + "transport": "stdio", + "command": "npx", + }) + d.SetId("srv-1") + + client := NewClient(srv.URL, "test-key", true) + err := resourceLiteLLMMCPServerDelete(d, client) + + if tt.wantErr { + if err == nil { + t.Fatalf("resourceLiteLLMMCPServerDelete returned no error for status %d", tt.statusCode) + } + return + } + + if err != nil { + t.Fatalf("resourceLiteLLMMCPServerDelete returned unexpected error: %v", err) + } + if d.Id() != "" { + t.Errorf("resource ID not cleared after successful delete, got %q", d.Id()) + } + }) + } +} + func TestMCPServerReadDoesNotPersistServerEnv(t *testing.T) { d := schema.TestResourceDataRaw(t, resourceLiteLLMMCPServer().Schema, map[string]interface{}{ "server_name": "gh",