1
2
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
130 if v.FieldRef.FieldPath != DefaultReplacementFieldPath {
131 t.Fatalf("unexpected field path: %v", v.FieldRef.FieldPath)
132 }
133
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
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
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