1
2
3
4 package framework_test
5
6 import (
7 "reflect"
8 "testing"
9
10 "sigs.k8s.io/kustomize/kyaml/fn/framework"
11 "sigs.k8s.io/kustomize/kyaml/yaml"
12 )
13
14 func TestResults_Sort(t *testing.T) {
15 testcases := []struct {
16 name string
17 input framework.Results
18 output framework.Results
19 }{
20 {
21 name: "sort based on severity",
22 input: framework.Results{
23 {
24 Message: "Error message 1",
25 Severity: framework.Info,
26 },
27 {
28 Message: "Error message 2",
29 Severity: framework.Error,
30 },
31 },
32 output: framework.Results{
33 {
34 Message: "Error message 2",
35 Severity: framework.Error,
36 },
37 {
38 Message: "Error message 1",
39 Severity: framework.Info,
40 },
41 },
42 },
43 {
44 name: "sort based on file",
45 input: framework.Results{
46 {
47 Message: "Error message",
48 Severity: framework.Error,
49 File: &framework.File{
50 Path: "resource.yaml",
51 Index: 1,
52 },
53 },
54 {
55 Message: "Error message",
56 Severity: framework.Info,
57 File: &framework.File{
58 Path: "resource.yaml",
59 Index: 0,
60 },
61 },
62 {
63 Message: "Error message",
64 Severity: framework.Info,
65 File: &framework.File{
66 Path: "other-resource.yaml",
67 Index: 0,
68 },
69 },
70 {
71 Message: "Error message",
72 Severity: framework.Warning,
73 File: &framework.File{
74 Path: "resource.yaml",
75 Index: 2,
76 },
77 },
78 {
79 Message: "Error message",
80 Severity: framework.Warning,
81 },
82 },
83 output: framework.Results{
84 {
85 Message: "Error message",
86 Severity: framework.Warning,
87 },
88 {
89 Message: "Error message",
90 Severity: framework.Info,
91 File: &framework.File{
92 Path: "other-resource.yaml",
93 Index: 0,
94 },
95 },
96 {
97 Message: "Error message",
98 Severity: framework.Info,
99 File: &framework.File{
100 Path: "resource.yaml",
101 Index: 0,
102 },
103 },
104 {
105 Message: "Error message",
106 Severity: framework.Error,
107 File: &framework.File{
108 Path: "resource.yaml",
109 Index: 1,
110 },
111 },
112 {
113 Message: "Error message",
114 Severity: framework.Warning,
115 File: &framework.File{
116 Path: "resource.yaml",
117 Index: 2,
118 },
119 },
120 },
121 },
122
123 {
124 name: "sort based on other fields",
125 input: framework.Results{
126 {
127 Message: "Error message",
128 Severity: framework.Error,
129 ResourceRef: &yaml.ResourceIdentifier{
130 TypeMeta: yaml.TypeMeta{
131 APIVersion: "v1",
132 Kind: "Pod",
133 },
134 NameMeta: yaml.NameMeta{
135 Namespace: "foo-ns",
136 Name: "bar",
137 },
138 },
139 Field: &framework.Field{
140 Path: "spec",
141 },
142 },
143 {
144 Message: "Error message",
145 Severity: framework.Error,
146 ResourceRef: &yaml.ResourceIdentifier{
147 TypeMeta: yaml.TypeMeta{
148 APIVersion: "v1",
149 Kind: "Pod",
150 },
151 NameMeta: yaml.NameMeta{
152 Namespace: "foo-ns",
153 Name: "bar",
154 },
155 },
156 Field: &framework.Field{
157 Path: "metadata.name",
158 },
159 },
160 {
161 Message: "Another error message",
162 Severity: framework.Error,
163 ResourceRef: &yaml.ResourceIdentifier{
164 TypeMeta: yaml.TypeMeta{
165 APIVersion: "v1",
166 Kind: "Pod",
167 },
168 NameMeta: yaml.NameMeta{
169 Namespace: "foo-ns",
170 Name: "bar",
171 },
172 },
173 Field: &framework.Field{
174 Path: "metadata.name",
175 },
176 },
177 {
178 Message: "Another error message",
179 Severity: framework.Error,
180 ResourceRef: &yaml.ResourceIdentifier{
181 TypeMeta: yaml.TypeMeta{
182 APIVersion: "v1",
183 Kind: "ConfigMap",
184 },
185 NameMeta: yaml.NameMeta{
186 Namespace: "foo-ns",
187 Name: "bar",
188 },
189 },
190 Field: &framework.Field{
191 Path: "metadata.name",
192 },
193 },
194 },
195 output: framework.Results{
196 {
197 Message: "Another error message",
198 Severity: framework.Error,
199 ResourceRef: &yaml.ResourceIdentifier{
200 TypeMeta: yaml.TypeMeta{
201 APIVersion: "v1",
202 Kind: "ConfigMap",
203 },
204 NameMeta: yaml.NameMeta{
205 Namespace: "foo-ns",
206 Name: "bar",
207 },
208 },
209 Field: &framework.Field{
210 Path: "metadata.name",
211 },
212 },
213 {
214 Message: "Another error message",
215 Severity: framework.Error,
216 ResourceRef: &yaml.ResourceIdentifier{
217 TypeMeta: yaml.TypeMeta{
218 APIVersion: "v1",
219 Kind: "Pod",
220 },
221 NameMeta: yaml.NameMeta{
222 Namespace: "foo-ns",
223 Name: "bar",
224 },
225 },
226 Field: &framework.Field{
227 Path: "metadata.name",
228 },
229 },
230 {
231 Message: "Error message",
232 Severity: framework.Error,
233 ResourceRef: &yaml.ResourceIdentifier{
234 TypeMeta: yaml.TypeMeta{
235 APIVersion: "v1",
236 Kind: "Pod",
237 },
238 NameMeta: yaml.NameMeta{
239 Namespace: "foo-ns",
240 Name: "bar",
241 },
242 },
243 Field: &framework.Field{
244 Path: "metadata.name",
245 },
246 },
247 {
248 Message: "Error message",
249 Severity: framework.Error,
250 ResourceRef: &yaml.ResourceIdentifier{
251 TypeMeta: yaml.TypeMeta{
252 APIVersion: "v1",
253 Kind: "Pod",
254 },
255 NameMeta: yaml.NameMeta{
256 Namespace: "foo-ns",
257 Name: "bar",
258 },
259 },
260 Field: &framework.Field{
261 Path: "spec",
262 },
263 },
264 },
265 },
266 }
267
268 for _, tc := range testcases {
269 tc.input.Sort()
270 if !reflect.DeepEqual(tc.input, tc.output) {
271 t.Errorf("in testcase %q, expect: %#v, but got: %#v", tc.name, tc.output, tc.input)
272 }
273 }
274 }
275
View as plain text