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  }