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 }