@@ -10,6 +10,7 @@ import (
1010 . "github.com/onsi/gomega"
1111 corev1 "k8s.io/api/core/v1"
1212 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+ "sigs.k8s.io/controller-runtime/pkg/client"
1314 . "sigs.k8s.io/controller-runtime/pkg/envtest/komega"
1415)
1516
@@ -57,7 +58,7 @@ var _ = Describe("ServerMaintenance Controller", func() {
5758 })
5859
5960 AfterEach (func (ctx SpecContext ) {
60- Expect (k8sClient .Delete (ctx , server )).To (Succeed ())
61+ Expect (client . IgnoreNotFound ( k8sClient .Delete (ctx , server ) )).To (Succeed ())
6162 Expect (k8sClient .Delete (ctx , bmcSecret )).To (Succeed ())
6263 EnsureCleanState ()
6364 })
@@ -554,4 +555,59 @@ var _ = Describe("ServerMaintenance Controller", func() {
554555 Expect (k8sClient .Delete (ctx , unsetPriorityMaintenance )).To (Succeed ())
555556 Expect (k8sClient .Delete (ctx , serverClaim )).To (Succeed ())
556557 })
558+
559+ It ("should delete ServerMaintenance when its referenced Server no longer exists" , func (ctx SpecContext ) {
560+ By ("Creating a ServerMaintenance object" )
561+ serverMaintenance := & metalv1alpha1.ServerMaintenance {
562+ ObjectMeta : metav1.ObjectMeta {
563+ Name : "test-server-maintenance-orphan" ,
564+ Namespace : ns .Name ,
565+ },
566+ Spec : metalv1alpha1.ServerMaintenanceSpec {
567+ ServerRef : & corev1.LocalObjectReference {Name : server .Name },
568+ Policy : metalv1alpha1 .ServerMaintenancePolicyEnforced ,
569+ },
570+ }
571+ Expect (k8sClient .Create (ctx , serverMaintenance )).To (Succeed ())
572+
573+ By ("Deleting the Server" )
574+ Expect (k8sClient .Delete (ctx , server )).To (Succeed ())
575+ Eventually (Get (server )).ShouldNot (Succeed ())
576+
577+ By ("Expecting the ServerMaintenance to be deleted automatically" )
578+ Eventually (Get (serverMaintenance )).ShouldNot (Succeed ())
579+ })
580+
581+ It ("should complete deletion of ServerMaintenance with finalizer when referenced Server is gone" , func (ctx SpecContext ) {
582+ By ("Patching server to Initial State so ServerMaintenance can add its finalizer" )
583+ Eventually (UpdateStatus (server , func () {
584+ server .Status .State = metalv1alpha1 .ServerStateInitial
585+ })).Should (Succeed ())
586+
587+ By ("Creating a ServerMaintenance object" )
588+ serverMaintenance := & metalv1alpha1.ServerMaintenance {
589+ ObjectMeta : metav1.ObjectMeta {
590+ Name : "test-server-maintenance-finalizer" ,
591+ Namespace : ns .Name ,
592+ },
593+ Spec : metalv1alpha1.ServerMaintenanceSpec {
594+ ServerRef : & corev1.LocalObjectReference {Name : server .Name },
595+ Policy : metalv1alpha1 .ServerMaintenancePolicyEnforced ,
596+ },
597+ }
598+ Expect (k8sClient .Create (ctx , serverMaintenance )).To (Succeed ())
599+
600+ By ("Waiting for the finalizer to be added" )
601+ Eventually (Object (serverMaintenance )).Should (HaveField ("Finalizers" , ContainElement (serverMaintenanceFinalizer )))
602+
603+ By ("Deleting the Server first" )
604+ Expect (k8sClient .Delete (ctx , server )).To (Succeed ())
605+ Eventually (Get (server )).ShouldNot (Succeed ())
606+
607+ By ("Deleting the ServerMaintenance" )
608+ Expect (k8sClient .Delete (ctx , serverMaintenance )).To (Succeed ())
609+
610+ By ("Expecting the ServerMaintenance finalizer to be removed and resource to be deleted" )
611+ Eventually (Get (serverMaintenance )).ShouldNot (Succeed ())
612+ })
557613})
0 commit comments