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