From 61034947fdeb72a0565d42f3f38a1a36b76f431a Mon Sep 17 00:00:00 2001 From: Dario Tranchitella Date: Sun, 30 May 2021 22:41:06 +0200 Subject: [PATCH] test(e2e): modifying CapsuleConfiguration at runtime --- e2e/additional_role_bindings_test.go | 2 +- e2e/custom_capsule_group_test.go | 45 ++++++------- e2e/force_tenant_prefix_test.go | 12 +++- e2e/ingress_class_test.go | 10 +-- ...ngress_hostnames_allowed_collision_test.go | 10 ++- ...ingress_hostnames_denied_collision_test.go | 12 +++- e2e/ingress_hostnames_test.go | 6 +- e2e/namespace_metadata_test.go | 2 +- e2e/new_namespace_test.go | 2 +- e2e/overquota_namespace_test.go | 2 +- e2e/owner_webhooks_test.go | 14 ++--- e2e/protected_namespace_regex_test.go | 20 +++--- e2e/resource_quota_exceeded_test.go | 2 +- e2e/service_metadata_test.go | 6 +- e2e/storage_class_test.go | 4 +- e2e/suite_test.go | 12 ---- ...ngress_hostnames_collision_allowed_test.go | 10 ++- e2e/tenant_owner_group_test.go | 2 +- e2e/tenant_resources_changes_test.go | 2 +- e2e/tenant_resources_test.go | 2 +- e2e/utils_test.go | 63 +++---------------- 21 files changed, 101 insertions(+), 139 deletions(-) diff --git a/e2e/additional_role_bindings_test.go b/e2e/additional_role_bindings_test.go index 5b548870..d9bf3cd4 100644 --- a/e2e/additional_role_bindings_test.go +++ b/e2e/additional_role_bindings_test.go @@ -69,7 +69,7 @@ var _ = Describe("creating a Namespace with an additional Role Binding", func() for _, ns := range []string{"rb-1", "rb-2", "rb-3"} { ns := NewNamespace(ns) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) var rb *rbacv1.RoleBinding diff --git a/e2e/custom_capsule_group_test.go b/e2e/custom_capsule_group_test.go index ae91db0a..58308fb9 100644 --- a/e2e/custom_capsule_group_test.go +++ b/e2e/custom_capsule_group_test.go @@ -20,7 +20,6 @@ package e2e import ( "context" - "fmt" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -53,41 +52,33 @@ var _ = Describe("creating a Namespace as Tenant owner with custom --capsule-gro }) It("should fail using a User non matching the capsule-user-group flag", func() { - var managerPodArgs []string - capsuleGroups := []string{"test"} - for _, group := range capsuleGroups { - managerPodArgs = append(managerPodArgs, fmt.Sprintf("--capsule-user-group=%s", group)) - } + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.UserGroups = []string{"test"} + }) - args := append(defaulManagerPodArgs, managerPodArgs...) - ModifyCapsuleManagerPodArgs(args) - CapsuleClusterGroupParam(podRecreationTimeoutInterval, capsuleGroups).Should(ContainElements(capsuleGroups)) ns := NewNamespace("cg-namespace-fail") - NamespaceCreation(ns, tnt, podRecreationTimeoutInterval).ShouldNot(Succeed()) + NamespaceCreation(ns, tnt, defaultTimeoutInterval).ShouldNot(Succeed()) }) It("should succeed and be available in Tenant namespaces list with multiple groups", func() { - var managerPodArgs []string - capsuleGroups := []string{"test", "alice"} - for _, group := range capsuleGroups { - managerPodArgs = append(managerPodArgs, fmt.Sprintf("--capsule-user-group=%s", group)) - } + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.UserGroups = []string{"test", "alice"} + }) - args := append(defaulManagerPodArgs, managerPodArgs...) - ModifyCapsuleManagerPodArgs(args) - CapsuleClusterGroupParam(podRecreationTimeoutInterval, capsuleGroups).Should(ContainElements(capsuleGroups)) ns := NewNamespace("cg-namespace-1") - NamespaceCreation(ns, tnt, podRecreationTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + + NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) }) It("should succeed and be available in Tenant namespaces list with default single group", func() { - capsuleGroups := []string{"capsule.clastix.io"} - ModifyCapsuleManagerPodArgs(defaulManagerPodArgs) - CapsuleClusterGroupParam(podRecreationTimeoutInterval, capsuleGroups).Should(ContainElements("capsule.clastix.io")) - ns := NewNamespace("cg-namespace-2") - NamespaceCreation(ns, tnt, podRecreationTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) - }) + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.UserGroups = []string{"capsule.clastix.io"} + }) + ns := NewNamespace("cg-namespace-2") + + NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) + }) }) diff --git a/e2e/force_tenant_prefix_test.go b/e2e/force_tenant_prefix_test.go index 68030a13..0876789b 100644 --- a/e2e/force_tenant_prefix_test.go +++ b/e2e/force_tenant_prefix_test.go @@ -28,7 +28,7 @@ import ( "github.com/clastix/capsule/api/v1alpha1" ) -var _ = Describe("creating a Namespace with --force-tenant-name flag", func() { +var _ = Describe("creating a Namespace with Tenant name prefix enforcement", func() { t1 := &v1alpha1.Tenant{ ObjectMeta: metav1.ObjectMeta{ Name: "awesome", @@ -61,12 +61,18 @@ var _ = Describe("creating a Namespace with --force-tenant-name flag", func() { t2.ResourceVersion = "" return k8sClient.Create(context.TODO(), t2) }).Should(Succeed()) - ModifyCapsuleManagerPodArgs(append(defaulManagerPodArgs, []string{"--force-tenant-prefix"}...)) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.ForceTenantPrefix = true + }) }) JustAfterEach(func() { Expect(k8sClient.Delete(context.TODO(), t1)).Should(Succeed()) Expect(k8sClient.Delete(context.TODO(), t2)).Should(Succeed()) - ModifyCapsuleManagerPodArgs(defaulManagerPodArgs) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.ForceTenantPrefix = false + }) }) It("should fail when non using prefix", func() { diff --git a/e2e/ingress_class_test.go b/e2e/ingress_class_test.go index 6880cbc9..533ea126 100644 --- a/e2e/ingress_class_test.go +++ b/e2e/ingress_class_test.go @@ -66,7 +66,7 @@ var _ = Describe("when Tenant handles Ingress classes", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) By("non-specifying at all", func() { Eventually(func() (err error) { @@ -130,7 +130,7 @@ var _ = Describe("when Tenant handles Ingress classes", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) for _, c := range tnt.Spec.IngressClasses.Exact { Eventually(func() (err error) { @@ -164,7 +164,7 @@ var _ = Describe("when Tenant handles Ingress classes", func() { } NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) for _, c := range tnt.Spec.IngressClasses.Exact { Eventually(func() (err error) { @@ -192,7 +192,7 @@ var _ = Describe("when Tenant handles Ingress classes", func() { ingressClass := "oil-ingress" NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) Eventually(func() (err error) { i := &extensionsv1beta1.Ingress{ @@ -225,7 +225,7 @@ var _ = Describe("when Tenant handles Ingress classes", func() { } NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) Eventually(func() (err error) { i := &extensionsv1beta1.Ingress{ diff --git a/e2e/ingress_hostnames_allowed_collision_test.go b/e2e/ingress_hostnames_allowed_collision_test.go index 50286515..dc9fc3c4 100644 --- a/e2e/ingress_hostnames_allowed_collision_test.go +++ b/e2e/ingress_hostnames_allowed_collision_test.go @@ -80,9 +80,17 @@ var _ = Describe("when handling Ingress hostnames collision", func() { tnt.ResourceVersion = "" return k8sClient.Create(context.TODO(), tnt) }).Should(Succeed()) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.AllowIngressHostnameCollision = true + }) }) JustAfterEach(func() { Expect(k8sClient.Delete(context.TODO(), tnt)).Should(Succeed()) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.AllowIngressHostnameCollision = false + }) }) It("should allow creating several Ingress with same hostname", func() { @@ -92,7 +100,7 @@ var _ = Describe("when handling Ingress hostnames collision", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) if maj == 1 && min > 18 { By("testing networking.k8s.io", func() { diff --git a/e2e/ingress_hostnames_denied_collision_test.go b/e2e/ingress_hostnames_denied_collision_test.go index dc3f8e5d..f72472d6 100644 --- a/e2e/ingress_hostnames_denied_collision_test.go +++ b/e2e/ingress_hostnames_denied_collision_test.go @@ -79,11 +79,17 @@ var _ = Describe("when handling Ingress hostnames collision", func() { EventuallyCreation(func() error { return k8sClient.Create(context.TODO(), tnt) }).Should(Succeed()) - ModifyCapsuleManagerPodArgs(append(defaulManagerPodArgs, []string{"--allow-ingress-hostname-collision=false"}...)) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.AllowIngressHostnameCollision = true + }) }) JustAfterEach(func() { Expect(k8sClient.Delete(context.TODO(), tnt)).Should(Succeed()) - ModifyCapsuleManagerPodArgs(defaulManagerPodArgs) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.AllowIngressHostnameCollision = false + }) }) It("should not allow creating several Ingress with same hostname", func() { @@ -93,7 +99,7 @@ var _ = Describe("when handling Ingress hostnames collision", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) if maj == 1 && min > 18 { By("testing networking.k8s.io", func() { diff --git a/e2e/ingress_hostnames_test.go b/e2e/ingress_hostnames_test.go index e0e50d2b..8f5f668c 100644 --- a/e2e/ingress_hostnames_test.go +++ b/e2e/ingress_hostnames_test.go @@ -132,7 +132,7 @@ var _ = Describe("when Tenant handles Ingress hostnames", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) if maj == 1 && min > 18 { By("testing networking.k8s.io", func() { @@ -161,7 +161,7 @@ var _ = Describe("when Tenant handles Ingress hostnames", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) if maj == 1 && min > 18 { By("testing networking.k8s.io", func() { @@ -194,7 +194,7 @@ var _ = Describe("when Tenant handles Ingress hostnames", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) if maj == 1 && min > 18 { By("testing networking.k8s.io", func() { diff --git a/e2e/namespace_metadata_test.go b/e2e/namespace_metadata_test.go index a14dac1a..e581e81d 100644 --- a/e2e/namespace_metadata_test.go +++ b/e2e/namespace_metadata_test.go @@ -64,7 +64,7 @@ var _ = Describe("creating a Namespace for a Tenant with additional metadata", f It("should contain additional Namespace metadata", func() { ns := NewNamespace("namespace-metadata") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) By("checking additional labels", func() { Eventually(func() (ok bool) { diff --git a/e2e/new_namespace_test.go b/e2e/new_namespace_test.go index a833f783..ebd1edd2 100644 --- a/e2e/new_namespace_test.go +++ b/e2e/new_namespace_test.go @@ -53,6 +53,6 @@ var _ = Describe("creating a Namespace as Tenant owner", func() { It("should be available in Tenant namespaces list", func() { ns := NewNamespace("new-namespace") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) }) }) diff --git a/e2e/overquota_namespace_test.go b/e2e/overquota_namespace_test.go index 766eeba4..d2d83602 100644 --- a/e2e/overquota_namespace_test.go +++ b/e2e/overquota_namespace_test.go @@ -57,7 +57,7 @@ var _ = Describe("creating a Namespace in over-quota of three", func() { for _, name := range []string{"bob-dev", "bob-staging", "bob-production"} { ns := NewNamespace(name) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) } }) diff --git a/e2e/owner_webhooks_test.go b/e2e/owner_webhooks_test.go index 2fba648b..addc9df2 100644 --- a/e2e/owner_webhooks_test.go +++ b/e2e/owner_webhooks_test.go @@ -109,7 +109,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { By("blocking Capsule Limit ranges", func() { ns := NewNamespace("limit-range-disallow") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) lr := &corev1.LimitRange{} Eventually(func() error { @@ -123,7 +123,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { By("blocking Capsule Network Policy", func() { ns := NewNamespace("network-policy-disallow") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) np := &networkingv1.NetworkPolicy{} Eventually(func() error { @@ -137,7 +137,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { By("blocking Capsule Resource Quota", func() { ns := NewNamespace("resource-quota-disallow") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) rq := &corev1.ResourceQuota{} Eventually(func() error { @@ -154,7 +154,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { By("listing Limit Range", func() { ns := NewNamespace("limit-range-list") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) Eventually(func() (err error) { cs := ownerClient(tnt) @@ -165,7 +165,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { By("listing Network Policy", func() { ns := NewNamespace("network-policy-list") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) Eventually(func() (err error) { cs := ownerClient(tnt) @@ -176,7 +176,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { By("listin Resource Quota", func() { ns := NewNamespace("resource-quota-list") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) Eventually(func() (err error) { cs := ownerClient(tnt) @@ -189,7 +189,7 @@ var _ = Describe("when Tenant owner interacts with the webhooks", func() { It("should allow all actions to Tenant owner Network Policy", func() { ns := NewNamespace("network-policy-allow") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) cs := ownerClient(tnt) np := &networkingv1.NetworkPolicy{ diff --git a/e2e/protected_namespace_regex_test.go b/e2e/protected_namespace_regex_test.go index 567ef91f..58aa1cc6 100644 --- a/e2e/protected_namespace_regex_test.go +++ b/e2e/protected_namespace_regex_test.go @@ -28,7 +28,7 @@ import ( "github.com/clastix/capsule/api/v1alpha1" ) -var _ = Describe("creating a Namespace with --protected-namespace-regex enabled", func() { +var _ = Describe("creating a Namespace with a protected Namespace regex enabled", func() { tnt := &v1alpha1.Tenant{ ObjectMeta: metav1.ObjectMeta{ Name: "tenant-protected-namespace", @@ -52,16 +52,22 @@ var _ = Describe("creating a Namespace with --protected-namespace-regex enabled" }) It("should succeed and be available in Tenant namespaces list", func() { - args := append(defaulManagerPodArgs, []string{"--protected-namespace-regex=^.*[-.]system$"}...) - ModifyCapsuleManagerPodArgs(args) + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.ProtectedNamespaceRegexpString = `^.*[-.]system$` + }) + ns := NewNamespace("test-ok") - NamespaceCreation(ns, tnt, podRecreationTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + + NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) }) It("should fail using a value non matching the regex", func() { ns := NewNamespace("test-system") - NamespaceCreation(ns, tnt, podRecreationTimeoutInterval).ShouldNot(Succeed()) - ModifyCapsuleManagerPodArgs(defaulManagerPodArgs) + NamespaceCreation(ns, tnt, defaultTimeoutInterval).ShouldNot(Succeed()) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.ProtectedNamespaceRegexpString = "" + }) }) }) diff --git a/e2e/resource_quota_exceeded_test.go b/e2e/resource_quota_exceeded_test.go index 050cc15e..3d6096ac 100644 --- a/e2e/resource_quota_exceeded_test.go +++ b/e2e/resource_quota_exceeded_test.go @@ -125,7 +125,7 @@ var _ = Describe("exceeding a Tenant resource quota", func() { for _, i := range nsl { ns := NewNamespace(i) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) } }) }) diff --git a/e2e/service_metadata_test.go b/e2e/service_metadata_test.go index 7607c997..096d294a 100644 --- a/e2e/service_metadata_test.go +++ b/e2e/service_metadata_test.go @@ -81,7 +81,7 @@ var _ = Describe("adding metadata to Service objects", func() { It("should apply them to Service", func() { ns := NewNamespace("service-metadata") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ @@ -135,7 +135,7 @@ var _ = Describe("adding metadata to Service objects", func() { It("should apply them to Endpoints", func() { ns := NewNamespace("endpoints-metadata") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) ep := &corev1.Endpoints{ ObjectMeta: metav1.ObjectMeta{ @@ -195,7 +195,7 @@ var _ = Describe("adding metadata to Service objects", func() { ns := NewNamespace("endpointslice-metadata") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) eps := &discoveryv1beta1.EndpointSlice{ ObjectMeta: metav1.ObjectMeta{ diff --git a/e2e/storage_class_test.go b/e2e/storage_class_test.go index c427df2f..bd58fe65 100644 --- a/e2e/storage_class_test.go +++ b/e2e/storage_class_test.go @@ -64,7 +64,7 @@ var _ = Describe("when Tenant handles Storage classes", func() { It("should fails", func() { ns := NewNamespace("storage-class-disallowed") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) By("non-specifying it", func() { Eventually(func() (err error) { @@ -113,7 +113,7 @@ var _ = Describe("when Tenant handles Storage classes", func() { cs := ownerClient(tnt) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) By("using exact matches", func() { for _, c := range tnt.Spec.StorageClasses.Exact { Eventually(func() (err error) { diff --git a/e2e/suite_test.go b/e2e/suite_test.go index a977ae72..82d92185 100644 --- a/e2e/suite_test.go +++ b/e2e/suite_test.go @@ -19,14 +19,11 @@ limitations under the License. package e2e import ( - "context" "path/filepath" "testing" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - appsv1 "k8s.io/api/apps/v1" - "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" @@ -47,7 +44,6 @@ var ( cfg *rest.Config k8sClient client.Client testEnv *envtest.Environment - defaulManagerPodArgs []string tenantRoleBindingNames = []string{"namespace:admin", "namespace-deleter"} ) @@ -88,14 +84,6 @@ var _ = BeforeSuite(func(done Done) { Expect(err).ToNot(HaveOccurred()) Expect(k8sClient).ToNot(BeNil()) - capsuleDeployment := &appsv1.Deployment{} - k8sClient.Get(context.TODO(), types.NamespacedName{Name: capsuleDeploymentName, Namespace: capsuleNamespace}, capsuleDeployment) - for _, container := range capsuleDeployment.Spec.Template.Spec.Containers { - if container.Name == capsuleManagerContainerName { - defaulManagerPodArgs = container.Args - } - } - Expect(defaulManagerPodArgs).ToNot(BeEmpty()) close(done) }, 60) diff --git a/e2e/tenant_ingress_hostnames_collision_allowed_test.go b/e2e/tenant_ingress_hostnames_collision_allowed_test.go index 5ea6def1..318cc973 100644 --- a/e2e/tenant_ingress_hostnames_collision_allowed_test.go +++ b/e2e/tenant_ingress_hostnames_collision_allowed_test.go @@ -50,11 +50,17 @@ var _ = Describe("when a second Tenant contains an already declared allowed Ingr tnt.ResourceVersion = "" return k8sClient.Create(context.TODO(), tnt) }).Should(Succeed()) - ModifyCapsuleManagerPodArgs(append(defaulManagerPodArgs, []string{"--allow-tenant-ingress-hostnames-collision=true"}...)) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.AllowTenantIngressHostnamesCollision = true + }) }) JustAfterEach(func() { Expect(k8sClient.Delete(context.TODO(), tnt)).Should(Succeed()) - ModifyCapsuleManagerPodArgs(defaulManagerPodArgs) + + ModifyCapsuleConfigurationOpts(func(configuration *v1alpha1.CapsuleConfiguration) { + configuration.Spec.AllowTenantIngressHostnamesCollision = false + }) }) It("should not block creation if contains collided Ingress hostnames", func() { diff --git a/e2e/tenant_owner_group_test.go b/e2e/tenant_owner_group_test.go index e236f261..208b4dd7 100644 --- a/e2e/tenant_owner_group_test.go +++ b/e2e/tenant_owner_group_test.go @@ -54,7 +54,7 @@ var _ = Describe("creating a Namespace with group Tenant owner", func() { It("should succeed and be available in Tenant namespaces list", func() { ns := NewNamespace("gto-namespace") NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) for _, a := range KindInTenantRoleBindingAssertions(ns, defaultTimeoutInterval) { a.Should(BeIdenticalTo("Group")) } diff --git a/e2e/tenant_resources_changes_test.go b/e2e/tenant_resources_changes_test.go index 87b0e652..53f03235 100644 --- a/e2e/tenant_resources_changes_test.go +++ b/e2e/tenant_resources_changes_test.go @@ -171,7 +171,7 @@ var _ = Describe("changing Tenant managed Kubernetes resources", func() { for _, i := range nsl { ns := NewNamespace(i) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) } }) }) diff --git a/e2e/tenant_resources_test.go b/e2e/tenant_resources_test.go index aed41da0..4ff567e2 100644 --- a/e2e/tenant_resources_test.go +++ b/e2e/tenant_resources_test.go @@ -170,7 +170,7 @@ var _ = Describe("creating namespaces within a Tenant with resources", func() { for _, i := range nsl { ns := NewNamespace(i) NamespaceCreation(ns, tnt, defaultTimeoutInterval).Should(Succeed()) - TenantNamespaceList(tnt, podRecreationTimeoutInterval).Should(ContainElement(ns.GetName())) + TenantNamespaceList(tnt, defaultTimeoutInterval).Should(ContainElement(ns.GetName())) } }) }) diff --git a/e2e/utils_test.go b/e2e/utils_test.go index a003c691..e5062d6f 100644 --- a/e2e/utils_test.go +++ b/e2e/utils_test.go @@ -20,28 +20,21 @@ package e2e import ( "context" - b64 "encoding/base64" - "fmt" "strconv" "time" + "github.com/clastix/capsule/api/v1alpha1" . "github.com/onsi/gomega" - appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/version" "k8s.io/client-go/kubernetes" - "sigs.k8s.io/controller-runtime/pkg/client" - - "github.com/clastix/capsule/api/v1alpha1" - "github.com/clastix/capsule/controllers/rbac" ) const ( defaultTimeoutInterval = 20 * time.Second - podRecreationTimeoutInterval = 90 * time.Second defaultPollInterval = time.Second ) @@ -72,57 +65,15 @@ func EventuallyCreation(f interface{}) AsyncAssertion { return Eventually(f, defaultTimeoutInterval, defaultPollInterval) } -func CapsuleClusterGroupParam(timeout time.Duration, groups []string) AsyncAssertion { - capsuleCRB := &rbacv1.ClusterRoleBinding{} +func ModifyCapsuleConfigurationOpts(fn func(configuration *v1alpha1.CapsuleConfiguration)) { + config := &v1alpha1.CapsuleConfiguration{} + Expect(k8sClient.Get(context.Background(), types.NamespacedName{Name: "default"}, config)).ToNot(HaveOccurred()) - return Eventually(func() []string { - var subjectNames []string - for _, group := range groups { - name := b64.RawStdEncoding.EncodeToString([]byte(group)) - Expect(k8sClient.Get(context.TODO(), types.NamespacedName{Name: fmt.Sprintf("%s-%v", rbac.ProvisionerRoleName, name)}, capsuleCRB)).Should(Succeed()) - subjectNames = append(subjectNames, capsuleCRB.Subjects[0].Name) - } - return subjectNames - }, timeout, defaultPollInterval) -} + fn(config) -func ModifyCapsuleManagerPodArgs(args []string) { - capsuleDeployment := &appsv1.Deployment{} - k8sClient.Get(context.TODO(), types.NamespacedName{Name: capsuleDeploymentName, Namespace: capsuleNamespace}, capsuleDeployment) + Expect(k8sClient.Update(context.Background(), config)).ToNot(HaveOccurred()) - for i, container := range capsuleDeployment.Spec.Template.Spec.Containers { - if container.Name == capsuleManagerContainerName { - capsuleDeployment.Spec.Template.Spec.Containers[i].Args = args - capsuleDeployment.Spec.Template.Spec.Containers[i].LivenessProbe.FailureThreshold = 4 - capsuleDeployment.Spec.Template.Spec.Containers[i].LivenessProbe.PeriodSeconds = 3 - } - } - capsuleDeployment.ResourceVersion = "" - err := k8sClient.Update(context.TODO(), capsuleDeployment) - Expect(err).ToNot(HaveOccurred()) - - Eventually(func() []string { - var containerArgs []string - Expect(k8sClient.Get(context.TODO(), types.NamespacedName{Name: capsuleDeploymentName, Namespace: capsuleNamespace}, capsuleDeployment)).Should(Succeed()) - for i, container := range capsuleDeployment.Spec.Template.Spec.Containers { - if container.Name == capsuleManagerContainerName { - containerArgs = capsuleDeployment.Spec.Template.Spec.Containers[i].Args - } - } - return containerArgs - }, podRecreationTimeoutInterval, defaultPollInterval).Should(HaveLen(len(args))) - - pl := &corev1.PodList{} - Eventually(func() []corev1.Pod { - Expect(k8sClient.List(context.TODO(), pl, client.MatchingLabels{"app.kubernetes.io/instance": "capsule"})).Should(Succeed()) - return pl.Items - }, podRecreationTimeoutInterval, defaultPollInterval).Should(HaveLen(2)) - Eventually(func() []corev1.Pod { - Expect(k8sClient.List(context.TODO(), pl, client.MatchingLabels{"app.kubernetes.io/instance": "capsule"})).Should(Succeed()) - return pl.Items - }, podRecreationTimeoutInterval, defaultPollInterval).Should(HaveLen(1)) - // had to add sleep in order to manager be started - time.Sleep(defaultTimeoutInterval) + time.Sleep(time.Second) } func KindInTenantRoleBindingAssertions(ns *corev1.Namespace, timeout time.Duration) (out []AsyncAssertion) {