From d7dd98c1c2c040c75129532be8ee4e4105da3e87 Mon Sep 17 00:00:00 2001 From: fabritsius Date: Mon, 24 Oct 2022 13:06:19 +0400 Subject: [PATCH 1/4] Add CheckConditionsNotSet func checks unset conditions --- test/e2e/actions/conditions.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/e2e/actions/conditions.go b/test/e2e/actions/conditions.go index fe20467101..a609f2372a 100644 --- a/test/e2e/actions/conditions.go +++ b/test/e2e/actions/conditions.go @@ -22,6 +22,13 @@ func WaitForConditionsToBecomeTrue(userData *model.TestDataProvider, conditonTyp Should(BeTrue(), fmt.Sprintf("Status conditions %v are not all 'True'", conditonTypes)) } +// CheckConditionNotSet wait for Ready condition to become true and checks that input conditions are unset +func CheckConditionNotSet(userData *model.TestDataProvider, conditonTypes ...status.ConditionType) { + Eventually(conditionsAreUnset(userData, conditonTypes...)). + WithTimeout(15*time.Minute).WithPolling(20*time.Second). + Should(BeTrue(), fmt.Sprintf("Status conditions %v should be unset", conditonTypes)) +} + func allConditionsAreTrueFunc(userData *model.TestDataProvider, conditonTypes ...status.ConditionType) func(g types.Gomega) bool { return func(g Gomega) bool { conditions, err := kube.GetAllProjectConditions(userData) @@ -44,3 +51,29 @@ func allConditionsAreTrueFunc(userData *model.TestDataProvider, conditonTypes .. return true } } + +func conditionsAreUnset(userData *model.TestDataProvider, unsetConditonTypes ...status.ConditionType) func(g types.Gomega) bool { + return func(g Gomega) bool { + conditions, err := kube.GetAllProjectConditions(userData) + g.Expect(err).ShouldNot(HaveOccurred()) + + isReady := false + for _, condition := range conditions { + if !isReady { + if condition.Type == status.ReadyType && condition.Status == v1.ConditionTrue { + isReady = true + } + + return false + } + + for _, unsetConditionType := range unsetConditonTypes { + if condition.Type == unsetConditionType { + return false + } + } + } + + return isReady + } +} From b8c8c7e39545a60586bf75c185d12f4b2f16d78f Mon Sep 17 00:00:00 2001 From: fabritsius Date: Mon, 24 Oct 2022 13:08:28 +0400 Subject: [PATCH 2/4] Use the func in the tests --- test/e2e/actions/conditions.go | 4 ++-- test/e2e/auditing_test.go | 2 +- test/e2e/encryption_at_rest_test.go | 2 +- test/e2e/integration_test.go | 2 +- test/e2e/project_settings_test.go | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/e2e/actions/conditions.go b/test/e2e/actions/conditions.go index a609f2372a..0a7f8808f7 100644 --- a/test/e2e/actions/conditions.go +++ b/test/e2e/actions/conditions.go @@ -22,8 +22,8 @@ func WaitForConditionsToBecomeTrue(userData *model.TestDataProvider, conditonTyp Should(BeTrue(), fmt.Sprintf("Status conditions %v are not all 'True'", conditonTypes)) } -// CheckConditionNotSet wait for Ready condition to become true and checks that input conditions are unset -func CheckConditionNotSet(userData *model.TestDataProvider, conditonTypes ...status.ConditionType) { +// CheckConditionsNotSet wait for Ready condition to become true and checks that input conditions are unset +func CheckConditionsNotSet(userData *model.TestDataProvider, conditonTypes ...status.ConditionType) { Eventually(conditionsAreUnset(userData, conditonTypes...)). WithTimeout(15*time.Minute).WithPolling(20*time.Second). Should(BeTrue(), fmt.Sprintf("Status conditions %v should be unset", conditonTypes)) diff --git a/test/e2e/auditing_test.go b/test/e2e/auditing_test.go index b893abecde..a9e8bd9d7a 100644 --- a/test/e2e/auditing_test.go +++ b/test/e2e/auditing_test.go @@ -68,7 +68,7 @@ func auditingFlow(userData *model.TestDataProvider, auditing *v1.Auditing) { By("Remove Auditing from the project", func() { userData.Project.Spec.Auditing = nil Expect(userData.K8SClient.Update(userData.Context, userData.Project)).Should(Succeed()) - actions.WaitForConditionsToBecomeTrue(userData, status.ReadyType) + actions.CheckConditionsNotSet(userData, status.AuditingReadyType) }) } diff --git a/test/e2e/encryption_at_rest_test.go b/test/e2e/encryption_at_rest_test.go index 95b761aab2..eae17275cd 100644 --- a/test/e2e/encryption_at_rest_test.go +++ b/test/e2e/encryption_at_rest_test.go @@ -132,7 +132,7 @@ func encryptionAtRestFlow(userData *model.TestDataProvider, encAtRest v1.Encrypt }) By("Check if project returned back to the initial state", func() { - actions.WaitForConditionsToBecomeTrue(userData, status.ReadyType) + actions.CheckConditionsNotSet(userData, status.EncryptionAtRestReadyType) Expect(userData.K8SClient.Get(userData.Context, types.NamespacedName{Name: userData.Project.Name, Namespace: userData.Resources.Namespace}, userData.Project)).Should(Succeed()) diff --git a/test/e2e/integration_test.go b/test/e2e/integration_test.go index e00c26f24e..a0974c1f44 100644 --- a/test/e2e/integration_test.go +++ b/test/e2e/integration_test.go @@ -114,7 +114,7 @@ func integrationCycle(data *model.TestDataProvider, key string) { Namespace: data.Resources.Namespace}, data.Project)).Should(Succeed()) data.Project.Spec.Integrations = []project.Integration{} Expect(data.K8SClient.Update(data.Context, data.Project)).Should(Succeed()) - actions.WaitForConditionsToBecomeTrue(data, status.ReadyType) + actions.CheckConditionsNotSet(data, status.IntegrationReadyType) }) By("Delete integration check", func() { diff --git a/test/e2e/project_settings_test.go b/test/e2e/project_settings_test.go index f8161ce88f..7e5a9600ec 100644 --- a/test/e2e/project_settings_test.go +++ b/test/e2e/project_settings_test.go @@ -70,6 +70,6 @@ func projectSettingsFlow(userData *model.TestDataProvider, settings *v1.ProjectS By("Remove Project Settings from the project", func() { userData.Project.Spec.Settings = nil Expect(userData.K8SClient.Update(userData.Context, userData.Project)).Should(Succeed()) - actions.WaitForConditionsToBecomeTrue(userData, status.ReadyType) + actions.CheckConditionsNotSet(userData, status.ProjectSettingsReadyType) }) } From 957310b2da3250e15389ce5499793227ef9efa2e Mon Sep 17 00:00:00 2001 From: fabritsius Date: Mon, 24 Oct 2022 13:23:11 +0400 Subject: [PATCH 3/4] fixup! Add CheckConditionsNotSet func checks unset conditions --- test/e2e/actions/conditions.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/test/e2e/actions/conditions.go b/test/e2e/actions/conditions.go index 0a7f8808f7..f80289d31a 100644 --- a/test/e2e/actions/conditions.go +++ b/test/e2e/actions/conditions.go @@ -59,14 +59,17 @@ func conditionsAreUnset(userData *model.TestDataProvider, unsetConditonTypes ... isReady := false for _, condition := range conditions { - if !isReady { - if condition.Type == status.ReadyType && condition.Status == v1.ConditionTrue { - isReady = true - } - - return false + if condition.Type == status.ReadyType && condition.Status == v1.ConditionTrue { + isReady = true + break } + } + if !isReady { + return false + } + + for _, condition := range conditions { for _, unsetConditionType := range unsetConditonTypes { if condition.Type == unsetConditionType { return false @@ -74,6 +77,6 @@ func conditionsAreUnset(userData *model.TestDataProvider, unsetConditonTypes ... } } - return isReady + return true } } From 102738e6ec60f5b93b4eed6d8887cd789ddd84c1 Mon Sep 17 00:00:00 2001 From: fabritsius Date: Tue, 25 Oct 2022 12:52:28 +0400 Subject: [PATCH 4/4] Fix the test for Integrations --- test/e2e/integration_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/e2e/integration_test.go b/test/e2e/integration_test.go index a0974c1f44..2c38633656 100644 --- a/test/e2e/integration_test.go +++ b/test/e2e/integration_test.go @@ -1,7 +1,6 @@ package e2e_test import ( - "fmt" "os" "strings" @@ -119,9 +118,8 @@ func integrationCycle(data *model.TestDataProvider, key string) { By("Delete integration check", func() { integration, err := atlasClient.GetIntegrationbyType(data.Project.ID(), integrationType) - By(fmt.Sprintf("Integration %v", integration)) - Expect(err).ShouldNot(HaveOccurred()) - Expect(integration.Enabled).To(BeFalse()) + Expect(err).Should(HaveOccurred()) + Expect(integration).To(BeNil()) // TODO uncomment with // status := kubecli.GetStatusCondition(string(status.IntegrationReadyType), data.Resources.Namespace, data.Resources.GetAtlasProjectFullKubeName())