github.com/verrazzano/verrazzano@v1.7.1/pkg/vzcr/enabled_test.go (about)

     1  // Copyright (c) 2021, 2023, 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  package vzcr
     4  
     5  import (
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	vzapi "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1"
    10  	installv1beta1 "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1beta1"
    11  	"github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/spi"
    12  	corev1 "k8s.io/api/core/v1"
    13  	v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
    14  	"k8s.io/apimachinery/pkg/runtime"
    15  )
    16  
    17  var (
    18  	enabled  = true
    19  	disabled = false
    20  )
    21  
    22  // TestIsExternalDNSEnabledDefault tests the IsExternalDNSEnabled function
    23  // GIVEN a call to IsExternalDNSEnabled
    24  //
    25  //	WHEN the VZ config does not explicitly configure DNS
    26  //	THEN false is returned
    27  func TestIsExternalDNSEnabledDefault(t *testing.T) {
    28  	vz := &vzapi.Verrazzano{}
    29  	assert.False(t, IsExternalDNSEnabled(vz))
    30  
    31  	vzv1beta1 := &installv1beta1.Verrazzano{}
    32  	assert.False(t, IsExternalDNSEnabled(vzv1beta1))
    33  }
    34  
    35  // TestIsExternalDNSEnabledOCIDNS tests the IsExternalDNSEnabled function
    36  // GIVEN a call to IsExternalDNSEnabled
    37  //
    38  //	WHEN the VZ config has OCI DNS configured
    39  //	THEN true is returned
    40  func TestIsExternalDNSEnabledOCIDNS(t *testing.T) {
    41  	vz := &vzapi.Verrazzano{
    42  		Spec: vzapi.VerrazzanoSpec{
    43  			EnvironmentName: "myenv",
    44  			Components: vzapi.ComponentSpec{
    45  				DNS: &vzapi.DNSComponent{
    46  					OCI: &vzapi.OCI{
    47  						DNSZoneName: "mydomain.com",
    48  					},
    49  				},
    50  			},
    51  		},
    52  	}
    53  	assert.True(t, IsExternalDNSEnabled(vz))
    54  
    55  	vzv1beta1 := &installv1beta1.Verrazzano{
    56  		Spec: installv1beta1.VerrazzanoSpec{
    57  			EnvironmentName: "myenv",
    58  			Components: installv1beta1.ComponentSpec{
    59  				DNS: &installv1beta1.DNSComponent{
    60  					OCI: &installv1beta1.OCI{
    61  						DNSZoneName: "mydomain.com"},
    62  				},
    63  			},
    64  		},
    65  	}
    66  	assert.True(t, IsExternalDNSEnabled(vzv1beta1))
    67  }
    68  
    69  // TestIsExternalDNSEnabledWildcardDNS tests the IsExternalDNSEnabled function
    70  // GIVEN a call to IsExternalDNSEnabled
    71  //
    72  //	WHEN the VZ config has Wildcard DNS explicitly configured
    73  //	THEN false is returned
    74  func TestIsExternalDNSEnabledWildcardDNS(t *testing.T) {
    75  	vz := &vzapi.Verrazzano{
    76  		Spec: vzapi.VerrazzanoSpec{
    77  			EnvironmentName: "myenv",
    78  			Components: vzapi.ComponentSpec{
    79  				DNS: &vzapi.DNSComponent{
    80  					Wildcard: &vzapi.Wildcard{
    81  						Domain: "xip.io",
    82  					},
    83  				},
    84  			},
    85  		},
    86  	}
    87  	assert.False(t, IsExternalDNSEnabled(vz))
    88  
    89  	vzv1beta := &installv1beta1.Verrazzano{
    90  		Spec: installv1beta1.VerrazzanoSpec{
    91  			EnvironmentName: "myenv",
    92  			Components: installv1beta1.ComponentSpec{
    93  				DNS: &installv1beta1.DNSComponent{
    94  					Wildcard: &installv1beta1.Wildcard{
    95  						Domain: "xip.io",
    96  					},
    97  				},
    98  			},
    99  		},
   100  	}
   101  	assert.False(t, IsExternalDNSEnabled(vzv1beta))
   102  }
   103  
   104  // TestIsExternalDNSEnabledExternalDNS tests the IsExternalDNSEnabled function
   105  // GIVEN a call to IsExternalDNSEnabled
   106  //
   107  //	WHEN the VZ config has External DNS explicitly configured
   108  //	THEN false is returned
   109  func TestIsExternalDNSEnabledExternalDNS(t *testing.T) {
   110  	vz := &vzapi.Verrazzano{
   111  		Spec: vzapi.VerrazzanoSpec{
   112  			EnvironmentName: "myenv",
   113  			Components: vzapi.ComponentSpec{
   114  				DNS: &vzapi.DNSComponent{
   115  					External: &vzapi.External{
   116  						Suffix: "mydomain.io",
   117  					},
   118  				},
   119  			},
   120  		},
   121  	}
   122  	assert.False(t, IsExternalDNSEnabled(vz))
   123  }
   124  
   125  var trueValue = true
   126  var falseValue = false
   127  
   128  // TestIsRancherEnabled tests the IsRancherEnabled function
   129  // GIVEN a call to IsRancherEnabled
   130  //
   131  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   132  func TestIsRancherEnabled(t *testing.T) {
   133  	asserts := assert.New(t)
   134  	asserts.True(IsRancherEnabled(nil))
   135  	asserts.True(IsRancherEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   136  	asserts.True(IsRancherEnabled(
   137  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   138  			Components: vzapi.ComponentSpec{
   139  				Rancher: &vzapi.RancherComponent{},
   140  			},
   141  		}}))
   142  	asserts.True(IsRancherEnabled(
   143  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   144  			Components: vzapi.ComponentSpec{
   145  				Rancher: &vzapi.RancherComponent{
   146  					Enabled: &trueValue,
   147  				},
   148  			},
   149  		}}))
   150  	asserts.False(IsRancherEnabled(
   151  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   152  			Components: vzapi.ComponentSpec{
   153  				Rancher: &vzapi.RancherComponent{
   154  					Enabled: &falseValue,
   155  				},
   156  			},
   157  		}}))
   158  	asserts.True(IsRancherEnabled(
   159  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   160  			Components: installv1beta1.ComponentSpec{
   161  				Rancher: &installv1beta1.RancherComponent{
   162  					Enabled: &trueValue,
   163  				},
   164  			},
   165  		}}))
   166  	asserts.False(IsRancherEnabled(
   167  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   168  			Components: installv1beta1.ComponentSpec{
   169  				Rancher: &installv1beta1.RancherComponent{
   170  					Enabled: &falseValue,
   171  				},
   172  			},
   173  		}}))
   174  }
   175  
   176  // TestIsKeycloakEnabled tests the IsKeycloakEnabled function
   177  // GIVEN a call to IsKeycloakEnabled
   178  //
   179  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   180  func TestIsKeycloakEnabled(t *testing.T) {
   181  	asserts := assert.New(t)
   182  	asserts.True(IsKeycloakEnabled(nil))
   183  	asserts.True(IsKeycloakEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   184  	asserts.True(IsKeycloakEnabled(
   185  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   186  			Components: vzapi.ComponentSpec{
   187  				Keycloak: &vzapi.KeycloakComponent{},
   188  			},
   189  		}}))
   190  	asserts.True(IsKeycloakEnabled(
   191  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   192  			Components: vzapi.ComponentSpec{
   193  				Keycloak: &vzapi.KeycloakComponent{
   194  					Enabled: &trueValue,
   195  				},
   196  			},
   197  		}}))
   198  	asserts.False(IsKeycloakEnabled(
   199  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   200  			Components: vzapi.ComponentSpec{
   201  				Keycloak: &vzapi.KeycloakComponent{
   202  					Enabled: &falseValue,
   203  				},
   204  			},
   205  		}}))
   206  	asserts.True(IsKeycloakEnabled(
   207  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   208  			Components: installv1beta1.ComponentSpec{
   209  				Keycloak: &installv1beta1.KeycloakComponent{
   210  					Enabled: &trueValue,
   211  				},
   212  			},
   213  		}}))
   214  	asserts.False(IsKeycloakEnabled(
   215  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   216  			Components: installv1beta1.ComponentSpec{
   217  				Keycloak: &installv1beta1.KeycloakComponent{
   218  					Enabled: &falseValue,
   219  				},
   220  			},
   221  		}}))
   222  }
   223  
   224  // TestIsClusterIssuerEnabled tests the IsClusterIssuerEnabled function
   225  // GIVEN a call to IsClusterIssuerEnabled
   226  //
   227  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   228  func TestIsClusterIssuerEnabled(t *testing.T) {
   229  	asserts := assert.New(t)
   230  	asserts.True(IsClusterIssuerEnabled(nil))
   231  	asserts.True(IsClusterIssuerEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   232  	asserts.True(IsClusterIssuerEnabled(
   233  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   234  			Components: vzapi.ComponentSpec{
   235  				ClusterIssuer: &vzapi.ClusterIssuerComponent{},
   236  			},
   237  		}}))
   238  	asserts.True(IsClusterIssuerEnabled(
   239  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   240  			Components: vzapi.ComponentSpec{
   241  				ClusterIssuer: &vzapi.ClusterIssuerComponent{
   242  					Enabled: &trueValue,
   243  				},
   244  			},
   245  		}}))
   246  	asserts.True(IsClusterIssuerEnabled(
   247  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   248  			Components: vzapi.ComponentSpec{
   249  				ClusterIssuer: &vzapi.ClusterIssuerComponent{
   250  					Enabled: &falseValue,
   251  				},
   252  			},
   253  		}}))
   254  	asserts.False(IsClusterIssuerEnabled(
   255  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   256  			Components: vzapi.ComponentSpec{
   257  				ClusterIssuer: &vzapi.ClusterIssuerComponent{
   258  					Enabled: &falseValue,
   259  				},
   260  				CertManager: &vzapi.CertManagerComponent{
   261  					Enabled: &falseValue,
   262  				},
   263  			},
   264  		}}))
   265  	asserts.True(IsClusterIssuerEnabled(
   266  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   267  			Components: installv1beta1.ComponentSpec{
   268  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{
   269  					Enabled: &trueValue,
   270  				},
   271  			},
   272  		}}))
   273  	asserts.True(IsClusterIssuerEnabled(
   274  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   275  			Components: installv1beta1.ComponentSpec{
   276  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{
   277  					Enabled: &falseValue,
   278  				},
   279  			},
   280  		}}))
   281  	asserts.False(IsClusterIssuerEnabled(
   282  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   283  			Components: installv1beta1.ComponentSpec{
   284  				CertManager: &installv1beta1.CertManagerComponent{
   285  					Enabled: &falseValue,
   286  				},
   287  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{
   288  					Enabled: &falseValue,
   289  				},
   290  			},
   291  		}}))
   292  }
   293  
   294  // TestIsCertManagerWebhookOCIEnabled tests the IsCertManagerWebhookOCIEnabled function
   295  // GIVEN a call to IsCertManagerWebhookOCIEnabled
   296  //
   297  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default)
   298  func TestIsCertManagerWebhookOCIEnabled(t *testing.T) {
   299  	asserts := assert.New(t)
   300  	asserts.False(IsCertManagerWebhookOCIEnabled(nil))
   301  	asserts.False(IsCertManagerWebhookOCIEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   302  	asserts.False(IsCertManagerWebhookOCIEnabled(
   303  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   304  			Components: vzapi.ComponentSpec{
   305  				CertManagerWebhookOCI: &vzapi.CertManagerWebhookOCIComponent{},
   306  			},
   307  		}}))
   308  	asserts.True(IsCertManagerWebhookOCIEnabled(
   309  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   310  			Components: vzapi.ComponentSpec{
   311  				CertManagerWebhookOCI: &vzapi.CertManagerWebhookOCIComponent{
   312  					Enabled: &trueValue,
   313  				},
   314  			},
   315  		}}))
   316  	asserts.False(IsCertManagerWebhookOCIEnabled(
   317  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   318  			Components: vzapi.ComponentSpec{
   319  				CertManagerWebhookOCI: &vzapi.CertManagerWebhookOCIComponent{
   320  					Enabled: &falseValue,
   321  				},
   322  			},
   323  		}}))
   324  	asserts.True(IsCertManagerWebhookOCIEnabled(
   325  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   326  			Components: installv1beta1.ComponentSpec{
   327  				CertManagerWebhookOCI: &installv1beta1.CertManagerWebhookOCIComponent{
   328  					Enabled: &trueValue,
   329  				},
   330  			},
   331  		}}))
   332  	asserts.False(IsCertManagerWebhookOCIEnabled(
   333  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   334  			Components: installv1beta1.ComponentSpec{
   335  				CertManagerWebhookOCI: &installv1beta1.CertManagerWebhookOCIComponent{
   336  					Enabled: &falseValue,
   337  				},
   338  			},
   339  		}}))
   340  }
   341  
   342  // TestIsCertManagerWebhookOCIRequiredV1Alpha1 tests the IsCertManagerWebhookOCIRequired function
   343  // GIVEN a call to IsCertManagerWebhookOCIRequired
   344  //
   345  //	THEN true is returned IF the webhook is explicitly enabled OR the issuer component is enabled and OCI DNS
   346  //	with ACME/LetsEncrypt is configured
   347  func TestIsCertManagerWebhookOCIRequiredV1Alpha1(t *testing.T) {
   348  	asserts := assert.New(t)
   349  
   350  	asserts.False(IsCertManagerWebhookOCIRequired(nil))
   351  
   352  	asserts.False(IsCertManagerWebhookOCIRequired(
   353  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   354  			Components: vzapi.ComponentSpec{
   355  				DNS: &vzapi.DNSComponent{OCI: &vzapi.OCI{}},
   356  			},
   357  		}}))
   358  
   359  	asserts.False(IsCertManagerWebhookOCIRequired(
   360  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   361  			Components: vzapi.ComponentSpec{
   362  				ClusterIssuer: &vzapi.ClusterIssuerComponent{Enabled: &falseValue},
   363  				DNS:           &vzapi.DNSComponent{OCI: &vzapi.OCI{}},
   364  			},
   365  		}}))
   366  
   367  	asserts.False(IsCertManagerWebhookOCIRequired(
   368  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   369  			Components: vzapi.ComponentSpec{
   370  				ClusterIssuer: &vzapi.ClusterIssuerComponent{Enabled: &trueValue},
   371  				DNS:           &vzapi.DNSComponent{OCI: &vzapi.OCI{}},
   372  			},
   373  		}}))
   374  
   375  	asserts.True(IsCertManagerWebhookOCIRequired(
   376  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   377  			Components: vzapi.ComponentSpec{
   378  				ClusterIssuer: &vzapi.ClusterIssuerComponent{
   379  					Enabled: &trueValue,
   380  					IssuerConfig: vzapi.IssuerConfig{
   381  						LetsEncrypt: &vzapi.LetsEncryptACMEIssuer{},
   382  					},
   383  				},
   384  				DNS: &vzapi.DNSComponent{OCI: &vzapi.OCI{}},
   385  			},
   386  		}}))
   387  
   388  	asserts.True(IsCertManagerWebhookOCIRequired(
   389  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   390  			Components: vzapi.ComponentSpec{
   391  				ClusterIssuer: vzapi.NewDefaultClusterIssuer(),
   392  				CertManagerWebhookOCI: &vzapi.CertManagerWebhookOCIComponent{
   393  					Enabled: &trueValue,
   394  				},
   395  			},
   396  		}}))
   397  }
   398  
   399  // TestIsCertManagerWebhookOCIRequiredV1Beta1 tests the IsCertManagerWebhookOCIRequired function
   400  // GIVEN a call to IsCertManagerWebhookOCIRequired
   401  //
   402  //	THEN true is returned IF the webhook is explicitly enabled OR the issuer component is enabled and OCI DNS
   403  //	with ACME/LetsEncrypt is configured
   404  func TestIsCertManagerWebhookOCIRequiredV1Beta1(t *testing.T) {
   405  	asserts := assert.New(t)
   406  
   407  	asserts.False(IsCertManagerWebhookOCIRequired(nil))
   408  
   409  	asserts.False(IsCertManagerWebhookOCIRequired(
   410  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   411  			Components: installv1beta1.ComponentSpec{
   412  				DNS: &installv1beta1.DNSComponent{OCI: &installv1beta1.OCI{}},
   413  			},
   414  		}}))
   415  
   416  	asserts.False(IsCertManagerWebhookOCIRequired(
   417  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   418  			Components: installv1beta1.ComponentSpec{
   419  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{Enabled: &falseValue},
   420  				DNS:           &installv1beta1.DNSComponent{OCI: &installv1beta1.OCI{}},
   421  			},
   422  		}}))
   423  
   424  	asserts.False(IsCertManagerWebhookOCIRequired(
   425  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   426  			Components: installv1beta1.ComponentSpec{
   427  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{Enabled: &trueValue},
   428  				DNS:           &installv1beta1.DNSComponent{OCI: &installv1beta1.OCI{}},
   429  			},
   430  		}}))
   431  
   432  	asserts.True(IsCertManagerWebhookOCIRequired(
   433  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   434  			Components: installv1beta1.ComponentSpec{
   435  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{
   436  					Enabled: &trueValue,
   437  					IssuerConfig: installv1beta1.IssuerConfig{
   438  						LetsEncrypt: &installv1beta1.LetsEncryptACMEIssuer{},
   439  					},
   440  				},
   441  				DNS: &installv1beta1.DNSComponent{OCI: &installv1beta1.OCI{}},
   442  			},
   443  		}}))
   444  
   445  	asserts.True(IsCertManagerWebhookOCIRequired(
   446  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   447  			Components: installv1beta1.ComponentSpec{
   448  				ClusterIssuer: installv1beta1.NewDefaultClusterIssuer(),
   449  				CertManagerWebhookOCI: &installv1beta1.CertManagerWebhookOCIComponent{
   450  					Enabled: &trueValue,
   451  				},
   452  			},
   453  		}}))
   454  }
   455  
   456  func TestIsCAConfig(t *testing.T) {
   457  	asserts := assert.New(t)
   458  
   459  	isCA, err := IsCAConfig(&corev1.Secret{})
   460  	asserts.False(isCA)
   461  	asserts.Error(err)
   462  
   463  	asserts.False(IsCAConfig(nil))
   464  
   465  	asserts.True(IsCAConfig(&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{}}))
   466  
   467  	asserts.True(IsCAConfig(
   468  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   469  			Components: installv1beta1.ComponentSpec{
   470  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{
   471  					IssuerConfig: installv1beta1.IssuerConfig{CA: &installv1beta1.CAIssuer{}},
   472  				},
   473  			},
   474  		}}))
   475  
   476  	asserts.False(IsCAConfig(
   477  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   478  			Components: installv1beta1.ComponentSpec{
   479  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{},
   480  			},
   481  		}}))
   482  
   483  	asserts.False(IsCAConfig(
   484  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   485  			Components: installv1beta1.ComponentSpec{
   486  				ClusterIssuer: &installv1beta1.ClusterIssuerComponent{
   487  					IssuerConfig: installv1beta1.IssuerConfig{LetsEncrypt: &installv1beta1.LetsEncryptACMEIssuer{}},
   488  				},
   489  			},
   490  		}}))
   491  
   492  	asserts.True(IsCAConfig(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   493  
   494  	asserts.True(IsCAConfig(
   495  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   496  			Components: vzapi.ComponentSpec{
   497  				ClusterIssuer: &vzapi.ClusterIssuerComponent{
   498  					IssuerConfig: vzapi.IssuerConfig{CA: &vzapi.CAIssuer{}},
   499  				},
   500  			},
   501  		}}))
   502  
   503  	asserts.False(IsCAConfig(
   504  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   505  			Components: vzapi.ComponentSpec{
   506  				ClusterIssuer: &vzapi.ClusterIssuerComponent{},
   507  			},
   508  		}}))
   509  
   510  	asserts.False(IsCAConfig(
   511  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   512  			Components: vzapi.ComponentSpec{
   513  				ClusterIssuer: &vzapi.ClusterIssuerComponent{
   514  					IssuerConfig: vzapi.IssuerConfig{LetsEncrypt: &vzapi.LetsEncryptACMEIssuer{}},
   515  				},
   516  			},
   517  		}}))
   518  }
   519  
   520  // TestIsConsoleEnabled tests the IsConsoleEnabled function
   521  // GIVEN a call to IsConsoleEnabled
   522  //
   523  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   524  func TestIsConsoleEnabled(t *testing.T) {
   525  	asserts := assert.New(t)
   526  	asserts.True(IsConsoleEnabled(nil))
   527  	asserts.True(IsConsoleEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   528  	asserts.True(IsConsoleEnabled(
   529  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   530  			Components: vzapi.ComponentSpec{
   531  				Console: &vzapi.ConsoleComponent{},
   532  			},
   533  		}}))
   534  	asserts.True(IsConsoleEnabled(
   535  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   536  			Components: vzapi.ComponentSpec{
   537  				Console: &vzapi.ConsoleComponent{
   538  					Enabled: &trueValue,
   539  				},
   540  			},
   541  		}}))
   542  	asserts.False(IsConsoleEnabled(
   543  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   544  			Components: vzapi.ComponentSpec{
   545  				Console: &vzapi.ConsoleComponent{
   546  					Enabled: &falseValue,
   547  				},
   548  			},
   549  		}}))
   550  	asserts.True(IsConsoleEnabled(
   551  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   552  			Components: installv1beta1.ComponentSpec{
   553  				Console: &installv1beta1.ConsoleComponent{
   554  					Enabled: &trueValue,
   555  				},
   556  			},
   557  		}}))
   558  	asserts.False(IsConsoleEnabled(
   559  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   560  			Components: installv1beta1.ComponentSpec{
   561  				Console: &installv1beta1.ConsoleComponent{
   562  					Enabled: &falseValue,
   563  				},
   564  			},
   565  		}}))
   566  }
   567  
   568  // TestIsFluentdEnabled tests the IsFluentdEnabled function
   569  // GIVEN a call to IsFluentdEnabled
   570  //
   571  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   572  func TestIsFluentdEnabled(t *testing.T) {
   573  	asserts := assert.New(t)
   574  	asserts.True(IsFluentdEnabled(nil))
   575  	asserts.True(IsFluentdEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   576  	asserts.True(IsFluentdEnabled(
   577  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   578  			Components: vzapi.ComponentSpec{
   579  				Fluentd: &vzapi.FluentdComponent{},
   580  			},
   581  		}}))
   582  	asserts.True(IsFluentdEnabled(
   583  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   584  			Components: vzapi.ComponentSpec{
   585  				Fluentd: &vzapi.FluentdComponent{
   586  					Enabled: &trueValue,
   587  				},
   588  			},
   589  		}}))
   590  	asserts.False(IsFluentdEnabled(
   591  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   592  			Components: vzapi.ComponentSpec{
   593  				Fluentd: &vzapi.FluentdComponent{
   594  					Enabled: &falseValue,
   595  				},
   596  			},
   597  		}}))
   598  	asserts.True(IsFluentdEnabled(
   599  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   600  			Components: installv1beta1.ComponentSpec{
   601  				Fluentd: &installv1beta1.FluentdComponent{
   602  					Enabled: &trueValue,
   603  				},
   604  			},
   605  		}}))
   606  	asserts.False(IsFluentdEnabled(
   607  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   608  			Components: installv1beta1.ComponentSpec{
   609  				Fluentd: &installv1beta1.FluentdComponent{
   610  					Enabled: &falseValue,
   611  				},
   612  			},
   613  		}}))
   614  }
   615  
   616  // TestIsGrafanaEnabled tests the IsGrafanaEnabled function
   617  // GIVEN a call to IsGrafanaEnabled
   618  //
   619  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   620  func TestIsGrafanaEnabled(t *testing.T) {
   621  	asserts := assert.New(t)
   622  	asserts.True(IsGrafanaEnabled(nil))
   623  	asserts.True(IsGrafanaEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   624  	asserts.True(IsGrafanaEnabled(
   625  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   626  			Components: vzapi.ComponentSpec{
   627  				Grafana: &vzapi.GrafanaComponent{},
   628  			},
   629  		}}))
   630  	asserts.True(IsGrafanaEnabled(
   631  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   632  			Components: vzapi.ComponentSpec{
   633  				Grafana: &vzapi.GrafanaComponent{
   634  					Enabled: &trueValue,
   635  				},
   636  			},
   637  		}}))
   638  	asserts.False(IsGrafanaEnabled(
   639  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   640  			Components: vzapi.ComponentSpec{
   641  				Grafana: &vzapi.GrafanaComponent{
   642  					Enabled: &falseValue,
   643  				},
   644  			},
   645  		}}))
   646  	asserts.True(IsGrafanaEnabled(
   647  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   648  			Components: installv1beta1.ComponentSpec{
   649  				Grafana: &installv1beta1.GrafanaComponent{
   650  					Enabled: &trueValue,
   651  				},
   652  			},
   653  		}}))
   654  	asserts.False(IsGrafanaEnabled(
   655  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   656  			Components: installv1beta1.ComponentSpec{
   657  				Grafana: &installv1beta1.GrafanaComponent{
   658  					Enabled: &falseValue,
   659  				},
   660  			},
   661  		}}))
   662  }
   663  
   664  // TestIsElasticsearchEnabled tests the IsOpenSearchEnabled function
   665  // GIVEN a call to IsOpenSearchEnabled
   666  //
   667  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   668  func TestIsElasticsearchEnabled(t *testing.T) {
   669  	asserts := assert.New(t)
   670  	asserts.True(IsOpenSearchEnabled(nil))
   671  	asserts.True(IsOpenSearchEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   672  	asserts.True(IsOpenSearchEnabled(
   673  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   674  			Components: vzapi.ComponentSpec{
   675  				Elasticsearch: &vzapi.ElasticsearchComponent{},
   676  			},
   677  		}}))
   678  	asserts.True(IsOpenSearchEnabled(
   679  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   680  			Components: vzapi.ComponentSpec{
   681  				Elasticsearch: &vzapi.ElasticsearchComponent{
   682  					Enabled: &trueValue,
   683  				},
   684  			},
   685  		}}))
   686  	asserts.False(IsOpenSearchEnabled(
   687  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   688  			Components: vzapi.ComponentSpec{
   689  				Elasticsearch: &vzapi.ElasticsearchComponent{
   690  					Enabled: &falseValue,
   691  				},
   692  			},
   693  		}}))
   694  	asserts.True(IsOpenSearchEnabled(
   695  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   696  			Components: installv1beta1.ComponentSpec{
   697  				OpenSearch: &installv1beta1.OpenSearchComponent{
   698  					Enabled: &trueValue,
   699  				},
   700  			},
   701  		}}))
   702  	asserts.False(IsOpenSearchEnabled(
   703  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   704  			Components: installv1beta1.ComponentSpec{
   705  				OpenSearch: &installv1beta1.OpenSearchComponent{
   706  					Enabled: &falseValue,
   707  				},
   708  			},
   709  		}}))
   710  }
   711  
   712  // TestIsKibanaEnabled tests the IsOpenSearchDashboardsEnabled function
   713  // GIVEN a call to IsOpenSearchDashboardsEnabled
   714  //
   715  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   716  func TestIsKibanaEnabled(t *testing.T) {
   717  	asserts := assert.New(t)
   718  	asserts.True(IsOpenSearchDashboardsEnabled(nil))
   719  	asserts.True(IsOpenSearchDashboardsEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   720  	asserts.True(IsOpenSearchDashboardsEnabled(
   721  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   722  			Components: vzapi.ComponentSpec{
   723  				Kibana: &vzapi.KibanaComponent{},
   724  			},
   725  		}}))
   726  	asserts.True(IsOpenSearchDashboardsEnabled(
   727  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   728  			Components: vzapi.ComponentSpec{
   729  				Kibana: &vzapi.KibanaComponent{
   730  					Enabled: &trueValue,
   731  				},
   732  			},
   733  		}}))
   734  	asserts.False(IsOpenSearchDashboardsEnabled(
   735  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   736  			Components: vzapi.ComponentSpec{
   737  				Kibana: &vzapi.KibanaComponent{
   738  					Enabled: &falseValue,
   739  				},
   740  			},
   741  		}}))
   742  	asserts.True(IsOpenSearchDashboardsEnabled(
   743  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   744  			Components: installv1beta1.ComponentSpec{
   745  				OpenSearchDashboards: &installv1beta1.OpenSearchDashboardsComponent{
   746  					Enabled: &trueValue,
   747  				},
   748  			},
   749  		}}))
   750  	asserts.False(IsOpenSearchDashboardsEnabled(
   751  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   752  			Components: installv1beta1.ComponentSpec{
   753  				OpenSearchDashboards: &installv1beta1.OpenSearchDashboardsComponent{
   754  					Enabled: &falseValue,
   755  				},
   756  			},
   757  		}}))
   758  }
   759  
   760  // TestIsPrometheusEnabled tests the IsPrometheusEnabled function
   761  // GIVEN a call to IsPrometheusEnabled
   762  //
   763  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   764  func TestIsPrometheusEnabled(t *testing.T) {
   765  	asserts := assert.New(t)
   766  	asserts.True(IsPrometheusEnabled(nil))
   767  	asserts.True(IsPrometheusEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   768  	asserts.True(IsPrometheusEnabled(
   769  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   770  			Components: vzapi.ComponentSpec{
   771  				Prometheus: &vzapi.PrometheusComponent{},
   772  			},
   773  		}}))
   774  	asserts.True(IsPrometheusEnabled(
   775  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   776  			Components: vzapi.ComponentSpec{
   777  				Prometheus: &vzapi.PrometheusComponent{
   778  					Enabled: &trueValue,
   779  				},
   780  			},
   781  		}}))
   782  	asserts.False(IsPrometheusEnabled(
   783  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   784  			Components: vzapi.ComponentSpec{
   785  				Prometheus: &vzapi.PrometheusComponent{
   786  					Enabled: &falseValue,
   787  				},
   788  			},
   789  		}}))
   790  	asserts.True(IsPrometheusEnabled(
   791  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   792  			Components: installv1beta1.ComponentSpec{
   793  				Prometheus: &installv1beta1.PrometheusComponent{
   794  					Enabled: &trueValue,
   795  				},
   796  			},
   797  		}}))
   798  	asserts.False(IsPrometheusEnabled(
   799  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   800  			Components: installv1beta1.ComponentSpec{
   801  				Prometheus: &installv1beta1.PrometheusComponent{
   802  					Enabled: &falseValue,
   803  				},
   804  			},
   805  		}}))
   806  }
   807  
   808  // TestIsKialiEnabled tests the IsKialiEnabled function
   809  // GIVEN a call to IsKialiEnabled
   810  //
   811  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   812  func TestIsKialiEnabled(t *testing.T) {
   813  	asserts := assert.New(t)
   814  	asserts.True(IsKialiEnabled(nil))
   815  	asserts.True(IsKialiEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   816  	asserts.True(IsKialiEnabled(
   817  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   818  			Components: vzapi.ComponentSpec{
   819  				Kiali: &vzapi.KialiComponent{},
   820  			},
   821  		}}))
   822  	asserts.True(IsKialiEnabled(
   823  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   824  			Components: vzapi.ComponentSpec{
   825  				Kiali: &vzapi.KialiComponent{
   826  					Enabled: &trueValue,
   827  				},
   828  			},
   829  		}}))
   830  	asserts.False(IsKialiEnabled(
   831  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   832  			Components: vzapi.ComponentSpec{
   833  				Kiali: &vzapi.KialiComponent{
   834  					Enabled: &falseValue,
   835  				},
   836  			},
   837  		}}))
   838  	asserts.True(IsKialiEnabled(
   839  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   840  			Components: installv1beta1.ComponentSpec{
   841  				Kiali: &installv1beta1.KialiComponent{
   842  					Enabled: &trueValue,
   843  				},
   844  			},
   845  		}}))
   846  	asserts.False(IsKialiEnabled(
   847  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   848  			Components: installv1beta1.ComponentSpec{
   849  				Kiali: &installv1beta1.KialiComponent{
   850  					Enabled: &falseValue,
   851  				},
   852  			},
   853  		}}))
   854  }
   855  
   856  // TestIsIstioEnabled tests the IsIstioEnabled function
   857  // GIVEN a call to IsIstioEnabled
   858  //
   859  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   860  func TestIsIstioEnabled(t *testing.T) {
   861  	asserts := assert.New(t)
   862  	asserts.True(IsIstioEnabled(nil))
   863  	asserts.True(IsIstioEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   864  	asserts.True(IsIstioEnabled(
   865  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   866  			Components: vzapi.ComponentSpec{
   867  				Istio: &vzapi.IstioComponent{},
   868  			},
   869  		}}))
   870  	asserts.True(IsIstioEnabled(
   871  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   872  			Components: vzapi.ComponentSpec{
   873  				Istio: &vzapi.IstioComponent{
   874  					Enabled: &trueValue,
   875  				},
   876  			},
   877  		}}))
   878  	asserts.False(IsIstioEnabled(
   879  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   880  			Components: vzapi.ComponentSpec{
   881  				Istio: &vzapi.IstioComponent{
   882  					Enabled: &falseValue,
   883  				},
   884  			},
   885  		}}))
   886  	asserts.True(IsIstioEnabled(
   887  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   888  			Components: installv1beta1.ComponentSpec{
   889  				Istio: &installv1beta1.IstioComponent{
   890  					Enabled: &trueValue,
   891  				},
   892  			},
   893  		}}))
   894  	asserts.False(IsIstioEnabled(
   895  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   896  			Components: installv1beta1.ComponentSpec{
   897  				Istio: &installv1beta1.IstioComponent{
   898  					Enabled: &falseValue,
   899  				},
   900  			},
   901  		}}))
   902  }
   903  
   904  // TestIsIstioInjectionEnabled tests the IsIstioInjectionEnabled function
   905  // GIVEN a call to IsIstioInjectionEnabled
   906  //
   907  //	THEN return false if either Istio is disabled OR Injection is disabled, true otherwise
   908  func TestIsIstioInjectionEnabled(t *testing.T) {
   909  	asserts := assert.New(t)
   910  	asserts.True(IsIstioInjectionEnabled(nil))
   911  	asserts.True(IsIstioInjectionEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   912  	asserts.True(IsIstioInjectionEnabled(
   913  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   914  			Components: vzapi.ComponentSpec{
   915  				Istio: &vzapi.IstioComponent{},
   916  			},
   917  		}}))
   918  	asserts.True(IsIstioInjectionEnabled(
   919  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   920  			Components: vzapi.ComponentSpec{
   921  				Istio: &vzapi.IstioComponent{
   922  					Enabled: &trueValue,
   923  				},
   924  			},
   925  		}}))
   926  	asserts.False(IsIstioInjectionEnabled(
   927  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   928  			Components: vzapi.ComponentSpec{
   929  				Istio: &vzapi.IstioComponent{
   930  					Enabled:          &trueValue,
   931  					InjectionEnabled: &falseValue,
   932  				},
   933  			},
   934  		}}))
   935  	asserts.False(IsIstioInjectionEnabled(
   936  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   937  			Components: vzapi.ComponentSpec{
   938  				Istio: &vzapi.IstioComponent{
   939  					Enabled: &falseValue,
   940  				},
   941  			},
   942  		}}))
   943  	asserts.True(IsIstioInjectionEnabled(
   944  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   945  			Components: installv1beta1.ComponentSpec{
   946  				Istio: &installv1beta1.IstioComponent{
   947  					Enabled: &trueValue,
   948  				},
   949  			},
   950  		}}))
   951  	asserts.False(IsIstioInjectionEnabled(
   952  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   953  			Components: installv1beta1.ComponentSpec{
   954  				Istio: &installv1beta1.IstioComponent{
   955  					Enabled:          &trueValue,
   956  					InjectionEnabled: &falseValue,
   957  				},
   958  			},
   959  		}}))
   960  	asserts.False(IsIstioInjectionEnabled(
   961  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
   962  			Components: installv1beta1.ComponentSpec{
   963  				Istio: &installv1beta1.IstioComponent{
   964  					Enabled: &falseValue,
   965  				},
   966  			},
   967  		}}))
   968  }
   969  
   970  // TestIsNGINXEnabled tests the IsNGINXEnabled function
   971  // GIVEN a call to IsNGINXEnabled
   972  //
   973  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
   974  func TestIsNGINXEnabled(t *testing.T) {
   975  	asserts := assert.New(t)
   976  	asserts.True(IsNGINXEnabled(nil))
   977  	asserts.True(IsNGINXEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
   978  	asserts.True(IsNGINXEnabled(
   979  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   980  			Components: vzapi.ComponentSpec{
   981  				Ingress: &vzapi.IngressNginxComponent{},
   982  			},
   983  		}}))
   984  	asserts.True(IsNGINXEnabled(
   985  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   986  			Components: vzapi.ComponentSpec{
   987  				Ingress: &vzapi.IngressNginxComponent{
   988  					Enabled: &trueValue,
   989  				},
   990  			},
   991  		}}))
   992  	asserts.False(IsNGINXEnabled(
   993  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
   994  			Components: vzapi.ComponentSpec{
   995  				Ingress: &vzapi.IngressNginxComponent{
   996  					Enabled: &falseValue,
   997  				},
   998  			},
   999  		}}))
  1000  	asserts.True(IsNGINXEnabled(
  1001  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1002  			Components: installv1beta1.ComponentSpec{
  1003  				IngressNGINX: &installv1beta1.IngressNginxComponent{
  1004  					Enabled: &trueValue,
  1005  				},
  1006  			},
  1007  		}}))
  1008  	asserts.False(IsNGINXEnabled(
  1009  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1010  			Components: installv1beta1.ComponentSpec{
  1011  				IngressNGINX: &installv1beta1.IngressNginxComponent{
  1012  					Enabled: &falseValue,
  1013  				},
  1014  			},
  1015  		}}))
  1016  }
  1017  
  1018  // TestIsJaegerOperatorEnabled tests the IsJaegerOperatorEnabled function
  1019  // GIVEN a call to IsJaegerOperatorEnabled
  1020  //
  1021  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default)
  1022  func TestIsJaegerOperatorEnabled(t *testing.T) {
  1023  	asserts := assert.New(t)
  1024  	asserts.False(IsJaegerOperatorEnabled(nil))
  1025  	asserts.False(IsJaegerOperatorEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1026  	asserts.False(IsJaegerOperatorEnabled(
  1027  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1028  			Components: vzapi.ComponentSpec{
  1029  				JaegerOperator: &vzapi.JaegerOperatorComponent{},
  1030  			},
  1031  		}}))
  1032  	asserts.True(IsJaegerOperatorEnabled(
  1033  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1034  			Components: vzapi.ComponentSpec{
  1035  				JaegerOperator: &vzapi.JaegerOperatorComponent{
  1036  					Enabled: &trueValue,
  1037  				},
  1038  			},
  1039  		}}))
  1040  	asserts.False(IsJaegerOperatorEnabled(
  1041  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1042  			Components: vzapi.ComponentSpec{
  1043  				JaegerOperator: &vzapi.JaegerOperatorComponent{
  1044  					Enabled: &falseValue,
  1045  				},
  1046  			},
  1047  		}}))
  1048  	asserts.True(IsJaegerOperatorEnabled(
  1049  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1050  			Components: installv1beta1.ComponentSpec{
  1051  				JaegerOperator: &installv1beta1.JaegerOperatorComponent{
  1052  					Enabled: &trueValue,
  1053  				},
  1054  			},
  1055  		}}))
  1056  	asserts.False(IsJaegerOperatorEnabled(
  1057  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1058  			Components: installv1beta1.ComponentSpec{
  1059  				JaegerOperator: &installv1beta1.JaegerOperatorComponent{
  1060  					Enabled: &falseValue,
  1061  				},
  1062  			},
  1063  		}}))
  1064  }
  1065  
  1066  // TestIsApplicationOperatorEnabled tests the IsApplicationOperatorEnabled function
  1067  // GIVEN a call to IsApplicationOperatorEnabled
  1068  //
  1069  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default)
  1070  func TestIsApplicationOperatorEnabled(t *testing.T) {
  1071  	asserts := assert.New(t)
  1072  	asserts.True(IsApplicationOperatorEnabled(nil))
  1073  	asserts.True(IsApplicationOperatorEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1074  	asserts.True(IsApplicationOperatorEnabled(
  1075  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1076  			Components: vzapi.ComponentSpec{
  1077  				ApplicationOperator: &vzapi.ApplicationOperatorComponent{},
  1078  			},
  1079  		}}))
  1080  	asserts.True(IsApplicationOperatorEnabled(
  1081  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1082  			Components: vzapi.ComponentSpec{
  1083  				ApplicationOperator: &vzapi.ApplicationOperatorComponent{
  1084  					Enabled: &trueValue,
  1085  				},
  1086  			},
  1087  		}}))
  1088  	asserts.False(IsApplicationOperatorEnabled(
  1089  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1090  			Components: vzapi.ComponentSpec{
  1091  				ApplicationOperator: &vzapi.ApplicationOperatorComponent{
  1092  					Enabled: &falseValue,
  1093  				},
  1094  			},
  1095  		}}))
  1096  	asserts.True(IsApplicationOperatorEnabled(
  1097  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1098  			Components: installv1beta1.ComponentSpec{
  1099  				ApplicationOperator: &installv1beta1.ApplicationOperatorComponent{
  1100  					Enabled: &trueValue,
  1101  				},
  1102  			},
  1103  		}}))
  1104  	asserts.False(IsApplicationOperatorEnabled(
  1105  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1106  			Components: installv1beta1.ComponentSpec{
  1107  				ApplicationOperator: &installv1beta1.ApplicationOperatorComponent{
  1108  					Enabled: &falseValue,
  1109  				},
  1110  			},
  1111  		}}))
  1112  }
  1113  
  1114  // TestIsVeleroEnabled tests the IsVeleroEnabled function
  1115  // GIVEN a call to IsVeleroEnabled
  1116  //
  1117  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default)
  1118  func TestIsVeleroEnabled(t *testing.T) {
  1119  	asserts := assert.New(t)
  1120  	asserts.False(IsVeleroEnabled(nil))
  1121  	asserts.False(IsVeleroEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1122  	asserts.False(IsVeleroEnabled(
  1123  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1124  			Components: vzapi.ComponentSpec{
  1125  				Velero: &vzapi.VeleroComponent{},
  1126  			},
  1127  		}}))
  1128  	asserts.True(IsVeleroEnabled(
  1129  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1130  			Components: vzapi.ComponentSpec{
  1131  				Velero: &vzapi.VeleroComponent{
  1132  					Enabled: &trueValue,
  1133  				},
  1134  			},
  1135  		}}))
  1136  	asserts.False(IsVeleroEnabled(
  1137  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1138  			Components: vzapi.ComponentSpec{
  1139  				Velero: &vzapi.VeleroComponent{
  1140  					Enabled: &falseValue,
  1141  				},
  1142  			},
  1143  		}}))
  1144  	asserts.True(IsVeleroEnabled(
  1145  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1146  			Components: installv1beta1.ComponentSpec{
  1147  				Velero: &installv1beta1.VeleroComponent{
  1148  					Enabled: &trueValue,
  1149  				},
  1150  			},
  1151  		}}))
  1152  	asserts.False(IsVeleroEnabled(
  1153  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1154  			Components: installv1beta1.ComponentSpec{
  1155  				Velero: &installv1beta1.VeleroComponent{
  1156  					Enabled: &falseValue,
  1157  				},
  1158  			},
  1159  		}}))
  1160  }
  1161  
  1162  // TestIsCertManagerEnabled tests the IsCertManagerEnabled function
  1163  // GIVEN a call to IsCertManagerEnabled
  1164  // WHEN the CertManager component is explicitly disabled
  1165  // THEN return false, true otherwise (enabled by default)
  1166  func TestIsCertManagerEnabled(t *testing.T) {
  1167  	asserts := assert.New(t)
  1168  	asserts.True(IsCertManagerEnabled(nil))
  1169  	asserts.True(IsCertManagerEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1170  	asserts.True(IsCertManagerEnabled(
  1171  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1172  			Components: vzapi.ComponentSpec{
  1173  				CertManager: &vzapi.CertManagerComponent{},
  1174  			},
  1175  		}}))
  1176  	asserts.True(IsCertManagerEnabled(
  1177  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1178  			Components: vzapi.ComponentSpec{
  1179  				CertManager: &vzapi.CertManagerComponent{
  1180  					Enabled: &trueValue,
  1181  				},
  1182  			},
  1183  		}}))
  1184  	asserts.False(IsCertManagerEnabled(
  1185  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1186  			Components: vzapi.ComponentSpec{
  1187  				CertManager: &vzapi.CertManagerComponent{
  1188  					Enabled: &falseValue,
  1189  				},
  1190  			},
  1191  		}}))
  1192  	asserts.True(IsCertManagerEnabled(
  1193  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1194  			Components: installv1beta1.ComponentSpec{
  1195  				CertManager: &installv1beta1.CertManagerComponent{
  1196  					Enabled: &trueValue,
  1197  				},
  1198  			},
  1199  		}}))
  1200  	asserts.False(IsCertManagerEnabled(
  1201  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1202  			Components: installv1beta1.ComponentSpec{
  1203  				CertManager: &installv1beta1.CertManagerComponent{
  1204  					Enabled: &falseValue,
  1205  				},
  1206  			},
  1207  		}}))
  1208  }
  1209  
  1210  // TestIsKubeStateMetricsEnabled tests the IsKubeStateMetricsEnabled function
  1211  // GIVEN a call to IsKubeStateMetricsEnabled
  1212  // WHEN the KubeStateMetrics component is explicitly enabled
  1213  // THEN return true, false otherwise (disabled by default)
  1214  func TestIsKubeStateMetricsEnabled(t *testing.T) {
  1215  	asserts := assert.New(t)
  1216  	asserts.False(IsKubeStateMetricsEnabled(nil))
  1217  	asserts.False(IsKubeStateMetricsEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1218  	asserts.False(IsKubeStateMetricsEnabled(
  1219  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1220  			Components: vzapi.ComponentSpec{
  1221  				KubeStateMetrics: &vzapi.KubeStateMetricsComponent{},
  1222  			},
  1223  		}}))
  1224  	asserts.True(IsKubeStateMetricsEnabled(
  1225  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1226  			Components: vzapi.ComponentSpec{
  1227  				KubeStateMetrics: &vzapi.KubeStateMetricsComponent{
  1228  					Enabled: &trueValue,
  1229  				},
  1230  			},
  1231  		}}))
  1232  	asserts.False(IsKubeStateMetricsEnabled(
  1233  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1234  			Components: vzapi.ComponentSpec{
  1235  				KubeStateMetrics: &vzapi.KubeStateMetricsComponent{
  1236  					Enabled: &falseValue,
  1237  				},
  1238  			},
  1239  		}}))
  1240  	asserts.True(IsKubeStateMetricsEnabled(
  1241  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1242  			Components: installv1beta1.ComponentSpec{
  1243  				KubeStateMetrics: &installv1beta1.KubeStateMetricsComponent{
  1244  					Enabled: &trueValue,
  1245  				},
  1246  			},
  1247  		}}))
  1248  	asserts.False(IsKubeStateMetricsEnabled(
  1249  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1250  			Components: installv1beta1.ComponentSpec{
  1251  				KubeStateMetrics: &installv1beta1.KubeStateMetricsComponent{
  1252  					Enabled: &falseValue,
  1253  				},
  1254  			},
  1255  		}}))
  1256  }
  1257  
  1258  // TestIsAuthProxyEnabled tests the IsAuthProxyEnabled function
  1259  // GIVEN a call to IsAuthProxyEnabled
  1260  // WHEN the AuthProxy component is explicitly disabled
  1261  // THEN return false, true otherwise (enabled by default)
  1262  func TestIsAuthProxyEnabled(t *testing.T) {
  1263  	asserts := assert.New(t)
  1264  	asserts.True(IsAuthProxyEnabled(nil))
  1265  	asserts.True(IsAuthProxyEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1266  	asserts.True(IsAuthProxyEnabled(
  1267  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1268  			Components: vzapi.ComponentSpec{
  1269  				AuthProxy: &vzapi.AuthProxyComponent{},
  1270  			},
  1271  		}}))
  1272  	asserts.True(IsAuthProxyEnabled(
  1273  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1274  			Components: vzapi.ComponentSpec{
  1275  				AuthProxy: &vzapi.AuthProxyComponent{
  1276  					Enabled: &trueValue,
  1277  				},
  1278  			},
  1279  		}}))
  1280  	asserts.False(IsAuthProxyEnabled(
  1281  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1282  			Components: vzapi.ComponentSpec{
  1283  				AuthProxy: &vzapi.AuthProxyComponent{
  1284  					Enabled: &falseValue,
  1285  				},
  1286  			},
  1287  		}}))
  1288  	asserts.True(IsAuthProxyEnabled(
  1289  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1290  			Components: installv1beta1.ComponentSpec{
  1291  				AuthProxy: &installv1beta1.AuthProxyComponent{
  1292  					Enabled: &trueValue,
  1293  				},
  1294  			},
  1295  		}}))
  1296  	asserts.False(IsAuthProxyEnabled(
  1297  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1298  			Components: installv1beta1.ComponentSpec{
  1299  				AuthProxy: &installv1beta1.AuthProxyComponent{
  1300  					Enabled: &falseValue,
  1301  				},
  1302  			},
  1303  		}}))
  1304  }
  1305  
  1306  // TestIsRancherBackupEnabled tests the IsRancherBackupEnabled function
  1307  // GIVEN a call to IsRancherBackupEnabled
  1308  // WHEN the RancherBackup component is explicitly enabled
  1309  // THEN return true, false otherwise (disabled by default)
  1310  func TestIsRancherBackupEnabled(t *testing.T) {
  1311  	asserts := assert.New(t)
  1312  	asserts.False(IsRancherBackupEnabled(nil))
  1313  	asserts.False(IsRancherBackupEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1314  	asserts.False(IsRancherBackupEnabled(
  1315  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1316  			Components: vzapi.ComponentSpec{
  1317  				RancherBackup: &vzapi.RancherBackupComponent{},
  1318  			},
  1319  		}}))
  1320  	asserts.True(IsRancherBackupEnabled(
  1321  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1322  			Components: vzapi.ComponentSpec{
  1323  				RancherBackup: &vzapi.RancherBackupComponent{
  1324  					Enabled: &trueValue,
  1325  				},
  1326  			},
  1327  		}}))
  1328  	asserts.False(IsRancherBackupEnabled(
  1329  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1330  			Components: vzapi.ComponentSpec{
  1331  				RancherBackup: &vzapi.RancherBackupComponent{
  1332  					Enabled: &falseValue,
  1333  				},
  1334  			},
  1335  		}}))
  1336  	asserts.True(IsRancherBackupEnabled(
  1337  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1338  			Components: installv1beta1.ComponentSpec{
  1339  				RancherBackup: &installv1beta1.RancherBackupComponent{
  1340  					Enabled: &trueValue,
  1341  				},
  1342  			},
  1343  		}}))
  1344  	asserts.False(IsRancherBackupEnabled(
  1345  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1346  			Components: installv1beta1.ComponentSpec{
  1347  				RancherBackup: &installv1beta1.RancherBackupComponent{
  1348  					Enabled: &falseValue,
  1349  				},
  1350  			},
  1351  		}}))
  1352  }
  1353  
  1354  // TestIsPrometheusComponentsEnabled tests whether the PrometheusComponents are enabled or not
  1355  // GIVEN a call to isEnabled function of a Prometheus component
  1356  // WHEN the Prometheus component is explicitly enabled or disabled
  1357  // THEN return the value as expected in the enabled variable
  1358  func TestIsPrometheusComponentsEnabled(t *testing.T) {
  1359  	var tests = []struct {
  1360  		name      string
  1361  		cr        runtime.Object
  1362  		enabled   bool
  1363  		isEnabled func(object runtime.Object) bool
  1364  	}{
  1365  		// Prometheus Operator
  1366  		{
  1367  			"Prometheus Operator enabled when empty v1alpha1 CR",
  1368  			&vzapi.Verrazzano{},
  1369  			true,
  1370  			IsPrometheusOperatorEnabled,
  1371  		},
  1372  		{
  1373  			"Prometheus Operator enabled when empty v1beta1 CR",
  1374  			&installv1beta1.Verrazzano{},
  1375  			true,
  1376  			IsPrometheusOperatorEnabled,
  1377  		},
  1378  		{
  1379  			"Prometheus Operator enabled when component enabled, v1alpha1 CR",
  1380  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{Enabled: &trueValue}}}},
  1381  			true,
  1382  			IsPrometheusOperatorEnabled,
  1383  		},
  1384  		{
  1385  			"Prometheus Operator enabled when component enabled, v1beta1 CR",
  1386  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{Enabled: &trueValue}}}},
  1387  			true,
  1388  			IsPrometheusOperatorEnabled,
  1389  		},
  1390  		{
  1391  			"Prometheus Operator disabled when component disabled, v1alpha1 CR",
  1392  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{Enabled: &falseValue}}}},
  1393  			false,
  1394  			IsPrometheusOperatorEnabled,
  1395  		},
  1396  		{
  1397  			"Prometheus Operator disabled when component disabled, v1beta1 CR",
  1398  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{Enabled: &falseValue}}}},
  1399  			false,
  1400  			IsPrometheusOperatorEnabled,
  1401  		},
  1402  		// Prometheus Adapter
  1403  		{
  1404  			"Prometheus Adapter disabled when empty v1alpha1 CR",
  1405  			&vzapi.Verrazzano{},
  1406  			false,
  1407  			IsPrometheusAdapterEnabled,
  1408  		},
  1409  		{
  1410  			"Prometheus Adapter disabled when empty v1beta1 CR",
  1411  			&installv1beta1.Verrazzano{},
  1412  			false,
  1413  			IsPrometheusAdapterEnabled,
  1414  		},
  1415  		{
  1416  			"Prometheus Adapter enabled when component enabled, v1alpha1 CR",
  1417  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusAdapter: &vzapi.PrometheusAdapterComponent{Enabled: &trueValue}}}},
  1418  			true,
  1419  			IsPrometheusAdapterEnabled,
  1420  		},
  1421  		{
  1422  			"Prometheus Adapter enabled when component enabled, v1beta1 CR",
  1423  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusAdapter: &installv1beta1.PrometheusAdapterComponent{Enabled: &trueValue}}}},
  1424  			true,
  1425  			IsPrometheusAdapterEnabled,
  1426  		},
  1427  		{
  1428  			"Prometheus Adapter disabled when component disabled, v1alpha1 CR",
  1429  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusAdapter: &vzapi.PrometheusAdapterComponent{Enabled: &falseValue}}}},
  1430  			false,
  1431  			IsPrometheusAdapterEnabled,
  1432  		},
  1433  		{
  1434  			"Prometheus Adapter disabled when component disabled, v1beta1 CR",
  1435  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusAdapter: &installv1beta1.PrometheusAdapterComponent{Enabled: &falseValue}}}},
  1436  			false,
  1437  			IsPrometheusAdapterEnabled,
  1438  		},
  1439  		// Prometheus Pushgateway
  1440  		{
  1441  			"Prometheus Pushgateway disabled when empty v1alpha1 CR",
  1442  			&vzapi.Verrazzano{},
  1443  			false,
  1444  			IsPrometheusPushgatewayEnabled,
  1445  		},
  1446  		{
  1447  			"Prometheus Pushgateway disabled when empty v1beta1 CR",
  1448  			&installv1beta1.Verrazzano{},
  1449  			false,
  1450  			IsPrometheusPushgatewayEnabled,
  1451  		},
  1452  		{
  1453  			"Prometheus Pushgateway enabled when component enabled, v1alpha1 CR",
  1454  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusPushgateway: &vzapi.PrometheusPushgatewayComponent{Enabled: &trueValue}}}},
  1455  			true,
  1456  			IsPrometheusPushgatewayEnabled,
  1457  		},
  1458  		{
  1459  			"Prometheus Pushgateway enabled when component enabled, v1beta1 CR",
  1460  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusPushgateway: &installv1beta1.PrometheusPushgatewayComponent{Enabled: &trueValue}}}},
  1461  			true,
  1462  			IsPrometheusPushgatewayEnabled,
  1463  		},
  1464  		{
  1465  			"Prometheus Pushgateway disabled when component disabled, v1alpha1 CR",
  1466  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusPushgateway: &vzapi.PrometheusPushgatewayComponent{Enabled: &falseValue}}}},
  1467  			false,
  1468  			IsPrometheusPushgatewayEnabled,
  1469  		},
  1470  		{
  1471  			"Prometheus Pushgateway disabled when component disabled, v1beta1 CR",
  1472  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusPushgateway: &installv1beta1.PrometheusPushgatewayComponent{Enabled: &falseValue}}}},
  1473  			false,
  1474  			IsPrometheusPushgatewayEnabled,
  1475  		},
  1476  		// Prometheus NodeExporter
  1477  		{
  1478  			"Prometheus NodeExporter enabled when empty v1alpha1 CR",
  1479  			&vzapi.Verrazzano{},
  1480  			true,
  1481  			IsPrometheusNodeExporterEnabled,
  1482  		},
  1483  		{
  1484  			"Prometheus NodeExporter enabled when empty v1beta1 CR",
  1485  			&installv1beta1.Verrazzano{},
  1486  			true,
  1487  			IsPrometheusNodeExporterEnabled,
  1488  		},
  1489  		{
  1490  			"Prometheus NodeExporter enabled when component enabled, v1alpha1 CR",
  1491  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusNodeExporter: &vzapi.PrometheusNodeExporterComponent{Enabled: &trueValue}}}},
  1492  			true,
  1493  			IsPrometheusNodeExporterEnabled,
  1494  		},
  1495  		{
  1496  			"Prometheus NodeExporter enabled when component enabled, v1beta1 CR",
  1497  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusNodeExporter: &installv1beta1.PrometheusNodeExporterComponent{Enabled: &trueValue}}}},
  1498  			true,
  1499  			IsPrometheusNodeExporterEnabled,
  1500  		},
  1501  		{
  1502  			"Prometheus NodeExporter disabled when component disabled, v1alpha1 CR",
  1503  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusNodeExporter: &vzapi.PrometheusNodeExporterComponent{Enabled: &falseValue}}}},
  1504  			false,
  1505  			IsPrometheusNodeExporterEnabled,
  1506  		},
  1507  		{
  1508  			"Prometheus NodeExporter disabled when component disabled, v1beta1 CR",
  1509  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusNodeExporter: &installv1beta1.PrometheusNodeExporterComponent{Enabled: &falseValue}}}},
  1510  			false,
  1511  			IsPrometheusNodeExporterEnabled,
  1512  		},
  1513  	}
  1514  	for _, tt := range tests {
  1515  		t.Run(tt.name, func(t *testing.T) {
  1516  			assert.Equal(t, tt.enabled, tt.isEnabled(tt.cr))
  1517  		})
  1518  	}
  1519  }
  1520  
  1521  // TestIsArgoCDEnabled tests the IsArgoCDEnabled function
  1522  // GIVEN a call to IsArgoCDEnabled
  1523  //
  1524  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default)
  1525  func TestIsArgoCDEnabled(t *testing.T) {
  1526  	asserts := assert.New(t)
  1527  	asserts.False(IsArgoCDEnabled(nil))
  1528  	asserts.False(IsArgoCDEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1529  	asserts.False(IsArgoCDEnabled(
  1530  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1531  			Components: vzapi.ComponentSpec{
  1532  				ArgoCD: &vzapi.ArgoCDComponent{},
  1533  			},
  1534  		}}))
  1535  	asserts.True(IsArgoCDEnabled(
  1536  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1537  			Components: vzapi.ComponentSpec{
  1538  				ArgoCD: &vzapi.ArgoCDComponent{
  1539  					Enabled: &trueValue,
  1540  				},
  1541  			},
  1542  		}}))
  1543  	asserts.False(IsArgoCDEnabled(
  1544  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1545  			Components: vzapi.ComponentSpec{
  1546  				ArgoCD: &vzapi.ArgoCDComponent{
  1547  					Enabled: &falseValue,
  1548  				},
  1549  			},
  1550  		}}))
  1551  }
  1552  
  1553  func TestIsComponentEnabled(t *testing.T) {
  1554  	var tests = []struct {
  1555  		name      string
  1556  		cr        runtime.Object
  1557  		enabled   bool
  1558  		isEnabled func(object runtime.Object) bool
  1559  	}{
  1560  		// WKO
  1561  		{
  1562  			"wko enabled when empty v1alpha1 CR",
  1563  			&vzapi.Verrazzano{},
  1564  			true,
  1565  			IsWebLogicOperatorEnabled,
  1566  		},
  1567  		{
  1568  			"wko enabled when empty v1beta1 CR",
  1569  			&installv1beta1.Verrazzano{},
  1570  			true,
  1571  			IsWebLogicOperatorEnabled,
  1572  		},
  1573  		{
  1574  			"wko enabled when component enabled, v1alpha1 CR",
  1575  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{WebLogicOperator: &vzapi.WebLogicOperatorComponent{Enabled: &enabled}}}},
  1576  			true,
  1577  			IsWebLogicOperatorEnabled,
  1578  		},
  1579  		{
  1580  			"wko enabled when component enabled, v1beta1 CR",
  1581  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{WebLogicOperator: &installv1beta1.WebLogicOperatorComponent{Enabled: &enabled}}}},
  1582  			true,
  1583  			IsWebLogicOperatorEnabled,
  1584  		},
  1585  		{
  1586  			"wko disabled when component disabled, v1alpha1 CR",
  1587  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{WebLogicOperator: &vzapi.WebLogicOperatorComponent{Enabled: &disabled}}}},
  1588  			false,
  1589  			IsWebLogicOperatorEnabled,
  1590  		},
  1591  		{
  1592  			"wko disabled when component disabled, v1beta1 CR",
  1593  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{WebLogicOperator: &installv1beta1.WebLogicOperatorComponent{Enabled: &disabled}}}},
  1594  			false,
  1595  			IsWebLogicOperatorEnabled,
  1596  		},
  1597  
  1598  		// COH
  1599  		{
  1600  			"coh enabled when empty v1alpha1 CR",
  1601  			&vzapi.Verrazzano{},
  1602  			true,
  1603  			IsCoherenceOperatorEnabled,
  1604  		},
  1605  		{
  1606  			"coh enabled when empty v1beta1 CR",
  1607  			&installv1beta1.Verrazzano{},
  1608  			true,
  1609  			IsCoherenceOperatorEnabled,
  1610  		},
  1611  		{
  1612  			"coh enabled when component enabled, v1alpha1 CR",
  1613  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{CoherenceOperator: &vzapi.CoherenceOperatorComponent{Enabled: &enabled}}}},
  1614  			true,
  1615  			IsCoherenceOperatorEnabled,
  1616  		},
  1617  		{
  1618  			"coh enabled when component enabled, v1beta1 CR",
  1619  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{CoherenceOperator: &installv1beta1.CoherenceOperatorComponent{Enabled: &enabled}}}},
  1620  			true,
  1621  			IsCoherenceOperatorEnabled,
  1622  		},
  1623  		{
  1624  			"coh disabled when component disabled, v1alpha1 CR",
  1625  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{CoherenceOperator: &vzapi.CoherenceOperatorComponent{Enabled: &disabled}}}},
  1626  			false,
  1627  			IsCoherenceOperatorEnabled,
  1628  		},
  1629  		{
  1630  			"coh disabled when component disabled, v1beta1 CR",
  1631  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{CoherenceOperator: &installv1beta1.CoherenceOperatorComponent{Enabled: &disabled}}}},
  1632  			false,
  1633  			IsCoherenceOperatorEnabled,
  1634  		},
  1635  
  1636  		// Verrazzano Component
  1637  		{
  1638  			"vz enabled when empty v1alpha1 CR",
  1639  			&vzapi.Verrazzano{},
  1640  			true,
  1641  			IsVerrazzanoComponentEnabled,
  1642  		},
  1643  		{
  1644  			"vz enabled when empty v1beta1 CR",
  1645  			&installv1beta1.Verrazzano{},
  1646  			true,
  1647  			IsVerrazzanoComponentEnabled,
  1648  		},
  1649  		{
  1650  			"vz enabled when component enabled, v1alpha1 CR",
  1651  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{Verrazzano: &vzapi.VerrazzanoComponent{Enabled: &enabled}}}},
  1652  			true,
  1653  			IsVerrazzanoComponentEnabled,
  1654  		},
  1655  		{
  1656  			"vz enabled when component enabled, v1beta1 CR",
  1657  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{Verrazzano: &installv1beta1.VerrazzanoComponent{Enabled: &enabled}}}},
  1658  			true,
  1659  			IsVerrazzanoComponentEnabled,
  1660  		},
  1661  		{
  1662  			"vz disabled when component disabled, v1alpha1 CR",
  1663  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{Verrazzano: &vzapi.VerrazzanoComponent{Enabled: &disabled}}}},
  1664  			false,
  1665  			IsVerrazzanoComponentEnabled,
  1666  		},
  1667  		{
  1668  			"vz disabled when component disabled, v1beta1 CR",
  1669  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{Verrazzano: &installv1beta1.VerrazzanoComponent{Enabled: &disabled}}}},
  1670  			false,
  1671  			IsVerrazzanoComponentEnabled,
  1672  		},
  1673  
  1674  		// OAM
  1675  		{
  1676  			"oam enabled when empty v1alpha1 CR",
  1677  			&vzapi.Verrazzano{},
  1678  			true,
  1679  			IsCoherenceOperatorEnabled,
  1680  		},
  1681  		{
  1682  			"oam enabled when empty v1beta1 CR",
  1683  			&installv1beta1.Verrazzano{},
  1684  			true,
  1685  			IsOAMEnabled,
  1686  		},
  1687  		{
  1688  			"oam enabled when component enabled, v1alpha1 CR",
  1689  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{OAM: &vzapi.OAMComponent{Enabled: &enabled}}}},
  1690  			true,
  1691  			IsOAMEnabled,
  1692  		},
  1693  		{
  1694  			"oam enabled when component enabled, v1beta1 CR",
  1695  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{OAM: &installv1beta1.OAMComponent{Enabled: &enabled}}}},
  1696  			true,
  1697  			IsOAMEnabled,
  1698  		},
  1699  		{
  1700  			"oam disabled when component disabled, v1alpha1 CR",
  1701  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{OAM: &vzapi.OAMComponent{Enabled: &disabled}}}},
  1702  			false,
  1703  			IsOAMEnabled,
  1704  		},
  1705  		{
  1706  			"oam disabled when component disabled, v1beta1 CR",
  1707  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{OAM: &installv1beta1.OAMComponent{Enabled: &disabled}}}},
  1708  			false,
  1709  			IsOAMEnabled,
  1710  		},
  1711  
  1712  		// MySQL Operator
  1713  		{
  1714  			"mysqlop enabled when empty v1alpha1 CR",
  1715  			&vzapi.Verrazzano{},
  1716  			true,
  1717  			IsMySQLOperatorEnabled,
  1718  		},
  1719  		{
  1720  			"mysqlop enabled when empty v1beta1 CR",
  1721  			&installv1beta1.Verrazzano{},
  1722  			true,
  1723  			IsMySQLOperatorEnabled,
  1724  		},
  1725  		{
  1726  			"mysqlop enabled when component enabled, v1alpha1 CR",
  1727  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{MySQLOperator: &vzapi.MySQLOperatorComponent{Enabled: &enabled}}}},
  1728  			true,
  1729  			IsMySQLOperatorEnabled,
  1730  		},
  1731  		{
  1732  			"mysqlop enabled when component enabled, v1beta1 CR",
  1733  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{MySQLOperator: &installv1beta1.MySQLOperatorComponent{Enabled: &enabled}}}},
  1734  			true,
  1735  			IsMySQLOperatorEnabled,
  1736  		},
  1737  		{
  1738  			"mysqlop disabled when component disabled, v1alpha1 CR",
  1739  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{MySQLOperator: &vzapi.MySQLOperatorComponent{Enabled: &disabled}}}},
  1740  			false,
  1741  			IsMySQLOperatorEnabled,
  1742  		},
  1743  		{
  1744  			"mysqlop disabled when component disabled, v1beta1 CR",
  1745  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{MySQLOperator: &installv1beta1.MySQLOperatorComponent{Enabled: &disabled}}}},
  1746  			false,
  1747  			IsMySQLOperatorEnabled,
  1748  		},
  1749  	}
  1750  
  1751  	for _, tt := range tests {
  1752  		t.Run(tt.name, func(t *testing.T) {
  1753  			assert.Equal(t, tt.enabled, tt.isEnabled(tt.cr))
  1754  		})
  1755  	}
  1756  }
  1757  
  1758  // TestIsFluentOperatorEnabled tests the IsFluentOperatorEnabled function
  1759  // GIVEN a call to IsFluentOperatorEnabled
  1760  //
  1761  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default)
  1762  func TestIsFluentOperatorEnabled(t *testing.T) {
  1763  	asserts := assert.New(t)
  1764  	asserts.False(IsFluentOperatorEnabled(nil))
  1765  	asserts.False(IsFluentOperatorEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1766  	asserts.False(IsFluentOperatorEnabled(
  1767  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1768  			Components: vzapi.ComponentSpec{
  1769  				FluentOperator: &vzapi.FluentOperatorComponent{},
  1770  			},
  1771  		}}))
  1772  	asserts.True(IsFluentOperatorEnabled(
  1773  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1774  			Components: vzapi.ComponentSpec{
  1775  				FluentOperator: &vzapi.FluentOperatorComponent{
  1776  					Enabled: &trueValue,
  1777  				},
  1778  			},
  1779  		}}))
  1780  	asserts.False(IsFluentOperatorEnabled(
  1781  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1782  			Components: vzapi.ComponentSpec{
  1783  				FluentOperator: &vzapi.FluentOperatorComponent{
  1784  					Enabled: &falseValue,
  1785  				},
  1786  			},
  1787  		}}))
  1788  	asserts.True(IsFluentOperatorEnabled(
  1789  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1790  			Components: installv1beta1.ComponentSpec{
  1791  				FluentOperator: &installv1beta1.FluentOperatorComponent{
  1792  					Enabled: &trueValue,
  1793  				},
  1794  			},
  1795  		}}))
  1796  	asserts.False(IsFluentOperatorEnabled(
  1797  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1798  			Components: installv1beta1.ComponentSpec{
  1799  				FluentOperator: &installv1beta1.FluentOperatorComponent{
  1800  					Enabled: &falseValue,
  1801  				},
  1802  			},
  1803  		}}))
  1804  }
  1805  
  1806  // TestIsFluentbitOpensearchOutputEnabled tests the IsFluentbitOpensearchOutputEnabled function
  1807  // GIVEN a call to IsFluentbitOpensearchOutputEnabled
  1808  //
  1809  //	THEN the value of the Enabled flag is returned if present, false otherwise (disabled by default).
  1810  func TestIsFluentbitOpensearchOutputEnabled(t *testing.T) {
  1811  	asserts := assert.New(t)
  1812  	asserts.False(IsFluentbitOpensearchOutputEnabled(nil))
  1813  	asserts.False(IsFluentbitOpensearchOutputEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  1814  	asserts.False(IsFluentbitOpensearchOutputEnabled(
  1815  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1816  			Components: vzapi.ComponentSpec{
  1817  				FluentbitOpensearchOutput: &vzapi.FluentbitOpensearchOutputComponent{},
  1818  			},
  1819  		}}))
  1820  	asserts.True(IsFluentbitOpensearchOutputEnabled(
  1821  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1822  			Components: vzapi.ComponentSpec{
  1823  				FluentbitOpensearchOutput: &vzapi.FluentbitOpensearchOutputComponent{
  1824  					Enabled: &trueValue,
  1825  				},
  1826  			},
  1827  		}}))
  1828  	asserts.False(IsFluentbitOpensearchOutputEnabled(
  1829  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1830  			Components: vzapi.ComponentSpec{
  1831  				FluentbitOpensearchOutput: &vzapi.FluentbitOpensearchOutputComponent{
  1832  					Enabled: &falseValue,
  1833  				},
  1834  			},
  1835  		}}))
  1836  	asserts.True(IsFluentbitOpensearchOutputEnabled(
  1837  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1838  			Components: installv1beta1.ComponentSpec{
  1839  				FluentbitOpensearchOutput: &installv1beta1.FluentbitOpensearchOutputComponent{
  1840  					Enabled: &trueValue,
  1841  				},
  1842  			},
  1843  		}}))
  1844  	asserts.False(IsFluentbitOpensearchOutputEnabled(
  1845  		&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1846  			Components: installv1beta1.ComponentSpec{
  1847  				FluentbitOpensearchOutput: &installv1beta1.FluentbitOpensearchOutputComponent{
  1848  					Enabled: &falseValue,
  1849  				},
  1850  			},
  1851  		}}))
  1852  }
  1853  
  1854  // TestIsVMOEnabled tests the IsVMOEnabled function
  1855  // GIVEN a call to IsVMOEnabled
  1856  //
  1857  //	THEN the value of the Enabled flag is returned if present, true otherwise (enabled by default)
  1858  func TestIsVMOEnabled(t *testing.T) {
  1859  	var tests = []struct {
  1860  		name    string
  1861  		cr      runtime.Object
  1862  		enabled bool
  1863  	}{
  1864  		{
  1865  			"enabled on nil CR",
  1866  			nil,
  1867  			true,
  1868  		},
  1869  		{
  1870  			"enabled on empty v1alpha1 CR",
  1871  			&vzapi.Verrazzano{},
  1872  			true,
  1873  		},
  1874  		{
  1875  			"enabled on v1alpha1 CR with Prometheus disabled",
  1876  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1877  				Components: vzapi.ComponentSpec{
  1878  					Prometheus: &vzapi.PrometheusComponent{Enabled: &falseValue},
  1879  				}}},
  1880  			true,
  1881  		},
  1882  		{
  1883  			"enabled on v1alpha1 CR with Prometheus Operator disabled",
  1884  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1885  				Components: vzapi.ComponentSpec{
  1886  					PrometheusOperator: &vzapi.PrometheusOperatorComponent{Enabled: &falseValue},
  1887  				}}},
  1888  			true,
  1889  		},
  1890  		{
  1891  			"enabled on v1alpha1 CR with Opensearch and Opensearch dashboards disabled",
  1892  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1893  				Components: vzapi.ComponentSpec{
  1894  					Elasticsearch: &vzapi.ElasticsearchComponent{Enabled: &falseValue},
  1895  					Kibana:        &vzapi.KibanaComponent{Enabled: &falseValue},
  1896  				}}},
  1897  			true,
  1898  		},
  1899  		{
  1900  			"disabled on v1alpha1 CR with OpenSearch, OpenSearchDashboards and Grafana disabled",
  1901  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  1902  				Components: vzapi.ComponentSpec{
  1903  					Elasticsearch: &vzapi.ElasticsearchComponent{Enabled: &falseValue},
  1904  					Kibana:        &vzapi.KibanaComponent{Enabled: &falseValue},
  1905  					Grafana:       &vzapi.GrafanaComponent{Enabled: &falseValue},
  1906  				}}},
  1907  			false,
  1908  		},
  1909  		{
  1910  			"enabled on empty v1beta1 CR",
  1911  			&installv1beta1.Verrazzano{},
  1912  			true,
  1913  		},
  1914  		{
  1915  			"enabled on v1beta1 CR with Prometheus disabled",
  1916  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1917  				Components: installv1beta1.ComponentSpec{
  1918  					Prometheus: &installv1beta1.PrometheusComponent{Enabled: &falseValue},
  1919  				}}},
  1920  			true,
  1921  		},
  1922  		{
  1923  			"disabled on v1beta1 CR with OpenSearch, OpenSearchDashboards and Grafana disabled",
  1924  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{
  1925  				Components: installv1beta1.ComponentSpec{
  1926  					OpenSearch:           &installv1beta1.OpenSearchComponent{Enabled: &falseValue},
  1927  					OpenSearchDashboards: &installv1beta1.OpenSearchDashboardsComponent{Enabled: &falseValue},
  1928  					Grafana:              &installv1beta1.GrafanaComponent{Enabled: &falseValue},
  1929  				}}},
  1930  			false,
  1931  		},
  1932  	}
  1933  	for _, tt := range tests {
  1934  		t.Run(tt.name, func(t *testing.T) {
  1935  			assert.Equal(t, tt.enabled, IsVMOEnabled(tt.cr))
  1936  		})
  1937  	}
  1938  }
  1939  
  1940  // TestIsAlertmanagerEnabled tests whether the Alertmanager is enabled or not
  1941  // GIVEN a call to IsAlertmanagerEnabled
  1942  // WHEN the Alertmanager is explicitly enabled or disabled
  1943  // THEN return the value as expected in the enabled variable
  1944  func TestIsAlertmanagerEnabled(t *testing.T) {
  1945  	var tests = []struct {
  1946  		name         string
  1947  		cr           runtime.Object
  1948  		enabled      bool
  1949  		isErr        bool
  1950  		isVZv1alpha1 bool
  1951  	}{
  1952  		{
  1953  			"Alertmanager disabled when empty v1alpha1 CR",
  1954  			&vzapi.Verrazzano{},
  1955  			false,
  1956  			false,
  1957  			true,
  1958  		},
  1959  		{
  1960  			"Alertmanager disabled when when empty v1beta1 CR",
  1961  			&installv1beta1.Verrazzano{},
  1962  			false,
  1963  			false,
  1964  			false,
  1965  		},
  1966  		{
  1967  			"Alertmanager disabled whe Prometheus Operator component disabled, v1alpha1 CR",
  1968  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{Enabled: &falseValue}}}},
  1969  			false,
  1970  			false,
  1971  			true,
  1972  		},
  1973  		{
  1974  			"Alertmanager disabled whe Prometheus Operator component disabled, v1beta1 CR",
  1975  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{Enabled: &falseValue}}}},
  1976  			false,
  1977  			false,
  1978  			false,
  1979  		},
  1980  		{
  1981  			"Alertmanager disabled when overrides not specified on Prometheus Operator component, v1alpha1 CR",
  1982  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{}}}},
  1983  			false,
  1984  			false,
  1985  			true,
  1986  		},
  1987  		{
  1988  			"Alertmanager disabled when overrides not specified on Prometheus Operator component, v1beta1 CR",
  1989  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{}}}},
  1990  			false,
  1991  			false,
  1992  			false,
  1993  		},
  1994  		{
  1995  			"Alertmanager disabled when disabled in overrides specified on Prometheus Operator component, v1alpha1 CR",
  1996  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{
  1997  				InstallOverrides: vzapi.InstallOverrides{
  1998  					ValueOverrides: []vzapi.Overrides{
  1999  						{
  2000  							Values: &v1.JSON{
  2001  								Raw: []byte("{\"alertmanager\":{\"enabled\":false}}"),
  2002  							},
  2003  						},
  2004  					},
  2005  				}}}}},
  2006  			false,
  2007  			false,
  2008  			true,
  2009  		},
  2010  		{
  2011  			"Alertmanager disabled when disabled in overrides specified on Prometheus Operator component, v1beta1 CR",
  2012  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{
  2013  				InstallOverrides: installv1beta1.InstallOverrides{
  2014  					ValueOverrides: []installv1beta1.Overrides{
  2015  						{
  2016  							Values: &v1.JSON{
  2017  								Raw: []byte("{\"alertmanager\":{\"enabled\":false}}"),
  2018  							},
  2019  						},
  2020  					},
  2021  				},
  2022  			}}}},
  2023  			false,
  2024  			false,
  2025  			false,
  2026  		},
  2027  		{
  2028  			"Alertmanager disabled when empty overrides specified on Prometheus Operator component, v1alpha1 CR",
  2029  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{
  2030  				InstallOverrides: vzapi.InstallOverrides{
  2031  					ValueOverrides: []vzapi.Overrides{
  2032  						{
  2033  							Values: &v1.JSON{
  2034  								Raw: []byte(""),
  2035  							},
  2036  						},
  2037  					},
  2038  				}}}}},
  2039  			false,
  2040  			false,
  2041  			true,
  2042  		},
  2043  		{
  2044  			"Alertmanager disabled when empty overrides specified on Prometheus Operator component, v1beta1 CR",
  2045  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{
  2046  				InstallOverrides: installv1beta1.InstallOverrides{
  2047  					ValueOverrides: []installv1beta1.Overrides{
  2048  						{
  2049  							Values: &v1.JSON{
  2050  								Raw: []byte(""),
  2051  							},
  2052  						},
  2053  					},
  2054  				},
  2055  			}}}},
  2056  			false,
  2057  			false,
  2058  			false,
  2059  		},
  2060  		{
  2061  			"Alertmanager enabled when enabled in overrides specified on Prometheus Operator component, v1alpha1 CR",
  2062  			&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{Components: vzapi.ComponentSpec{PrometheusOperator: &vzapi.PrometheusOperatorComponent{
  2063  				InstallOverrides: vzapi.InstallOverrides{
  2064  					ValueOverrides: []vzapi.Overrides{
  2065  						{
  2066  							Values: &v1.JSON{
  2067  								Raw: []byte("{\"alertmanager\":{\"enabled\":true}}"),
  2068  							},
  2069  						},
  2070  					},
  2071  				}}}}},
  2072  			true,
  2073  			false,
  2074  			true,
  2075  		},
  2076  		{
  2077  			"Alertmanager enabled when enabled in overrides specified on Prometheus Operator component, v1beta1 CR",
  2078  			&installv1beta1.Verrazzano{Spec: installv1beta1.VerrazzanoSpec{Components: installv1beta1.ComponentSpec{PrometheusOperator: &installv1beta1.PrometheusOperatorComponent{
  2079  				InstallOverrides: installv1beta1.InstallOverrides{
  2080  					ValueOverrides: []installv1beta1.Overrides{
  2081  						{
  2082  							Values: &v1.JSON{
  2083  								Raw: []byte("{\"alertmanager\":{\"enabled\":true}}"),
  2084  							},
  2085  						},
  2086  					},
  2087  				},
  2088  			}}}},
  2089  			true,
  2090  			false,
  2091  			false,
  2092  		},
  2093  	}
  2094  	for _, tt := range tests {
  2095  		t.Run(tt.name, func(t *testing.T) {
  2096  			var result bool
  2097  			var err error
  2098  			if tt.isVZv1alpha1 {
  2099  				result, err = IsAlertmanagerEnabled(tt.cr, spi.NewFakeContext(nil, tt.cr.(*vzapi.Verrazzano), nil, false))
  2100  			} else {
  2101  				result, err = IsAlertmanagerEnabled(tt.cr, spi.NewFakeContext(nil, nil, tt.cr.(*installv1beta1.Verrazzano), false))
  2102  			}
  2103  
  2104  			assert.Equal(t, tt.isErr, err != nil)
  2105  			assert.Equal(t, tt.enabled, result)
  2106  		})
  2107  	}
  2108  }
  2109  
  2110  // TestIsDexEnabled tests the IsDexEnabled function
  2111  // GIVEN a call to IsDexEnabled
  2112  //
  2113  //	THEN the value of the enabled flag is returned if present, false otherwise (disabled by default)
  2114  func TestIsDexEnabled(t *testing.T) {
  2115  	asserts := assert.New(t)
  2116  	asserts.False(IsDexEnabled(nil))
  2117  	asserts.False(IsDexEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  2118  	asserts.False(IsDexEnabled(
  2119  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  2120  			Components: vzapi.ComponentSpec{
  2121  				Dex: &vzapi.DexComponent{},
  2122  			},
  2123  		}}))
  2124  	asserts.True(IsDexEnabled(
  2125  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  2126  			Components: vzapi.ComponentSpec{
  2127  				Dex: &vzapi.DexComponent{
  2128  					Enabled: &trueValue,
  2129  				},
  2130  			},
  2131  		}}))
  2132  	asserts.False(IsDexEnabled(
  2133  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  2134  			Components: vzapi.ComponentSpec{
  2135  				Dex: &vzapi.DexComponent{
  2136  					Enabled: &falseValue,
  2137  				},
  2138  			},
  2139  		}}))
  2140  }
  2141  
  2142  // TestIsOpenSearchOperatorEnabled tests whether the OpenSearchOperator is enabled or not
  2143  // GIVEN a call to IsOpenSearchOperatorEnabled
  2144  // WHEN OpenSearchOperator is explicitly enabled or disabled
  2145  // THEN return the value as expected in the enabled variable
  2146  func TestIsOpenSearchOperatorEnabled(t *testing.T) {
  2147  	asserts := assert.New(t)
  2148  	asserts.True(IsOpenSearchOperatorEnabled(nil))
  2149  	asserts.True(IsOpenSearchOperatorEnabled(&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{}}))
  2150  	asserts.True(IsOpenSearchOperatorEnabled(
  2151  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  2152  			Components: vzapi.ComponentSpec{
  2153  				OpenSearchOperator: &vzapi.OpenSearchOperatorComponent{},
  2154  			},
  2155  		}}))
  2156  	asserts.True(IsOpenSearchOperatorEnabled(
  2157  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  2158  			Components: vzapi.ComponentSpec{
  2159  				OpenSearchOperator: &vzapi.OpenSearchOperatorComponent{
  2160  					Enabled: &trueValue,
  2161  				},
  2162  			},
  2163  		}}))
  2164  	asserts.False(IsOpenSearchOperatorEnabled(
  2165  		&vzapi.Verrazzano{Spec: vzapi.VerrazzanoSpec{
  2166  			Components: vzapi.ComponentSpec{
  2167  				OpenSearchOperator: &vzapi.OpenSearchOperatorComponent{
  2168  					Enabled: &falseValue,
  2169  				},
  2170  			},
  2171  		}}))
  2172  }