@@ -23,11 +23,14 @@ import (
23
23
24
24
corev1 "k8s.io/api/core/v1"
25
25
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26
+ "k8s.io/client-go/kubernetes/scheme"
26
27
"k8s.io/klog/v2/klogr"
28
+ "k8s.io/utils/pointer"
27
29
capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
28
30
"sigs.k8s.io/cluster-api/util"
29
31
ctrl "sigs.k8s.io/controller-runtime"
30
32
"sigs.k8s.io/controller-runtime/pkg/client"
33
+ "sigs.k8s.io/controller-runtime/pkg/client/fake"
31
34
32
35
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
33
36
"sigs.k8s.io/cluster-api-provider-ibmcloud/cloud/scope"
@@ -165,6 +168,111 @@ func TestIBMPowerVSClusterReconciler_reconcile(t *testing.T) {
165
168
}
166
169
}
167
170
171
+ func TestIBMPowerVSClusterReconciler_delete (t * testing.T ) {
172
+ var (
173
+ reconciler IBMPowerVSClusterReconciler
174
+ clusterScope * scope.PowerVSClusterScope
175
+ )
176
+ reconciler = IBMPowerVSClusterReconciler {
177
+ Client : testEnv .Client ,
178
+ Log : klogr .New (),
179
+ }
180
+ t .Run ("Reconciling delete IBMPowerVSCluster" , func (t * testing.T ) {
181
+ t .Run ("Should reconcile successfully if no descendants are found" , func (t * testing.T ) {
182
+ g := NewWithT (t )
183
+ clusterScope = & scope.PowerVSClusterScope {
184
+ Logger : klogr .New (),
185
+ IBMPowerVSCluster : & infrav1beta1.IBMPowerVSCluster {
186
+ TypeMeta : metav1.TypeMeta {
187
+ Kind : "IBMPowerVSCluster" ,
188
+ APIVersion : "infrastructure.cluster.x-k8s.io/v1beta1" ,
189
+ },
190
+ ObjectMeta : metav1.ObjectMeta {
191
+ Name : "capi-powervs-cluster" ,
192
+ },
193
+ Spec : infrav1beta1.IBMPowerVSClusterSpec {
194
+ ServiceInstanceID : "service-instance-1" ,
195
+ },
196
+ },
197
+ Client : fake .NewClientBuilder ().WithScheme (scheme .Scheme ).WithObjects ().Build (),
198
+ }
199
+ result , err := reconciler .reconcileDelete (ctx , clusterScope )
200
+ g .Expect (err ).To (BeNil ())
201
+ g .Expect (result .RequeueAfter ).To (BeZero ())
202
+ })
203
+ t .Run ("Should reconcile with requeue by deleting the cluster descendants" , func (t * testing.T ) {
204
+ g := NewWithT (t )
205
+ clusterScope = & scope.PowerVSClusterScope {
206
+ Logger : klogr .New (),
207
+ IBMPowerVSCluster : & infrav1beta1.IBMPowerVSCluster {
208
+ TypeMeta : metav1.TypeMeta {
209
+ Kind : "IBMPowerVSCluster" ,
210
+ APIVersion : "infrastructure.cluster.x-k8s.io/v1beta1" ,
211
+ },
212
+ ObjectMeta : metav1.ObjectMeta {
213
+ Name : "capi-powervs-cluster" ,
214
+ },
215
+ Spec : infrav1beta1.IBMPowerVSClusterSpec {
216
+ ServiceInstanceID : "service-instance-1" ,
217
+ },
218
+ },
219
+ Client : fake .NewClientBuilder ().WithScheme (scheme .Scheme ).WithObjects ().Build (),
220
+ }
221
+ powervsImage1 := & infrav1beta1.IBMPowerVSImage {
222
+ ObjectMeta : metav1.ObjectMeta {
223
+ Name : "capi-image" ,
224
+ OwnerReferences : []metav1.OwnerReference {
225
+ {
226
+ APIVersion : infrav1beta1 .GroupVersion .String (),
227
+ Kind : "IBMPowerVSCluster" ,
228
+ Name : "capi-powervs-cluster" ,
229
+ UID : "1" ,
230
+ },
231
+ },
232
+ Labels : map [string ]string {capiv1beta1 .ClusterLabelName : "capi-powervs-cluster" },
233
+ },
234
+ Spec : infrav1beta1.IBMPowerVSImageSpec {
235
+ ClusterName : "capi-powervs-cluster" ,
236
+ Object : pointer .String ("capi-image.ova.gz" ),
237
+ Region : pointer .String ("us-south" ),
238
+ Bucket : pointer .String ("capi-bucket" ),
239
+ },
240
+ }
241
+ powervsImage2 := & infrav1beta1.IBMPowerVSImage {
242
+ ObjectMeta : metav1.ObjectMeta {
243
+ Name : "capi-image2" ,
244
+ OwnerReferences : []metav1.OwnerReference {
245
+ {
246
+ APIVersion : infrav1beta1 .GroupVersion .String (),
247
+ Kind : "IBMPowerVSCluster" ,
248
+ Name : "capi-powervs-cluster" ,
249
+ UID : "1" ,
250
+ },
251
+ },
252
+ Labels : map [string ]string {capiv1beta1 .ClusterLabelName : "capi-powervs-cluster" },
253
+ },
254
+ Spec : infrav1beta1.IBMPowerVSImageSpec {
255
+ ClusterName : "capi-powervs-cluster" ,
256
+ Object : pointer .String ("capi-image2.ova.gz" ),
257
+ Region : pointer .String ("us-south" ),
258
+ Bucket : pointer .String ("capi-bucket" ),
259
+ },
260
+ }
261
+ createObject (g , powervsImage1 , "default" )
262
+ defer cleanupObject (g , powervsImage1 )
263
+ createObject (g , powervsImage2 , "default" )
264
+ defer cleanupObject (g , powervsImage2 )
265
+
266
+ result , err := reconciler .reconcileDelete (ctx , clusterScope )
267
+ g .Expect (err ).To (BeNil ())
268
+ g .Expect (result .RequeueAfter ).To (Not (BeZero ()))
269
+ // Updating the object should fail as it doesn't exist
270
+ g .Expect (clusterScope .Client .Update (ctx , powervsImage1 )).To (Not (Succeed ()))
271
+ g .Expect (clusterScope .Client .Update (ctx , powervsImage2 )).To (Not (Succeed ()))
272
+ })
273
+ })
274
+ }
275
+
168
276
func createCluster (g * WithT , powervsCluster * infrav1beta1.IBMPowerVSCluster , namespace string ) {
169
277
if powervsCluster != nil {
170
278
powervsCluster .Namespace = namespace
0 commit comments