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  }