github.com/verrazzano/verrazzano@v1.7.0/tools/vz/cmd/install/state_test.go (about)

     1  // Copyright (c) 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  
     4  package install
     5  
     6  import (
     7  	"context"
     8  	"os"
     9  	"testing"
    10  
    11  	vzconstants "github.com/verrazzano/verrazzano/pkg/constants"
    12  	vzapi "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1"
    13  	"github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/registry"
    14  	adminv1 "k8s.io/api/admissionregistration/v1"
    15  	rbacv1 "k8s.io/api/rbac/v1"
    16  	"k8s.io/apimachinery/pkg/api/errors"
    17  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    18  	"k8s.io/apimachinery/pkg/types"
    19  
    20  	"github.com/stretchr/testify/assert"
    21  	"github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1beta1"
    22  	cmdHelpers "github.com/verrazzano/verrazzano/tools/vz/cmd/helpers"
    23  	"github.com/verrazzano/verrazzano/tools/vz/pkg/constants"
    24  	"github.com/verrazzano/verrazzano/tools/vz/pkg/helpers"
    25  	corev1 "k8s.io/api/core/v1"
    26  	"sigs.k8s.io/controller-runtime/pkg/client"
    27  	"sigs.k8s.io/controller-runtime/pkg/client/fake"
    28  )
    29  
    30  // TestInstallProgressFlag
    31  // GIVEN a CLI install command with progress option enabled
    32  //
    33  //	WHEN I call cmd.Execute for install
    34  //	THEN the CLI install command is successful
    35  func TestInstallProgressFlag(t *testing.T) {
    36  	vz1 := v1beta1.Verrazzano{
    37  		ObjectMeta: metav1.ObjectMeta{
    38  			Namespace: "default",
    39  			Name:      "admin",
    40  		},
    41  		Spec: v1beta1.VerrazzanoSpec{
    42  			Profile: v1beta1.Dev,
    43  		},
    44  		Status: v1beta1.VerrazzanoStatus{
    45  			Version:    "v1.6.2",
    46  			Conditions: nil,
    47  			State:      v1beta1.VzStateReconciling,
    48  			Components: makeVerrazzanoComponentStatusMap(),
    49  		},
    50  	}
    51  	c := fake.NewClientBuilder().WithScheme(helpers.NewScheme()).WithObjects(&vz1).Build()
    52  	cmd, buf, errBuf, _ := createNewTestCommandAndBuffers(t, c)
    53  	cmd.PersistentFlags().Set(constants.ProgressFlag, "true")
    54  	cmd.PersistentFlags().Set(constants.TimeoutFlag, "3m")
    55  	tempKubeConfigPath, _ := os.CreateTemp(os.TempDir(), testKubeConfig)
    56  	cmd.Flags().String(constants.GlobalFlagKubeConfig, tempKubeConfigPath.Name(), "")
    57  	cmd.Flags().String(constants.GlobalFlagContext, testK8sContext, "")
    58  	cmd.PersistentFlags().Set(constants.VersionFlag, "v1.6.2")
    59  	c.Create(context.TODO(), &vz1)
    60  	cmdHelpers.SetDeleteFunc(cmdHelpers.FakeDeleteFunc)
    61  	defer cmdHelpers.SetDefaultDeleteFunc()
    62  	cmdHelpers.SetVPOIsReadyFunc(func(_ client.Client) (bool, error) { return true, nil })
    63  	defer cmdHelpers.SetDefaultVPOIsReadyFunc()
    64  
    65  	SetValidateCRFunc(FakeValidateCRFunc)
    66  	defer SetDefaultValidateCRFunc()
    67  
    68  	// Run install command
    69  	err := cmd.Execute()
    70  	assert.NoError(t, err)
    71  	assert.Equal(t, "", errBuf.String())
    72  	vz := v1beta1.Verrazzano{}
    73  	err = c.Get(context.TODO(), types.NamespacedName{Namespace: "default", Name: "admin"}, &vz)
    74  	assert.NoError(t, err)
    75  	assert.Contains(t, buf.String(), "Installing Verrazzano version")
    76  }
    77  
    78  func makeVerrazzanoComponentStatusMap() v1beta1.ComponentStatusMap {
    79  	statusMap := make(v1beta1.ComponentStatusMap)
    80  	for _, comp := range registry.GetComponents() {
    81  		if comp.IsOperatorInstallSupported() {
    82  			statusMap[comp.Name()] = &v1beta1.ComponentStatusDetails{
    83  				Name: comp.Name(),
    84  				Conditions: []v1beta1.Condition{
    85  					{
    86  						Type:   v1beta1.CondInstallComplete,
    87  						Status: corev1.ConditionTrue,
    88  					},
    89  				},
    90  				State: v1beta1.CompStateReady,
    91  			}
    92  		}
    93  	}
    94  	return statusMap
    95  }
    96  func ensureResourcesDeleted(t *testing.T, client client.Client) {
    97  	// Expect the Verrazzano resource to be deleted
    98  	v := vzapi.Verrazzano{}
    99  	err := client.Get(context.TODO(), types.NamespacedName{Namespace: "default", Name: "verrazzano"}, &v)
   100  	assert.True(t, errors.IsNotFound(err))
   101  
   102  	// Expect the install namespace to be deleted
   103  	ns := corev1.Namespace{}
   104  	err = client.Get(context.TODO(), types.NamespacedName{Name: vzconstants.VerrazzanoInstallNamespace}, &ns)
   105  	assert.True(t, errors.IsNotFound(err))
   106  
   107  	// Expect the Validating Webhook Configuration to be deleted
   108  	vwc := adminv1.ValidatingWebhookConfiguration{}
   109  	err = client.Get(context.TODO(), types.NamespacedName{Name: constants.VerrazzanoPlatformOperatorWebhook}, &vwc)
   110  	assert.True(t, errors.IsNotFound(err))
   111  
   112  	// Expect the Cluster Role Binding to be deleted
   113  	crb := rbacv1.ClusterRoleBinding{}
   114  	err = client.Get(context.TODO(), types.NamespacedName{Name: constants.VerrazzanoPlatformOperator}, &crb)
   115  	assert.True(t, errors.IsNotFound(err))
   116  
   117  	// Expect the managed cluster Cluster Role to be deleted
   118  	cr := rbacv1.ClusterRole{}
   119  	err = client.Get(context.TODO(), types.NamespacedName{Name: constants.VerrazzanoManagedCluster}, &cr)
   120  	assert.True(t, errors.IsNotFound(err))
   121  
   122  	// Expect the cluster Registrar Cluster Role to be deleted
   123  	cr = rbacv1.ClusterRole{}
   124  	err = client.Get(context.TODO(), types.NamespacedName{Name: vzconstants.VerrazzanoClusterRancherName}, &cr)
   125  	assert.True(t, errors.IsNotFound(err))
   126  }