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  })