@@ -644,6 +644,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_Deletion(t *testing.T) {
644644 validate func (* testing.T , client.Client )
645645 trackingCacheFreeFn func (context.Context , client.Object ) error
646646 expectedErr string
647+ expectedResult ctrl.Result
647648 }{
648649 {
649650 name : "teardown finalizer is removed" ,
@@ -775,6 +776,76 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_Deletion(t *testing.T) {
775776 require .Equal (t , int64 (1 ), cond .ObservedGeneration )
776777 },
777778 },
779+ {
780+ name : "set Progressing:True:Retrying and requeue when archived revision teardown is incomplete" ,
781+ revisionResult : mockRevisionResult {},
782+ existingObjs : func () []client.Object {
783+ ext := newTestClusterExtension ()
784+ rev1 := newTestClusterExtensionRevision (t , clusterExtensionRevisionName , ext , testScheme )
785+ rev1 .Finalizers = []string {
786+ "olm.operatorframework.io/teardown" ,
787+ }
788+ rev1 .Spec .LifecycleState = ocv1 .ClusterExtensionRevisionLifecycleStateArchived
789+ return []client.Object {rev1 , ext }
790+ },
791+ revisionEngineTeardownFn : func (t * testing.T ) func (ctx context.Context , rev machinerytypes.Revision , opts ... machinerytypes.RevisionTeardownOption ) (machinery.RevisionTeardownResult , error ) {
792+ return func (ctx context.Context , rev machinerytypes.Revision , opts ... machinerytypes.RevisionTeardownOption ) (machinery.RevisionTeardownResult , error ) {
793+ return & mockRevisionTeardownResult {
794+ isComplete : false ,
795+ }, nil
796+ }
797+ },
798+ expectedResult : ctrl.Result {RequeueAfter : 5 * time .Second },
799+ validate : func (t * testing.T , c client.Client ) {
800+ rev := & ocv1.ClusterExtensionRevision {}
801+ err := c .Get (t .Context (), client.ObjectKey {
802+ Name : clusterExtensionRevisionName ,
803+ }, rev )
804+ require .NoError (t , err )
805+ cond := meta .FindStatusCondition (rev .Status .Conditions , ocv1 .ClusterExtensionRevisionTypeProgressing )
806+ require .NotNil (t , cond )
807+ require .Equal (t , metav1 .ConditionTrue , cond .Status )
808+ require .Equal (t , ocv1 .ClusterExtensionRevisionReasonRetrying , cond .Reason )
809+ require .Equal (t , "tearing down revision" , cond .Message )
810+
811+ // Finalizer should still be present
812+ require .Contains (t , rev .Finalizers , "olm.operatorframework.io/teardown" )
813+ },
814+ },
815+ {
816+ name : "return error and set retrying conditions when archived revision teardown fails" ,
817+ revisionResult : mockRevisionResult {},
818+ existingObjs : func () []client.Object {
819+ ext := newTestClusterExtension ()
820+ rev1 := newTestClusterExtensionRevision (t , clusterExtensionRevisionName , ext , testScheme )
821+ rev1 .Finalizers = []string {
822+ "olm.operatorframework.io/teardown" ,
823+ }
824+ rev1 .Spec .LifecycleState = ocv1 .ClusterExtensionRevisionLifecycleStateArchived
825+ return []client.Object {rev1 , ext }
826+ },
827+ revisionEngineTeardownFn : func (t * testing.T ) func (ctx context.Context , rev machinerytypes.Revision , opts ... machinerytypes.RevisionTeardownOption ) (machinery.RevisionTeardownResult , error ) {
828+ return func (ctx context.Context , rev machinerytypes.Revision , opts ... machinerytypes.RevisionTeardownOption ) (machinery.RevisionTeardownResult , error ) {
829+ return nil , fmt .Errorf ("teardown failed: connection refused" )
830+ }
831+ },
832+ expectedErr : "error tearing down revision" ,
833+ validate : func (t * testing.T , c client.Client ) {
834+ rev := & ocv1.ClusterExtensionRevision {}
835+ err := c .Get (t .Context (), client.ObjectKey {
836+ Name : clusterExtensionRevisionName ,
837+ }, rev )
838+ require .NoError (t , err )
839+ cond := meta .FindStatusCondition (rev .Status .Conditions , ocv1 .ClusterExtensionRevisionTypeProgressing )
840+ require .NotNil (t , cond )
841+ require .Equal (t , metav1 .ConditionTrue , cond .Status )
842+ require .Equal (t , ocv1 .ClusterExtensionRevisionReasonRetrying , cond .Reason )
843+ require .Contains (t , cond .Message , "teardown failed: connection refused" )
844+
845+ // Finalizer should still be present
846+ require .Contains (t , rev .Finalizers , "olm.operatorframework.io/teardown" )
847+ },
848+ },
778849 {
779850 name : "revision is torn down when in archived state and finalizer is removed" ,
780851 revisionResult : mockRevisionResult {},
@@ -847,7 +918,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_Deletion(t *testing.T) {
847918 })
848919
849920 // reconcile cluster extension revision
850- require .Equal (t , ctrl. Result {} , result )
921+ require .Equal (t , tc . expectedResult , result )
851922 if tc .expectedErr != "" {
852923 require .Contains (t , err .Error (), tc .expectedErr )
853924 } else {
0 commit comments