github.com/verrazzano/verrazzano-monitoring-operator@v0.0.30/pkg/resources/pvcs/pvc_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 pvcs
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/verrazzano/verrazzano-monitoring-operator/pkg/constants"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	vmcontrollerv1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1"
    13  )
    14  
    15  func TestVMONoStorageVolumes(t *testing.T) {
    16  	vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{
    17  		Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
    18  			Grafana: vmcontrollerv1.Grafana{
    19  				Enabled: true,
    20  			},
    21  			Kibana: vmcontrollerv1.Kibana{
    22  				Enabled: true,
    23  			},
    24  			Elasticsearch: vmcontrollerv1.Elasticsearch{
    25  				Enabled: true,
    26  			},
    27  		},
    28  	}
    29  	pvcs, err := New(vmo, constants.OciFlexVolumeProvisioner)
    30  	if err != nil {
    31  		t.Error(err)
    32  	}
    33  	assert.Equal(t, 0, len(pvcs), "Length of generated PVCs")
    34  }
    35  
    36  func TestVMOWithStorageVolumes1(t *testing.T) {
    37  	vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{
    38  		Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
    39  			Grafana: vmcontrollerv1.Grafana{
    40  				Enabled: true,
    41  				Storage: vmcontrollerv1.Storage{
    42  					Size:               "50Gi",
    43  					AvailabilityDomain: "AD1",
    44  					PvcNames:           []string{"grafana-pvc"},
    45  				},
    46  			},
    47  			// An empty size element is interpreted as no storage
    48  			Elasticsearch: vmcontrollerv1.Elasticsearch{
    49  				Enabled: true,
    50  				Storage: vmcontrollerv1.Storage{
    51  					Size:               "",
    52  					AvailabilityDomain: "AD1",
    53  				},
    54  			},
    55  		},
    56  	}
    57  	pvcs, err := New(vmo, constants.OciFlexVolumeProvisioner)
    58  	if err != nil {
    59  		t.Error(err)
    60  	}
    61  	assert.Equal(t, 1, len(pvcs), "Length of generated PVCs")
    62  }
    63  
    64  func TestVMOWithStorageVolumes2(t *testing.T) {
    65  	vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{
    66  		Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
    67  			Elasticsearch: vmcontrollerv1.Elasticsearch{
    68  				Enabled: true,
    69  				DataNode: vmcontrollerv1.ElasticsearchNode{
    70  					Storage: &vmcontrollerv1.Storage{
    71  						Size:               "50Gi",
    72  						AvailabilityDomain: "AD1",
    73  						PvcNames:           []string{"elasticsearch-pvc"},
    74  					},
    75  				},
    76  			},
    77  		},
    78  	}
    79  	pvcs, err := New(vmo, constants.OciFlexVolumeProvisioner)
    80  	if err != nil {
    81  		t.Error(err)
    82  	}
    83  	assert.Equal(t, 1, len(pvcs), "Length of generated PVCs")
    84  }
    85  
    86  func TestVMOWithStorageVolumes3(t *testing.T) {
    87  	vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{
    88  		Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
    89  			Elasticsearch: vmcontrollerv1.Elasticsearch{
    90  				Enabled: true,
    91  				Nodes: []vmcontrollerv1.ElasticsearchNode{
    92  					{
    93  						Name: "data",
    94  						Roles: []vmcontrollerv1.NodeRole{
    95  							vmcontrollerv1.DataRole,
    96  						},
    97  						Storage: &vmcontrollerv1.Storage{
    98  							Size:               "100Gi",
    99  							AvailabilityDomain: "AD1",
   100  							PvcNames: []string{
   101  								"p1",
   102  								"p2",
   103  							},
   104  						},
   105  					},
   106  				},
   107  				DataNode: vmcontrollerv1.ElasticsearchNode{
   108  					Storage: &vmcontrollerv1.Storage{
   109  						Size:               "50Gi",
   110  						AvailabilityDomain: "AD1",
   111  						PvcNames:           []string{"elasticsearch-pvc"},
   112  					},
   113  				},
   114  			},
   115  		},
   116  	}
   117  	pvcs, err := New(vmo, constants.OciFlexVolumeProvisioner)
   118  	if err != nil {
   119  		t.Error(err)
   120  	}
   121  	assert.Equal(t, 3, len(pvcs), "Length of generated PVCs")
   122  }
   123  
   124  func TestVMODevModeWithStorageVolumes(t *testing.T) {
   125  	vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{
   126  		Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
   127  			Grafana: vmcontrollerv1.Grafana{
   128  				Enabled: true,
   129  				Storage: vmcontrollerv1.Storage{
   130  					Size:               "50Gi",
   131  					AvailabilityDomain: "AD1",
   132  					PvcNames:           []string{"grafana-pvc"},
   133  				},
   134  			},
   135  			Elasticsearch: vmcontrollerv1.Elasticsearch{
   136  				Enabled: true,
   137  				Storage: vmcontrollerv1.Storage{
   138  					Size: "",
   139  				},
   140  				IngestNode: vmcontrollerv1.ElasticsearchNode{Replicas: 0},
   141  				DataNode:   vmcontrollerv1.ElasticsearchNode{Replicas: 0},
   142  				MasterNode: vmcontrollerv1.ElasticsearchNode{Replicas: 1},
   143  			},
   144  		},
   145  	}
   146  	pvcs, err := New(vmo, constants.OciFlexVolumeProvisioner)
   147  	if err != nil {
   148  		t.Error(err)
   149  	}
   150  	assert.Equal(t, 1, len(pvcs), "Length of generated PVCs")
   151  	for _, pvc := range pvcs {
   152  		pvcName := pvc.ObjectMeta.Name
   153  		t.Log("Checking pvc ", pvcName)
   154  		assert.NotContains(t, pvcName, "elasticsearch", "Found unexpected elasticsearch volume")
   155  	}
   156  }
   157  
   158  func TestVMOWithCascadingDelete(t *testing.T) {
   159  	// With CascadingDelete
   160  	vmo := &vmcontrollerv1.VerrazzanoMonitoringInstance{
   161  		Spec: vmcontrollerv1.VerrazzanoMonitoringInstanceSpec{
   162  			CascadingDelete: true,
   163  			Grafana: vmcontrollerv1.Grafana{
   164  				Enabled: true,
   165  				Storage: vmcontrollerv1.Storage{
   166  					Size:               "50Gi",
   167  					AvailabilityDomain: "AD1",
   168  					PvcNames:           []string{"grafana-pvc"},
   169  				},
   170  			},
   171  			// An empty size element is interpreted as no storage
   172  			Elasticsearch: vmcontrollerv1.Elasticsearch{
   173  				Enabled: true,
   174  				Storage: vmcontrollerv1.Storage{
   175  					Size:               "50Gi",
   176  					AvailabilityDomain: "AD1",
   177  				},
   178  			},
   179  		},
   180  	}
   181  	pvcs, err := New(vmo, constants.OciFlexVolumeProvisioner)
   182  	if err != nil {
   183  		t.Error(err)
   184  	}
   185  	assert.True(t, len(pvcs) > 0, "Non-zero length generated PVCs")
   186  	for _, pvs := range pvcs {
   187  		assert.Equal(t, 1, len(pvs.ObjectMeta.OwnerReferences), "OwnerReferences is not set with CascadingDelete true")
   188  	}
   189  
   190  	// Without CascadingDelete
   191  	vmo.Spec.CascadingDelete = false
   192  	pvcs, err = New(vmo, constants.OciFlexVolumeProvisioner)
   193  	if err != nil {
   194  		t.Error(err)
   195  	}
   196  	assert.True(t, len(pvcs) > 0, "Non-zero length generated ingresses")
   197  	for _, pvc := range pvcs {
   198  		assert.Equal(t, 0, len(pvc.ObjectMeta.OwnerReferences), "OwnerReferences is set even with CascadingDelete false")
   199  	}
   200  }