open-cluster-management.io/governance-policy-propagator@v0.13.0/test/e2e/case8_metrics_test.go (about) 1 // Copyright Contributors to the Open Cluster Management project 2 3 package e2e 4 5 import ( 6 "context" 7 8 . "github.com/onsi/ginkgo/v2" 9 . "github.com/onsi/gomega" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 12 policiesv1 "open-cluster-management.io/governance-policy-propagator/api/v1" 13 "open-cluster-management.io/governance-policy-propagator/controllers/common" 14 "open-cluster-management.io/governance-policy-propagator/test/utils" 15 ) 16 17 var _ = Describe("Test metrics appear locally", func() { 18 const ( 19 case8PolicyName string = "case8-test-policy" 20 case8PolicyYaml string = "../resources/case8_metrics/case8-test-policy.yaml" 21 ) 22 23 It("should report 0 for compliant root policy and replicated policies", func() { 24 By("Creating " + case8PolicyYaml) 25 utils.Kubectl("apply", 26 "-f", case8PolicyYaml, 27 "-n", testNamespace, 28 "--kubeconfig="+kubeconfigHub) 29 plc := utils.GetWithTimeout( 30 clientHubDynamic, gvrPolicy, case8PolicyName, testNamespace, true, defaultTimeoutSeconds, 31 ) 32 Expect(plc).NotTo(BeNil()) 33 By("Patching test-policy-plr with decision of cluster managed1 and managed2") 34 plr := utils.GetWithTimeout( 35 clientHubDynamic, gvrPlacementRule, case8PolicyName+"-plr", testNamespace, true, defaultTimeoutSeconds, 36 ) 37 plr.Object["status"] = utils.GeneratePlrStatus("managed1", "managed2") 38 _, err := clientHubDynamic.Resource(gvrPlacementRule).Namespace(testNamespace).UpdateStatus( 39 context.TODO(), plr, metav1.UpdateOptions{}, 40 ) 41 Expect(err).ToNot(HaveOccurred()) 42 plc = utils.GetWithTimeout( 43 clientHubDynamic, gvrPolicy, testNamespace+"."+case8PolicyName, "managed2", true, defaultTimeoutSeconds, 44 ) 45 Expect(plc).ToNot(BeNil()) 46 opt := metav1.ListOptions{LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case8PolicyName} 47 By("Patching both replicated policy status to compliant") 48 replicatedPlcList := utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 2, true, defaultTimeoutSeconds) 49 for _, replicatedPlc := range replicatedPlcList.Items { 50 replicatedPlc.Object["status"] = &policiesv1.PolicyStatus{ 51 ComplianceState: policiesv1.Compliant, 52 } 53 _, err = clientHubDynamic.Resource(gvrPolicy).Namespace(replicatedPlc.GetNamespace()).UpdateStatus( 54 context.TODO(), &replicatedPlc, metav1.UpdateOptions{}, 55 ) 56 Expect(err).ToNot(HaveOccurred()) 57 } 58 By("Checking the status of root policy") 59 yamlPlc := utils.ParseYaml("../resources/case8_metrics/managed-both-status-compliant.yaml") 60 Eventually(func() interface{} { 61 rootPlc := utils.GetWithTimeout( 62 clientHubDynamic, gvrPolicy, case8PolicyName, testNamespace, true, defaultTimeoutSeconds, 63 ) 64 65 return rootPlc.Object["status"] 66 }, defaultTimeoutSeconds, 1).Should(utils.SemanticEqual(yamlPlc.Object["status"])) 67 By("Checking metric endpoint for root policy status") 68 Eventually(func() interface{} { 69 return utils.GetMetrics("policy_governance_info", `policy=\"case8-test-policy\"`, `type=\"root\"`) 70 }, defaultTimeoutSeconds, 1).Should(Equal([]string{"0"})) 71 By("Checking metric endpoint for managed1 replicated policy status") 72 Eventually(func() interface{} { 73 return utils.GetMetrics( 74 "policy_governance_info", `policy=\"case8-test-policy\"`, `cluster_namespace=\"managed1\",`, 75 ) 76 }, defaultTimeoutSeconds, 1).Should(Equal([]string{"0"})) 77 By("Checking metric endpoint for managed2 replicated policy status") 78 Eventually(func() interface{} { 79 return utils.GetMetrics( 80 "policy_governance_info", `policy=\"case8-test-policy\"`, `cluster_namespace=\"managed2\",`, 81 ) 82 }, defaultTimeoutSeconds, 1).Should(Equal([]string{"0"})) 83 }) 84 It("should report 1 for noncompliant root policy and replicated policies", func() { 85 By("Patching both replicated policy status to noncompliant") 86 opt := metav1.ListOptions{LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case8PolicyName} 87 replicatedPlcList := utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 2, true, defaultTimeoutSeconds) 88 for _, replicatedPlc := range replicatedPlcList.Items { 89 replicatedPlc.Object["status"] = &policiesv1.PolicyStatus{ 90 ComplianceState: policiesv1.NonCompliant, 91 } 92 _, err := clientHubDynamic.Resource(gvrPolicy).Namespace(replicatedPlc.GetNamespace()).UpdateStatus( 93 context.TODO(), &replicatedPlc, metav1.UpdateOptions{}, 94 ) 95 Expect(err).ToNot(HaveOccurred()) 96 } 97 By("Checking the status of root policy") 98 yamlPlc := utils.ParseYaml("../resources/case8_metrics/managed-both-status-noncompliant.yaml") 99 Eventually(func() interface{} { 100 rootPlc := utils.GetWithTimeout( 101 clientHubDynamic, gvrPolicy, case8PolicyName, testNamespace, true, defaultTimeoutSeconds, 102 ) 103 104 return rootPlc.Object["status"] 105 }, defaultTimeoutSeconds, 1).Should(utils.SemanticEqual(yamlPlc.Object["status"])) 106 By("Checking metric endpoint for root policy status") 107 Eventually(func() interface{} { 108 return utils.GetMetrics("policy_governance_info", `policy=\"case8-test-policy\"`, `type=\"root\"`) 109 }, defaultTimeoutSeconds, 1).Should(Equal([]string{"1"})) 110 By("Checking metric endpoint for managed1 replicated policy status") 111 Eventually(func() interface{} { 112 return utils.GetMetrics( 113 "policy_governance_info", `policy=\"case8-test-policy\"`, `cluster_namespace=\"managed1\",`, 114 ) 115 }, defaultTimeoutSeconds, 1).Should(Equal([]string{"1"})) 116 By("Checking metric endpoint for managed2 replicated policy status") 117 Eventually(func() interface{} { 118 return utils.GetMetrics( 119 "policy_governance_info", `policy=\"case8-test-policy\"`, `cluster_namespace=\"managed2\",`, 120 ) 121 }, defaultTimeoutSeconds, 1).Should(Equal([]string{"1"})) 122 }) 123 It("should not report metrics for policies after they are deleted", func() { 124 By("Deleting the policy") 125 utils.Kubectl("delete", 126 "-f", case8PolicyYaml, 127 "-n", testNamespace, 128 "--kubeconfig="+kubeconfigHub) 129 opt := metav1.ListOptions{} 130 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 0, false, 10) 131 By("Checking metric endpoint for root policy status") 132 Eventually(func() interface{} { 133 return utils.GetMetrics("policy_governance_info", `policy=\"case8-test-policy\"`, `type=\"root\"`) 134 }, defaultTimeoutSeconds, 1).Should(Equal([]string{})) 135 By("Checking metric endpoint for managed1 replicated policy status") 136 Eventually(func() interface{} { 137 return utils.GetMetrics( 138 "policy_governance_info", `policy=\"case8-test-policy\"`, `cluster_namespace=\"managed1\",`, 139 ) 140 }, defaultTimeoutSeconds, 1).Should(Equal([]string{})) 141 By("Checking metric endpoint for managed2 replicated policy status") 142 Eventually(func() interface{} { 143 return utils.GetMetrics( 144 "policy_governance_info", `policy=\"case8-test-policy\"`, `cluster_namespace=\"managed2\",`, 145 ) 146 }, defaultTimeoutSeconds, 1).Should(Equal([]string{})) 147 }) 148 })