github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/multicluster/verify-jaeger/install/jaeger_install_test.go (about) 1 // Copyright (c) 2022, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package install 5 6 import ( 7 "fmt" 8 dump "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/clusterdump" 9 "os" 10 "time" 11 12 globalconst "github.com/verrazzano/verrazzano/pkg/constants" 13 "github.com/verrazzano/verrazzano/platform-operator/constants" 14 "github.com/verrazzano/verrazzano/tests/e2e/pkg" 15 "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/framework" 16 17 . "github.com/onsi/ginkgo/v2" 18 . "github.com/onsi/gomega" 19 ) 20 21 const ( 22 waitTimeout = 5 * time.Minute 23 pollingInterval = 10 * time.Second 24 jaegerESIndexCleanerJob = globalconst.JaegerInstanceName + "-es-index-cleaner" 25 testSkipMsgFmt = "Cluster name is '%s'. Skipping tests meant for managed clusters" 26 instanceLabelKey = "app.kubernetes.io/instance" 27 jaegerMCInstance = "jaeger-verrazzano-managed-cluster" 28 ) 29 30 var t = framework.NewTestFramework("jaeger_mc_system_test") 31 32 var ( 33 kubeconfigPath = os.Getenv("KUBECONFIG") 34 clusterName = os.Getenv("CLUSTER_NAME") 35 failed = false 36 ) 37 38 var beforeSuite = t.BeforeSuiteFunc(func() { 39 if kubeconfigPath == "" { 40 AbortSuite("Required env variable KUBECONFIG not set.") 41 } 42 }) 43 44 var _ = BeforeSuite(beforeSuite) 45 46 var _ = t.AfterEach(func() { 47 failed = failed || CurrentSpecReport().Failed() 48 }) 49 50 var afterSuite = t.AfterSuiteFunc(func() { 51 if failed { 52 err := dump.ExecuteBugReport() 53 if err != nil { 54 pkg.Log(pkg.Error, err.Error()) 55 } 56 } 57 }) 58 59 var _ = AfterSuite(afterSuite) 60 61 var _ = t.Describe("Multi Cluster Jaeger Installation Validation", Label("f:platform-lcm.install"), func() { 62 63 // GIVEN a multicluster setup with an admin and a manged cluster, 64 // WHEN Jaeger operator is enabled in the admin cluster and the managed cluster is registered to it, 65 // THEN only the Jaeger collector pods are created in the managed cluster. 66 t.It("Jaeger Collector pods must be running in managed cluster", func() { 67 skipIfAdminCluster() 68 Eventually(func() bool { 69 collectorDeployments, err := pkg.GetJaegerCollectorDeployments(kubeconfigPath, jaegerMCInstance) 70 if err != nil { 71 return false 72 } 73 for _, deployment := range collectorDeployments { 74 isRunning, err := pkg.PodsRunningInCluster(constants.VerrazzanoMonitoringNamespace, []string{deployment.Name}, kubeconfigPath) 75 if err != nil { 76 return false 77 } 78 return isRunning 79 } 80 return false 81 }).WithPolling(pollingInterval).WithTimeout(waitTimeout).Should(BeTrue()) 82 }) 83 84 // GIVEN a multicluster setup with an admin and a manged cluster, 85 // WHEN Jaeger operator is enabled in the admin cluster and the managed cluster is registered to it, 86 // THEN only one Jaeger collector deployment is created in the managed cluster. 87 t.It("Atmost only one Jaeger Collector pods must be running in managed cluster", func() { 88 skipIfAdminCluster() 89 Eventually(func() bool { 90 collectorDeployments, err := pkg.GetJaegerCollectorDeployments(kubeconfigPath, "") 91 if err != nil { 92 return false 93 } 94 if len(collectorDeployments) == 1 { 95 // check if the only available Jaeger collector is the one managed by the mcagent. 96 return collectorDeployments[0].Labels[instanceLabelKey] == jaegerMCInstance 97 } 98 pkg.Log(pkg.Error, "Managed cluster must have exactly one Jaeger collector") 99 return false 100 }).WithPolling(pollingInterval).WithTimeout(waitTimeout).Should(BeTrue()) 101 }) 102 103 // GIVEN a multicluster setup with an admin and a manged cluster 104 // WHEN Jaeger operator is enabled in the admin cluster and the managed cluster is registered to it, 105 // THEN pods for the Jaeger query component do NOT get created in the managed cluster. 106 t.It("Jaeger Query pods must NOT be running in managed cluster", func() { 107 skipIfAdminCluster() 108 isRunning := false 109 queryDeployments, err := pkg.GetJaegerQueryDeployments(kubeconfigPath, jaegerMCInstance) 110 if err != nil { 111 Fail(err.Error()) 112 } 113 for _, deployment := range queryDeployments { 114 var err error 115 isRunning, err = pkg.PodsRunningInCluster(constants.VerrazzanoMonitoringNamespace, []string{deployment.Name}, kubeconfigPath) 116 if err != nil { 117 Fail(err.Error()) 118 } 119 } 120 Expect(isRunning).Should(BeFalse()) 121 }) 122 123 // GIVEN a multicluster setup with an admin and a manged cluster, 124 // WHEN Jaeger operator is enabled in the admin cluster and the managed cluster is registered to it, 125 // THEN cronjob for ES index cleaner is NOT created in the managed cluster. 126 t.It("Jaeger ES index cleaner cronjob must NOT be created in managed cluster", func() { 127 skipIfAdminCluster() 128 present, err := pkg.DoesCronJobExist(kubeconfigPath, constants.VerrazzanoMonitoringNamespace, jaegerESIndexCleanerJob) 129 if err != nil { 130 Fail(err.Error()) 131 } 132 Expect(present).Should(BeFalse()) 133 }) 134 }) 135 136 func skipIfAdminCluster() { 137 if clusterName == "admin" { 138 Skip(fmt.Sprintf(testSkipMsgFmt, clusterName)) 139 } 140 }