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

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