github.com/verrazzano/verrazzano-monitoring-operator@v0.0.30/pkg/resources/nodes/nodes_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 nodes
     5  
     6  import (
     7  	"github.com/stretchr/testify/assert"
     8  	vmcontrollerv1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1"
     9  	"testing"
    10  )
    11  
    12  var testMasterNodes = []vmcontrollerv1.ElasticsearchNode{
    13  	{
    14  		Name:     "es-master",
    15  		Replicas: 2,
    16  	},
    17  	{
    18  		Name:     "a",
    19  		Replicas: 3,
    20  	},
    21  	{
    22  		Name:     "xyz",
    23  		Replicas: 1,
    24  	},
    25  }
    26  
    27  var testMultiNodeVMI = vmcontrollerv1.VerrazzanoMonitoringInstance{
    28  	Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
    29  		Elasticsearch: vmcontrollerv1.Elasticsearch{
    30  			Nodes: []vmcontrollerv1.ElasticsearchNode{
    31  				{
    32  					Roles: []vmcontrollerv1.NodeRole{
    33  						vmcontrollerv1.MasterRole,
    34  						vmcontrollerv1.DataRole,
    35  						vmcontrollerv1.IngestRole,
    36  					},
    37  					Replicas: 2,
    38  				},
    39  				{
    40  					Roles: []vmcontrollerv1.NodeRole{
    41  						vmcontrollerv1.DataRole,
    42  						vmcontrollerv1.IngestRole,
    43  					},
    44  					Replicas: 2,
    45  				},
    46  				{
    47  					Roles: []vmcontrollerv1.NodeRole{
    48  						vmcontrollerv1.IngestRole,
    49  					},
    50  					Replicas: 1,
    51  				},
    52  			},
    53  			MasterNode: vmcontrollerv1.ElasticsearchNode{
    54  				Roles: []vmcontrollerv1.NodeRole{
    55  					vmcontrollerv1.MasterRole,
    56  				},
    57  				Replicas: 1,
    58  			},
    59  			DataNode: vmcontrollerv1.ElasticsearchNode{
    60  				Roles: []vmcontrollerv1.NodeRole{
    61  					vmcontrollerv1.DataRole,
    62  				},
    63  				Replicas: 1,
    64  			},
    65  			IngestNode: vmcontrollerv1.ElasticsearchNode{
    66  				Roles: []vmcontrollerv1.NodeRole{
    67  					vmcontrollerv1.IngestRole,
    68  				},
    69  				Replicas: 1,
    70  			},
    71  		},
    72  	},
    73  }
    74  
    75  func TestInitialMasterNodes(t *testing.T) {
    76  	nodeList := InitialMasterNodes("system", testMasterNodes)
    77  	expected := "vmi-system-es-master-0,vmi-system-es-master-1,vmi-system-a-0,vmi-system-a-1,vmi-system-a-2,vmi-system-xyz-0"
    78  	assert.Equal(t, expected, nodeList)
    79  }
    80  
    81  func TestGetRolesString(t *testing.T) {
    82  	var tests = []struct {
    83  		node      vmcontrollerv1.ElasticsearchNode
    84  		nodeRoles string
    85  	}{
    86  		{
    87  			vmcontrollerv1.ElasticsearchNode{
    88  				Roles: []vmcontrollerv1.NodeRole{
    89  					vmcontrollerv1.MasterRole,
    90  				},
    91  			},
    92  			"master",
    93  		},
    94  		{
    95  			vmcontrollerv1.ElasticsearchNode{
    96  				Roles: []vmcontrollerv1.NodeRole{
    97  					vmcontrollerv1.MasterRole,
    98  					vmcontrollerv1.DataRole,
    99  				},
   100  			},
   101  			"master,data",
   102  		},
   103  		{
   104  			vmcontrollerv1.ElasticsearchNode{
   105  				Roles: []vmcontrollerv1.NodeRole{
   106  					vmcontrollerv1.MasterRole,
   107  					vmcontrollerv1.DataRole,
   108  					vmcontrollerv1.IngestRole,
   109  				},
   110  			},
   111  			"master,data,ingest",
   112  		},
   113  		{
   114  			vmcontrollerv1.ElasticsearchNode{
   115  				Roles: []vmcontrollerv1.NodeRole{
   116  					vmcontrollerv1.DataRole,
   117  					vmcontrollerv1.IngestRole,
   118  				},
   119  			},
   120  			"data,ingest",
   121  		},
   122  	}
   123  
   124  	for _, tt := range tests {
   125  		t.Run(tt.nodeRoles, func(t *testing.T) {
   126  			assert.Equal(t, tt.nodeRoles, GetRolesString(&tt.node))
   127  		})
   128  	}
   129  }
   130  
   131  func TestIsSingleNodeCluster(t *testing.T) {
   132  	var tests = []struct {
   133  		name         string
   134  		vmo          *vmcontrollerv1.VerrazzanoMonitoringInstance
   135  		isSingleNode bool
   136  	}{
   137  		{
   138  			"Disabled VMO is not single node",
   139  			&vmcontrollerv1.VerrazzanoMonitoringInstance{},
   140  			false,
   141  		},
   142  		{
   143  			"Single master VMO is single node",
   144  			&vmcontrollerv1.VerrazzanoMonitoringInstance{
   145  				Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
   146  					Elasticsearch: vmcontrollerv1.Elasticsearch{
   147  						MasterNode: vmcontrollerv1.ElasticsearchNode{
   148  							Roles: []vmcontrollerv1.NodeRole{
   149  								vmcontrollerv1.MasterRole,
   150  							},
   151  							Replicas: 1,
   152  						},
   153  					},
   154  				},
   155  			},
   156  			true,
   157  		},
   158  		{
   159  			"Multi master VMO is not single node",
   160  			&vmcontrollerv1.VerrazzanoMonitoringInstance{
   161  				Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
   162  					Elasticsearch: vmcontrollerv1.Elasticsearch{
   163  						MasterNode: vmcontrollerv1.ElasticsearchNode{
   164  							Roles: []vmcontrollerv1.NodeRole{
   165  								vmcontrollerv1.MasterRole,
   166  								vmcontrollerv1.IngestRole,
   167  								vmcontrollerv1.DataRole,
   168  							},
   169  							Replicas: 3,
   170  						},
   171  					},
   172  				},
   173  			},
   174  			false,
   175  		},
   176  	}
   177  
   178  	for _, tt := range tests {
   179  		t.Run(tt.name, func(t *testing.T) {
   180  			assert.Equal(t, tt.isSingleNode, IsSingleNodeCluster(tt.vmo))
   181  		})
   182  	}
   183  }
   184  
   185  func TestStatefulSetNodes(t *testing.T) {
   186  	nodes := MasterNodes(&testMultiNodeVMI)
   187  	assert.Equal(t, 2, len(nodes))
   188  }
   189  
   190  func TestDataNodes(t *testing.T) {
   191  	nodes := DataNodes(&testMultiNodeVMI)
   192  	assert.Equal(t, 2, len(nodes))
   193  }
   194  
   195  func TestIngestNodes(t *testing.T) {
   196  	nodes := IngestNodes(&testMultiNodeVMI)
   197  	assert.Equal(t, 2, len(nodes))
   198  }
   199  
   200  func TestGetNodeRoleCount(t *testing.T) {
   201  	nodeRoles := GetNodeCount(&testMultiNodeVMI)
   202  	assert.EqualValues(t, 5, nodeRoles.DataNodes)
   203  	assert.EqualValues(t, 3, nodeRoles.MasterNodes)
   204  	assert.EqualValues(t, 6, nodeRoles.IngestNodes)
   205  	assert.EqualValues(t, 8, nodeRoles.Replicas)
   206  }