1
2
3
4 package types_test
5
6 import (
7 "fmt"
8 "reflect"
9 "strings"
10 "testing"
11
12 . "sigs.k8s.io/kustomize/api/types"
13 "sigs.k8s.io/kustomize/kyaml/resid"
14 )
15
16 var mergeTests = []struct {
17 name string
18 original FsSlice
19 incoming FsSlice
20 err error
21 result FsSlice
22 }{
23 {
24 "normal",
25 FsSlice{
26 {
27 Path: "whatever",
28 Gvk: resid.Gvk{Group: "apple"},
29 CreateIfNotPresent: false,
30 },
31 {
32 Path: "whatever",
33 Gvk: resid.Gvk{Group: "pear"},
34 CreateIfNotPresent: false,
35 },
36 },
37 FsSlice{
38 {
39 Path: "home",
40 Gvk: resid.Gvk{Group: "beans"},
41 CreateIfNotPresent: false,
42 },
43 },
44 nil,
45 FsSlice{
46 {
47 Path: "whatever",
48 Gvk: resid.Gvk{Group: "apple"},
49 CreateIfNotPresent: false,
50 },
51 {
52 Path: "whatever",
53 Gvk: resid.Gvk{Group: "pear"},
54 CreateIfNotPresent: false,
55 },
56 {
57 Path: "home",
58 Gvk: resid.Gvk{Group: "beans"},
59 CreateIfNotPresent: false,
60 },
61 },
62 },
63 {
64 "ignore copy",
65 FsSlice{
66 {
67 Path: "whatever",
68 Gvk: resid.Gvk{Group: "apple"},
69 CreateIfNotPresent: false,
70 },
71 {
72 Path: "whatever",
73 Gvk: resid.Gvk{Group: "pear"},
74 CreateIfNotPresent: false,
75 },
76 },
77 FsSlice{
78 {
79 Path: "whatever",
80 Gvk: resid.Gvk{Group: "apple"},
81 CreateIfNotPresent: false,
82 },
83 },
84 nil,
85 FsSlice{
86 {
87 Path: "whatever",
88 Gvk: resid.Gvk{Group: "apple"},
89 CreateIfNotPresent: false,
90 },
91 {
92 Path: "whatever",
93 Gvk: resid.Gvk{Group: "pear"},
94 CreateIfNotPresent: false,
95 },
96 },
97 },
98 {
99 "error on conflict",
100 FsSlice{
101 {
102 Path: "whatever",
103 Gvk: resid.Gvk{Group: "apple"},
104 CreateIfNotPresent: false,
105 },
106 {
107 Path: "whatever",
108 Gvk: resid.Gvk{Group: "pear"},
109 CreateIfNotPresent: false,
110 },
111 },
112 FsSlice{
113 {
114 Path: "whatever",
115 Gvk: resid.Gvk{Group: "apple"},
116 CreateIfNotPresent: true,
117 },
118 },
119 fmt.Errorf("hey"),
120 FsSlice{},
121 },
122 }
123
124 func TestFsSlice_MergeAll(t *testing.T) {
125 for _, item := range mergeTests {
126 result, err := item.original.MergeAll(item.incoming)
127 if item.err == nil {
128 if err != nil {
129 t.Fatalf("test %s: unexpected err %v", item.name, err)
130 }
131 if !reflect.DeepEqual(item.result, result) {
132 t.Fatalf("test %s: expected: %v\n but got: %v\n",
133 item.name, item.result, result)
134 }
135 } else {
136 if err == nil {
137 t.Fatalf("test %s: expected err: %v", item.name, err)
138 }
139 if !strings.Contains(err.Error(), "conflicting fieldspecs") {
140 t.Fatalf("test %s: unexpected err: %v", item.name, err)
141 }
142 }
143 }
144 }
145
146 func TestFsSlice_DeepCopy(t *testing.T) {
147 original := make(FsSlice, 2, 4)
148 original[0] = FieldSpec{Path: "a"}
149 original[1] = FieldSpec{Path: "b"}
150
151 copied := original.DeepCopy()
152
153 original, _ = original.MergeOne(FieldSpec{Path: "c"})
154
155
156 copied.Swap(0, 1)
157 _, _ = copied.MergeOne(FieldSpec{Path: "d"})
158
159
160 expected := FsSlice{
161 {Path: "a"},
162 {Path: "b"},
163 {Path: "c"},
164 }
165 if !reflect.DeepEqual(original, expected) {
166 t.Fatalf("original affected by mutations to copied object:\ngot\t%+v,\nexpected: %+v", original, expected)
167 }
168 }
169
View as plain text