11package  mcp
22
33import  (
4+ 	"fmt" 
45	"testing" 
56
67	"github.com/mark3labs/mcp-go/mcp" 
78	"github.com/stretchr/testify/suite" 
89	"k8s.io/client-go/rest" 
10+ 	clientcmdapi "k8s.io/client-go/tools/clientcmd/api" 
911	v1 "k8s.io/client-go/tools/clientcmd/api/v1" 
1012	"sigs.k8s.io/yaml" 
1113
@@ -22,7 +24,37 @@ func (s *ConfigurationSuite) SetupTest() {
2224	// Use mock server for predictable kubeconfig content 
2325	mockServer  :=  test .NewMockServer ()
2426	s .T ().Cleanup (mockServer .Close )
25- 	s .Cfg .KubeConfig  =  mockServer .KubeconfigFile (s .T ())
27+ 	kubeconfig  :=  mockServer .Kubeconfig ()
28+ 	for  i  :=  0 ; i  <  10 ; i ++  {
29+ 		// Add multiple fake contexts to force configuration_contexts_list tool to appear 
30+ 		// and test minification in configuration_view tool 
31+ 		name  :=  fmt .Sprintf ("cluster-%d" , i )
32+ 		kubeconfig .Contexts [name ] =  clientcmdapi .NewContext ()
33+ 		kubeconfig .Clusters [name + "-cluster" ] =  clientcmdapi .NewCluster ()
34+ 		kubeconfig .AuthInfos [name + "-auth" ] =  clientcmdapi .NewAuthInfo ()
35+ 		kubeconfig .Contexts [name ].Cluster  =  name  +  "-cluster" 
36+ 		kubeconfig .Contexts [name ].AuthInfo  =  name  +  "-auth" 
37+ 	}
38+ 	s .Cfg .KubeConfig  =  test .KubeconfigFile (s .T (), kubeconfig )
39+ }
40+ 
41+ func  (s  * ConfigurationSuite ) TestContextsList () {
42+ 	s .InitMcpClient ()
43+ 	s .Run ("configuration_contexts_list" , func () {
44+ 		toolResult , err  :=  s .CallTool ("configuration_contexts_list" , map [string ]interface {}{})
45+ 		s .Run ("returns contexts" , func () {
46+ 			s .Nilf (err , "call tool failed %v" , err )
47+ 		})
48+ 		s .Require ().NotNil (toolResult , "Expected tool result from call" )
49+ 		s .Lenf (toolResult .Content , 1 , "invalid tool result content length %v" , len (toolResult .Content ))
50+ 		s .Run ("contains context count" , func () {
51+ 			s .Regexpf (`^Available Kubernetes contexts \(11 total` , toolResult .Content [0 ].(mcp.TextContent ).Text , "invalid tool count result content %v" , toolResult .Content [0 ].(mcp.TextContent ).Text )
52+ 		})
53+ 		s .Run ("contains default context name" , func () {
54+ 			s .Regexpf (`^Available Kubernetes contexts \(\d+ total, default: fake-context\)` , toolResult .Content [0 ].(mcp.TextContent ).Text , "invalid tool context default result content %v" , toolResult .Content [0 ].(mcp.TextContent ).Text )
55+ 			s .Regexpf (`(?m)^\*fake-context$` , toolResult .Content [0 ].(mcp.TextContent ).Text , "invalid tool context default result content %v" , toolResult .Content [0 ].(mcp.TextContent ).Text )
56+ 		})
57+ 	})
2658}
2759
2860func  (s  * ConfigurationSuite ) TestConfigurationView () {
@@ -70,19 +102,23 @@ func (s *ConfigurationSuite) TestConfigurationView() {
70102			s .Nilf (err , "invalid tool result content %v" , err )
71103		})
72104		s .Run ("returns additional context info" , func () {
73- 			s .Lenf (decoded .Contexts , 2 , "invalid context count, expected 2, got %v" , len (decoded .Contexts ))
74- 			s .Equalf ("additional-context" , decoded .Contexts [0 ].Name , "additional-context not found: %v" , decoded .Contexts )
75- 			s .Equalf ("additional-cluster" , decoded .Contexts [0 ].Context .Cluster , "additional-cluster not found: %v" , decoded .Contexts )
76- 			s .Equalf ("additional-auth" , decoded .Contexts [0 ].Context .AuthInfo , "additional-auth not found: %v" , decoded .Contexts )
77- 			s .Equalf ("fake-context" , decoded .Contexts [1 ].Name , "fake-context not found: %v" , decoded .Contexts )
105+ 			s .Lenf (decoded .Contexts , 11 , "invalid context count, expected 12, got %v" , len (decoded .Contexts ))
106+ 			s .Equalf ("cluster-0" , decoded .Contexts [0 ].Name , "cluster-0 not found: %v" , decoded .Contexts )
107+ 			s .Equalf ("cluster-0-cluster" , decoded .Contexts [0 ].Context .Cluster , "cluster-0-cluster not found: %v" , decoded .Contexts )
108+ 			s .Equalf ("cluster-0-auth" , decoded .Contexts [0 ].Context .AuthInfo , "cluster-0-auth not found: %v" , decoded .Contexts )
109+ 			s .Equalf ("fake" , decoded .Contexts [10 ].Context .Cluster , "fake not found: %v" , decoded .Contexts )
110+ 			s .Equalf ("fake" , decoded .Contexts [10 ].Context .AuthInfo , "fake not found: %v" , decoded .Contexts )
111+ 			s .Equalf ("fake-context" , decoded .Contexts [10 ].Name , "fake-context not found: %v" , decoded .Contexts )
78112		})
79113		s .Run ("returns cluster info" , func () {
80- 			s .Lenf (decoded .Clusters , 2 , "invalid cluster count, expected 2, got %v" , len (decoded .Clusters ))
81- 			s .Equalf ("additional-cluster" , decoded .Clusters [0 ].Name , "additional-cluster not found: %v" , decoded .Clusters )
114+ 			s .Lenf (decoded .Clusters , 11 , "invalid cluster count, expected 2, got %v" , len (decoded .Clusters ))
115+ 			s .Equalf ("cluster-0-cluster" , decoded .Clusters [0 ].Name , "cluster-0-cluster not found: %v" , decoded .Clusters )
116+ 			s .Equalf ("fake" , decoded .Clusters [10 ].Name , "fake not found: %v" , decoded .Clusters )
82117		})
83118		s .Run ("configuration_view with minified=false returns auth info" , func () {
84- 			s .Lenf (decoded .AuthInfos , 2 , "invalid auth info count, expected 2, got %v" , len (decoded .AuthInfos ))
85- 			s .Equalf ("additional-auth" , decoded .AuthInfos [0 ].Name , "additional-auth not found: %v" , decoded .AuthInfos )
119+ 			s .Lenf (decoded .AuthInfos , 11 , "invalid auth info count, expected 2, got %v" , len (decoded .AuthInfos ))
120+ 			s .Equalf ("cluster-0-auth" , decoded .AuthInfos [0 ].Name , "cluster-0-auth not found: %v" , decoded .AuthInfos )
121+ 			s .Equalf ("fake" , decoded .AuthInfos [10 ].Name , "fake not found: %v" , decoded .AuthInfos )
86122		})
87123	})
88124}
@@ -109,11 +145,11 @@ func (s *ConfigurationSuite) TestConfigurationViewInCluster() {
109145			s .Nilf (err , "invalid tool result content %v" , err )
110146		})
111147		s .Run ("returns current-context" , func () {
112- 			s .Equalf ("context " , decoded .CurrentContext , "context not found: %v" , decoded .CurrentContext )
148+ 			s .Equalf ("in-cluster " , decoded .CurrentContext , "context not found: %v" , decoded .CurrentContext )
113149		})
114150		s .Run ("returns context info" , func () {
115151			s .Lenf (decoded .Contexts , 1 , "invalid context count, expected 1, got %v" , len (decoded .Contexts ))
116- 			s .Equalf ("context " , decoded .Contexts [0 ].Name , "context not found: %v" , decoded .Contexts )
152+ 			s .Equalf ("in-cluster " , decoded .Contexts [0 ].Name , "context not found: %v" , decoded .Contexts )
117153			s .Equalf ("cluster" , decoded .Contexts [0 ].Context .Cluster , "cluster not found: %v" , decoded .Contexts )
118154			s .Equalf ("user" , decoded .Contexts [0 ].Context .AuthInfo , "user not found: %v" , decoded .Contexts )
119155		})
0 commit comments