open-cluster-management.io/governance-policy-propagator@v0.13.0/test/e2e/case19_rep_policy_placement_test.go (about) 1 package e2e 2 3 import ( 4 "context" 5 "strconv" 6 7 . "github.com/onsi/ginkgo/v2" 8 . "github.com/onsi/gomega" 9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 11 "open-cluster-management.io/governance-policy-propagator/test/utils" 12 ) 13 14 var _ = Describe("Test replicated_policy controller and propagation", Ordered, Serial, func() { 15 const ( 16 case19PolicyName string = "case19-test-policy" 17 case19PolicyYaml string = "../resources/case19_rep_policy_placement/case19-test-policy.yaml" 18 ) 19 20 BeforeAll(func() { 21 By("Creating " + case19PolicyName) 22 utils.Kubectl("apply", 23 "-f", case19PolicyYaml, 24 "-n", testNamespace, 25 "--kubeconfig="+kubeconfigHub) 26 plc := utils.GetWithTimeout( 27 clientHubDynamic, gvrPolicy, case19PolicyName, testNamespace, true, defaultTimeoutSeconds, 28 ) 29 Expect(plc).NotTo(BeNil()) 30 }) 31 AfterAll(func() { 32 By("Creating " + case19PolicyName) 33 utils.Kubectl("delete", 34 "-f", case19PolicyYaml, 35 "-n", testNamespace, 36 "--kubeconfig="+kubeconfigHub, 37 "--ignore-not-found") 38 plc := utils.GetWithTimeout( 39 clientHubDynamic, gvrPolicy, case19PolicyName, testNamespace, false, defaultTimeoutSeconds, 40 ) 41 Expect(plc).Should(BeNil()) 42 plr := utils.GetWithTimeout( 43 clientHubDynamic, gvrPlacementDecision, case19PolicyName+"-plr-1", 44 testNamespace, false, defaultTimeoutSeconds, 45 ) 46 Expect(plr).Should(BeNil()) 47 }) 48 It("should propagate reconcile only managed2", func() { 49 By("Patching test-policy-plr with decision of cluster managed1, managed2") 50 plr := utils.GetWithTimeout( 51 clientHubDynamic, 52 gvrPlacementDecision, 53 case19PolicyName+"-plr-1", 54 testNamespace, 55 true, 56 defaultTimeoutSeconds, 57 ) 58 plr.Object["status"] = utils.GeneratePldStatus(plr.GetName(), plr.GetNamespace(), "managed1", "managed2") 59 _, err := clientHubDynamic.Resource(gvrPlacementDecision).Namespace(testNamespace).UpdateStatus( 60 context.TODO(), 61 plr, metav1.UpdateOptions{}, 62 ) 63 Expect(err).ToNot(HaveOccurred()) 64 plc := utils.GetWithTimeout( 65 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed1", true, defaultTimeoutSeconds, 66 ) 67 Expect(plc).ToNot(BeNil()) 68 69 plc2 := utils.GetWithTimeout( 70 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed2", true, defaultTimeoutSeconds, 71 ) 72 Expect(plc2).ToNot(BeNil()) 73 beforeString := utils.GetMetrics("controller_runtime_reconcile_total", 74 `controller=\"replicated-policy\"`, 75 `,result=\"success\"`, 76 )[0] 77 beforeTotal, err := strconv.Atoi(beforeString) 78 Expect(err).ShouldNot(HaveOccurred()) 79 // modify decision 80 plr = utils.GetWithTimeout( 81 clientHubDynamic, 82 gvrPlacementDecision, 83 case19PolicyName+"-plr-1", 84 testNamespace, 85 true, 86 defaultTimeoutSeconds, 87 ) 88 plr.Object["status"] = utils.GeneratePldStatus(plr.GetName(), plr.GetNamespace(), "managed2") 89 _, err = clientHubDynamic.Resource(gvrPlacementDecision).Namespace(testNamespace).UpdateStatus( 90 context.TODO(), 91 plr, metav1.UpdateOptions{}, 92 ) 93 Expect(err).ToNot(HaveOccurred()) 94 plc = utils.GetWithTimeout( 95 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed1", false, defaultTimeoutSeconds, 96 ) 97 Expect(plc).To(BeNil()) 98 plc2 = utils.GetWithTimeout( 99 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed2", true, defaultTimeoutSeconds, 100 ) 101 Expect(plc2).ToNot(BeNil()) 102 afterString := utils.GetMetrics("controller_runtime_reconcile_total", 103 `controller=\"replicated-policy\"`, 104 `,result=\"success\"`, 105 )[0] 106 afterTotal, err := strconv.Atoi(afterString) 107 Expect(err).ShouldNot(HaveOccurred()) 108 Expect(afterTotal - beforeTotal).Should(Equal(1)) 109 }) 110 It("should reconcile twice when managed1 created and managed2 deleted By placementBinding", func() { 111 // Now, connected cluster is managed2 112 By("Get controller_runtime_reconcile_total number") 113 beforeString := utils.GetMetrics("controller_runtime_reconcile_total", 114 `controller=\"replicated-policy\"`, 115 `,result=\"success\"`, 116 )[0] 117 beforeTotal, err := strconv.Atoi(beforeString) 118 Expect(err).ShouldNot(HaveOccurred()) 119 By("Patching test-policy-plr with placementDecision of cluster managed1") 120 plr := utils.GetWithTimeout( 121 clientHubDynamic, 122 gvrPlacementDecision, 123 case19PolicyName+"-plr-2", 124 testNamespace, 125 true, 126 defaultTimeoutSeconds, 127 ) 128 plr.Object["status"] = utils.GeneratePldStatus(plr.GetName(), plr.GetNamespace(), "managed1") 129 _, err = clientHubDynamic.Resource(gvrPlacementDecision).Namespace(testNamespace).UpdateStatus( 130 context.TODO(), 131 plr, metav1.UpdateOptions{}, 132 ) 133 Expect(err).ShouldNot(HaveOccurred()) 134 By("Patching gvrPlacementBinding placementRef") 135 plb := utils.GetWithTimeout( 136 clientHubDynamic, 137 gvrPlacementBinding, 138 case19PolicyName+"-pb", 139 testNamespace, 140 true, 141 defaultTimeoutSeconds, 142 ) 143 plb.Object["placementRef"].(map[string]interface{})["name"] = case19PolicyName + "-plr-2" 144 _, err = clientHubDynamic.Resource(gvrPlacementBinding).Namespace(testNamespace).Update( 145 context.TODO(), 146 plb, metav1.UpdateOptions{}, 147 ) 148 Expect(err).ToNot(HaveOccurred()) 149 By("Check replicate policy changed") 150 plc := utils.GetWithTimeout( 151 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed1", true, defaultTimeoutSeconds, 152 ) 153 Expect(plc).ToNot(BeNil()) 154 plc2 := utils.GetWithTimeout( 155 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed2", false, defaultTimeoutSeconds, 156 ) 157 Expect(plc2).To(BeNil()) 158 afterString := utils.GetMetrics("controller_runtime_reconcile_total", 159 `controller=\"replicated-policy\"`, 160 `,result=\"success\"`, 161 )[0] 162 afterTotal, err := strconv.Atoi(afterString) 163 Expect(err).ShouldNot(HaveOccurred()) 164 Expect(afterTotal - beforeTotal).Should(Equal(2)) 165 }) 166 It("should reconcile twice when managed1 and managed2 are created by placementRule", func() { 167 // Now, connected cluster is managed1 168 beforeString := utils.GetMetrics("controller_runtime_reconcile_total", 169 `controller=\"replicated-policy\"`, 170 `,result=\"success\"`, 171 )[0] 172 beforeTotal, err := strconv.Atoi(beforeString) 173 Expect(err).ShouldNot(HaveOccurred()) 174 By("Patching gvrPlacementBinding placementRef") 175 plb := utils.GetWithTimeout( 176 clientHubDynamic, 177 gvrPlacementBinding, 178 case19PolicyName+"-pb", 179 testNamespace, 180 true, 181 defaultTimeoutSeconds, 182 ) 183 plb.Object["placementRef"].(map[string]interface{})["name"] = case19PolicyName + "-plr" 184 plb.Object["placementRef"].(map[string]interface{})["kind"] = "PlacementRule" 185 plb.Object["placementRef"].(map[string]interface{})["apiGroup"] = gvrPlacementRule.Group 186 _, err = clientHubDynamic.Resource(gvrPlacementBinding).Namespace(testNamespace).Update( 187 context.TODO(), 188 plb, metav1.UpdateOptions{}, 189 ) 190 Expect(err).ToNot(HaveOccurred()) 191 afterString := utils.GetMetrics("controller_runtime_reconcile_total", 192 `controller=\"replicated-policy\"`, 193 `,result=\"success\"`, 194 )[0] 195 By("Managed1 deleted, Should be only 1 reconcile") 196 afterTotal, err := strconv.Atoi(afterString) 197 Expect(err).ShouldNot(HaveOccurred()) 198 Expect(afterTotal - beforeTotal).Should(Equal(1)) 199 200 By("Get controller_runtime_reconcile_total number before change placementrule") 201 beforeString = utils.GetMetrics("controller_runtime_reconcile_total", 202 `controller=\"replicated-policy\"`, 203 `,result=\"success\"`, 204 )[0] 205 beforeTotal, err = strconv.Atoi(beforeString) 206 Expect(err).ShouldNot(HaveOccurred()) 207 208 By("Patching test-policy-plr with placementRule of cluster managed1, managed2") 209 plr := utils.GetWithTimeout( 210 clientHubDynamic, 211 gvrPlacementRule, 212 case19PolicyName+"-plr", 213 testNamespace, 214 true, 215 defaultTimeoutSeconds, 216 ) 217 plr.Object["status"] = utils.GeneratePlrStatus("managed1", "managed2") 218 _, err = clientHubDynamic.Resource(gvrPlacementRule).Namespace(testNamespace).UpdateStatus( 219 context.TODO(), 220 plr, metav1.UpdateOptions{}, 221 ) 222 Expect(err).ShouldNot(HaveOccurred()) 223 224 By("Check replicate policy changed") 225 plc := utils.GetWithTimeout( 226 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed1", true, defaultTimeoutSeconds, 227 ) 228 Expect(plc).ToNot(BeNil()) 229 plc2 := utils.GetWithTimeout( 230 clientHubDynamic, gvrPolicy, testNamespace+"."+case19PolicyName, "managed2", true, defaultTimeoutSeconds, 231 ) 232 Expect(plc2).ToNot(BeNil()) 233 afterString = utils.GetMetrics("controller_runtime_reconcile_total", 234 `controller=\"replicated-policy\"`, 235 `,result=\"success\"`, 236 )[0] 237 afterTotal, err = strconv.Atoi(afterString) 238 Expect(err).ShouldNot(HaveOccurred()) 239 Expect(afterTotal - beforeTotal).Should(Equal(2)) 240 }) 241 })