istio

Форк
0
/
cluster_test.go 
603 строки · 11.0 Кб
1
// Copyright Istio Authors
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15
package cluster
16

17
import (
18
	"testing"
19

20
	v1 "k8s.io/api/core/v1"
21
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22

23
	config2 "istio.io/istio/tools/bug-report/pkg/config"
24
)
25

26
func TestShouldSkipPod(t *testing.T) {
27
	cases := []struct {
28
		name     string
29
		pod      *v1.Pod
30
		config   *config2.BugReportConfig
31
		expected bool
32
	}{
33
		{
34
			"tested namespace not skip",
35
			&v1.Pod{
36
				ObjectMeta: metav1.ObjectMeta{
37
					Namespace: "in-namespace1",
38
				},
39
			},
40
			&config2.BugReportConfig{
41
				Include: []*config2.SelectionSpec{
42
					{
43
						Namespaces: []string{"in-"},
44
					},
45
				},
46
				Exclude: []*config2.SelectionSpec{
47
					{
48
						Namespaces: []string{"ex-"},
49
					},
50
				},
51
			},
52
			false,
53
		},
54
		{
55
			"tested namespace not skip 2",
56
			&v1.Pod{
57
				ObjectMeta: metav1.ObjectMeta{
58
					Namespace: "in-namespace1",
59
				},
60
			},
61
			&config2.BugReportConfig{
62
				Include: []*config2.SelectionSpec{
63
					{
64
						Namespaces: []string{"in*"},
65
					},
66
				},
67
				Exclude: []*config2.SelectionSpec{
68
					{
69
						Namespaces: []string{"ex*"},
70
					},
71
				},
72
			},
73
			false,
74
		},
75
		{
76
			"tested namespace not skip 3",
77
			&v1.Pod{
78
				ObjectMeta: metav1.ObjectMeta{
79
					Namespace: "in-namespace1",
80
				},
81
			},
82
			&config2.BugReportConfig{
83
				Include: []*config2.SelectionSpec{
84
					{
85
						Namespaces: []string{"*name*"},
86
					},
87
				},
88
				Exclude: []*config2.SelectionSpec{
89
					{
90
						Namespaces: []string{"ex*"},
91
					},
92
				},
93
			},
94
			false,
95
		},
96
		{
97
			"tested namespace not skip 4",
98
			&v1.Pod{
99
				ObjectMeta: metav1.ObjectMeta{
100
					Namespace: "in-namespace1",
101
				},
102
			},
103
			&config2.BugReportConfig{
104
				Include: []*config2.SelectionSpec{
105
					{
106
						Namespaces: []string{"*space1"},
107
					},
108
				},
109
				Exclude: []*config2.SelectionSpec{
110
					{
111
						Namespaces: []string{"ex*"},
112
					},
113
				},
114
			},
115
			false,
116
		},
117
		{
118
			"tested namespace skip",
119
			&v1.Pod{
120
				ObjectMeta: metav1.ObjectMeta{
121
					Namespace: "ex-namespace1",
122
				},
123
			},
124
			&config2.BugReportConfig{
125
				Include: []*config2.SelectionSpec{
126
					{
127
						Namespaces: []string{"in-"},
128
					},
129
				},
130
				Exclude: []*config2.SelectionSpec{
131
					{
132
						Namespaces: []string{"ex-"},
133
					},
134
				},
135
			},
136
			true,
137
		},
138
		{
139
			"tested pod name not skip",
140
			&v1.Pod{
141
				ObjectMeta: metav1.ObjectMeta{
142
					Name: "in-pod1",
143
				},
144
			},
145
			&config2.BugReportConfig{
146
				Include: []*config2.SelectionSpec{
147
					{
148
						Pods: []string{"in-"},
149
					},
150
				},
151
				Exclude: []*config2.SelectionSpec{
152
					{
153
						Pods: []string{"ex-"},
154
					},
155
				},
156
			},
157
			false,
158
		},
159
		{
160
			"tested pod name skip",
161
			&v1.Pod{
162
				ObjectMeta: metav1.ObjectMeta{
163
					Name: "ex-pod1",
164
				},
165
			},
166
			&config2.BugReportConfig{
167
				Include: []*config2.SelectionSpec{
168
					{
169
						Pods: []string{"in-"},
170
					},
171
				},
172
				Exclude: []*config2.SelectionSpec{
173
					{
174
						Pods: []string{"ex-"},
175
					},
176
				},
177
			},
178
			true,
179
		},
180
		{
181
			"tested container not skip",
182
			&v1.Pod{
183
				ObjectMeta: metav1.ObjectMeta{
184
					Name: "in-test1",
185
				},
186
				Spec: v1.PodSpec{
187
					Containers: []v1.Container{
188
						{
189
							Name: "in-con1",
190
						},
191
					},
192
				},
193
			},
194
			&config2.BugReportConfig{
195
				Include: []*config2.SelectionSpec{
196
					{
197
						Pods:       []string{"in-"},
198
						Containers: []string{"in-"},
199
					},
200
				},
201
				Exclude: []*config2.SelectionSpec{
202
					{
203
						Pods:       []string{"ex-"},
204
						Containers: []string{"ex-"},
205
					},
206
				},
207
			},
208
			false,
209
		},
210
		{
211
			"tested container skip",
212
			&v1.Pod{
213
				ObjectMeta: metav1.ObjectMeta{
214
					Name: "in-test1",
215
				},
216
				Spec: v1.PodSpec{
217
					Containers: []v1.Container{
218
						{
219
							Name: "ex-con1",
220
						},
221
					},
222
				},
223
			},
224
			&config2.BugReportConfig{
225
				Include: []*config2.SelectionSpec{
226
					{
227
						Pods:       []string{"in-"},
228
						Containers: []string{"in-"},
229
					},
230
				},
231
				Exclude: []*config2.SelectionSpec{
232
					{
233
						Pods:       []string{"ex-"},
234
						Containers: []string{"ex-"},
235
					},
236
				},
237
			},
238
			true,
239
		},
240
		{
241
			"tested label not skip",
242
			&v1.Pod{
243
				ObjectMeta: metav1.ObjectMeta{
244
					Name: "in-test1",
245
					Labels: map[string]string{
246
						"l1": "lv1",
247
					},
248
					Annotations: map[string]string{
249
						"a1": "av1",
250
						"a2": "av1",
251
					},
252
				},
253
			},
254
			&config2.BugReportConfig{
255
				Include: []*config2.SelectionSpec{
256
					{
257
						Pods: []string{"in-"},
258
						Labels: map[string]string{
259
							"l1": "lv1",
260
							"l2": "lv2",
261
						},
262
					},
263
				},
264
			},
265
			false,
266
		},
267
		{
268
			"tested label skip",
269
			&v1.Pod{
270
				ObjectMeta: metav1.ObjectMeta{
271
					Name: "in-test1",
272
					Labels: map[string]string{
273
						"l1": "lv1",
274
					},
275
					Annotations: map[string]string{
276
						"a1": "av1",
277
						"a2": "av1",
278
					},
279
				},
280
			},
281
			&config2.BugReportConfig{
282
				Include: []*config2.SelectionSpec{
283
					{
284
						Pods: []string{"in-"},
285
						Labels: map[string]string{
286
							"l2": "lv2",
287
						},
288
					},
289
				},
290
			},
291
			true,
292
		},
293
		{
294
			"tested annotation not skip",
295
			&v1.Pod{
296
				ObjectMeta: metav1.ObjectMeta{
297
					Name: "in-test1",
298
					Labels: map[string]string{
299
						"l3": "lv3",
300
						"l4": "lv4",
301
					},
302
					Annotations: map[string]string{
303
						"a3": "av3",
304
						"a4": "av4",
305
					},
306
				},
307
			},
308
			&config2.BugReportConfig{
309
				Include: []*config2.SelectionSpec{
310
					{
311
						Pods: []string{"in-"},
312
						Annotations: map[string]string{
313
							"a3": "av3",
314
							"a4": "av4",
315
						},
316
					},
317
				},
318
			},
319
			false,
320
		},
321
		{
322
			"tested annotation skip",
323
			&v1.Pod{
324
				ObjectMeta: metav1.ObjectMeta{
325
					Name: "in-test1",
326
					Labels: map[string]string{
327
						"l3": "lv3",
328
						"l4": "lv4",
329
					},
330
					Annotations: map[string]string{
331
						"a3": "av3",
332
					},
333
				},
334
			},
335
			&config2.BugReportConfig{
336
				Include: []*config2.SelectionSpec{
337
					{
338
						Pods: []string{"in-"},
339
						Annotations: map[string]string{
340
							"a4": "av4",
341
						},
342
					},
343
				},
344
			},
345
			true,
346
		},
347
		{
348
			"tested difference namespace skip exclude",
349
			&v1.Pod{
350
				ObjectMeta: metav1.ObjectMeta{
351
					Name:      "in-test1",
352
					Namespace: "test",
353
					Labels: map[string]string{
354
						"l3": "lv3",
355
						"l4": "lv4",
356
					},
357
					Annotations: map[string]string{
358
						"a3": "av3",
359
					},
360
				},
361
			},
362
			&config2.BugReportConfig{
363
				Exclude: []*config2.SelectionSpec{
364
					{
365
						Namespaces: []string{
366
							"fake",
367
						},
368
					},
369
					{
370
						Namespaces: []string{
371
							"test",
372
						},
373
					},
374
				},
375
			},
376
			true,
377
		},
378
		{
379
			"tested include difference namespace not skip",
380
			&v1.Pod{
381
				ObjectMeta: metav1.ObjectMeta{
382
					Name:      "in-test1",
383
					Namespace: "test",
384
					Labels: map[string]string{
385
						"l3": "lv3",
386
						"l4": "lv4",
387
					},
388
					Annotations: map[string]string{
389
						"a3": "av3",
390
					},
391
				},
392
			},
393
			&config2.BugReportConfig{
394
				Include: []*config2.SelectionSpec{
395
					{
396
						Namespaces: []string{
397
							"fake",
398
						},
399
					},
400
					{
401
						Namespaces: []string{
402
							"test",
403
						},
404
					},
405
				},
406
			},
407
			false,
408
		},
409
		{
410
			"tested include difference namespace not skip",
411
			&v1.Pod{
412
				ObjectMeta: metav1.ObjectMeta{
413
					Name:      "in-test1",
414
					Namespace: "test",
415
					Labels: map[string]string{
416
						"l3": "lv3",
417
						"l4": "lv4",
418
					},
419
					Annotations: map[string]string{
420
						"a3": "av3",
421
					},
422
				},
423
			},
424
			&config2.BugReportConfig{
425
				Include: []*config2.SelectionSpec{
426
					{
427
						Namespaces: []string{
428
							"fake",
429
						},
430
					},
431
					{
432
						Namespaces: []string{
433
							"test",
434
						},
435
					},
436
				},
437
			},
438
			false,
439
		},
440
		{
441
			"tested include difference namespace/pod... not skip",
442
			&v1.Pod{
443
				ObjectMeta: metav1.ObjectMeta{
444
					Name:      "in-test1",
445
					Namespace: "test",
446
					Labels: map[string]string{
447
						"l3": "lv3",
448
						"l4": "lv4",
449
					},
450
					Annotations: map[string]string{
451
						"a3": "av3",
452
					},
453
				},
454
			},
455
			&config2.BugReportConfig{
456
				Include: []*config2.SelectionSpec{
457
					{
458
						Namespaces: []string{
459
							"fake",
460
						},
461
						Pods: []string{
462
							"in-test1",
463
						},
464
						Labels: map[string]string{
465
							"l3": "lv3",
466
						},
467
						Annotations: map[string]string{
468
							"a3": "av3",
469
						},
470
					},
471
					{
472
						Namespaces: []string{
473
							"test",
474
						},
475
						Pods: []string{
476
							"in-test1",
477
						},
478
						Labels: map[string]string{
479
							"l3": "lv3",
480
						},
481
						Annotations: map[string]string{
482
							"a3": "av3",
483
						},
484
					},
485
				},
486
			},
487
			false,
488
		},
489
	}
490

491
	for _, c := range cases {
492
		t.Run(c.name, func(t *testing.T) {
493
			skip := shouldSkipPod(c.pod, c.config)
494
			if skip != c.expected {
495
				t.Errorf("shouldSkipPod() for test case name [%s] return= %v, want %v", c.name, skip, c.expected)
496
			}
497
		})
498
	}
499
}
500

