9
9
"github.com/mark3labs/mcp-go/server"
10
10
"github.com/spf13/afero"
11
11
corev1 "k8s.io/api/core/v1"
12
+ rbacv1 "k8s.io/api/rbac/v1"
12
13
apiextensionsv1spec "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
13
14
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
14
15
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -34,6 +35,7 @@ import (
34
35
// envTest has an expensive setup, so we only want to do it once per entire test run.
35
36
var envTest * envtest.Environment
36
37
var envTestRestConfig * rest.Config
38
+ var envTestUser = envtest.User {Name : "test-user" , Groups : []string {"test:users" }}
37
39
38
40
func TestMain (m * testing.M ) {
39
41
// Set up
@@ -62,9 +64,17 @@ func TestMain(m *testing.M) {
62
64
envTest = & envtest.Environment {
63
65
BinaryAssetsDirectory : filepath .Join (envTestDir , "k8s" , versionDir ),
64
66
}
65
- envTestRestConfig , _ = envTest .Start ()
66
- kc , _ := kubernetes .NewForConfig (envTestRestConfig )
67
- createTestData (context .Background (), kc )
67
+ adminSystemMasterBaseConfig , _ := envTest .Start ()
68
+ au , err := envTest .AddUser (envTestUser , adminSystemMasterBaseConfig )
69
+ if err != nil {
70
+ panic (err )
71
+ }
72
+ envTestRestConfig = au .Config ()
73
+
74
+ //Create test data as administrator
75
+ ctx := context .Background ()
76
+ restoreAuth (ctx )
77
+ createTestData (ctx )
68
78
69
79
// Test!
70
80
code := m .Run ()
@@ -232,25 +242,46 @@ func (c *mcpContext) callTool(name string, args map[string]interface{}) (*mcp.Ca
232
242
return c .mcpClient .CallTool (c .ctx , callToolRequest )
233
243
}
234
244
235
- func createTestData (ctx context.Context , kc * kubernetes.Clientset ) {
236
- _ , _ = kc .CoreV1 ().Namespaces ().
245
+ func restoreAuth (ctx context.Context ) {
246
+ kubernetesAdmin := kubernetes .NewForConfigOrDie (envTest .Config )
247
+ // Authorization
248
+ _ , _ = kubernetesAdmin .RbacV1 ().ClusterRoles ().Update (ctx , & rbacv1.ClusterRole {
249
+ ObjectMeta : metav1.ObjectMeta {Name : "allow-all" },
250
+ Rules : []rbacv1.PolicyRule {{
251
+ Verbs : []string {"*" },
252
+ APIGroups : []string {"*" },
253
+ Resources : []string {"*" },
254
+ }},
255
+ }, metav1.UpdateOptions {})
256
+ _ , _ = kubernetesAdmin .RbacV1 ().ClusterRoleBindings ().Update (ctx , & rbacv1.ClusterRoleBinding {
257
+ ObjectMeta : metav1.ObjectMeta {Name : "allow-all" },
258
+ Subjects : []rbacv1.Subject {{Kind : "Group" , Name : envTestUser .Groups [0 ]}},
259
+ RoleRef : rbacv1.RoleRef {Kind : "ClusterRole" , Name : "allow-all" },
260
+ }, metav1.UpdateOptions {})
261
+ }
262
+
263
+ func createTestData (ctx context.Context ) {
264
+ kubernetesAdmin := kubernetes .NewForConfigOrDie (envTestRestConfig )
265
+ // Namespaces
266
+ _ , _ = kubernetesAdmin .CoreV1 ().Namespaces ().
237
267
Create (ctx , & corev1.Namespace {ObjectMeta : metav1.ObjectMeta {Name : "ns-1" }}, metav1.CreateOptions {})
238
- _ , _ = kc .CoreV1 ().Namespaces ().
268
+ _ , _ = kubernetesAdmin .CoreV1 ().Namespaces ().
239
269
Create (ctx , & corev1.Namespace {ObjectMeta : metav1.ObjectMeta {Name : "ns-2" }}, metav1.CreateOptions {})
240
- _ , _ = kc .CoreV1 ().Namespaces ().
270
+ _ , _ = kubernetesAdmin .CoreV1 ().Namespaces ().
241
271
Create (ctx , & corev1.Namespace {ObjectMeta : metav1.ObjectMeta {Name : "ns-to-delete" }}, metav1.CreateOptions {})
242
- _ , _ = kc .CoreV1 ().Pods ("default" ).Create (ctx , & corev1.Pod {
272
+ _ , _ = kubernetesAdmin .CoreV1 ().Pods ("default" ).Create (ctx , & corev1.Pod {
243
273
ObjectMeta : metav1.ObjectMeta {Name : "a-pod-in-default" },
244
274
Spec : corev1.PodSpec {Containers : []corev1.Container {{Name : "nginx" , Image : "nginx" }}},
245
275
}, metav1.CreateOptions {})
246
- _ , _ = kc .CoreV1 ().Pods ("ns-1" ).Create (ctx , & corev1.Pod {
276
+ // Pods for listing
277
+ _ , _ = kubernetesAdmin .CoreV1 ().Pods ("ns-1" ).Create (ctx , & corev1.Pod {
247
278
ObjectMeta : metav1.ObjectMeta {Name : "a-pod-in-ns-1" },
248
279
Spec : corev1.PodSpec {Containers : []corev1.Container {{Name : "nginx" , Image : "nginx" }}},
249
280
}, metav1.CreateOptions {})
250
- _ , _ = kc .CoreV1 ().Pods ("ns-2" ).Create (ctx , & corev1.Pod {
281
+ _ , _ = kubernetesAdmin .CoreV1 ().Pods ("ns-2" ).Create (ctx , & corev1.Pod {
251
282
ObjectMeta : metav1.ObjectMeta {Name : "a-pod-in-ns-2" },
252
283
Spec : corev1.PodSpec {Containers : []corev1.Container {{Name : "nginx" , Image : "nginx" }}},
253
284
}, metav1.CreateOptions {})
254
- _ , _ = kc .CoreV1 ().ConfigMaps ("default" ).
285
+ _ , _ = kubernetesAdmin .CoreV1 ().ConfigMaps ("default" ).
255
286
Create (ctx , & corev1.ConfigMap {ObjectMeta : metav1.ObjectMeta {Name : "a-configmap-to-delete" }}, metav1.CreateOptions {})
256
287
}
0 commit comments