Skip to content

Commit

Permalink
Fix flaky event recording config-policy-controller E2E test
Browse files Browse the repository at this point in the history
Signed-off-by: Yi Rae Kim <yikim@redhat.com>
  • Loading branch information
yiraeChristineKim authored and openshift-merge-bot[bot] committed Nov 13, 2023
1 parent d2a4e04 commit 7e99e08
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 75 deletions.
4 changes: 2 additions & 2 deletions test/e2e/case13_templatization_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,7 @@ var _ = Describe("Test templatization", Ordered, func() {
case13PruneTmpErr+"-configmap", "default", true, defaultTimeoutSeconds)

return configmap
}, defaultTimeoutSeconds, 1).ShouldNot(BeNil())
}, 30, 1).ShouldNot(BeNil())

By("Change to valid configmap")
utils.Kubectl("patch", "configurationpolicy", case13PruneTmpErr, "--type=json", "-p",
Expand Down Expand Up @@ -520,7 +520,7 @@ var _ = Describe("Test templatization", Ordered, func() {
case13PruneTmpErr+"-configmap", "default", true, defaultTimeoutSeconds)

return configmap
}, defaultTimeoutSeconds, 1).ShouldNot(BeNil())
}, 30, 1).ShouldNot(BeNil())
})
AfterAll(func() {
utils.Kubectl("delete", "configurationpolicy", case13PruneTmpErr,
Expand Down
75 changes: 43 additions & 32 deletions test/e2e/case15_event_format_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
v1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

Expand Down Expand Up @@ -52,18 +53,20 @@ var _ = Describe("Testing compliance event formatting", Ordered, func() {
}, defaultTimeoutSeconds, 1).Should(Equal("Compliant"))

By("Checking events on the configurationpolicy")
compPlcEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15AlwaysCompliantName, "", "Policy status is Compliant", defaultTimeoutSeconds)
Expect(compPlcEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15AlwaysCompliantName, "", "Policy status is Compliant", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
nonCompPlcEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15AlwaysCompliantName, "", "Policy status is NonCompliant", defaultTimeoutSeconds)
Expect(nonCompPlcEvents).To(BeEmpty())

By("Checking events on the parent policy")
compParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15AlwaysCompliantParentName, "policy: "+testNamespace+"/"+
case15AlwaysCompliantName, "^Compliant;", defaultTimeoutSeconds)
Expect(compParentEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15AlwaysCompliantParentName, "policy: "+testNamespace+"/"+
case15AlwaysCompliantName, "^Compliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
nonCompParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15AlwaysCompliantParentName, "policy: "+testNamespace+"/"+
case15AlwaysCompliantName, "^NonCompliant;", defaultTimeoutSeconds)
Expand All @@ -87,19 +90,21 @@ var _ = Describe("Testing compliance event formatting", Ordered, func() {
compPlcEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15NeverCompliantName, "", "Policy status is Compliant", defaultTimeoutSeconds)
Expect(compPlcEvents).To(BeEmpty())
nonCompPlcEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15NeverCompliantName, "", "Policy status is NonCompliant", defaultTimeoutSeconds)
Expect(nonCompPlcEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15NeverCompliantName, "", "Policy status is NonCompliant", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())

By("Checking events on the parent policy")
compParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15NeverCompliantParentName, "policy: "+testNamespace+"/"+case15NeverCompliantName,
"^Compliant;", defaultTimeoutSeconds)
Expect(compParentEvents).To(BeEmpty())
nonCompParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15NeverCompliantParentName, "policy: "+testNamespace+"/"+case15NeverCompliantName,
"^NonCompliant;", defaultTimeoutSeconds)
Expect(nonCompParentEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15NeverCompliantParentName, "policy: "+testNamespace+"/"+case15NeverCompliantName,
"^NonCompliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
})
It("Records events for a policy that becomes compliant", func() {
createConfigPolicyWithParent(case15BecomesCompliantParentYaml, case15BecomesCompliantParentName,
Expand All @@ -126,17 +131,20 @@ var _ = Describe("Testing compliance event formatting", Ordered, func() {
}, defaultTimeoutSeconds, 1).Should(Equal("Compliant"))

By("Checking for compliant events on the configurationpolicy and the parent policy")
compPlcEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesCompliantName, "", "Policy status is Compliant", defaultTimeoutSeconds)
Expect(compPlcEvents).NotTo(BeEmpty())
compParentEventsPreCreation := utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesCompliantParentName, "policy: "+testNamespace+"/"+case15BecomesCompliantName,
"^NonCompliant;.*not found in namespace default$", defaultTimeoutSeconds)
Expect(compParentEventsPreCreation).NotTo(BeEmpty())
compParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace, case15BecomesCompliantParentName,
"policy: "+testNamespace+"/"+case15BecomesCompliantName,
"^Compliant;.*was created successfully in namespace default$", defaultTimeoutSeconds)
Expect(compParentEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesCompliantName, "", "Policy status is Compliant", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesCompliantParentName, "policy: "+testNamespace+"/"+case15BecomesCompliantName,
"^NonCompliant;.*not found in namespace default$", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace, case15BecomesCompliantParentName,
"policy: "+testNamespace+"/"+case15BecomesCompliantName,
"^Compliant;.*was created successfully in namespace default$", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
})
It("Records events for a policy that becomes noncompliant", func() {
createConfigPolicyWithParent(case15BecomesNonCompliantParentYaml, case15BecomesNonCompliantParentName,
Expand All @@ -162,13 +170,16 @@ var _ = Describe("Testing compliance event formatting", Ordered, func() {
}, defaultTimeoutSeconds, 1).Should(Equal("NonCompliant"))

By("Checking for noncompliant events on the configurationpolicy and the parent policy")
nonCompPlcEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesNonCompliantName, "", "Policy status is NonCompliant", defaultTimeoutSeconds)
Expect(nonCompPlcEvents).NotTo(BeEmpty())
nonCompParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesNonCompliantParentName, "policy: "+testNamespace+"/"+case15BecomesNonCompliantName,
"^NonCompliant;", defaultTimeoutSeconds)
Expect(nonCompParentEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesNonCompliantName, "", "Policy status is NonCompliant", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())

Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace,
case15BecomesNonCompliantParentName, "policy: "+testNamespace+"/"+case15BecomesNonCompliantName,
"^NonCompliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
})
AfterAll(func() {
policies := []string{
Expand Down
44 changes: 24 additions & 20 deletions test/e2e/case17_evaluation_interval_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,28 +70,32 @@ var _ = Describe("Test evaluation interval", Ordered, func() {
Expect(lastEvaluatedParsed.Before(lastEvalRefreshedParsed)).To(BeTrue())

By("Verifying that only one event was sent for the configuration policy")
events := utils.GetMatchingEvents(
clientManaged,
testNamespace,
case17PolicyName,
"",
"Policy status is NonCompliant",
defaultTimeoutSeconds,
)
Expect(events).To(HaveLen(1))
Expect(events[0].Count).To(Equal(int32(1)))
Eventually(func(g Gomega) {
events := utils.GetMatchingEvents(
clientManaged,
testNamespace,
case17PolicyName,
"",
"Policy status is NonCompliant",
defaultTimeoutSeconds,
)
g.Expect(events).To(HaveLen(1))
g.Expect(events[0].Count).To(Equal(int32(1)))
}, defaultTimeoutSeconds, 1).Should(Succeed())

By("Verifying that only one event was sent for the parent policy")
parentEvents := utils.GetMatchingEvents(
clientManaged,
testNamespace,
case17ParentPolicyName,
"policy: "+testNamespace+"/"+case17PolicyName,
"^NonCompliant;",
defaultTimeoutSeconds,
)
Expect(parentEvents).To(HaveLen(1))
Expect(parentEvents[0].Count).To(Equal(int32(1)))
Eventually(func(g Gomega) {
parentEvents := utils.GetMatchingEvents(
clientManaged,
testNamespace,
case17ParentPolicyName,
"policy: "+testNamespace+"/"+case17PolicyName,
"^NonCompliant;",
defaultTimeoutSeconds,
)
g.Expect(parentEvents).To(HaveLen(1))
g.Expect(parentEvents[0].Count).To(Equal(int32(1)))
}, defaultTimeoutSeconds, 1).Should(Succeed())
})

It("Verifies that a compliant policy is not reevaluated when set to never", func() {
Expand Down
16 changes: 8 additions & 8 deletions test/e2e/case20_delete_objects_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20PodName, "default", true, defaultTimeoutSeconds)

return pod
}, defaultTimeoutSeconds, 1).Should(Not(BeNil()))
}, 30, 1).Should(Not(BeNil()))
})
It("Should create DeleteIfCreated policy", func() {
// delete pod to reset
Expand Down Expand Up @@ -284,7 +284,7 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20PodName, "default", true, defaultTimeoutSeconds)

return pod
}, defaultTimeoutSeconds, 1).Should(Not(BeNil()))
}, 30, 1).Should(Not(BeNil()))
})
It("should handle deleteAll properly for created obj", func() {
By("Creating " + case20ConfigPolicyNameExisting + " on managed")
Expand Down Expand Up @@ -313,7 +313,7 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20ConfigPolicyNameExisting, testNamespace, false, defaultTimeoutSeconds)

return managedPlc
}, defaultTimeoutSeconds, 1).Should(BeNil())
}, 30, 1).Should(BeNil())
})
It("should handle deleteAll properly for non created obj", func() {
By("Creating " + case20PodName + " on default")
Expand All @@ -323,7 +323,7 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20PodName, "default", true, defaultTimeoutSeconds)

return pod
}, defaultTimeoutSeconds, 1).Should(Not(BeNil()))
}, 30, 1).Should(Not(BeNil()))
By("Creating " + case20ConfigPolicyNameExisting + " on managed")
utils.Kubectl("apply", "-f", case20PolicyYamlExisting, "-n", testNamespace)
plc := utils.GetWithTimeout(clientManagedDynamic, gvrConfigPolicy,
Expand Down Expand Up @@ -378,13 +378,13 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20PodWithFinalizer, "default", true, defaultTimeoutSeconds)

