Skip to content

Commit adfe632

Browse files
authored
Improve UT coverage for IBMPowerVSCluster controller (#776)
1 parent 5b4f1fe commit adfe632

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

controllers/ibmpowervscluster_controller_test.go

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ import (
2323

2424
corev1 "k8s.io/api/core/v1"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+
"k8s.io/client-go/kubernetes/scheme"
2627
"k8s.io/klog/v2/klogr"
28+
"k8s.io/utils/pointer"
2729
capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
2830
"sigs.k8s.io/cluster-api/util"
2931
ctrl "sigs.k8s.io/controller-runtime"
3032
"sigs.k8s.io/controller-runtime/pkg/client"
33+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3134

3235
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
3336
"sigs.k8s.io/cluster-api-provider-ibmcloud/cloud/scope"
@@ -165,6 +168,111 @@ func TestIBMPowerVSClusterReconciler_reconcile(t *testing.T) {
165168
}
166169
}
167170

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+
168276
func createCluster(g *WithT, powervsCluster *infrav1beta1.IBMPowerVSCluster, namespace string) {
169277
if powervsCluster != nil {
170278
powervsCluster.Namespace = namespace

0 commit comments

Comments
 (0)