diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java index 8e42430260..16d87e95a8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java @@ -70,7 +70,7 @@ void multiOwnerTriggeringAndManagement() { }); res1.getSpec().setValue(NEW_VALUE_1); - extension.replace(res1); + res1 = extension.replace(res1); await() .untilAsserted( @@ -85,7 +85,7 @@ void multiOwnerTriggeringAndManagement() { }); res2.getSpec().setValue(NEW_VALUE_2); - extension.replace(res2); + res2 = extension.replace(res2); await() .untilAsserted( @@ -95,6 +95,26 @@ void multiOwnerTriggeringAndManagement() { assertThat(cm.getData()).containsEntry(NEW_VALUE_2, NEW_VALUE_2); assertThat(cm.getMetadata().getOwnerReferences()).hasSize(2); }); + + res1.getMetadata().setResourceVersion(null); // delete without optimistic locking + extension.delete(res1); + await() + .untilAsserted( + () -> { + var cm = + extension.get(ConfigMap.class, MultipleOwnerDependentConfigMap.RESOURCE_NAME); + assertThat(cm.getMetadata().getOwnerReferences()).hasSize(1); + }); + + extension.delete(res2); + res2.getMetadata().setResourceVersion(null); // delete without optimistic locking + await() + .untilAsserted( + () -> { + var cm = + extension.get(ConfigMap.class, MultipleOwnerDependentConfigMap.RESOURCE_NAME); + assertThat(cm).isNull(); + }); } MultipleOwnerDependentCustomResource testResource(String name, String value) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java index 42314bf921..2e7c3029d3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java @@ -23,14 +23,14 @@ import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.BooleanWithUndefined; -import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; import io.javaoperatorsdk.operator.processing.event.ResourceID; import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; @KubernetesDependent(useSSA = BooleanWithUndefined.TRUE) public class MultipleOwnerDependentConfigMap - extends CRUDKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource { public static final String RESOURCE_NAME = "test1"; @@ -64,4 +64,19 @@ public Optional getSecondaryResource( context.eventSourceRetriever().getEventSourceFor(ConfigMap.class); return ies.get(new ResourceID(RESOURCE_NAME, primary.getMetadata().getNamespace())); } + + // todo custom owner labels + + @Override + protected void handleDelete( + MultipleOwnerDependentCustomResource primary, + ConfigMap secondary, + Context context) { + if (primary.getMetadata().getOwnerReferences().size() > 1) { + secondary.getData().remove(primary.getSpec().getValue()); + context.getClient().resource(secondary).serverSideApply(); + } else { + super.handleDelete(primary, secondary, context); + } + } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java index edc3db9f22..f4dc2f91c4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java @@ -22,7 +22,7 @@ import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; @Workflow(dependents = {@Dependent(type = MultipleOwnerDependentConfigMap.class)}) -@ControllerConfiguration() +@ControllerConfiguration public class MultipleOwnerDependentReconciler implements Reconciler, TestExecutionInfoProvider {