github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/opensearch-operator/install/install_test.go (about) 1 // Copyright (C) 2023, 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 "time" 9 10 . "github.com/onsi/ginkgo/v2" 11 . "github.com/onsi/gomega" 12 13 "github.com/verrazzano/verrazzano/pkg/constants" 14 "github.com/verrazzano/verrazzano/pkg/k8sutil" 15 "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1beta1" 16 "github.com/verrazzano/verrazzano/tests/e2e/jaeger" 17 "github.com/verrazzano/verrazzano/tests/e2e/pkg" 18 "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/framework" 19 "github.com/verrazzano/verrazzano/tests/e2e/pkg/update" 20 "github.com/verrazzano/verrazzano/tests/e2e/update/fluentd" 21 22 v1 "k8s.io/api/core/v1" 23 "sigs.k8s.io/yaml" 24 ) 25 26 const ( 27 loggingNamespace = "verrazzano-logging" 28 clusterName = "opensearch" 29 jaegerOSURLField = ` 30 jaeger: 31 spec: 32 storage: 33 options: 34 es.server-urls:` 35 longWaitTimeout = 20 * time.Minute 36 longPollingInterval = 20 * time.Second 37 shortPollingInterval = 10 * time.Second 38 shortWaitTimeout = 5 * time.Minute 39 ) 40 41 var ( 42 t = framework.NewTestFramework("install") 43 ) 44 45 type SwitchLoggingOutput struct { 46 OpenSearchURL string 47 } 48 49 func (s *SwitchLoggingOutput) ModifyCRV1beta1(cr *v1beta1.Verrazzano) { 50 cr.Spec.Components.Fluentd = &v1beta1.FluentdComponent{ 51 OpenSearchURL: s.OpenSearchURL, 52 } 53 jaegerEnabled, _ := jaeger.IsJaegerEnabled() 54 if jaegerEnabled { 55 jaegerOSURLOverridesYaml := fmt.Sprintf(`%s %s`, jaegerOSURLField, s.OpenSearchURL) 56 cr.Spec.Components.JaegerOperator.ValueOverrides = pkg.CreateOverridesOrDie(jaegerOSURLOverridesYaml) 57 } 58 t.Logs.Debugf("ModifiedV1beta1 CR: %s", marshalCRToString(cr.Spec)) 59 } 60 61 var _ = t.AfterEach(func() {}) 62 63 var _ = BeforeSuite(beforeSuite) 64 65 var beforeSuite = t.BeforeSuiteFunc(func() { 66 67 t.Logs.Info(fmt.Sprintf("Creating %s namespace", loggingNamespace)) 68 Eventually(func() (*v1.Namespace, error) { 69 nsLabels := map[string]string{ 70 constants.LabelVerrazzanoNamespace: loggingNamespace, 71 } 72 return pkg.CreateNamespace(loggingNamespace, nsLabels) 73 }, shortWaitTimeout, shortPollingInterval).ShouldNot(BeNil()) 74 75 t.Logs.Info("Installing opensearch-operator and cluster") 76 err := pkg.InstallOrUpdateOpenSearchOperator(t.Logs, 3, 3, 1) 77 Expect(err).NotTo(HaveOccurred()) 78 }) 79 80 var _ = t.Describe("Verify opensearch and configure VZ", func() { 81 t.It("verify opensearch pods are ready", func() { 82 // Check all pods with opensearch prefix 83 Eventually(func() bool { 84 isReady, err := pkg.PodsRunning(loggingNamespace, []string{clusterName}) 85 if err != nil { 86 return false 87 } 88 return isReady 89 }, longWaitTimeout, longPollingInterval).Should(BeTrue(), "OpenSearch failed to get to ready state") 90 91 // Verify number of replicas for each nodepool 92 pkg.EventuallyPodsReady(t.Logs, 3, 3, 1) 93 }) 94 95 updateTime := time.Now() 96 t.It("switch logging output", func() { 97 // Update VZ CR to use new OS url for fluentd and jaeger, if enabled 98 v1beta1Modifier := &SwitchLoggingOutput{OpenSearchURL: constants.DefaultOperatorOSURLWithNS} 99 Eventually(func() bool { 100 err := update.UpdateCRV1beta1(v1beta1Modifier) 101 if err != nil { 102 pkg.Log(pkg.Info, fmt.Sprintf("Update error: %v", err)) 103 return false 104 } 105 return true 106 }, shortWaitTimeout, shortPollingInterval).Should(BeTrue(), "Failed to switch OS Url") 107 }) 108 109 t.It("verify operator OS URL in fluentd", func() { 110 kubeconfigPath, err := k8sutil.GetKubeConfigLocation() 111 Expect(err).NotTo(HaveOccurred()) 112 113 // Wait for VZ to be Ready after modifying the CR 114 update.WaitForReadyState(kubeconfigPath, updateTime, longPollingInterval, longWaitTimeout) 115 116 // Verify fluentd is up and ready with new OS URL 117 Eventually(func() bool { 118 return fluentd.ValidateDaemonsetV1beta1(constants.DefaultOperatorOSURLWithNS, constants.VerrazzanoESInternal, "") 119 }, shortWaitTimeout, shortPollingInterval).Should(BeTrue(), "Fluentd not ready for %s", constants.DefaultOperatorOSURLWithNS) 120 }) 121 }) 122 123 func marshalCRToString(cr interface{}) string { 124 data, err := yaml.Marshal(cr) 125 if err != nil { 126 t.Logs.Errorf("Error marshalling CR to string") 127 return "" 128 } 129 return string(data) 130 }