...

Source file src/sigs.k8s.io/kustomize/api/types/var_test.go

Documentation: sigs.k8s.io/kustomize/api/types

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package types
     5  
     6  import (
     7  	"reflect"
     8  	"strings"
     9  	"testing"
    10  
    11  	"sigs.k8s.io/kustomize/kyaml/resid"
    12  	yaml "sigs.k8s.io/yaml/goyaml.v2"
    13  )
    14  
    15  func TestGVK(t *testing.T) {
    16  	type testcase struct {
    17  		data     string
    18  		expected resid.Gvk
    19  	}
    20  
    21  	testcases := []testcase{
    22  		{
    23  			data: `
    24  apiVersion: v1
    25  kind: Secret
    26  name: my-secret
    27  `,
    28  			expected: resid.Gvk{Group: "", Version: "v1", Kind: "Secret"},
    29  		},
    30  		{
    31  			data: `
    32  apiVersion: myapps/v1
    33  kind: MyKind
    34  name: my-kind
    35  `,
    36  			expected: resid.Gvk{Group: "myapps", Version: "v1", Kind: "MyKind"},
    37  		},
    38  		{
    39  			data: `
    40  version: v2
    41  kind: MyKind
    42  name: my-kind
    43  `,
    44  			expected: resid.Gvk{Version: "v2", Kind: "MyKind"},
    45  		},
    46  	}
    47  
    48  	for _, tc := range testcases {
    49  		var targ Target
    50  		err := yaml.Unmarshal([]byte(tc.data), &targ)
    51  		if err != nil {
    52  			t.Fatalf("Unexpected error %v", err)
    53  		}
    54  		if !reflect.DeepEqual(targ.GVK(), tc.expected) {
    55  			t.Fatalf("Expected %v, but got %v", tc.expected, targ.GVK())
    56  		}
    57  	}
    58  }
    59  
    60  func TestDefaulting(t *testing.T) {
    61  	v := &Var{
    62  		Name: "SOME_VARIABLE_NAME",
    63  		ObjRef: Target{
    64  			Gvk: resid.Gvk{
    65  				Version: "v1",
    66  				Kind:    "Secret",
    67  			},
    68  			Name: "my-secret",
    69  		},
    70  	}
    71  	v.Defaulting()
    72  	if v.FieldRef.FieldPath != DefaultReplacementFieldPath {
    73  		t.Fatalf("expected %s, got %v",
    74  			DefaultReplacementFieldPath, v.FieldRef.FieldPath)
    75  	}
    76  }
    77  
    78  func TestVarSet(t *testing.T) {
    79  	set := NewVarSet()
    80  	vars := []Var{
    81  		{
    82  			Name: "SHELLVARS",
    83  			ObjRef: Target{
    84  				APIVersion: "v7",
    85  				Gvk:        resid.Gvk{Kind: "ConfigMap"},
    86  				Name:       "bash"},
    87  		},
    88  		{
    89  			Name: "BACKEND",
    90  			ObjRef: Target{
    91  				APIVersion: "v7",
    92  				Gvk:        resid.Gvk{Kind: "Deployment"},
    93  				Name:       "myTiredBackend"},
    94  		},
    95  		{
    96  			Name: "AWARD",
    97  			ObjRef: Target{
    98  				APIVersion: "v7",
    99  				Gvk:        resid.Gvk{Kind: "Service"},
   100  				Name:       "nobelPrize"},
   101  			FieldRef: FieldSelector{FieldPath: "some.arbitrary.path"},
   102  		},
   103  	}
   104  	err := set.MergeSlice(vars)
   105  	if err != nil {
   106  		t.Fatalf("unexpected err: %v", err)
   107  	}
   108  	for _, v := range vars {
   109  		if !set.Contains(v) {
   110  			t.Fatalf("set %v should contain var %v", set.AsSlice(), v)
   111  		}
   112  	}
   113  	set2 := NewVarSet()
   114  	err = set2.MergeSet(set)
   115  	if err != nil {
   116  		t.Fatalf("unexpected err: %v", err)
   117  	}
   118  	err = set2.MergeSlice(vars)
   119  	if err == nil {
   120  		t.Fatalf("expected err")
   121  	}
   122  	if !strings.Contains(err.Error(), "var 'SHELLVARS' already encountered") {
   123  		t.Fatalf("unexpected err: %v", err)
   124  	}
   125  	v := set2.Get("BACKEND")
   126  	if v == nil {
   127  		t.Fatalf("expected var")
   128  	}
   129  	// Confirm defaulting.
   130  	if v.FieldRef.FieldPath != DefaultReplacementFieldPath {
   131  		t.Fatalf("unexpected field path: %v", v.FieldRef.FieldPath)
   132  	}
   133  	// Confirm sorting.
   134  	names := set2.AsSlice()
   135  	if names[0].Name != "AWARD" ||
   136  		names[1].Name != "BACKEND" ||
   137  		names[2].Name != "SHELLVARS" {
   138  		t.Fatalf("unexpected order in : %v", names)
   139  	}
   140  }
   141  
   142  func TestVarSetCopy(t *testing.T) {
   143  	set1 := NewVarSet()
   144  	vars := []Var{
   145  		{Name: "First"},
   146  		{Name: "Second"},
   147  		{Name: "Third"},
   148  	}
   149  	err := set1.MergeSlice(vars)
   150  	if err != nil {
   151  		t.Fatalf("unexpected err: %v", err)
   152  	}
   153  	// Confirm copying
   154  	set2 := set1.Copy()
   155  	for _, varInSet1 := range set1.AsSlice() {
   156  		if v := set2.Get(varInSet1.Name); v == nil {
   157  			t.Fatalf("set %v should contain a Var named %s", set2.AsSlice(), varInSet1)
   158  		} else if !set2.Contains(*v) {
   159  			t.Fatalf("set %v should contain %v", set2.AsSlice(), v)
   160  		}
   161  	}
   162  	// Confirm that the copy is deep
   163  	w := Var{Name: "Only in set2"}
   164  	set2.Merge(w)
   165  	if !set2.Contains(w) {
   166  		t.Fatalf("set %v should contain %v", set2.AsSlice(), w)
   167  	}
   168  	if set1.Contains(w) {
   169  		t.Fatalf("set %v should not contain %v", set1.AsSlice(), w)
   170  	}
   171  }
   172  

View as plain text