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