501
func TestShouldSkipDeployment(t *testing.T) {
502
	cases := []struct {
503
		name       string
504
		config     *config2.BugReportConfig
505
		deployment string
506
		expected   bool
507
	}{
508
		{
509
			"tested deployment not skip",
510
			&config2.BugReportConfig{
511
				Include: []*config2.SelectionSpec{
512
					{
513
						Deployments: []string{"in-"},
514
					},
515
				},
516
				Exclude: []*config2.SelectionSpec{
517
					{
518
						Deployments: []string{"ex-"},
519
					},
520
				},
521
			},
522
			"in-dep1",
523
			false,
524
		},
525
		{
526
			"tested deployment skip",
527
			&config2.BugReportConfig{
528
				Include: []*config2.SelectionSpec{
529
					{
530
						Deployments: []string{"in-"},
531
					},
532
				},
533
				Exclude: []*config2.SelectionSpec{
534
					{
535
						Deployments: []string{"ex-"},
536
					},
537
				},
538
			},
539
			"ex-dep1",
540
			true,
541
		},
542
	}
543
	for _, c := range cases {
544
		t.Run(c.name, func(t *testing.T) {
545
			skip := shouldSkipDeployment(c.deployment, c.config)
546
			if skip != c.expected {
547
				t.Errorf("shouldSkip() for test case name [%s] return= %v, want %v", c.name, skip, c.expected)
548
			}
549
		})
550
	}
551
}
552

