inspektor-gadget

Форк
0
270 строк · 6.1 Кб
1
// Copyright 2019-2021 The Inspektor Gadget 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 containercollection
16

17
import (
18
	"testing"
19

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

23
func TestGetExpectedOwnerReference(t *testing.T) {
24
	cTrue := true
25
	cFalse := false
26
	table := []struct {
27
		description     string
28
		ownerReferences []metav1.OwnerReference
29
		expectedResult  *metav1.OwnerReference
30
	}{
31
		{
32
			description:     "From empty list",
33
			ownerReferences: []metav1.OwnerReference{},
34
		},
35
		{
36
			description: "Neither controller reference nor expected kind",
37
			ownerReferences: []metav1.OwnerReference{
38
				{
39
					UID:        "abcde1",
40
					Kind:       "non-expected-kind",
41
					Controller: &cFalse,
42
				},
43
				{
44
					UID:        "abcde2",
45
					Kind:       "non-expected-kind",
46
					Controller: &cFalse,
47
				},
48
				{
49
					UID:        "abcde3",
50
					Kind:       "non-expected-kind",
51
					Controller: &cFalse,
52
				},
53
			},
54
		},
55
		{
56
			description: "One element with expected kind",
57
			ownerReferences: []metav1.OwnerReference{
58
				{
59
					UID:        "abcde",
60
					Kind:       "Deployment",
61
					Controller: &cFalse,
62
				},
63
			},
64
			expectedResult: &metav1.OwnerReference{
65
				UID: "abcde",
66
			},
67
		},
68
		{
69
			description: "Selecting first expected kind reference (First element)",
70
			ownerReferences: []metav1.OwnerReference{
71
				{
72
					UID:        "abcde1",
73
					Kind:       "ReplicaSet",
74
					Controller: &cFalse,
75
				},
76
				{
77
					UID:        "abcde2",
78
					Kind:       "StatefulSet",
79
					Controller: &cFalse,
80
				},
81
				{
82
					UID:        "abcde3",
83
					Kind:       "DaemonSet",
84
					Controller: &cFalse,
85
				},
86
			},
87
			expectedResult: &metav1.OwnerReference{
88
				UID: "abcde1",
89
			},
90
		},
91
		{
92
			description: "Selecting first expected kind reference (Intermediate element)",
93
			ownerReferences: []metav1.OwnerReference{
94
				{
95
					UID:        "abcde1",
96
					Kind:       "non-expected-kind",
97
					Controller: &cFalse,
98
				},
99
				{
100
					UID:        "abcde2",
101
					Kind:       "Job",
102
					Controller: &cFalse,
103
				},
104
				{
105
					UID:        "abcde3",
106
					Kind:       "CronJob",
107
					Controller: &cFalse,
108
				},
109
			},
110
			expectedResult: &metav1.OwnerReference{
111
				UID: "abcde2",
112
			},
113
		},
114
		{
115
			description: "Selecting first expected kind reference (Last element)",
116
			ownerReferences: []metav1.OwnerReference{
117
				{
118
					UID:        "abcde1",
119
					Kind:       "non-expected-kind",
120
					Controller: &cFalse,
121
				},
122
				{
123
					UID:        "abcde2",
124
					Kind:       "non-expected-kind",
125
					Controller: &cFalse,
126
				},
127
				{
128
					UID:        "abcde3",
129
					Kind:       "ReplicationController",
130
					Controller: &cFalse,
131
				},
132
			},
133
			expectedResult: &metav1.OwnerReference{
134
				UID: "abcde3",
135
			},
136
		},
137
		{
138
			description: "Nil controller flag",
139
			ownerReferences: []metav1.OwnerReference{
140
				{
141
					UID:  "abcde",
142
					Kind: "CronJob",
143
				},
144
			},
145
			expectedResult: &metav1.OwnerReference{
146
				UID: "abcde",
147
			},
148
		},
149
		{
150
			description: "Controller reference without expected kind and no fallback",
151
			ownerReferences: []metav1.OwnerReference{
152
				{
153
					UID:        "abcde1",
154
					Kind:       "non-expected-kind",
155
					Controller: &cTrue,
156
				},
157
				{
158
					UID:        "abcde2",
159
					Kind:       "non-expected-kind",
160
					Controller: &cFalse,
161
				},
162
				{
163
					UID:        "abcde3",
164
					Kind:       "non-expected-kind",
165
					Controller: &cFalse,
166
				},
167
			},
168
		},
169
		{
170
			description: "Fallback references for controller reference without expected kind",
171
			ownerReferences: []metav1.OwnerReference{
172
				{
173
					UID:        "abcde1",
174
					Kind:       "non-expected-kind",
175
					Controller: &cTrue,
176
				},
177
				{
178
					UID:        "abcde2",
179
					Kind:       "ReplicaSet",
180
					Controller: &cFalse,
181
				},
182
				{
183
					UID:        "abcde3",
184
					Kind:       "StatefulSet",
185
					Controller: &cFalse,
186
				},
187
			},
188
			expectedResult: &metav1.OwnerReference{
189
				UID: "abcde2",
190
			},
191
		},
192
		{
193
			description: "Selecting controller reference (First element)",
194
			ownerReferences: []metav1.OwnerReference{
195
				{
196
					UID:        "abcde1",
197
					Kind:       "Deployment",
198
					Controller: &cTrue,
199
				},
200
				{
201
					UID:        "abcde2",
202
					Kind:       "Job",
203
					Controller: &cFalse,
204
				},
205
				{
206
					UID:        "abcde3",
207
					Kind:       "ReplicaSet",
208
					Controller: &cFalse,
209
				},
210
			},
211
			expectedResult: &metav1.OwnerReference{
212
				UID: "abcde1",
213
			},
214
		},
215
		{
216
			description: "Selecting controller reference (Intermediate element)",
217
			ownerReferences: []metav1.OwnerReference{
218
				{
219
					UID:        "abcde1",
220
					Kind:       "DaemonSet",
221
					Controller: &cFalse,
222
				},
223
				{
224
					UID:        "abcde2",
225
					Kind:       "ReplicationController",
226
					Controller: &cTrue,
227
				},
228
				{
229
					UID:        "abcde3",
230
					Kind:       "StatefulSet",
231
					Controller: &cFalse,
232
				},
233
			},
234
			expectedResult: &metav1.OwnerReference{
235
				UID: "abcde2",
236
			},
237
		},
238
		{
239
			description: "Selecting controller reference (Last element)",
240
			ownerReferences: []metav1.OwnerReference{
241
				{
242
					UID:        "abcde1",
243
					Kind:       "ReplicaSet",
244
					Controller: &cFalse,
245
				},
246
				{
247
					UID:        "abcde2",
248
					Kind:       "Deployment",
249
					Controller: &cFalse,
250
				},
251
				{
252
					UID:        "abcde3",
253
					Kind:       "CronJob",
254
					Controller: &cTrue,
255
				},
256
			},
257
			expectedResult: &metav1.OwnerReference{
258
				UID: "abcde3",
259
			},
260
		},
261
	}
262

263
	for i, entry := range table {
264
		result := getExpectedOwnerReference(entry.ownerReferences)
265
		if (entry.expectedResult == nil && result != nil) || (entry.expectedResult != nil && entry.expectedResult.UID != result.UID) {
266
			t.Fatalf("Failed test %q (index %d): result %+v expected %+v",
267
				entry.description, i, result, entry.expectedResult)
268
		}
269
	}
270
}
271

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

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

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

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