github.com/verrazzano/verrazzano-monitoring-operator@v0.0.30/pkg/resources/deployments/elasticsearch_test.go (about) 1 // Copyright (C) 2020, 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 deployments 5 6 import ( 7 "fmt" 8 appsv1 "k8s.io/api/apps/v1" 9 "strconv" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 vmcontrollerv1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1" 14 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/config" 15 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/resources" 16 corev1 "k8s.io/api/core/v1" 17 "k8s.io/apimachinery/pkg/apis/meta/v1" 18 ) 19 20 func TestIsOpenSearchDeployment(t *testing.T) { 21 createDeploy := func() *appsv1.Deployment { 22 return &appsv1.Deployment{ 23 Spec: appsv1.DeploymentSpec{ 24 Template: corev1.PodTemplateSpec{ 25 ObjectMeta: v1.ObjectMeta{}, 26 }, 27 }, 28 } 29 } 30 31 deployWrongLabels := createDeploy() 32 deployWrongLabels.Spec.Template.Labels = map[string]string{ 33 "foo": "bar", 34 "app": "system-es-master", 35 } 36 deployRightLabels := createDeploy() 37 deployRightLabels.Spec.Template.Labels = map[string]string{ 38 "a": "b", 39 "app": "system-es-data", 40 } 41 42 var tests = []struct { 43 name string 44 deploy *appsv1.Deployment 45 expected bool 46 }{ 47 { 48 "doesn't match deploy with no labels", 49 &appsv1.Deployment{}, 50 false, 51 }, 52 { 53 "doesn't match deploy with wrong labels", 54 deployWrongLabels, 55 false, 56 }, 57 { 58 "matches deploy with data deployment labels", 59 deployRightLabels, 60 true, 61 }, 62 } 63 64 for _, tt := range tests { 65 t.Run(tt.name, func(t *testing.T) { 66 assert.Equal(t, tt.expected, IsOpenSearchDataDeployment("system", tt.deploy)) 67 }) 68 } 69 } 70 71 func TestElasticsearchDefaultDeployments1(t *testing.T) { 72 vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{ 73 ObjectMeta: v1.ObjectMeta{ 74 Name: "myVMO", 75 }, 76 Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{ 77 Elasticsearch: vmcontrollerv1.Elasticsearch{ 78 IngestNode: vmcontrollerv1.ElasticsearchNode{Replicas: 1}, 79 MasterNode: vmcontrollerv1.ElasticsearchNode{Replicas: 1}, 80 DataNode: vmcontrollerv1.ElasticsearchNode{Replicas: 1}, 81 Enabled: true, 82 Storage: vmcontrollerv1.Storage{ 83 Size: "50GI", 84 PvcNames: []string{"pvc1"}, 85 }, 86 }, 87 }, 88 } 89 var es Elasticsearch = ElasticsearchBasic{} 90 deployments := es.createElasticsearchDeploymentElements(vmo, map[string]string{}) 91 assert.Equal(t, 2, len(deployments), "Length of generated deployments") 92 } 93 94 func TestElasticsearchDefaultDeployments2(t *testing.T) { 95 vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{ 96 ObjectMeta: v1.ObjectMeta{ 97 Name: "myVMO", 98 }, 99 Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{ 100 Elasticsearch: vmcontrollerv1.Elasticsearch{ 101 IngestNode: vmcontrollerv1.ElasticsearchNode{ 102 Replicas: 5, 103 Roles: []vmcontrollerv1.NodeRole{vmcontrollerv1.IngestRole}, 104 Name: config.ElasticsearchIngest.Name, 105 }, 106 MasterNode: vmcontrollerv1.ElasticsearchNode{Replicas: 4}, 107 DataNode: vmcontrollerv1.ElasticsearchNode{ 108 Replicas: 3, 109 Storage: &vmcontrollerv1.Storage{ 110 Size: "50GI", 111 PvcNames: []string{"pvc1", "pvc2", "pvc3"}, 112 }, 113 Roles: []vmcontrollerv1.NodeRole{vmcontrollerv1.DataRole}, 114 Name: config.ElasticsearchData.Name, 115 }, 116 Enabled: true, 117 }, 118 }, 119 } 120 var es Elasticsearch = ElasticsearchBasic{} 121 deployments := es.createElasticsearchDeploymentElements(vmo, map[string]string{}) 122 assert.Equal(t, 4, len(deployments), "Length of generated deployments") 123 124 ingestDeployment, _ := getDeploymentByName(resources.GetMetaName(vmo.Name, config.ElasticsearchIngest.Name), deployments) 125 assert.NotNil(t, ingestDeployment, "Client deployment") 126 assert.Equal(t, int32(5), *ingestDeployment.Spec.Replicas, "Client replicas") 127 ingestEnv := ingestDeployment.Spec.Template.Spec.Containers[0].Env 128 assert.Equal(t, "ingest", getEnvVarValue("node.roles", ingestEnv)) 129 130 for i := 0; i < 3; i++ { 131 dataDeployment, _ := getDeploymentByName(resources.GetMetaName(vmo.Name, fmt.Sprintf("%s-%d", config.ElasticsearchData.Name, i)), deployments) 132 assert.Equal(t, "pvc"+strconv.Itoa(i+1), dataDeployment.Spec.Template.Spec.Volumes[0].PersistentVolumeClaim.ClaimName, fmt.Sprintf("PVC for index %d", i)) 133 assert.NotNil(t, dataDeployment, fmt.Sprintf("DataNodes deployment for index %d", i)) 134 assert.Equal(t, int32(1), *dataDeployment.Spec.Replicas, fmt.Sprintf("DataNodes replicas for index %d", i)) 135 assert.Equal(t, "data", getEnvVarValue("node.roles", dataDeployment.Spec.Template.Spec.Containers[0].Env)) 136 } 137 } 138 139 func getEnvVarValue(envVarName string, envVarList []corev1.EnvVar) string { 140 for _, envVar := range envVarList { 141 if envVar.Name == envVarName { 142 return envVar.Value 143 } 144 } 145 return "" 146 }