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 }