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 7cf22057645a2e910a15da4507dde7a27c80c919..a576ebaaf7af152b87607dd924965f3e44a419e2 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java @@ -26,9 +26,12 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl public UpdateControl<OzgKeycloakRealm> reconcile(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) { try { - log.info("Create KeycloakRealm " + resource.getMetadata().getName()); - service.createRealm(resource.getSpec(), resource.getMetadata().getNamespace()); + String realmName = resource.getMetadata().getNamespace(); + + log.info("Create KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")"); + + service.createRealm(resource.getSpec(), realmName); resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.OK).errorMessage(null).build()); return UpdateControl.updateStatus(resource); @@ -43,7 +46,21 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl @Override public DeleteControl cleanup(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) { - // TODO Auto-generated method stub - return null; + + String realmName = resource.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); + resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build()); + UpdateControl.updateStatus(resource); + return DeleteControl.noFinalizerRemoval(); + } } } diff --git a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java index 24c8fe6e15e475b59185d30b7e0247daa6053c31..6c9f12a97c5ef78e76d4fe1ecc159d43bea7ef3e 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java @@ -21,4 +21,8 @@ class KeycloakRealmRemoteService { return keycloakClient.getKeycloak().realms().findAll().stream() .anyMatch(realmExisting -> realmExisting.getRealm().equals(newRealm.getRealm())); } + + void deleteRealm(String realmName) { + keycloakClient.getKeycloak().realm(realmName).remove(); + } } diff --git a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java index 0f72234928c1861f451981d858e518baea1120f6..feea4fe8e4850e3a10f389da0878f2b998eb36eb 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java @@ -27,4 +27,8 @@ class KeycloakRealmService { realm.setRealm(realmName); return realm; } + + public void deleteRealm(String realmName) { + remoteService.deleteRealm(realmName); + } } 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 47c8a711fa5a605b0dada58e0298dbba2d9046e8..57546d4859cd6b1d521d303d5a848bcc57ef0336 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java @@ -41,7 +41,8 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea return UpdateControl.updateStatus(resource); } catch (Exception e) { - log.log(Level.SEVERE, "Could not reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace(), e); + log.log(Level.SEVERE, + "Could not reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace(), e); resource.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build()); return UpdateControl.updateStatus(resource); } @@ -60,7 +61,7 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea log.log(Level.SEVERE, "Could not delete user " + crd.getMetadata().getName() + " in namespace " + crd.getMetadata().getNamespace(), e); crd.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build()); UpdateControl.updateStatus(crd); - return DeleteControl.defaultDelete(); + return DeleteControl.noFinalizerRemoval(); } } } 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 9f247e7b4a82c2c123c29616ebdddbc7e5b9234f..5fd0842c45de7bf4528fcbea445eb71f6fb471de 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java @@ -3,6 +3,7 @@ package de.ozgcloud.operator.keycloak.realm; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; @@ -19,27 +20,44 @@ class KeycloakRealmReconcilerTest { @Mock private KeycloakRealmService service; - @Test - void shouldCallServiceAddRealm() { + @Nested + class TestReconcile { - OzgKeycloakRealm realm = OzgKeycloakRealmTestFactory.create(); + @Test + void shouldCallServiceAddRealm() { - conciler.reconcile(realm, null); + OzgKeycloakRealm realm = OzgKeycloakRealmTestFactory.create(); - verify(service).createRealm(realm.getSpec(), OzgKeycloakRealmTestFactory.METADATA_NAMESPACE); - } + conciler.reconcile(realm, null); + + verify(service).createRealm(realm.getSpec(), OzgKeycloakRealmTestFactory.METADATA_NAMESPACE); + } + + @Test + void shouldReturnUpdateStatus() { + var response = conciler.reconcile(OzgKeycloakRealmTestFactory.create(), null); - @Test - void shouldReturnUpdateStatus() { - var response = conciler.reconcile(OzgKeycloakRealmTestFactory.create(), null); + assertThat(response.getResource()).isNotNull(); + } - assertThat(response.getResource()).isNotNull(); + @Test + void shouldSetStatusOk() { + var response = conciler.reconcile(OzgKeycloakRealmTestFactory.create(), null); + + assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.OK); + } } - @Test - void shouldSetStatusOk() { - var response = conciler.reconcile(OzgKeycloakRealmTestFactory.create(), null); + @Nested + class TestDelete { + + @Test + void shouldCallServiceDelete() { + OzgKeycloakRealm realm = OzgKeycloakRealmTestFactory.create(); + + conciler.cleanup(realm, null); - assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.OK); + verify(service).deleteRealm(OzgKeycloakRealmTestFactory.METADATA_NAMESPACE); + } } } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteServiceTest.java index e2a7aeb06a82aa71c23499427fc1c2a0d43eb9c7..53e35617557c319cd8e972a3afcd959c268fd049 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteServiceTest.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteServiceTest.java @@ -72,4 +72,20 @@ class KeycloakRealmRemoteServiceTest { assertThat(response).isTrue(); } } + + @Nested + class TestDeleteRealm { + + private static final String REALM_NAME = "TestRealmName"; + + @Test + void shouldDeleteRealm() { + when(keycloak.realm(REALM_NAME)).thenReturn(realmResource); + + + remoteService.deleteRealm(REALM_NAME); + + verify(realmResource).remove(); + } + } } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java index 0c2238640fd99462b0109073650a1c50e55d536e..7551552118ff4eefc0c40c4f73a120f97cee120f 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java @@ -86,4 +86,15 @@ class KeycloakRealmServiceTest { verify(realmRepresentation).setRealm(REALM_NAME); } + + @Nested + class TestDeleteRealm { + + @Test + void shouldCallRemoteServiceDelete() { + service.deleteRealm(REALM_NAME); + + verify(remoteService).deleteRealm(REALM_NAME); + } + } }