@@ -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,22 +71,32 @@ 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 () {
91
98
99
+ // TODO(tflannag): Hmmm....
92
100
// Clean up cluster role
93
101
IgnoreError (kubeClient .DeleteClusterRole (cr .GetName (), & metav1.DeleteOptions {}))
94
102
@@ -100,11 +108,13 @@ var _ = Describe("Garbage collection for dependent resources", func() {
100
108
101
109
BeforeEach (func () {
102
110
// Delete CRD
103
- Expect (kubeClient .ApiextensionsInterface ().ApiextensionsV1 ().CustomResourceDefinitions ().Delete (context .TODO (), crd .GetName (), metav1.DeleteOptions {})).To (Succeed ())
111
+ Eventually (func () bool {
112
+ err := kubeClient .ApiextensionsInterface ().ApiextensionsV1 ().CustomResourceDefinitions ().Delete (context .TODO (), crd .GetName (), metav1.DeleteOptions {})
113
+ return k8serrors .IsNotFound (err )
114
+ }).Should (BeTrue ())
104
115
})
105
116
106
117
It ("should delete the associated ClusterRole" , func () {
107
-
108
118
Eventually (func () bool {
109
119
_ , err := kubeClient .GetClusterRole (cr .GetName ())
110
120
return k8serrors .IsNotFound (err )
@@ -117,16 +127,14 @@ var _ = Describe("Garbage collection for dependent resources", func() {
117
127
Context ("Given a ClusterRole owned by a APIService" , func () {
118
128
119
129
var (
120
- as * apiregistrationv1.APIService
121
- cr * rbacv1.ClusterRole
130
+ apiService * apiregistrationv1.APIService
131
+ cr * rbacv1.ClusterRole
122
132
)
123
133
124
134
BeforeEach (func () {
125
135
group := rand .String (16 )
126
136
127
- // Create an API Service
128
- var err error
129
- as , err = kubeClient .CreateAPIService (& apiregistrationv1.APIService {
137
+ apiService = & apiregistrationv1.APIService {
130
138
ObjectMeta : metav1.ObjectMeta {
131
139
Name : fmt .Sprintf ("v1.%s" , group ),
132
140
},
@@ -136,32 +144,46 @@ var _ = Describe("Garbage collection for dependent resources", func() {
136
144
GroupPriorityMinimum : 1 ,
137
145
VersionPriority : 1 ,
138
146
},
139
- })
140
- Expect (err ).NotTo (HaveOccurred ())
147
+ }
148
+ // Create an API Service
149
+ var err error
150
+ Eventually (func () error {
151
+ // TODO(tflannag): Is comparing error to apierrors.IsAlreadyExists prone to masking
152
+ // incorrect testing assumptions?
153
+ apiService , err = kubeClient .CreateAPIService (apiService )
154
+ return err
155
+ }).Should (Succeed ())
141
156
142
- // Create a ClusterRole
143
- cr , err = kubeClient .CreateClusterRole (& rbacv1.ClusterRole {
157
+ cr = & rbacv1.ClusterRole {
144
158
ObjectMeta : metav1.ObjectMeta {
145
159
GenerateName : "clusterrole-" ,
146
- OwnerReferences : []metav1.OwnerReference {ownerutil .NonBlockingOwner (as )},
160
+ OwnerReferences : []metav1.OwnerReference {ownerutil .NonBlockingOwner (apiService )},
147
161
},
148
- })
149
- Expect (err ).NotTo (HaveOccurred ())
162
+ }
163
+
164
+ Eventually (func () error {
165
+ // Create a ClusterRole
166
+ cr , err = kubeClient .CreateClusterRole (cr )
167
+ return err
168
+ }).Should (Succeed ())
150
169
})
151
170
152
171
AfterEach (func () {
153
172
154
173
IgnoreError (kubeClient .DeleteClusterRole (cr .GetName (), & metav1.DeleteOptions {}))
155
174
156
- IgnoreError (kubeClient .DeleteAPIService (as .GetName (), & metav1.DeleteOptions {}))
175
+ IgnoreError (kubeClient .DeleteAPIService (apiService .GetName (), & metav1.DeleteOptions {}))
157
176
158
177
})
159
178
160
179
When ("APIService is deleted" , func () {
161
180
162
181
BeforeEach (func () {
163
182
// Delete API service
164
- Expect (kubeClient .DeleteAPIService (as .GetName (), & metav1.DeleteOptions {})).To (Succeed ())
183
+ Eventually (func () bool {
184
+ err := kubeClient .DeleteAPIService (apiService .GetName (), & metav1.DeleteOptions {})
185
+ return k8serrors .IsNotFound (err )
186
+ }).Should (BeTrue ())
165
187
})
166
188
167
189
It ("should delete the associated ClusterRole" , func () {
@@ -193,18 +215,22 @@ var _ = Describe("Garbage collection for dependent resources", func() {
193
215
propagation metav1.DeletionPropagation
194
216
options metav1.DeleteOptions
195
217
)
196
-
197
218
BeforeEach (func () {
198
219
199
220
ownerA = newCSV ("ownera" , testNamespace , "" , semver .MustParse ("0.0.0" ), nil , nil , nil )
200
221
ownerB = newCSV ("ownerb" , testNamespace , "" , semver .MustParse ("0.0.0" ), nil , nil , nil )
201
222
202
223
// create all owners
203
224
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 ())
225
+ Eventually (func () error {
226
+ fetchedA , err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Create (context .TODO (), & ownerA , metav1.CreateOptions {})
227
+ return err
228
+ }).Should (Succeed ())
229
+
230
+ Eventually (func () error {
231
+ fetchedB , err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Create (context .TODO (), & ownerB , metav1.CreateOptions {})
232
+ return err
233
+ }).Should (Succeed ())
208
234
209
235
dependent = & corev1.ConfigMap {
210
236
ObjectMeta : metav1.ObjectMeta {
@@ -218,8 +244,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
218
244
ownerutil .AddOwner (dependent , fetchedB , true , false )
219
245
220
246
// 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" )
247
+ Eventually (func () error {
248
+ _ , err = kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Create (context .TODO (), dependent , metav1.CreateOptions {})
249
+ return err
250
+ }).Should (Succeed (), "dependent could not be created" )
223
251
224
252
propagation = metav1 .DeletePropagationForeground
225
253
options = metav1.DeleteOptions {PropagationPolicy : & propagation }
@@ -229,32 +257,35 @@ var _ = Describe("Garbage collection for dependent resources", func() {
229
257
230
258
BeforeEach (func () {
231
259
// 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 ())
260
+ Eventually (func () bool {
261
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedA .GetName (), options )
262
+ return k8serrors .IsNotFound (err )
263
+ }).Should (BeTrue ())
234
264
235
265
// wait for deletion of ownerA
236
266
Eventually (func () bool {
237
267
_ , err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Get (context .TODO (), ownerA .GetName (), metav1.GetOptions {})
238
268
return k8serrors .IsNotFound (err )
239
269
}).Should (BeTrue ())
240
-
241
270
})
242
271
243
272
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" )
273
+ Eventually (func () error {
274
+ _ , err := kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Get (context .TODO (), dependent .GetName (), metav1.GetOptions {})
275
+ return err
276
+ }).Should (Succeed (), "dependent deleted after one of the owner was deleted" )
246
277
ctx .Ctx ().Logf ("dependent still exists after one owner was deleted" )
247
-
248
278
})
249
-
250
279
})
251
280
252
281
When ("removing both the owners using 'Foreground' deletion policy" , func () {
253
282
254
283
BeforeEach (func () {
255
284
// 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 ())
285
+ Eventually (func () bool {
286
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedA .GetName (), options )
287
+ return k8serrors .IsNotFound (err )
288
+ }).Should (BeTrue ())
258
289
259
290
// wait for deletion of ownerA
260
291
Eventually (func () bool {
@@ -263,8 +294,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
263
294
}).Should (BeTrue ())
264
295
265
296
// 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 ())
297
+ Eventually (func () bool {
298
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), fetchedB .GetName (), options )
299
+ return k8serrors .IsNotFound (err )
300
+ }).Should (BeTrue ())
268
301
269
302
// wait for deletion of ownerB
270
303
Eventually (func () bool {
@@ -274,9 +307,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
274
307
})
275
308
276
309
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 ())
310
+ Eventually (func () bool {
311
+ _ , err := kubeClient .KubernetesInterface ().CoreV1 ().ConfigMaps (testNamespace ).Get (context .TODO (), dependent .GetName (), metav1.GetOptions {})
312
+ return k8serrors .IsNotFound (err )
313
+ }).Should (BeTrue (), "expected dependency configmap would be properly garabage collected" )
280
314
ctx .Ctx ().Logf ("dependent successfully garbage collected after both owners were deleted" )
281
315
})
282
316
@@ -359,8 +393,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
359
393
360
394
BeforeEach (func () {
361
395
// Delete subscription first
362
- err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Delete (context .TODO (), subName , metav1.DeleteOptions {})
363
- Expect (err ).To (BeNil ())
396
+ Eventually (func () bool {
397
+ err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Delete (context .TODO (), subName , metav1.DeleteOptions {})
398
+ return k8serrors .IsNotFound (err )
399
+ }).Should (BeTrue ())
364
400
365
401
// wait for deletion
366
402
Eventually (func () bool {
@@ -369,8 +405,10 @@ var _ = Describe("Garbage collection for dependent resources", func() {
369
405
}).Should (BeTrue ())
370
406
371
407
// Delete CSV
372
- err = operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), csvName , metav1.DeleteOptions {})
373
- Expect (err ).To (BeNil ())
408
+ Eventually (func () bool {
409
+ err := operatorClient .OperatorsV1alpha1 ().ClusterServiceVersions (testNamespace ).Delete (context .TODO (), csvName , metav1.DeleteOptions {})
410
+ return k8serrors .IsNotFound (err )
411
+ }).Should (BeTrue ())
374
412
375
413
// wait for deletion
376
414
Eventually (func () bool {
@@ -427,8 +465,11 @@ var _ = Describe("Garbage collection for dependent resources", func() {
427
465
},
428
466
}
429
467
430
- source , err := operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
431
- Expect (err ).ToNot (HaveOccurred (), "could not create catalog source" )
468
+ var err error
469
+ Eventually (func () error {
470
+ source , err = operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
471
+ return err
472
+ }).Should (Succeed (), "could not create catalog source" )
432
473
433
474
// Create a Subscription for package
434
475
_ = createSubscriptionForCatalog (operatorClient , source .GetNamespace (), subName , source .GetName (), packageName , channelName , "" , v1alpha1 .ApprovalAutomatic )
@@ -457,17 +498,20 @@ var _ = Describe("Garbage collection for dependent resources", func() {
457
498
var installPlanRef string
458
499
459
500
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" )
501
+ Eventually (func () error {
502
+ // update subscription first
503
+ sub , err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Get (context .TODO (), subName , metav1.GetOptions {})
504
+ if err != nil {
505
+ return fmt .Errorf ("could not get subscription" )
506
+ }
507
+ // update channel on sub
508
+ sub .Spec .Channel = upgradeChannelName
509
+ _ , err = operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Update (context .TODO (), sub , metav1.UpdateOptions {})
510
+ return err
511
+ }).Should (Succeed (), "could not update subscription" )
468
512
469
513
// Wait for the Subscription to succeed
470
- sub , err = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
514
+ sub , err : = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
471
515
Expect (err ).ToNot (HaveOccurred (), "could not get subscription at latest status" )
472
516
473
517
installPlanRef = sub .Status .InstallPlanRef .Name
@@ -530,8 +574,11 @@ var _ = Describe("Garbage collection for dependent resources", func() {
530
574
},
531
575
}
532
576
533
- source , err := operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
534
- Expect (err ).ToNot (HaveOccurred (), "could not create catalog source" )
577
+ var err error
578
+ Eventually (func () error {
579
+ source , err = operatorClient .OperatorsV1alpha1 ().CatalogSources (source .GetNamespace ()).Create (context .TODO (), source , metav1.CreateOptions {})
580
+ return err
581
+ }).Should (Succeed ())
535
582
536
583
// Create a Subscription for package
537
584
_ = createSubscriptionForCatalog (operatorClient , source .GetNamespace (), subName , source .GetName (), packageName , channelName , "" , v1alpha1 .ApprovalAutomatic )
@@ -561,17 +608,20 @@ var _ = Describe("Garbage collection for dependent resources", func() {
561
608
var installPlanRef string
562
609
563
610
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" )
611
+ Eventually (func () error {
612
+ // update subscription first
613
+ sub , err := operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Get (context .TODO (), subName , metav1.GetOptions {})
614
+ if err != nil {
615
+ return fmt .Errorf ("could not get subscription" )
616
+ }
617
+ // update channel on sub
618
+ sub .Spec .Channel = upgradeChannelName
619
+ _ , err = operatorClient .OperatorsV1alpha1 ().Subscriptions (testNamespace ).Update (context .TODO (), sub , metav1.UpdateOptions {})
620
+ return err
621
+ }).Should (Succeed (), "could not update subscription" )
572
622
573
623
// Wait for the Subscription to succeed
574
- sub , err = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
624
+ sub , err : = fetchSubscription (operatorClient , testNamespace , subName , subscriptionStateAtLatestChecker )
575
625
Expect (err ).ToNot (HaveOccurred (), "could not get subscription at latest status" )
576
626
577
627
installPlanRef = sub .Status .InstallPlanRef .Name
0 commit comments