github.com/verrazzano/verrazzano@v1.7.0/tools/vz/cmd/helpers/overlay_test.go (about) 1 // Copyright (c) 2022, 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 helpers 5 6 import ( 7 "bytes" 8 "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1beta1" 9 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 10 "os" 11 "sigs.k8s.io/yaml" 12 "testing" 13 14 "github.com/stretchr/testify/assert" 15 "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1" 16 "github.com/verrazzano/verrazzano/tools/vz/pkg/helpers" 17 ) 18 19 // TestMergeYAMLFilesSingle 20 // GIVEN a single YAML file 21 // 22 // WHEN I call MergeYAMLFiles 23 // THEN a vz resource is returned representing the single YAML file 24 func TestMergeYAMLFilesSingle(t *testing.T) { 25 obj, err := MergeYAMLFiles([]string{"../../test/testdata/dev-profile.yaml"}, os.Stdin) 26 assert.Nil(t, err) 27 vz, err := toV1Alpha1VZ(obj) 28 assert.Nil(t, err) 29 assert.Equal(t, "my-verrazzano", vz.Name) 30 assert.Equal(t, "default", vz.Namespace) 31 assert.Equal(t, v1alpha1.Dev, vz.Spec.Profile) 32 } 33 34 // TestMergeYAMLFilesComponents 35 // GIVEN a base yaml file and components yaml file 36 // 37 // WHEN I call MergeYAMLFiles 38 // THEN a vz resource is returned representing the merged YAML files 39 func TestMergeYAMLFilesComponents(t *testing.T) { 40 obj, err := MergeYAMLFiles([]string{ 41 "../../test/testdata/dev-profile.yaml", 42 "../../test/testdata/components.yaml", 43 }, os.Stdin) 44 assert.Nil(t, err) 45 vz, err := toV1Alpha1VZ(obj) 46 assert.Nil(t, err) 47 assert.Equal(t, "my-verrazzano", vz.Name) 48 assert.Equal(t, "default", vz.Namespace) 49 assert.Equal(t, v1alpha1.Dev, vz.Spec.Profile) 50 assert.Equal(t, false, *vz.Spec.Components.Console.Enabled) 51 assert.Equal(t, false, *vz.Spec.Components.Fluentd.Enabled) 52 assert.Equal(t, true, *vz.Spec.Components.Rancher.Enabled) 53 assert.Nil(t, vz.Spec.Components.Verrazzano) 54 } 55 56 // TestMergeYAMLFilesStdin 57 // GIVEN a yaml file from stdin 58 // 59 // WHEN I call MergeYAMLFiles 60 // THEN a vz resource is returned representing the yaml specified via stdin 61 func TestMergeYAMLFilesStdin(t *testing.T) { 62 var filenames []string 63 stdinReader := &bytes.Buffer{} 64 b, err := os.ReadFile("../../test/testdata/quick-start.yaml") 65 assert.Nil(t, err) 66 _, err = stdinReader.Write(b) 67 assert.Nil(t, err) 68 filenames = append(filenames, "-") 69 obj, err := MergeYAMLFiles(filenames, stdinReader) 70 assert.Nil(t, err) 71 vz, err := toV1Alpha1VZ(obj) 72 assert.Nil(t, err) 73 assert.Equal(t, "example-verrazzano", vz.Name) 74 assert.Equal(t, "default", vz.Namespace) 75 assert.Equal(t, v1alpha1.Dev, vz.Spec.Profile) 76 assert.Equal(t, "verrazzano-storage", vz.Spec.DefaultVolumeSource.PersistentVolumeClaim.ClaimName) 77 assert.Equal(t, "verrazzano-storage", vz.Spec.VolumeClaimSpecTemplates[0].Name) 78 storage := vz.Spec.VolumeClaimSpecTemplates[0].Spec.Resources.Requests.Storage() 79 assert.Contains(t, storage.String(), "2Gi") 80 } 81 82 // TestMergeYAMLFilesStdinOverride 83 // GIVEN a yaml file from a file and a yaml file from stdin 84 // 85 // WHEN I call MergeYAMLFiles 86 // THEN a vz resource is returned representing the merged YAML files 87 func TestMergeYAMLFilesStdinOverride(t *testing.T) { 88 var filenames []string 89 filenames = append(filenames, "../../test/testdata/dev-profile.yaml", "../../test/testdata/components.yaml") 90 stdinReader := &bytes.Buffer{} 91 b, err := os.ReadFile("../../test/testdata/override-components.yaml") 92 assert.Nil(t, err) 93 _, err = stdinReader.Write(b) 94 assert.Nil(t, err) 95 filenames = append(filenames, "-") 96 obj, err := MergeYAMLFiles(filenames, stdinReader) 97 assert.Nil(t, err) 98 vz, err := toV1Alpha1VZ(obj) 99 assert.Nil(t, err) 100 assert.Equal(t, "my-verrazzano", vz.Name) 101 assert.Equal(t, "default", vz.Namespace) 102 assert.Equal(t, true, *vz.Spec.Components.Console.Enabled) 103 assert.Equal(t, true, *vz.Spec.Components.Fluentd.Enabled) 104 assert.Equal(t, false, *vz.Spec.Components.Rancher.Enabled) 105 assert.Nil(t, vz.Spec.Components.Verrazzano) 106 } 107 108 // TestMergeYAMLFilesEmpty 109 // GIVEN a base yaml file and a empty yaml file 110 // 111 // WHEN I call MergeYAMLFiles 112 // THEN a vz resource is returned representing the base yaml file 113 func TestMergeYAMLFilesEmpty(t *testing.T) { 114 obj, err := MergeYAMLFiles([]string{ 115 "../../test/testdata/dev-profile.yaml", 116 "../../test/testdata/empty.yaml", 117 }, os.Stdin) 118 assert.Nil(t, err) 119 vz, err := toV1Alpha1VZ(obj) 120 assert.Nil(t, err) 121 assert.Equal(t, "my-verrazzano", vz.Name) 122 assert.Equal(t, "default", vz.Namespace) 123 assert.Equal(t, v1alpha1.Dev, vz.Spec.Profile) 124 } 125 126 // TestMergeYAMLFilesNotFound 127 // GIVEN a YAML file that does not exist 128 // 129 // WHEN I call MergeYAMLFiles 130 // THEN the call returns an error 131 func TestMergeYAMLFilesNotFound(t *testing.T) { 132 _, err := MergeYAMLFiles([]string{"../../test/testdate/file-does-not-exist.yaml"}, os.Stdin) 133 assert.Error(t, err) 134 assert.EqualError(t, err, "open ../../test/testdate/file-does-not-exist.yaml: no such file or directory") 135 } 136 137 // TestMergeSetFlags 138 // GIVEN a YAML file and a YAML string 139 // WHEN I call MergeSetFlags 140 // THEN the call returns a vz resource with the two source merged 141 func TestMergeSetFlags(t *testing.T) { 142 yamlString := "spec:\n environmentName: test" 143 _, vz, err := helpers.NewVerrazzanoForVZVersion("1.4.0") 144 assert.NoError(t, err) 145 obj, _, err := MergeSetFlags(v1beta1.SchemeGroupVersion, vz, yamlString) 146 assert.NoError(t, err) 147 assert.Equal(t, "test", obj.(*unstructured.Unstructured).Object["spec"].(map[string]interface{})["environmentName"]) 148 } 149 150 func toV1Alpha1VZ(u *unstructured.Unstructured) (*v1alpha1.Verrazzano, error) { 151 dat, err := yaml.Marshal(u) 152 if err != nil { 153 return nil, err 154 } 155 vz := &v1alpha1.Verrazzano{} 156 err = yaml.Unmarshal(dat, vz) 157 return vz, err 158 }