@@ -43,7 +43,7 @@ func TestClusterRestoreControllerOwnsOnlyClusterFinalizer(t *testing.T) {
4343 scheme := clusterRestoreTestScheme (t )
4444 cluster := activeRestoreCluster ()
4545 cli := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster ).Build ()
46- reconciler := & ClusterRestoreReconciler {Client : cli , APIReader : cli }
46+ reconciler := & ClusterRestoreReconciler {Client : cli }
4747
4848 _ , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
4949 require .NoError (t , err )
@@ -64,7 +64,7 @@ func TestClusterRestoreControllerWaitsWithoutMutatingOwnerResources(t *testing.T
6464 restore := clusterExecutionRestore (cluster , target )
6565 restore .Finalizers = []string {"dataprotection.kubeblocks.io/restore-finalizer" }
6666 cli := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster , target , helper , restore ).Build ()
67- reconciler := & ClusterRestoreReconciler {Client : cli , APIReader : cli }
67+ reconciler := & ClusterRestoreReconciler {Client : cli }
6868
6969 result , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
7070 require .NoError (t , err )
@@ -76,34 +76,14 @@ func TestClusterRestoreControllerWaitsWithoutMutatingOwnerResources(t *testing.T
7676 require .Contains (t , currentTarget .Finalizers , dptypes .DataProtectionFinalizerName )
7777}
7878
79- func TestClusterRestoreControllerUsesUncachedFinalCheck (t * testing.T ) {
80- scheme := clusterRestoreTestScheme (t )
81- cluster := activeRestoreCluster ()
82- now := metav1 .Now ()
83- cluster .DeletionTimestamp = & now
84- cluster .Finalizers = []string {dptypes .RestoreProtectionFinalizerName }
85- target := clusterRestoreTarget (cluster , "target-uid" )
86- target .Finalizers = []string {dptypes .DataProtectionFinalizerName }
87- cached := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster ).Build ()
88- direct := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster , target ).Build ()
89- reconciler := & ClusterRestoreReconciler {Client : cached , APIReader : direct }
90-
91- result , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
92- require .NoError (t , err )
93- require .NotZero (t , result .RequeueAfter )
94- current := & appsv1.Cluster {}
95- require .NoError (t , cached .Get (context .Background (), client .ObjectKeyFromObject (cluster ), current ))
96- require .Contains (t , current .Finalizers , dptypes .RestoreProtectionFinalizerName )
97- }
98-
9979func TestClusterRestoreControllerReleasesFinalizerAfterOwnersFinish (t * testing.T ) {
10080 scheme := clusterRestoreTestScheme (t )
10181 cluster := activeRestoreCluster ()
10282 now := metav1 .Now ()
10383 cluster .DeletionTimestamp = & now
10484 cluster .Finalizers = []string {dptypes .RestoreProtectionFinalizerName , "example.io/keep" }
10585 cli := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster ).Build ()
106- reconciler := & ClusterRestoreReconciler {Client : cli , APIReader : cli }
86+ reconciler := & ClusterRestoreReconciler {Client : cli }
10787
10888 _ , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
10989 require .NoError (t , err )
@@ -124,7 +104,7 @@ func TestClusterRestoreControllerTreatsCompletedRestoreAsInactive(t *testing.T)
124104 restore := clusterExecutionRestore (cluster , target )
125105 restore .Status .Phase = dpv1alpha1 .RestorePhaseCompleted
126106 cli := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster , target , restore ).Build ()
127- reconciler := & ClusterRestoreReconciler {Client : cli , APIReader : cli }
107+ reconciler := & ClusterRestoreReconciler {Client : cli }
128108
129109 _ , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
130110 require .NoError (t , err )
@@ -143,7 +123,7 @@ func TestClusterRestoreControllerKeepsProtectionAfterRestoreFailure(t *testing.T
143123 Type : appsv1 .ConditionTypeRestore , Status : metav1 .ConditionFalse ,
144124 }}
145125 cli := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster ).Build ()
146- reconciler := & ClusterRestoreReconciler {Client : cli , APIReader : cli }
126+ reconciler := & ClusterRestoreReconciler {Client : cli }
147127
148128 _ , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
149129 require .NoError (t , err )
@@ -153,6 +133,26 @@ func TestClusterRestoreControllerKeepsProtectionAfterRestoreFailure(t *testing.T
153133 "failed restore intent must remain protected until Cluster deletion" )
154134}
155135
136+ func TestClusterRestoreControllerWaitsForTerminalRestoreDuringDeletion (t * testing.T ) {
137+ scheme := clusterRestoreTestScheme (t )
138+ cluster := activeRestoreCluster ()
139+ now := metav1 .Now ()
140+ cluster .DeletionTimestamp = & now
141+ cluster .Finalizers = []string {dptypes .RestoreProtectionFinalizerName }
142+ target := clusterRestoreTarget (cluster , "target-uid" )
143+ restore := clusterExecutionRestore (cluster , target )
144+ restore .Status .Phase = dpv1alpha1 .RestorePhaseFailed
145+ cli := fake .NewClientBuilder ().WithScheme (scheme ).WithObjects (cluster , target , restore ).Build ()
146+ reconciler := & ClusterRestoreReconciler {Client : cli }
147+
148+ result , err := reconciler .Reconcile (context .Background (), ctrl.Request {NamespacedName : client .ObjectKeyFromObject (cluster )})
149+ require .NoError (t , err )
150+ require .NotZero (t , result .RequeueAfter )
151+ current := & appsv1.Cluster {}
152+ require .NoError (t , cli .Get (context .Background (), client .ObjectKeyFromObject (cluster ), current ))
153+ require .Contains (t , current .Finalizers , dptypes .RestoreProtectionFinalizerName )
154+ }
155+
156156func clusterRestoreTestScheme (t * testing.T ) * runtime.Scheme {
157157 t .Helper ()
158158 scheme := runtime .NewScheme ()
0 commit comments