return pod
}, defaultTimeoutSeconds, 1).Should(Not(BeNil()))
}, 30, 1).Should(Not(BeNil()))
Consistently(func() interface{} {
managedPlc := utils.GetWithTimeout(clientManagedDynamic, gvrConfigPolicy,
case20ConfigPolicyNameFinalizer, testNamespace, true, defaultTimeoutSeconds)

return utils.GetComplianceState(managedPlc)
}, defaultTimeoutSeconds, 1).Should(Equal("Terminating"))
}, 30, 1).Should(Equal("Terminating"))
})
It("should finish delete when pod finalizer is removed", func() {
utils.Kubectl(
Expand All @@ -405,7 +405,7 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20ConfigPolicyNameFinalizer, testNamespace, false, defaultTimeoutSeconds)

return managedPlc
}, defaultTimeoutSeconds, 1).Should(BeNil())
}, 30, 1).Should(BeNil())
})
It("should handle changing policy from inform to enforce", func() {
By("Creating " + case20ConfigPolicyNameChange + " on managed")
Expand Down Expand Up @@ -445,7 +445,7 @@ var _ = Describe("Test Object deletion", Ordered, func() {
case20ConfigPolicyNameChange, testNamespace, false, defaultTimeoutSeconds)

return managedPlc
}, defaultTimeoutSeconds, 1).Should(BeNil())
}, 30, 1).Should(BeNil())
})
It("should handle changing policy from enforce to inform", func() {
By("Creating " + case20ConfigPolicyNameChange + " on managed")
Expand Down
8 changes: 5 additions & 3 deletions test/e2e/case21_alternative_kubeconfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
Expand Down Expand Up @@ -74,8 +75,9 @@ var _ = Describe("Test an alternative kubeconfig for policy evaluation", Ordered
Expect(err).ToNot(HaveOccurred())

By("Verifying that a compliance event was created on the parent policy")
compParentEvents := utils.GetMatchingEvents(clientManaged, testNamespace, parentPolicyName,
fmt.Sprintf("policy: %v/%v", testNamespace, policyName), "^Compliant;", defaultTimeoutSeconds)
Expect(compParentEvents).NotTo(BeEmpty())
Eventually(func() []v1.Event {
return utils.GetMatchingEvents(clientManaged, testNamespace, parentPolicyName,
fmt.Sprintf("policy: %v/%v", testNamespace, policyName), "^Compliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 1).ShouldNot(BeEmpty())
})
})
4 changes: 2 additions & 2 deletions test/e2e/case23_invalid_field_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ var _ = Describe("Test an objectDefinition with an invalid field", Ordered, func
}

return startTime.After(compPlcEvents[len(compPlcEvents)-1].LastTimestamp.Time)
}, defaultTimeoutSeconds, 1).Should(BeTrue())
}, 30, 1).Should(BeTrue())

