diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java index c17da17a68ff9510cbd0a20831847e13df594b56..707a4b5a02daeb6fddc8d59e77a92862fc69cd73 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java @@ -69,6 +69,9 @@ public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm LOG.info("keep data"); return DeleteControl.defaultDelete(); } + if (!service.realmExists(realm.getMetadata().getName())) { + return DeleteControl.defaultDelete(); + } return deleteRealm(realm); } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java index c92e75c364d25a34b9b99c6d678d7bec02d3426a..1ebad4e77971f32a056acae546f20bba726c4fd6 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java @@ -87,4 +87,8 @@ class KeycloakRealmService { public void deleteRealm(String realmName) { remoteService.deleteRealm(realmName); } + + public boolean realmExists(String realmName) { + return keycloakGenericRemoteService.realmExists(realmName); + } } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java index 06e758f079a0e46cf2b1ceba00381683a700258f..e2eb0e9a1debf37dab96328083c157d61cbc83b8 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconcilerTest.java @@ -23,11 +23,9 @@ */ package de.ozgcloud.operator.keycloak.realm; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -49,6 +47,8 @@ class KeycloakRealmReconcilerTest { @Mock private KeycloakRealmService service; + private final String REALM = OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE; + @DisplayName("Reconcile") @Nested class TestReconcile { @@ -59,7 +59,7 @@ class KeycloakRealmReconcilerTest { reconciler.reconcile(realm, null); - verify(service).createOrUpdateRealm(realm.getSpec(), OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + verify(service).createOrUpdateRealm(realm.getSpec(), REALM); } @Test @@ -93,7 +93,7 @@ class KeycloakRealmReconcilerTest { void shouldNotCallService() { reconciler.cleanup(realm, null); - verify(service, never()).deleteRealm(OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + verify(service, never()).deleteRealm(REALM); } @Test @@ -111,21 +111,50 @@ class KeycloakRealmReconcilerTest { private final OzgCloudKeycloakRealm realm = OzgCloudKeycloakRealmTestFactory.create(); @Test - void shouldCallDeleteRealm() { + void shouldDeleteRealmIfRealmExists() { + when(service.realmExists(any())).thenReturn(true); + reconciler.cleanup(realm, null); verify(reconciler).deleteRealm(realm); } @Test - void shouldReturnValueFromDeleteUser() { + void shouldReturnValueFromDeleteRealm() { DeleteControl expected = DeleteControl.defaultDelete(); when(reconciler.deleteRealm(realm)).thenReturn(expected); + when(service.realmExists(any())).thenReturn(true); DeleteControl response = reconciler.cleanup(realm, null); assertThat(response).isEqualTo(expected); } + + @Test + void shouldCallRealmExists() { + reconciler.cleanup(realm, null); + + verify(service).realmExists(realm.getMetadata().getName()); + } + + @Test + void shouldNotDeleteRealmIfRealmNotExists() { + when(service.realmExists(any())).thenReturn(false); + + reconciler.cleanup(realm, null); + + verify(reconciler, never()).deleteRealm(realm); + } + + @Test + void shouldReturnDeleteControl() { + when(service.realmExists(any())).thenReturn(false); + + var control = reconciler.cleanup(realm, null); + + assertThat(control).usingRecursiveComparison().isEqualTo(DeleteControl.defaultDelete()); + } + } @DisplayName("test delete") @@ -138,7 +167,7 @@ class KeycloakRealmReconcilerTest { void shouldCallServiceDelete() { reconciler.deleteRealm(realm); - verify(service).deleteRealm(OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + verify(service).deleteRealm(REALM); } @Test @@ -151,7 +180,7 @@ class KeycloakRealmReconcilerTest { @Test void shouldRescheduleOnError() { doThrow(RuntimeException.class).when(service) - .deleteRealm(OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + .deleteRealm(REALM); var control = reconciler.deleteRealm(realm); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java index 5d2da035924be16afec0f64718db93129d0ced41..872e9bb98038c987f96d69aab2f25c4128ca0ee7 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java @@ -232,4 +232,15 @@ class KeycloakRealmServiceTest { verify(remoteService).deleteRealm(REALM_NAME); } } + @Nested + class TestRealmExists { + + @Test + void shouldCallGenericRemoteServiceRealmExists() { + service.realmExists(REALM_NAME); + + verify(keycloakGenericRemoteService).realmExists(REALM_NAME); + } + } + }