@@ -47,9 +47,7 @@ var _ = Describe("Garbage collection for dependent resources", func() {
47
47
BeforeEach (func () {
48
48
group := fmt .Sprintf ("%s.com" , rand .String (16 ))
49
49
50
- // Create a CustomResourceDefinition
51
- var err error
52
- crd , err = kubeClient .ApiextensionsInterface ().ApiextensionsV1 ().CustomResourceDefinitions ().Create (context .TODO (), & apiextensionsv1.CustomResourceDefinition {
50
+ crd = & apiextensionsv1.CustomResourceDefinition {
53
51
ObjectMeta : metav1.ObjectMeta {
54
52
Name : fmt .Sprintf ("plural.%s" , group ),
55
53
},
@@ -73,18 +71,27 @@ var _ = Describe("Garbage collection for dependent resources", func() {
73
71
ListKind : "KindList" ,
74
72
},
75
73
},
76
- }, metav1.CreateOptions {})
77
- Expect (err ).NotTo (HaveOccurred ())
74
+ }
78
75
79
- // Create a ClusterRole for the crd
80
- cr , err = kubeClient .CreateClusterRole (& rbacv1.ClusterRole {
76
+ // Create a CustomResourceDefinition
77
+ var err error
78
+ Eventually (func () error {
79
+ crd , err = kubeClient .ApiextensionsInterface ().ApiextensionsV1 ().CustomResourceDefinitions ().Create (context .TODO (), crd , metav1.CreateOptions {})
80
+ return err
81
+ }).Should (Succeed ())
82
+
83
+ cr = & rbacv1.ClusterRole {
81
84
ObjectMeta : metav1.ObjectMeta {
82
85
GenerateName : "clusterrole-" ,
83
86
OwnerReferences : []metav1.OwnerReference {ownerutil .NonBlockingOwner (crd )},
84
87
},
85
- })
86
- Expect (err ).NotTo (HaveOccurred ())
88
+ }
87
89
90
+ // Create a ClusterRole for the crd
91
+ Eventually (func () error {
92
+ cr , err = kubeClient .CreateClusterRole (cr )
93
+ return err
94
+ }).Should (Succeed ())
88
95
})
89
96
90
97
AfterEach (func () {
@@ -100,11 +107,13 @@ var _ = Describe("Garbage collection for dependent resources", func() {
100
107
101
108
BeforeEach (func () {
102
109
// Delete CRD
103
- Expect (kubeClient .ApiextensionsInterface ().ApiextensionsV1 ().CustomResourceDefinitions ().Delete (context .TODO (), crd .GetName (), metav1.DeleteOptions {})).To (Succeed ())
110
+ Eventually (func () bool {
111
+ err := kubeClient .ApiextensionsInterface ().ApiextensionsV1 ().CustomResourceDefinitions ().Delete (context .TODO (), crd .GetName (), metav1.DeleteOptions {})
112
+ return k8serrors .IsNotFound (err )
113
+ }).Should (BeTrue ())
104
114
})
105
115
106
116
It ("should delete the associated ClusterRole" , func () {
107
-
108
117
Eventually (func () bool {
109
118
_ , err := kubeClient .GetClusterRole (cr .GetName ())
110
119
return k8serrors .IsNotFound (err )
@@ -117,16 +126,14 @@ var _ = Describe("Garbage collection for dependent resources", func() {
117
126
Context ("Given a ClusterRole owned by a APIService" , func () {
118
127
119
128
var (
120
- as * apiregistrationv1.APIService
121
- cr * rbacv1.ClusterRole
129
+ apiService * apiregistrationv1.APIService
130
+ cr * rbacv1.ClusterRole
122
131
)
123
132
124
133
BeforeEach (func () {
125
134
group := rand .String (16 )
126
135
127
- // Create an API Service
128
- var err error
129
- as , err = kubeClient .CreateAPIService (& apiregistrationv1.APIService {
136
+ apiService = & apiregistrationv1.APIService {
130
137
ObjectMeta : metav1.ObjectMeta {
131
138
Name : fmt .Sprintf ("v1.%s" , group ),
132
139
},
@@ -136,32 +143,44 @@ var _ = Describe("Garbage collection for dependent resources", func() {
136
143
GroupPriorityMinimum : 1 ,
137
144
VersionPriority : 1 ,
138
145
},
139
- })
140
- Expect (err ).NotTo (HaveOccurred ())
146
+ }
147
+ // Create an API Service
148
+ var err error
149
+ Eventually (func () error {
150
+ apiService , err = kubeClient .CreateAPIService (apiService )
151
+ return err
152
+ }).Should (Succeed ())
141
153
142
- // Create a ClusterRole
143
- cr , err = kubeClient .CreateClusterRole (& rbacv1.ClusterRole {
154
+ cr = & rbacv1.ClusterRole {
144
155
ObjectMeta : metav1.ObjectMeta {
145
156
GenerateName : "clusterrole-" ,
146
- OwnerReferences : []metav1.OwnerReference {ownerutil .NonBlockingOwner (as )},
157
+ OwnerReferences : []metav1.OwnerReference {ownerutil .NonBlockingOwner (apiService )},
147
158
},
148
- })
149
- Expect (err ).NotTo (HaveOccurred ())
159
+ }
160
+
161
+ Eventually (func () error {
162
+ // Create a ClusterRole
163
+ cr , err = kubeClient .CreateClusterRole (cr )
164
+ return err
165
+ }).Should (Succeed ())
150
166
})
151
167
152
168
AfterEach (func () {
153
169
154
170
IgnoreError (kubeClient .DeleteClusterRole (cr .GetName (), & metav1.DeleteOptions {}))
155
171
156
- IgnoreError (kubeClient .DeleteAPIService (as .GetName (), & metav1.DeleteOptions {}))
172
+ IgnoreError (kubeClient .DeleteAPIService (apiService .GetName (), & metav1.DeleteOptions {}))
157
173
158
174
})
159
175
160
176
When ("APIService is deleted" , func () {
161
177
162
178
BeforeEach (func () {
163
179
// Delete API service
164
- Expect (kubeClient .DeleteAPIService (as .GetName (), & metav1.DeleteOptions {})).To (Succeed ())
180
+ Eventually (func () bool {
181
+ err := kubeClient .DeleteAPIService (apiService .GetName (), & metav1.DeleteOptions {})
182
+ return k8serrors .IsNotFound (err )
183
+ }).Should (BeTrue ())
165
184
})
166
185
167
186
It ("should delete the associated ClusterRole" , func () {
@@ -193,18 +212,22 @@ var _ = Describe("Garbage collection for dependent resources", func() {
193
212
propagation metav1.DeletionPropagation
194
213
options metav1.DeleteOptions
195
214
)
196
-
197
215
BeforeEach (func () {
198
216
199
217
ownerA = newCSV ("ownera" , testNamespace , "" , semver .MustParse ("0.0.0" ), nil , nil , nil )
200
218
ownerB = newCSV ("ownerb" , testNamespace , "" , semver .MustParse ("0.0.0" ), nil , nil , nil )
201
219
202
220
// create all owners
203
221
var err error
204
- fetchedA , err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Create (context .TODO (), & ownerA , metav1.CreateOptions {})
205
- Expect (err ).NotTo (HaveOccurred ())
206
- fetchedB , err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Create (context .TODO (), & ownerB , metav1.CreateOptions {})
207
- Expect (err ).NotTo (HaveOccurred ())
222
+ Eventually (func () error {
223
+ fetchedA , err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Create (context .TODO (), & ownerA , metav1.CreateOptions {})
224
+ return err
225
+ }).Should (Succeed ())
226
+
227
+ Eventually (func () error {
228
+ fetchedB , err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Create (context .TODO (), & ownerB , metav1.CreateOptions {})
229
+ return err
230
+ }).Should (Succeed ())
208
231
209
232
dependent = & corev1.ConfigMap {
210
233
ObjectMeta : metav1.ObjectMeta {
@@ -218,8 +241,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
218
241
ownerutil .AddOwner (dependent , fetchedB , true , false )
219
242
220
243
// create ConfigMap dependent
221
- _ , err = kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Create (context .TODO (), dependent , metav1.CreateOptions {})
222
- Expect (err ).NotTo (HaveOccurred (), "dependent could not be created" )
244
+ Eventually (func () error {
245
+ _ , err = kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Create (context .TODO (), dependent , metav1.CreateOptions {})
246
+ return err
247
+ }).Should (Succeed (), "dependent could not be created" )
223
248
224
249
propagation = metav1 .DeletePropagationForeground
225
250
options = metav1.DeleteOptions {PropagationPolicy : & propagation }
@@ -229,32 +254,35 @@ var _ = Describe("Garbage collection for dependent resources", func() {
229
254
230
255
BeforeEach (func () {
231
256
// delete ownerA in the foreground (to ensure any "blocking" dependents are deleted before ownerA)
232
- err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedA .GetName (), options )
233
- Expect (err ).NotTo (HaveOccurred ())
257
+ Eventually (func () bool {
258
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedA .GetName (), options )
259
+ return k8serrors .IsNotFound (err )
260
+ }).Should (BeTrue ())
234
261
235
262
// wait for deletion of ownerA
236
263
Eventually (func () bool {
237
264
_ , err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Get (context .TODO (), ownerA .GetName (), metav1.GetOptions {})
238
265
return k8serrors .IsNotFound (err )
239
266
}).Should (BeTrue ())
240
-
241
267
})
242
268
243
269
It ("should not have deleted the dependent since ownerB CSV is still present" , func () {
244
- _ , err := kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Get (context .TODO (), dependent .GetName (), metav1.GetOptions {})
245
- Expect (err ).NotTo (HaveOccurred (), "dependent deleted after one of the owner was deleted" )
270
+ Eventually (func () error {
271
+ _ , err := kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Get (context .TODO (), dependent .GetName (), metav1.GetOptions {})
272
+ return err
273
+ }).Should (Succeed (), "dependent deleted after one of the owner was deleted" )
246
274
ctx .Ctx ().Logf ("dependent still exists after one owner was deleted" )
247
-
248
275
})
249
-
250
276
})
251
277
252
278
When ("removing both the owners using 'Foreground' deletion policy" , func () {
253
279
254
280
BeforeEach (func () {
255
281
// delete ownerA in the foreground (to ensure any "blocking" dependents are deleted before ownerA)
256
- err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedA .GetName (), options )
257
- Expect (err ).NotTo (HaveOccurred ())
282
+ Eventually (func () bool {
283
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedA .GetName (), options )
284
+ return k8serrors .IsNotFound (err )
285
+ }).Should (BeTrue ())
258
286
259
287
// wait for deletion of ownerA
260
288
Eventually (func () bool {
@@ -263,8 +291,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
263
291
}).Should (BeTrue ())
264
292
265
293
// delete ownerB in the foreground (to ensure any "blocking" dependents are deleted before ownerB)
266
- err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedB .GetName (), options )
267
- Expect (err ).NotTo (HaveOccurred ())
294
+ Eventually (func () bool {
295
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedB .GetName (), options )
296
+ return k8serrors .IsNotFound (err )
297
+ }).Should (BeTrue ())
268
298
269
299
// wait for deletion of ownerB
270
300
Eventually (func () bool {
@@ -274,9 +304,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
274
304
})
275
305
276
306
It ("should have deleted the dependent since both the owners were deleted" , func () {
277
- _ , err := kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Get (context .TODO (), dependent .GetName (), metav1.GetOptions {})
278
- Expect (err ).To (HaveOccurred ())
279
- Expect (k8serrors .IsNotFound (err )).To (BeTrue ())
307
+ Eventually (func () bool {
308
+ _ , err := kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Get (context .TODO (), dependent .GetName (), metav1.GetOptions {})
309
+ return k8serrors .IsNotFound (err )
310
+ }).Should (BeTrue (), "expected dependency configmap would be properly garabage collected" )
280
311
ctx .Ctx ().Logf ("dependent successfully garbage collected after both owners were deleted" )
281
312
})
282
313
@@ -359,8 +390,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
359
390
360
391
BeforeEach (func () {
361
392
// Delete subscription first
362
- err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Delete (context .TODO (), subName , metav1.DeleteOptions {})
363
- Expect (err ).To (BeNil ())
393
+ Eventually (func () bool {
394
+ err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Delete (context .TODO (), subName , metav1.DeleteOptions {})
395
+ return k8serrors .IsNotFound (err )
396
+ }).Should (BeTrue ())
364
397
365
398
// wait for deletion
366
399
Eventually (func () bool {
@@ -369,8 +402,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
369
402
}).Should (BeTrue ())
370
403
371
404
// Delete CSV
372
- err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), csvName , metav1.DeleteOptions {})
373
- Expect (err ).To (BeNil ())
405
+ Eventually (func () bool {
406
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), csvName , metav1.DeleteOptions {})
407
+ return k8serrors .IsNotFound (err )
408
+ }).Should (BeTrue ())
374
409
375
410
// wait for deletion
376
411
Eventually (func () bool {
@@ -427,8 +462,11 @@ var _ = Describe("Garbage collection for dependent resources", func() {
427
462
},
428
463
}
429
464
430
- source , err := operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
431
- Expect (err ).ToNot (HaveOccurred (), "could not create catalog source" )
465
+ var err error
466
+ Eventually (func () error {
467
+ source , err = operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
468
+ return err
469
+ }).Should (Succeed (), "could not create catalog source" )
432
470
433
471
// Create a Subscription for package
434
472
_ = createSubscriptionForCatalog (operatorClient , source .GetNamespace (), subName , source .GetName (), packageName , channelName , "" , v1alpha1 .ApprovalAutomatic )
@@ -457,17 +495,20 @@ var _ = Describe("Garbage collection for dependent resources", func() {
457
495
var installPlanRef string
458
496
459
497
BeforeEach (func () {
460
- // update subscription first
461
- sub , err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Get (context .TODO (), subName , metav1.GetOptions {})
462
- Expect (err ).ToNot (HaveOccurred (), "could not get subscription" )
463
-
464
- // update channel on sub
465
- sub .Spec .Channel = upgradeChannelName
466
- _ , err = operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Update (context .TODO (), sub , metav1.UpdateOptions {})
467
- Expect (err ).ToNot (HaveOccurred (), "could not update subscription" )
498
+ Eventually (func () error {
499
+ // update subscription first
500
+ sub , err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Get (context .TODO (), subName , metav1.GetOptions {})
501
+ if err != nil {
502
+ return fmt .Errorf ("could not get subscription" )
503
+ }
504
+ // update channel on sub
505
+ sub .Spec .Channel = upgradeChannelName
506
+ _ , err = operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Update (context .TODO (), sub , metav1.UpdateOptions {})
507
+ return err
508
+ }).Should (Succeed (), "could not update subscription" )
468
509
469
510
// Wait for the Subscription to succeed
470
- sub , err = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
511
+ sub , err : = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
471
512
Expect (err ).ToNot (HaveOccurred (), "could not get subscription at latest status" )
472
513
473
514
installPlanRef = sub .Status .InstallPlanRef .Name
@@ -530,8 +571,11 @@ var _ = Describe("Garbage collection for dependent resources", func() {
530
571
},
531
572
}
532
573
533
- source , err := operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
534
- Expect (err ).ToNot (HaveOccurred (), "could not create catalog source" )
574
+ var err error
575
+ Eventually (func () error {
576
+ source , err = operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
577
+ return err
578
+ }).Should (Succeed ())
535
579
536
580
// Create a Subscription for package
537
581
_ = createSubscriptionForCatalog (operatorClient , source .GetNamespace (), subName , source .GetName (), packageName , channelName , "" , v1alpha1 .ApprovalAutomatic )
@@ -561,17 +605,20 @@ var _ = Describe("Garbage collection for dependent resources", func() {
561
605
var installPlanRef string
562
606
563
607
BeforeEach (func () {
564
- // update subscription first
565
- sub , err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Get (context .TODO (), subName , metav1.GetOptions {})
566
- Expect (err ).ToNot (HaveOccurred (), "could not get subscription" )
567
-
568
- // update channel on sub
569
- sub .Spec .Channel = upgradeChannelName
570
- _ , err = operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Update (context .TODO (), sub , metav1.UpdateOptions {})
571
- Expect (err ).ToNot (HaveOccurred (), "could not update subscription" )
608
+ Eventually (func () error {
609
+ // update subscription first
610
+ sub , err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Get (context .TODO (), subName , metav1.GetOptions {})
611
+ if err != nil {
612
+ return fmt .Errorf ("could not get subscription" )
613
+ }
614
+ // update channel on sub
615
+ sub .Spec .Channel = upgradeChannelName
616
+ _ , err = operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Update (context .TODO (), sub , metav1.UpdateOptions {})
617
+ return err
618
+ }).Should (Succeed (), "could not update subscription" )
572
619
573
620
// Wait for the Subscription to succeed
574
- sub , err = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
621
+ sub , err : = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
575
622
Expect (err ).ToNot (HaveOccurred (), "could not get subscription at latest status" )
576
623
577
624
installPlanRef = sub .Status .InstallPlanRef .Name
0 commit comments