553
func TestShouldSkipDaemonSet(t *testing.T) {
554
	cases := []struct {
555
		name      string
556
		config    *config2.BugReportConfig
557
		daemonset string
558
		expected  bool
559
	}{
560
		{
561
			"tested daemonset not skip",
562
			&config2.BugReportConfig{
563
				Include: []*config2.SelectionSpec{
564
					{
565
						Daemonsets: []string{"in-"},
566
					},
567
				},
568
				Exclude: []*config2.SelectionSpec{
569
					{
570
						Daemonsets: []string{"ex-"},
571
					},
572
				},
573
			},
574
			"in-dep1",
575
			false,
576
		},
577
		{
578
			"tested daemonset skip",
579
			&config2.BugReportConfig{
580
				Include: []*config2.SelectionSpec{
581
					{
582
						Daemonsets: []string{"in-"},
583
					},
584
				},
585
				Exclude: []*config2.SelectionSpec{
586
					{
587
						Daemonsets: []string{"ex-"},
588
					},
589
				},
590
			},
591
			"ex-dep1",
592
			true,
593
		},
594
	}
595
	for _, c := range cases {
596
		t.Run(c.name, func(t *testing.T) {
597
			skip := shouldSkipDaemonSet(c.daemonset, c.config)
598
			if skip != c.expected {
599
				t.Errorf("shouldSkip() for test case name [%s] return= %v, want %v", c.name, skip, c.expected)
600
			}
601
		})
602
	}
603
}
604

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.