1 package cli
2
3 import (
4 "context"
5 "fmt"
6 "log"
7 "os"
8 "strings"
9 "testing"
10 "time"
11 )
12
13
14 const gcpProjectID string = ""
15 const folderPath string = "testdata/rundata"
16 const exeData string = "testdata/exedata"
17
18 var dirPath string
19
20
21 func setupSuite() func(t *testing.T) {
22 log.Println("setup suite")
23 projectID = gcpProjectID
24
25
26 deleteArgs.labels = "policy-owner:observability"
27 if deleteErr := runDelete(context.Background(), []string{}); deleteErr != nil {
28 fmt.Printf("Test setup error Delete %s \n", deleteErr)
29 }
30
31 createArgs.templatePath = exeData
32 if CreateErr := runCreate(context.Background(), []string{}); CreateErr != nil {
33 fmt.Printf("Test setup error Create %s \n", CreateErr)
34 }
35
36 duration := time.Duration(60) * time.Second
37 time.Sleep(duration)
38
39
40 return func(_ *testing.T) {
41 log.Println("teardown suite")
42
43 dirRead, _ := os.Open(folderPath)
44 dirFiles, _ := dirRead.Readdir(0)
45
46
47 for index := range dirFiles {
48 fileHere := dirFiles[index]
49
50
51 nameHere := fileHere.Name()
52 fullPath := folderPath + "/" + nameHere
53
54
55 if !strings.Contains(nameHere, "UnitTestPolicy") {
56 os.Remove(fullPath)
57 fmt.Println("Removed file:", fullPath)
58 }
59 }
60 }
61 }
62
63 func TestRunner(t *testing.T) {
64
65 t.SkipNow()
66
67
68 dirPath = os.TempDir()
69 log.Printf("the temp dir path is %s\n", dirPath)
70
71 teardownSuite := setupSuite()
72 defer teardownSuite(t)
73
74 testCases := []struct {
75 name string
76 args []string
77 cmd map[string]string
78 cmdbool map[string]bool
79 wantErr bool
80 }{
81
82 {
83 name: "Create_AlertPolicy1",
84 args: []string{"Create", "--project", gcpProjectID},
85 cmd: map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy1.json"},
86 wantErr: false,
87 },
88 {
89 name: "Create_AlertPolicy2",
90 args: []string{"Create", "--project", gcpProjectID},
91 cmd: map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy2.json"},
92 wantErr: false,
93 },
94 {
95 name: "Create_AlertPolicy3",
96 args: []string{"Create", "--project", gcpProjectID},
97 cmd: map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy3.json"},
98 wantErr: false,
99 },
100 {
101 name: "Create_AlertPolicyWrongPath",
102 args: []string{"Create", "--project", gcpProjectID},
103 cmd: map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy0.json"},
104 wantErr: false,
105 },
106 {
107 name: "Get_SaveSinglePolicyAllFields",
108 args: []string{"get", "--project", gcpProjectID},
109 cmd: map[string]string{"getArgs.name": "Test Channels", "getArgs.templatePath": dirPath},
110 cmdbool: map[string]bool{"getArgs.overwrite": true, "getArgs.templateFormat": true},
111 wantErr: false,
112 },
113 {
114 name: "Get_SaveSinglePolicyTemplateFormat",
115 args: []string{"get", "--project", gcpProjectID},
116 cmd: map[string]string{"getArgs.name": "Test Channels", "getArgs.templatePath": dirPath},
117 cmdbool: map[string]bool{"getArgs.overwrite": true},
118 wantErr: false,
119 },
120 {
121 name: "Get_SaveAllPolicies",
122 args: []string{"get", "--project", gcpProjectID},
123 cmd: map[string]string{"getArgs.templatePath": dirPath},
124 cmdbool: map[string]bool{"getArgs.overwrite": true},
125 wantErr: false,
126 },
127 {
128 name: "Get_SaveAllPoliciesWrongPath",
129 args: []string{"get", "--project", gcpProjectID},
130 cmd: map[string]string{"getArgs.templatePath": dirPath + "/wrongpath"},
131 cmdbool: map[string]bool{"getArgs.overwrite": true},
132 wantErr: false,
133 },
134 {
135 name: "Update_AddSingleLabel",
136 args: []string{"update", "--project", gcpProjectID},
137 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.addUserLabels": "testlabel1:multilabel1"},
138 wantErr: false,
139 },
140 {
141 name: "Update_AddMultiLabelsWithCorrectDelimiter",
142 args: []string{"update", "--project", gcpProjectID},
143 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.addUserLabels": " testlabel2 : multilabel2 , testlabel3 : multilabel3 testlabel4 : multilabel4 , testlabel5 : multilabel5 testlabel6 : multilabel6 testlabel7 : multilabel7 testlabel8 : multilabel8"},
144 wantErr: false,
145 },
146 {
147 name: "Update_ChangeExistingLabelValue",
148 args: []string{"update", "--project", gcpProjectID},
149 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.addUserLabels": "testlabel6:updatedmultilabel6"},
150 wantErr: false,
151 },
152 {
153 name: "Update_DeleteSingleLabel",
154 args: []string{"update", "--project", gcpProjectID},
155 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel6:updatedmultilabel6"},
156 wantErr: false,
157 },
158 {
159 name: "Update_DeleteSingleLabelByKey",
160 args: []string{"update", "--project", gcpProjectID},
161 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel5:"},
162 wantErr: false,
163 },
164 {
165 name: "Update_DeleteMultiLabelByKey",
166 args: []string{"update", "--project", gcpProjectID},
167 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel4: , testlabel3: , testlabel2:,testlabel1: "},
168 wantErr: false,
169 },
170 {
171 name: "Update_BulkAddSingleLabel",
172 args: []string{"update", "--project", gcpProjectID},
173 cmd: map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.addUserLabels": "bulk-update1: test1 "},
174 wantErr: false,
175 },
176 {
177 name: "Update_BulkAddMultiLabels",
178 args: []string{"update", "--project", gcpProjectID},
179 cmd: map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.addUserLabels": "bulk-update2: test2 bulk-update3: test3, bulk-update4: test4 bulk-update5: test5 "},
180 wantErr: false,
181 },
182 {
183 name: "Update_BulkDeleteSingleLabel",
184 args: []string{"update", "--project", gcpProjectID},
185 cmd: map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.delUserLabels": "bulk-update1: test1 "},
186 wantErr: false,
187 },
188 {
189 name: "Update_BulkDeleteMultiLabels",
190 args: []string{"update", "--project", gcpProjectID},
191 cmd: map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.delUserLabels": "bulk-update2: test2 bulk-update3: test3"},
192 wantErr: false,
193 },
194 {
195 name: "Update_BulkDeleteMultiLabelsByKey",
196 args: []string{"update", "--project", gcpProjectID},
197 cmd: map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.delUserLabels": "bulk-update4: , bulk-update5: "},
198 wantErr: false,
199 },
200 {
201 name: "Update_DeleteMultiLabelsWithDelimiter",
202 args: []string{"update", "--project", gcpProjectID},
203 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel7 : multilabel7 testlabel8 : multilabel8 "},
204 wantErr: false,
205 },
206 {
207 name: "Update_DeleteSingleMissingLabel",
208 args: []string{"update", "--project", gcpProjectID},
209 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel6:multilabel6"},
210 wantErr: true,
211 },
212 {
213 name: "Update_DeleteMultiMissingLabels",
214 args: []string{"update", "--project", gcpProjectID},
215 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": " testlabel3 : multilabel3 , testlabel4 : multilabel4 testlabel5 : multilabel5 "},
216 wantErr: true,
217 },
218 {
219 name: "Update_AddLabelsNonExistingPolicy",
220 args: []string{"update", "--project", gcpProjectID},
221 cmd: map[string]string{"updateArgs.name": "Unit Test Policy", "updateArgs.addUserLabels": " testlabel3 : multilabel3 , testlabel4 : multilabel4 testlabel5 : multilabel5 "},
222 wantErr: true,
223 },
224 {
225 name: "Update_DeleteLabelsNonExistingPolicy",
226 args: []string{"update", "--project", gcpProjectID},
227 cmd: map[string]string{"updateArgs.name": "Unit Test Policy", "updateArgs.delUserLabels": " testlabel3 : multilabel3 , testlabel4 : multilabel4 testlabel5 : multilabel5 "},
228 wantErr: true,
229 },
230 {
231 name: "Update_PolicyFromTemplate",
232 args: []string{"update", "--project", gcpProjectID},
233 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.templatePath": folderPath + "/UnitTestPolicyTemplate.json"},
234 wantErr: false,
235 },
236 {
237 name: "Update_EnablePolicy",
238 args: []string{"update", "--project", gcpProjectID},
239 cmd: map[string]string{"updateArgs.name": "Unit Test Policy Template"},
240 cmdbool: map[string]bool{"updateArgs.enable": true},
241 wantErr: false,
242 },
243 {
244 name: "Update_EnableActivePolicy",
245 args: []string{"update", "--project", gcpProjectID},
246 cmd: map[string]string{"updateArgs.name": "Unit Test Policy Template"},
247 cmdbool: map[string]bool{"updateArgs.enable": true},
248 wantErr: true,
249 },
250 {
251 name: "Update_EnableNonExistingPolicy",
252 args: []string{"update", "--project", gcpProjectID},
253 cmd: map[string]string{"updateArgs.name": "Unit Test Policy"},
254 cmdbool: map[string]bool{"updateArgs.enable": true},
255 wantErr: true,
256 },
257 {
258 name: "Update_DisablePolicy",
259 args: []string{"update", "--project", gcpProjectID},
260 cmd: map[string]string{"updateArgs.name": "Unit Test Policy Template"},
261 cmdbool: map[string]bool{"updateArgs.disable": true},
262 wantErr: false,
263 },
264 {
265 name: "Update_DisableInactivePolicy",
266 args: []string{"update", "--project", gcpProjectID},
267 cmd: map[string]string{"updateArgs.name": "Unit Test Policy Template"},
268 cmdbool: map[string]bool{"updateArgs.disable": true},
269 wantErr: true,
270 },
271 {
272 name: "Update_DisableNonExistingPolicy",
273 args: []string{"update", "--project", gcpProjectID},
274 cmd: map[string]string{"updateArgs.name": "Unit Test Policy"},
275 cmdbool: map[string]bool{"updateArgs.disable": true},
276 wantErr: true,
277 },
278 {
279 name: "Update_BulkEnablePolicy",
280 args: []string{"update", "--project", gcpProjectID},
281 cmd: map[string]string{"updateArgs.filter": "user_labels=\"unit-test\""},
282 cmdbool: map[string]bool{"updateArgs.enable": true},
283 wantErr: false,
284 },
285 {
286 name: "Update_BulkEnableActivePolicy",
287 args: []string{"update", "--project", gcpProjectID},
288 cmd: map[string]string{"updateArgs.filter": "user_labels='unit-test'"},
289 cmdbool: map[string]bool{"updateArgs.enable": true},
290 wantErr: true,
291 },
292 {
293 name: "Update_RenamePolicy",
294 args: []string{"update", "--project", gcpProjectID},
295 cmd: map[string]string{"updateArgs.name": "Unit Test Policy Template", "updateArgs.rename": "Unit Test Policy 2"},
296 wantErr: false,
297 },
298 {
299 name: "Update_RenameToExistingPolicy",
300 args: []string{"update", "--project", gcpProjectID},
301 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.rename": "Unit Test Policy 3"},
302 wantErr: true,
303 },
304 {
305 name: "Update_RenameToNonExistingPolicy",
306 args: []string{"update", "--project", gcpProjectID},
307 cmd: map[string]string{"updateArgs.name": "Unit Test Policy 4", "updateArgs.rename": "Unit Test Policy 3"},
308 wantErr: true,
309 },
310 {
311 name: "Update_BulkDisablePolicy",
312 args: []string{"update", "--project", gcpProjectID},
313 cmd: map[string]string{"updateArgs.filter": "(user_labels='unit-test')"},
314 cmdbool: map[string]bool{"updateArgs.disable": true},
315 wantErr: false,
316 },
317 {
318 name: "Update_BulkDisableActivePolicy",
319 args: []string{"update", "--project", gcpProjectID},
320 cmd: map[string]string{"updateArgs.filter": "(user_labels='unit-test')"},
321 cmdbool: map[string]bool{"updateArgs.disable": true},
322 wantErr: true,
323 },
324 {
325 name: "Sync_Verify",
326 args: []string{"sync", "--project", gcpProjectID},
327 cmd: map[string]string{"syncArgs.templatePath": folderPath},
328 wantErr: false,
329 },
330 {
331 name: "Sync_Push",
332 args: []string{"sync", "--project", gcpProjectID},
333 cmd: map[string]string{"syncArgs.templatePath": folderPath},
334 cmdbool: map[string]bool{"syncArgs.push": true},
335 wantErr: false,
336 },
337 {
338 name: "Delete_AlertPolicyByLabel",
339 args: []string{"delete", "--project", gcpProjectID},
340 cmd: map[string]string{"deleteArgs.labels": "unit-test:test"},
341 cmdbool: map[string]bool{"deleteArgs.deleteAll": false},
342 wantErr: false,
343 },
344 {
345 name: "Delete_NonExistingAlertPolicy",
346 args: []string{"delete", "--project", gcpProjectID},
347 cmd: map[string]string{"deleteArgs.name": "Unit Test Policy"},
348 cmdbool: map[string]bool{"deleteArgs.deleteAll": false},
349 wantErr: true,
350 },
351 }
352
353 for _, tc := range testCases {
354 t.Run(tc.name, func(t *testing.T) {
355 createArgs.templatePath = tc.cmd["createArgs.templatePath"]
356 getArgs.name = tc.cmd["getArgs.name"]
357 getArgs.templatePath = tc.cmd["getArgs.templatePath"]
358 getArgs.overwrite = tc.cmdbool["getArgs.overwrite"]
359 getArgs.templateFormat = tc.cmdbool["getArgs.templateFormat"]
360 updateArgs.name = tc.cmd["updateArgs.name"]
361 updateArgs.addUserLabels = tc.cmd["updateArgs.addUserLabels"]
362 updateArgs.delUserLabels = tc.cmd["updateArgs.delUserLabels"]
363 updateArgs.enable = tc.cmdbool["updateArgs.enable"]
364 updateArgs.disable = tc.cmdbool["updateArgs.disable"]
365 updateArgs.rename = tc.cmd["updateArgs.rename"]
366 updateArgs.templatePath = tc.cmd["updateArgs.templatePath"]
367 updateArgs.filter = tc.cmd["updateArgs.filter"]
368 deleteArgs.name = tc.cmd["deleteArgs.name"]
369 deleteArgs.labels = tc.cmd["deleteArgs.labels"]
370 deleteArgs.deleteAll = tc.cmdbool["deleteArgs.deleteAll"]
371 syncArgs.push = tc.cmdbool["syncArgs.push"]
372 syncArgs.templatePath = tc.cmd["syncArgs.templatePath"]
373
374 if err := Run(tc.args); (err != nil) != tc.wantErr {
375 t.Errorf("Run() error = %v, wantErr %v", err, tc.wantErr)
376 }
377 })
378 }
379 }
380
View as plain text