From 286282e3a881a257c7bba9ccb454220523e5c028 Mon Sep 17 00:00:00 2001 From: KubeSphere CI Bot <47586280+ks-ci-bot@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:46:07 +0800 Subject: [PATCH] [release-4.1] fix failing unit tests (#6256) fix failing unit tests Signed-off-by: hongming Co-authored-by: hongming --- .../namespace/namespace_controller_test.go | 82 ++++++++++++++----- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/pkg/controller/namespace/namespace_controller_test.go b/pkg/controller/namespace/namespace_controller_test.go index 4e61fe973..894a4c577 100644 --- a/pkg/controller/namespace/namespace_controller_test.go +++ b/pkg/controller/namespace/namespace_controller_test.go @@ -6,32 +6,67 @@ package namespace import ( - "context" "time" + rbacv1 "k8s.io/api/rbac/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/json" + iamv1beta1 "kubesphere.io/api/iam/v1beta1" + runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" + + "kubesphere.io/kubesphere/pkg/constants" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" tenantv1beta1 "kubesphere.io/api/tenant/v1beta1" - - "kubesphere.io/kubesphere/pkg/constants" ) +const timeout = time.Second * 30 +const interval = time.Second * 1 + var _ = Describe("Namespace", func() { - - const timeout = time.Second * 30 - const interval = time.Second * 1 - workspace := &tenantv1beta1.Workspace{ ObjectMeta: metav1.ObjectMeta{ Name: "test-workspace", }, } + role := iamv1beta1.Role{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "iam.kubesphere.io/v1beta1", + Kind: "Role", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "admin", + }, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{"*"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + }, + } + + jsonData, _ := json.Marshal(role) + builtinRole := &iamv1beta1.BuiltinRole{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "iam.kubesphere.io/scope": "namespace", + }, + Name: "project-admin", + }, + Role: runtime.RawExtension{ + Raw: jsonData, + }, + } + BeforeEach(func() { // Create workspace - Expect(k8sClient.Create(context.Background(), workspace)).Should(Succeed()) + Expect(k8sClient.Create(ctx, workspace)).Should(Succeed()) + Expect(k8sClient.Create(ctx, builtinRole)).Should(Succeed()) }) // Add Tests for OpenAPI validation (or additional CRD features) specified in @@ -47,25 +82,30 @@ var _ = Describe("Namespace", func() { tenantv1beta1.WorkspaceLabel: workspace.Name, constants.KubeSphereManagedLabel: "true", }, + Annotations: map[string]string{constants.CreatorAnnotationKey: "admin"}, }, } // Create namespace - Expect(k8sClient.Create(context.Background(), namespace)).Should(Succeed()) - + Expect(k8sClient.Create(ctx, namespace)).Should(Succeed()) By("Expecting to create namespace successfully") - Expect(k8sClient.Get(context.Background(), types.NamespacedName{Name: namespace.Name}, namespace)).Should(Succeed()) - - By("Expecting to update namespace successfully") - updated := namespace.DeepCopy() - updated.Labels[constants.WorkspaceLabelKey] = "workspace-not-exist" - - Expect(k8sClient.Update(context.Background(), updated)).Should(Succeed()) - - By("Expecting to unbind workspace successfully") Eventually(func() bool { - _ = k8sClient.Get(context.Background(), types.NamespacedName{Name: namespace.Name}, namespace) - return len(namespace.OwnerReferences) == 0 + _ = k8sClient.Get(ctx, types.NamespacedName{Name: namespace.Name}, namespace) + return len(namespace.Finalizers) > 0 + }, timeout, interval).Should(BeTrue()) + + By("Expecting to create namespace builtin roles successfully") + Eventually(func() bool { + roles := iamv1beta1.RoleList{} + _ = k8sClient.List(ctx, &roles, runtimeclient.InNamespace(namespace.Name)) + return len(roles.Items) > 0 + }, timeout, interval).Should(BeTrue()) + + By("Expecting to create creator role binding successfully") + Eventually(func() bool { + roleBindings := iamv1beta1.RoleBindingList{} + _ = k8sClient.List(ctx, &roleBindings, runtimeclient.InNamespace(namespace.Name)) + return len(roleBindings.Items) > 0 }, timeout, interval).Should(BeTrue()) }) })