diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/CleanerForReconcilerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/CleanerForReconcilerIT.java index a3cfde8207..bf5fa243cf 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/CleanerForReconcilerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/CleanerForReconcilerIT.java @@ -23,6 +23,10 @@ class CleanerForReconcilerIT { @Test void addsFinalizerAndCallsCleanupIfCleanerImplemented() { + CleanerForReconcilerTestReconciler reconciler = + operator.getReconcilerOfType(CleanerForReconcilerTestReconciler.class); + reconciler.setReScheduleCleanup(false); + var testResource = createTestResource(); operator.create(testResource); @@ -34,12 +38,32 @@ void addsFinalizerAndCallsCleanupIfCleanerImplemented() { await().until( () -> operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) == null); - CleanerForReconcilerTestReconciler reconciler = - (CleanerForReconcilerTestReconciler) operator.getFirstReconciler(); assertThat(reconciler.getNumberOfExecutions()).isEqualTo(1); assertThat(reconciler.getNumberOfCleanupExecutions()).isEqualTo(1); } + @Test + void reSchedulesCleanupIfInstructed() { + CleanerForReconcilerTestReconciler reconciler = + operator.getReconcilerOfType(CleanerForReconcilerTestReconciler.class); + reconciler.setReScheduleCleanup(true); + + var testResource = createTestResource(); + operator.create(testResource); + + await().until(() -> !operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) + .getMetadata().getFinalizers().isEmpty()); + + operator.delete(testResource); + + await().untilAsserted( + () -> assertThat(reconciler.getNumberOfCleanupExecutions()).isGreaterThan(5)); + + reconciler.setReScheduleCleanup(false); + await().until( + () -> operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) == null); + } + private CleanerForReconcilerCustomResource createTestResource() { CleanerForReconcilerCustomResource cr = new CleanerForReconcilerCustomResource(); cr.setMetadata(new ObjectMeta()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/cleanerforreconciler/CleanerForReconcilerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/cleanerforreconciler/CleanerForReconcilerTestReconciler.java index fad1bb7798..a6f404e7f6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/cleanerforreconciler/CleanerForReconcilerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/cleanerforreconciler/CleanerForReconcilerTestReconciler.java @@ -11,9 +11,12 @@ public class CleanerForReconcilerTestReconciler Cleaner, TestExecutionInfoProvider { + public static final int RESCHEDULE_DELAY = 150; private final AtomicInteger numberOfExecutions = new AtomicInteger(0); private final AtomicInteger numberOfCleanupExecutions = new AtomicInteger(0); + private volatile boolean reScheduleCleanup = false; + @Override public UpdateControl reconcile( CleanerForReconcilerCustomResource resource, @@ -33,7 +36,17 @@ public int getNumberOfCleanupExecutions() { @Override public DeleteControl cleanup(CleanerForReconcilerCustomResource resource, Context context) { - numberOfCleanupExecutions.addAndGet(1); - return DeleteControl.defaultDelete(); + if (reScheduleCleanup) { + numberOfCleanupExecutions.addAndGet(1); + return DeleteControl.noFinalizerRemoval().rescheduleAfter(RESCHEDULE_DELAY); + } else { + numberOfCleanupExecutions.addAndGet(1); + return DeleteControl.defaultDelete(); + } + } + + public CleanerForReconcilerTestReconciler setReScheduleCleanup(boolean reScheduleCleanup) { + this.reScheduleCleanup = reScheduleCleanup; + return this; } }