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 4dc6903f855b85d0d91bf4646151cdc0aa412b9f..f565154686bebef9c461a110e6e0bcbdc4effd83 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java @@ -71,7 +71,7 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl @Override public DeleteControl cleanup(OzgKeycloakRealm realm, Context<OzgKeycloakRealm> context) { - log.info("Realm reconciler, keep after delete is set to: " + realm.getSpec().isKeepAfterDelete()); + log.info("Realm reconciler cleanup, keep after delete is set to: " + realm.getSpec().isKeepAfterDelete()); if (realm.getSpec().isKeepAfterDelete()) { return DeleteControl.defaultDelete(); } @@ -80,8 +80,8 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl DeleteControl cleanup(OzgKeycloakRealm realm) { var realmName = realm.getMetadata().getNamespace(); + log.info("Deleting KeycloakRealm " + realmName); try { - log.info("Deleting KeycloakRealm " + realmName); service.deleteRealm(realmName); return DeleteControl.defaultDelete(); } catch (Exception e) { diff --git a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java index 2647a00599257804340e2b6db04cfc4a23121071..dd63f8abe794a894146d6c806b066a3b50c05f46 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java @@ -44,7 +44,7 @@ import lombok.extern.java.Log; public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Cleaner<OzgKeycloakUser> { @Autowired - private KeycloakUserService keycloakUserService; + private KeycloakUserService service; @Autowired private KeycloakUserPreconditionService preconditionService; @@ -69,7 +69,7 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea .build(); } - keycloakUserService.createOrUpdateUser(resource.getSpec(), namespace); + service.createOrUpdateUser(resource.getSpec(), namespace); return UserUpdateControlBuilder.fromResource(resource).withStatus(OzgCustomResourceStatus.OK).build(); @@ -87,15 +87,20 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea } @Override - public DeleteControl cleanup(OzgKeycloakUser resource, Context<OzgKeycloakUser> context) { - var userName = resource.getMetadata().getName(); - var namespace = resource.getMetadata().getNamespace(); + public DeleteControl cleanup(OzgKeycloakUser user, Context<OzgKeycloakUser> context) { + log.info("User reconciler cleanup, keep after delete is set to: " + user.getSpec().isKeepAfterDelete()); + if (user.getSpec().isKeepAfterDelete()) { + return DeleteControl.defaultDelete(); + } + return cleanup(user); + } + DeleteControl cleanup(OzgKeycloakUser user) { + var userName = user.getMetadata().getName(); + var namespace = user.getMetadata().getNamespace(); log.info(String.format("Deleting KeycloakUser %s", userName)); - try { - keycloakUserService.deleteUser(resource.getSpec(), namespace); - + service.deleteUser(user.getSpec(), namespace); return DeleteControl.defaultDelete(); } catch (Exception e) { log.log(Level.SEVERE, String.format("Could not delete user %s in namespace %s", userName, namespace), e); diff --git a/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java index 08e00e7c07c16ef236281c1b65b87a9087d95e11..349a10ebe500db6fe235080cdbc92dee8b7d1eac 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java @@ -31,6 +31,7 @@ import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -38,15 +39,16 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.operator.keycloak.OzgCustomResourceStatus; +import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; class KeycloakUserReconcilerTest { @Spy @InjectMocks - private KeycloakUserReconciler conciler; + private KeycloakUserReconciler reconciler; @Mock - private KeycloakUserService userService; + private KeycloakUserService service; @Mock private KeycloakUserPreconditionService preconditionService; @@ -63,16 +65,16 @@ class KeycloakUserReconcilerTest { void shouldCallServiceAddUser() { OzgKeycloakUser user = OzgKeycloakUserTestFactory.create(); - conciler.reconcile(user, null); + reconciler.reconcile(user, null); - verify(userService).createOrUpdateUser(user.getSpec(), OzgKeycloakUserTestFactory.METADATA_NAMESPACE); + verify(service).createOrUpdateUser(user.getSpec(), OzgKeycloakUserTestFactory.METADATA_NAMESPACE); } @Test void shouldUpdateStatus() { OzgKeycloakUser user = OzgKeycloakUserTestFactory.create(); - conciler.reconcile(user, null); + reconciler.reconcile(user, null); assertThat(user.getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.OK); } @@ -87,7 +89,7 @@ class KeycloakUserReconcilerTest { when(preconditionService.getPreconditionErrors(any())).thenReturn(Optional.of(ERROR_MESSAGE)); OzgKeycloakUser user = OzgKeycloakUserTestFactory.create(); - conciler.reconcile(user, null); + reconciler.reconcile(user, null); assertThat(user.getStatus().getMessage()).isEqualTo(ERROR_MESSAGE); } @@ -101,24 +103,47 @@ class KeycloakUserReconcilerTest { @Test void shouldSetErrorStatusOnException() { OzgKeycloakUser user = OzgKeycloakUserTestFactory.create(); - doThrow(new RuntimeException()).when(userService).createOrUpdateUser(any(), any()); + doThrow(new RuntimeException()).when(service).createOrUpdateUser(any(), any()); - conciler.reconcile(user, null); + reconciler.reconcile(user, null); assertThat(user.getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.ERROR); } } + @DisplayName("Cleanup") @Nested - class TestDeleteUser { + class TestCleanup { + + @DisplayName("with keep_after_delete") + @Nested + class TestWithKeepAfterDelete { + + private final OzgKeycloakUserSpec userSpec = OzgKeycloakUserSpecTestFactory.createBuilder().keepAfterDelete(true).build(); + private final OzgKeycloakUser user = OzgKeycloakUserTestFactory.create(userSpec); + + @Test + void shouldNotCallService() { + reconciler.cleanup(user, null); + + verify(service, never()).deleteUser(userSpec, OzgKeycloakUserTestFactory.METADATA_NAMESPACE); + } + + @Test + void shouldReturnDeleteControl() { + var control = reconciler.cleanup(user, null); + + assertThat(control).usingRecursiveComparison().isEqualTo(DeleteControl.defaultDelete()); + } + } @Test - void shouldCallServiceDeleteUser() { - OzgKeycloakUser user = OzgKeycloakUserTestFactory.create(); + void shouldCallServiceDelete() { + var user = OzgKeycloakUserTestFactory.create(); - conciler.cleanup(user, null); + reconciler.cleanup(user); - verify(userService).deleteUser(user.getSpec(), OzgKeycloakUserTestFactory.METADATA_NAMESPACE); + verify(service).deleteUser(user.getSpec(), OzgKeycloakUserTestFactory.METADATA_NAMESPACE); } } } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserTestFactory.java index 32cdc69a1bed108d02ba8e8aa1b1f1a92be35860..79677c8c0797c77b3d7460a19db4a672c623a50c 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserTestFactory.java @@ -28,12 +28,19 @@ class OzgKeycloakUserTestFactory { public static final String METADATA_NAMESPACE = "TestNamespace"; public static OzgKeycloakUser create() { + return createWithSpec(OzgKeycloakUserSpecTestFactory.create()); + } + + public static OzgKeycloakUser create(OzgKeycloakUserSpec spec) { + return createWithSpec(spec); + } + + private static OzgKeycloakUser createWithSpec(OzgKeycloakUserSpec spec) { var keycloakUser = new OzgKeycloakUser(); + keycloakUser.setSpec(spec); keycloakUser.setStatus(OzgKeycloakUserStatusTestFactory.create()); - keycloakUser.setSpec(OzgKeycloakUserSpecTestFactory.create()); keycloakUser.getMetadata().setNamespace(METADATA_NAMESPACE); return keycloakUser; } - -} +} \ No newline at end of file