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  }