open-cluster-management.io/governance-policy-propagator@v0.13.0/test/e2e/case7_bindings_test.go (about) 1 // Copyright (c) 2021 Red Hat, Inc. 2 // Copyright Contributors to the Open Cluster Management project 3 4 package e2e 5 6 import ( 7 "context" 8 9 . "github.com/onsi/ginkgo/v2" 10 . "github.com/onsi/gomega" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 13 policiesv1 "open-cluster-management.io/governance-policy-propagator/api/v1" 14 "open-cluster-management.io/governance-policy-propagator/controllers/common" 15 "open-cluster-management.io/governance-policy-propagator/test/utils" 16 ) 17 18 var _ = Describe("Test policy propagation", func() { 19 const ( 20 case7PolicyName string = "case7-test-policy" 21 case7PolicyYaml string = "../resources/case7_placement_bindings/case7-test-policy.yaml" 22 case7BindingYaml1 string = "../resources/case7_placement_bindings/case7-test-binding1.yaml" 23 case7BindingYaml2 string = "../resources/case7_placement_bindings/case7-test-binding2.yaml" 24 case7BindingYaml3 string = "../resources/case7_placement_bindings/case7-test-binding3.yaml" 25 case7BindingYaml4 string = "../resources/case7_placement_bindings/case7-test-binding4.yaml" 26 ) 27 28 Describe("Create policy/pb/plc in ns:"+testNamespace, Ordered, func() { 29 BeforeAll(func() { 30 By("Creating " + case7PolicyYaml) 31 utils.Kubectl("apply", 32 "-f", case7PolicyYaml, 33 "-n", testNamespace, 34 "--kubeconfig="+kubeconfigHub) 35 plc := utils.GetWithTimeout( 36 clientHubDynamic, gvrPolicy, case7PolicyName, testNamespace, true, defaultTimeoutSeconds, 37 ) 38 Expect(plc).NotTo(BeNil()) 39 By("Creating " + case7BindingYaml1) 40 utils.Kubectl("apply", 41 "-f", case7BindingYaml1, 42 "-n", testNamespace, 43 "--kubeconfig="+kubeconfigHub) 44 binding := utils.GetWithTimeout( 45 clientHubDynamic, 46 gvrPlacementBinding, 47 "case7-test-policy-pb1", 48 testNamespace, 49 true, 50 defaultTimeoutSeconds, 51 ) 52 Expect(binding).NotTo(BeNil()) 53 By("Creating " + case7BindingYaml2) 54 utils.Kubectl("apply", 55 "-f", case7BindingYaml2, 56 "-n", testNamespace, 57 "--kubeconfig="+kubeconfigHub) 58 binding = utils.GetWithTimeout( 59 clientHubDynamic, 60 gvrPlacementBinding, 61 "case7-test-policy-pb2", 62 testNamespace, 63 true, 64 defaultTimeoutSeconds, 65 ) 66 Expect(binding).NotTo(BeNil()) 67 By("Creating " + case7BindingYaml3) 68 utils.Kubectl("apply", 69 "-f", case7BindingYaml3, 70 "-n", testNamespace, 71 "--kubeconfig="+kubeconfigHub) 72 binding = utils.GetWithTimeout( 73 clientHubDynamic, 74 gvrPlacementBinding, 75 "case7-test-policy-pb3", 76 testNamespace, 77 true, 78 defaultTimeoutSeconds, 79 ) 80 Expect(binding).NotTo(BeNil()) 81 By("Creating " + case7BindingYaml4) 82 utils.Kubectl("apply", 83 "-f", case7BindingYaml4, 84 "-n", testNamespace, 85 "--kubeconfig="+kubeconfigHub) 86 binding = utils.GetWithTimeout( 87 clientHubDynamic, 88 gvrPlacementBinding, 89 "case7-test-policy-pb4", 90 testNamespace, 91 true, 92 defaultTimeoutSeconds, 93 ) 94 Expect(binding).NotTo(BeNil()) 95 }) 96 It("should propagate to cluster ns managed1", func() { 97 By("Patching test-policy-plr with decision of cluster managed1") 98 plr := utils.GetWithTimeout( 99 clientHubDynamic, 100 gvrPlacementDecision, 101 case7PolicyName+"-plr-1", 102 testNamespace, 103 true, 104 defaultTimeoutSeconds, 105 ) 106 plr.Object["status"] = utils.GeneratePldStatus(plr.GetName(), plr.GetNamespace(), "managed1") 107 _, err := clientHubDynamic.Resource(gvrPlacementDecision).Namespace(testNamespace).UpdateStatus( 108 context.TODO(), plr, metav1.UpdateOptions{}, 109 ) 110 Expect(err).ToNot(HaveOccurred()) 111 plc := utils.GetWithTimeout( 112 clientHubDynamic, gvrPolicy, testNamespace+"."+case7PolicyName, "managed1", true, defaultTimeoutSeconds, 113 ) 114 Expect(plc).ToNot(BeNil()) 115 opt := metav1.ListOptions{ 116 LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case7PolicyName, 117 } 118 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 1, true, defaultTimeoutSeconds) 119 }) 120 It("placement bindings propagate to cluster ns managed1 and managed2", func() { 121 By("Patching test-policy-plr with decision of cluster managed2") 122 plr := utils.GetWithTimeout( 123 clientHubDynamic, 124 gvrPlacementDecision, 125 case7PolicyName+"-plr-2", 126 testNamespace, 127 true, 128 defaultTimeoutSeconds, 129 ) 130 plr.Object["status"] = utils.GeneratePldStatus(plr.GetName(), plr.GetNamespace(), "managed2") 131 _, err := clientHubDynamic.Resource(gvrPlacementDecision).Namespace(testNamespace).UpdateStatus( 132 context.TODO(), plr, metav1.UpdateOptions{}, 133 ) 134 Expect(err).ToNot(HaveOccurred()) 135 plc := utils.GetWithTimeout( 136 clientHubDynamic, gvrPolicy, testNamespace+"."+case7PolicyName, "managed2", true, defaultTimeoutSeconds, 137 ) 138 Expect(plc).ToNot(BeNil()) 139 opt := metav1.ListOptions{ 140 LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case7PolicyName, 141 } 142 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 2, true, defaultTimeoutSeconds) 143 }) 144 It("should remove policy from ns managed2", func() { 145 By("Patching test-policy-pb with a non existing plr") 146 pb := utils.GetWithTimeout( 147 clientHubDynamic, 148 gvrPlacementBinding, 149 case7PolicyName+"-pb2", 150 testNamespace, 151 true, 152 defaultTimeoutSeconds, 153 ) 154 pb.Object["placementRef"] = &policiesv1.Subject{ 155 APIGroup: "cluster.open-cluster-management.io", 156 Kind: "Placement", 157 Name: case7PolicyName + "-plr-nonexists", 158 } 159 _, err := clientHubDynamic.Resource(gvrPlacementBinding).Namespace(testNamespace).Update( 160 context.TODO(), pb, metav1.UpdateOptions{}, 161 ) 162 Expect(err).ToNot(HaveOccurred()) 163 opt := metav1.ListOptions{ 164 LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case7PolicyName, 165 } 166 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 1, true, defaultTimeoutSeconds) 167 }) 168 It("mixed placement propagate to cluster ns managed1 and managed2", func() { 169 By("Patching test-policy-plr with decision of both managed1 and managed2") 170 plr := utils.GetWithTimeout( 171 clientHubDynamic, gvrPlacementRule, case7PolicyName+"-plr3", testNamespace, true, defaultTimeoutSeconds, 172 ) 173 plr.Object["status"] = utils.GeneratePlrStatus("managed2") 174 _, err := clientHubDynamic.Resource(gvrPlacementRule).Namespace(testNamespace).UpdateStatus( 175 context.TODO(), plr, metav1.UpdateOptions{}, 176 ) 177 Expect(err).ToNot(HaveOccurred()) 178 opt := metav1.ListOptions{ 179 LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case7PolicyName, 180 } 181 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 2, true, defaultTimeoutSeconds) 182 }) 183 It("should remove policy from ns managed2", func() { 184 By("Patching test-policy-pb with a non existing plr") 185 pb := utils.GetWithTimeout( 186 clientHubDynamic, 187 gvrPlacementBinding, 188 case7PolicyName+"-pb1", 189 testNamespace, 190 true, 191 defaultTimeoutSeconds, 192 ) 193 pb.Object["placementRef"] = &policiesv1.Subject{ 194 APIGroup: "cluster.open-cluster-management.io", 195 Kind: "Placement", 196 Name: case7PolicyName + "-plr-nonexists", 197 } 198 _, err := clientHubDynamic.Resource(gvrPlacementBinding).Namespace(testNamespace).Update( 199 context.TODO(), pb, metav1.UpdateOptions{}, 200 ) 201 Expect(err).ToNot(HaveOccurred()) 202 opt := metav1.ListOptions{ 203 LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case7PolicyName, 204 } 205 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 1, true, defaultTimeoutSeconds) 206 }) 207 It("app placement propagate to cluster ns managed1 and managed2", func() { 208 By("Patching test-policy-plr with decision of both managed1 and managed2") 209 plr := utils.GetWithTimeout( 210 clientHubDynamic, gvrPlacementRule, case7PolicyName+"-plr4", testNamespace, true, defaultTimeoutSeconds, 211 ) 212 plr.Object["status"] = utils.GeneratePlrStatus("managed1") 213 _, err := clientHubDynamic.Resource(gvrPlacementRule).Namespace(testNamespace).UpdateStatus( 214 context.TODO(), plr, metav1.UpdateOptions{}, 215 ) 216 Expect(err).ToNot(HaveOccurred()) 217 opt := metav1.ListOptions{ 218 LabelSelector: common.RootPolicyLabel + "=" + testNamespace + "." + case7PolicyName, 219 } 220 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 2, true, defaultTimeoutSeconds) 221 }) 222 AfterAll(func() { 223 By("Clean up") 224 utils.Kubectl("delete", 225 "-f", case7PolicyYaml, 226 "-n", testNamespace, 227 "--kubeconfig="+kubeconfigHub) 228 opt := metav1.ListOptions{} 229 utils.ListWithTimeout(clientHubDynamic, gvrPolicy, opt, 0, false, 10) 230 utils.Kubectl("delete", 231 "-f", case7BindingYaml1, 232 "-n", testNamespace, 233 "--kubeconfig="+kubeconfigHub) 234 utils.Kubectl("delete", 235 "-f", case7BindingYaml2, 236 "-n", testNamespace, 237 "--kubeconfig="+kubeconfigHub) 238 utils.Kubectl("delete", 239 "-f", case7BindingYaml3, 240 "-n", testNamespace, 241 "--kubeconfig="+kubeconfigHub) 242 utils.Kubectl("delete", 243 "-f", case7BindingYaml4, 244 "-n", testNamespace, 245 "--kubeconfig="+kubeconfigHub) 246 }) 247 }) 248 })