From 7fa7dbacd5e4887d97550835064b9e059b0977f9 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 6 Sep 2023 08:59:14 +0200 Subject: [PATCH] OZG-3961 consider keepAfterDelete on realm resource --- .../realm/KeycloakRealmReconciler.java | 15 +++++---- .../keycloak/realm/OzgKeycloakRealmSpec.java | 4 +++ .../realm/KeycloakRealmReconcilerTest.java | 32 +++++++++++++++++-- .../OzgKeycloakRealmSpecTestFactory.java | 2 ++ .../realm/OzgKeycloakRealmTestFactory.java | 10 +++++- 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java index eb935aa..4dc6903 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java @@ -70,16 +70,19 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl } @Override - public DeleteControl cleanup(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) { - - String realmName = resource.getMetadata().getNamespace(); + public DeleteControl cleanup(OzgKeycloakRealm realm, Context<OzgKeycloakRealm> context) { + log.info("Realm reconciler, keep after delete is set to: " + realm.getSpec().isKeepAfterDelete()); + if (realm.getSpec().isKeepAfterDelete()) { + return DeleteControl.defaultDelete(); + } + return cleanup(realm); + } + DeleteControl cleanup(OzgKeycloakRealm realm) { + var realmName = realm.getMetadata().getNamespace(); try { - log.info("Deleting KeycloakRealm " + realmName); - service.deleteRealm(realmName); - return DeleteControl.defaultDelete(); } catch (Exception e) { log.log(Level.SEVERE, "Could not delete KeycloakRealm " + realmName, e); diff --git a/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpec.java b/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpec.java index 6d5fdea..a3cd548 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpec.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpec.java @@ -24,6 +24,7 @@ package de.ozgcloud.operator.keycloak.realm; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -39,5 +40,8 @@ import lombok.Setter; @JsonIgnoreProperties(ignoreUnknown = true) class OzgKeycloakRealmSpec { + @JsonProperty("keep_after_delete") + private boolean keepAfterDelete; + private String displayName; } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java index 87b0020..0dc7d45 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java @@ -26,6 +26,7 @@ package de.ozgcloud.operator.keycloak.realm; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -33,6 +34,7 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.operator.keycloak.OzgCustomResourceStatus; +import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; class KeycloakRealmReconcilerTest { @@ -43,6 +45,7 @@ class KeycloakRealmReconcilerTest { @Mock private KeycloakRealmService service; + @DisplayName("Reconcile") @Nested class TestReconcile { @@ -70,14 +73,37 @@ class KeycloakRealmReconcilerTest { } } + @DisplayName("Cleanup") @Nested - class TestDelete { + class TestCleanup { + + @DisplayName("with keep_after_delete") + @Nested + class TestWithKeepAfterDelete { + + private final OzgKeycloakRealmSpec realmSpec = OzgKeycloakRealmSpecTestFactory.createBuilder().keepAfterDelete(true).build(); + private final OzgKeycloakRealm realm = OzgKeycloakRealmTestFactory.create(realmSpec); + + @Test + void shouldNotCallService() { + reconciler.cleanup(realm, null); + + verify(service, never()).deleteRealm(OzgKeycloakRealmTestFactory.METADATA_NAMESPACE); + } + + @Test + void shouldReturnDeleteControl() { + var control = reconciler.cleanup(realm, null); + + assertThat(control).usingRecursiveComparison().isEqualTo(DeleteControl.defaultDelete()); + } + } @Test void shouldCallServiceDelete() { - OzgKeycloakRealm realm = OzgKeycloakRealmTestFactory.create(); + var realm = OzgKeycloakRealmTestFactory.create(); - reconciler.cleanup(realm, null); + reconciler.cleanup(realm); verify(service).deleteRealm(OzgKeycloakRealmTestFactory.METADATA_NAMESPACE); } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpecTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpecTestFactory.java index 5918054..52063fb 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpecTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmSpecTestFactory.java @@ -26,6 +26,7 @@ package de.ozgcloud.operator.keycloak.realm; public class OzgKeycloakRealmSpecTestFactory { public final static String DISPLAY_NAME = "TestDisplayName"; + public final static boolean KEEP_AFTER_DELETE = false; public static OzgKeycloakRealmSpec create() { return createBuilder().build(); @@ -33,6 +34,7 @@ public class OzgKeycloakRealmSpecTestFactory { public static OzgKeycloakRealmSpec.OzgKeycloakRealmSpecBuilder createBuilder() { return OzgKeycloakRealmSpec.builder() + .keepAfterDelete(KEEP_AFTER_DELETE) .displayName(DISPLAY_NAME); } } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmTestFactory.java index e23492a..08df37a 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgKeycloakRealmTestFactory.java @@ -28,8 +28,16 @@ public class OzgKeycloakRealmTestFactory { public static final String METADATA_NAMESPACE = "TestNamespace"; public static OzgKeycloakRealm create() { + return createWithSpec(OzgKeycloakRealmSpecTestFactory.create()); + } + + public static OzgKeycloakRealm create(OzgKeycloakRealmSpec spec) { + return createWithSpec(spec); + } + + private static OzgKeycloakRealm createWithSpec(OzgKeycloakRealmSpec spec) { var realm = new OzgKeycloakRealm(); - realm.setSpec(OzgKeycloakRealmSpecTestFactory.create()); + realm.setSpec(spec); realm.setStatus(OzgKeycloakRealmStatusTestFactory.create()); realm.getMetadata().setNamespace(METADATA_NAMESPACE); -- GitLab