11package  mcp
22
33import  (
4+ 	"context" 
45	"encoding/base64" 
56	"github.com/mark3labs/mcp-go/mcp" 
67	corev1 "k8s.io/api/core/v1" 
8+ 	"k8s.io/apimachinery/pkg/api/errors" 
79	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 
10+ 	"k8s.io/client-go/kubernetes" 
811	"path/filepath" 
912	"runtime" 
1013	"sigs.k8s.io/yaml" 
@@ -58,13 +61,7 @@ func TestHelmList(t *testing.T) {
5861	testCase (t , func (c  * mcpContext ) {
5962		c .withEnvTest ()
6063		kc  :=  c .newKubernetesClient ()
61- 		secrets , err  :=  kc .CoreV1 ().Secrets ("default" ).List (c .ctx , metav1.ListOptions {})
62- 		for  _ , secret  :=  range  secrets .Items  {
63- 			if  strings .HasPrefix (secret .Name , "sh.helm.release.v1." ) {
64- 				_  =  kc .CoreV1 ().Secrets ("default" ).Delete (c .ctx , secret .Name , metav1.DeleteOptions {})
65- 			}
66- 		}
67- 		_  =  kc .CoreV1 ().Secrets ("default" ).Delete (c .ctx , "release-to-list" , metav1.DeleteOptions {})
64+ 		clearHelmReleases (c .ctx , kc )
6865		toolResult , err  :=  c .callTool ("helm_list" , map [string ]interface {}{})
6966		t .Run ("helm_list with no releases, returns not found" , func (t  * testing.T ) {
7067			if  err  !=  nil  {
@@ -79,8 +76,8 @@ func TestHelmList(t *testing.T) {
7976		})
8077		_ , _  =  kc .CoreV1 ().Secrets ("default" ).Create (c .ctx , & corev1.Secret {
8178			ObjectMeta : metav1.ObjectMeta {
82- 				Name :   "release-to-list" ,
83- 				Labels : map [string ]string {"owner" : "helm" },
79+ 				Name :   "sh.helm.release.v1. release-to-list" ,
80+ 				Labels : map [string ]string {"owner" : "helm" ,  "name" :  "release-to-list" },
8481			},
8582			Data : map [string ][]byte {
8683				"release" : []byte (base64 .StdEncoding .EncodeToString ([]byte ("{"  + 
@@ -149,3 +146,64 @@ func TestHelmList(t *testing.T) {
149146		})
150147	})
151148}
149+ 
150+ func  TestHelmUninstall (t  * testing.T ) {
151+ 	testCase (t , func (c  * mcpContext ) {
152+ 		c .withEnvTest ()
153+ 		kc  :=  c .newKubernetesClient ()
154+ 		clearHelmReleases (c .ctx , kc )
155+ 		toolResult , err  :=  c .callTool ("helm_uninstall" , map [string ]interface {}{
156+ 			"name" : "release-to-uninstall" ,
157+ 		})
158+ 		t .Run ("helm_uninstall with no releases, returns not found" , func (t  * testing.T ) {
159+ 			if  err  !=  nil  {
160+ 				t .Fatalf ("call tool failed %v" , err )
161+ 			}
162+ 			if  toolResult .IsError  {
163+ 				t .Fatalf ("call tool failed" )
164+ 			}
165+ 			if  toolResult .Content [0 ].(mcp.TextContent ).Text  !=  "Release release-to-uninstall not found"  {
166+ 				t .Fatalf ("unexpected result %v" , toolResult .Content [0 ].(mcp.TextContent ).Text )
167+ 			}
168+ 		})
169+ 		_ , _  =  kc .CoreV1 ().Secrets ("default" ).Create (c .ctx , & corev1.Secret {
170+ 			ObjectMeta : metav1.ObjectMeta {
171+ 				Name :   "sh.helm.release.v1.existent-release-to-uninstall.v0" ,
172+ 				Labels : map [string ]string {"owner" : "helm" , "name" : "existent-release-to-uninstall" },
173+ 			},
174+ 			Data : map [string ][]byte {
175+ 				"release" : []byte (base64 .StdEncoding .EncodeToString ([]byte ("{"  + 
176+ 					"\" name\" :\" existent-release-to-uninstall\" ,"  + 
177+ 					"\" info\" :{\" status\" :\" deployed\" }"  + 
178+ 					"}" ))),
179+ 			},
180+ 		}, metav1.CreateOptions {})
181+ 		toolResult , err  =  c .callTool ("helm_uninstall" , map [string ]interface {}{
182+ 			"name" : "existent-release-to-uninstall" ,
183+ 		})
184+ 		t .Run ("helm_uninstall with deployed release, returns uninstalled" , func (t  * testing.T ) {
185+ 			if  err  !=  nil  {
186+ 				t .Fatalf ("call tool failed %v" , err )
187+ 			}
188+ 			if  toolResult .IsError  {
189+ 				t .Fatalf ("call tool failed" )
190+ 			}
191+ 			if  ! strings .HasPrefix (toolResult .Content [0 ].(mcp.TextContent ).Text , "Uninstalled release existent-release-to-uninstall" ) {
192+ 				t .Fatalf ("unexpected result %v" , toolResult .Content [0 ].(mcp.TextContent ).Text )
193+ 			}
194+ 			_ , err  =  kc .CoreV1 ().Secrets ("default" ).Get (c .ctx , "sh.helm.release.v1.existent-release-to-uninstall.v0" , metav1.GetOptions {})
195+ 			if  ! errors .IsNotFound (err ) {
196+ 				t .Fatalf ("expected release to be deleted, but it still exists" )
197+ 			}
198+ 		})
199+ 	})
200+ }
201+ 
202+ func  clearHelmReleases (ctx  context.Context , kc  * kubernetes.Clientset ) {
203+ 	secrets , _  :=  kc .CoreV1 ().Secrets ("default" ).List (ctx , metav1.ListOptions {})
204+ 	for  _ , secret  :=  range  secrets .Items  {
205+ 		if  strings .HasPrefix (secret .Name , "sh.helm.release.v1." ) {
206+ 			_  =  kc .CoreV1 ().Secrets ("default" ).Delete (ctx , secret .Name , metav1.DeleteOptions {})
207+ 		}
208+ 	}
209+ }
0 commit comments