By("Verifying the message is correct when the " + configMapName + " ConfigMap already exists")
configmap := &corev1.ConfigMap{
Expand Down Expand Up @@ -118,7 +118,7 @@ var _ = Describe("Test an objectDefinition with an invalid field", Ordered, func
}

return alreadyExistsStartTime.After(compPlcEvents[len(compPlcEvents)-1].LastTimestamp.Time)
}, defaultTimeoutSeconds, 1).Should(BeTrue())
}, 30, 1).Should(BeTrue())
})

AfterAll(func() {
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/case32_secret_stringdata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ var _ = Describe("Test converted stringData being decoded before comparison for
"updated", defaultTimeoutSeconds))

return eventlen
}, 60, 2).Should(BeNumerically("<", 1))
}, 30, 2).Should(BeNumerically("<", 1))
})

AfterAll(func() {
Expand Down
6 changes: 3 additions & 3 deletions test/e2e/case34_enforce_w_status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"open-cluster-management.io/config-policy-controller/test/utils"
)

var _ = Describe("Test compliance events of enforced policies that define a status", func() {
var _ = Describe("Test compliance events of enforced policies that define a status", Serial, func() {
const (
rsrcPath = "../resources/case34_enforce_w_status/"
policyYAML = rsrcPath + "policy.yaml"
Expand All @@ -38,7 +38,7 @@ var _ = Describe("Test compliance events of enforced policies that define a stat
Consistently(func() interface{} {
return utils.GetMatchingEvents(clientManaged, testNamespace,
policyName, cfgPlcName, "^Compliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 5).Should(BeEmpty())
}, 30, 5).Should(BeEmpty())

By("Updating the policy")
utils.Kubectl("apply", "-f", updatedCfgPlc, "-n", testNamespace)
Expand All @@ -47,7 +47,7 @@ var _ = Describe("Test compliance events of enforced policies that define a stat
Consistently(func() interface{} {
return utils.GetMatchingEvents(clientManaged, testNamespace,
policyName, cfgPlcName, "^Compliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 5).Should(BeEmpty())
}, 30, 5).Should(BeEmpty())

By("Updating the nested policy to increment its generation")
utils.Kubectl("apply", "-f", nestedPlcYAML, "-n", testNamespace)
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/case35_no_apiversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ var _ = Describe("Test a policy with an objectDefinition that is missing apiVers
Consistently(func() interface{} {
return utils.GetMatchingEvents(clientManaged, testNamespace,
policyName, cfgPlcName, "^Compliant;", defaultTimeoutSeconds)
}, defaultTimeoutSeconds, 5).Should(BeEmpty())
}, 30, 5).Should(BeEmpty())
})

AfterEach(func() {
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/case7_no_spec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ var _ = Describe("Test cluster version obj template handling", func() {
case7ObjName, true, defaultTimeoutSeconds)

return matchToExpected(managedObj)
}, defaultTimeoutSeconds, 1).Should(Equal(true))
}, 30, 1).Should(Equal(true))
})
It("should handle change field to null", func() {
By("Creating " + case7ConfigPolicyNameNull + " on managed")
Expand Down
4 changes: 2 additions & 2 deletions test/utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ func GetWithTimeout(

EventuallyWithOffset(1, func() error {
var err error
namespace := clientHubDynamic.Resource(gvr).Namespace(namespace)
obj, err = namespace.Get(context.TODO(), name, metav1.GetOptions{})
obj, err = clientHubDynamic.Resource(gvr).Namespace(namespace).
Get(context.TODO(), name, metav1.GetOptions{})
if wantFound && err != nil {
return err
}
Expand Down

0 comments on commit 7e99e08

Please sign in to comment.