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 }