diff --git a/ozgcloud-elasticsearch-operator/src/main/resources/log4j2.xml b/ozgcloud-elasticsearch-operator/src/main/resources/log4j2.xml new file mode 100644 index 0000000000000000000000000000000000000000..93213f612c66446c316d8c6adcfcec3a90b738a8 --- /dev/null +++ b/ozgcloud-elasticsearch-operator/src/main/resources/log4j2.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration> + + <Appenders> + <Console name="LogInJSON" target="SYSTEM_OUT"> + <!-- <JsonLayout compact="true" properties="true" eventEol="true"></JsonLayout> --> + <JsonTemplateLayout + eventTemplateUri="classpath:EcsLayout.json" + maxStringLength="65536" /> + </Console> + </Appenders> + + <Loggers> + <Root level="INFO"> + <appender-ref ref="LogInJSON" /> + </Root> + </Loggers> +</configuration> \ No newline at end of file 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 dc3e333e5b42269e4cfe2ec8a00418b676ef595b..7edc208537aec1d2afa2817c60ab98cb8eebb61f 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,10 +69,10 @@ public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm LOG.info("keep data"); return DeleteControl.defaultDelete(); } - return cleanup(realm); + return deleteRealm(realm); } - DeleteControl cleanup(OzgCloudKeycloakRealm realm) { + DeleteControl deleteRealm(OzgCloudKeycloakRealm realm) { var realmName = realm.getMetadata().getNamespace(); LOG.info("{} do cleanup...", realmName); try { @@ -80,7 +80,7 @@ public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm return DeleteControl.defaultDelete(); } catch (Exception e) { LOG.warn(realmName + " could not delete.", e); - return DeleteControl.defaultDelete(); + return DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR); } } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java index 6470b4e9c9d664629b23c18b2cbea9694f338cf5..6d157e2ddd8d61ae3a2cad45029659417d62a7f9 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java @@ -88,10 +88,10 @@ public class KeycloakUserReconciler implements Reconciler<OzgCloudKeycloakUser>, LOG.info("keep data"); return DeleteControl.defaultDelete(); } - return cleanup(user); + return deleteUser(user); } - DeleteControl cleanup(OzgCloudKeycloakUser user) { + DeleteControl deleteUser(OzgCloudKeycloakUser user) { var userName = user.getMetadata().getName(); var namespace = user.getMetadata().getNamespace(); LOG.info("{} do cleanup...", userName); @@ -100,7 +100,7 @@ public class KeycloakUserReconciler implements Reconciler<OzgCloudKeycloakUser>, return DeleteControl.defaultDelete(); } catch (Exception e) { LOG.warn(userName + " could not delete user in namespace " + namespace, e); - return DeleteControl.defaultDelete(); + return DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR); } } } diff --git a/ozgcloud-keycloak-operator/src/main/resources/log4j2.xml b/ozgcloud-keycloak-operator/src/main/resources/log4j2.xml new file mode 100644 index 0000000000000000000000000000000000000000..93213f612c66446c316d8c6adcfcec3a90b738a8 --- /dev/null +++ b/ozgcloud-keycloak-operator/src/main/resources/log4j2.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration> + + <Appenders> + <Console name="LogInJSON" target="SYSTEM_OUT"> + <!-- <JsonLayout compact="true" properties="true" eventEol="true"></JsonLayout> --> + <JsonTemplateLayout + eventTemplateUri="classpath:EcsLayout.json" + maxStringLength="65536" /> + </Console> + </Appenders> + + <Loggers> + <Root level="INFO"> + <appender-ref ref="LogInJSON" /> + </Root> + </Loggers> +</configuration> \ No newline at end of file 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 bdcffd897a0df6b6e0f81b27a332d28922ae2d44..510b314521a42509b33fcb971fa15e3a6e53963b 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 @@ -33,6 +33,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.operator.Config; import de.ozgcloud.operator.keycloak.OzgCloudCustomResourceStatus; import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; @@ -73,9 +74,9 @@ class KeycloakRealmReconcilerTest { } } - @DisplayName("Cleanup") + @DisplayName("Reconciler Cleanup") @Nested - class TestCleanup { + class TestReconcilerCleanup { @DisplayName("with keep_after_delete") @Nested @@ -99,13 +100,60 @@ class KeycloakRealmReconcilerTest { } } - @Test - void shouldCallServiceDelete() { - var realm = OzgCloudKeycloakRealmTestFactory.create(); + @DisplayName("test cleanup") + @Nested + class TestCleanup { + + private final OzgCloudKeycloakRealm realm = OzgCloudKeycloakRealmTestFactory.create(); + + @Test + void shouldCallDeleteRealm() { + reconciler.cleanup(realm, null); + + verify(reconciler).deleteRealm(realm); + } + + @Test + void shouldReturnValueFromDeleteUser() { + DeleteControl expected = DeleteControl.defaultDelete(); + when(reconciler.deleteRealm(realm)).thenReturn(expected); + + DeleteControl response = reconciler.cleanup(realm, null); + + assertThat(response).isEqualTo(expected); + } + } + + @DisplayName("test delete") + @Nested + class TestDelete { + + private final OzgCloudKeycloakRealm realm = OzgCloudKeycloakRealmTestFactory.create(); + + @Test + void shouldCallServiceDelete() { + reconciler.deleteRealm(realm); - reconciler.cleanup(realm); + verify(service).deleteRealm(OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + } + + @Test + void shouldReturnDeleteControl() { + var control = reconciler.deleteRealm(realm); - verify(service).deleteRealm(OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + assertThat(control).usingRecursiveComparison().isEqualTo(DeleteControl.defaultDelete()); + } + + @Test + void shouldRescheduleOnError() { + doThrow(RuntimeException.class).when(service) + .deleteRealm(OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + + var control = reconciler.deleteRealm(realm); + + assertThat(control).usingRecursiveComparison() + .isEqualTo(DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR)); + } } } } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java index e22f7b0622e507c963a4770a126d856972a69a5a..b96bcf8cb8d50dad6f763130a8dd3415b7f2e021 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java @@ -37,7 +37,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.operator.Config; import de.ozgcloud.operator.keycloak.OzgCloudCustomResourceStatus; +import de.ozgcloud.operator.keycloak.realm.OzgCloudKeycloakRealmTestFactory; import de.ozgcloud.operator.keycloak.user.OzgCloudKeycloakUserSpec.KeycloakUserSpecUser; import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; @@ -96,9 +98,9 @@ class KeycloakUserReconcilerTest { } } - @DisplayName("Cleanup") + @DisplayName("Reconciler Cleanup") @Nested - class TestCleanup { + class TestReconcilerCleanup { @DisplayName("with keep_after_delete") @Nested @@ -124,13 +126,61 @@ class KeycloakUserReconcilerTest { } } - @Test - void shouldCallServiceDelete() { - var user = OzgCloudKeycloakUserTestFactory.create(); + @DisplayName("test cleanup") + @Nested + class TestCleanup { + + private final OzgCloudKeycloakUser user = OzgCloudKeycloakUserTestFactory.create(); + + @Test + void shouldCallDeleteUser() { + reconciler.cleanup(user, null); + + verify(reconciler).deleteUser(user); + } + + @Test + void shouldReturnValueFromDeleteUser() { + DeleteControl expected = DeleteControl.defaultDelete(); + when(reconciler.deleteUser(user)).thenReturn(expected); + + DeleteControl response = reconciler.cleanup(user, null); + + assertThat(response).isEqualTo(expected); + } + } + + @DisplayName("test delete") + @Nested + class TestDeleteUser { - reconciler.cleanup(user); + private final OzgCloudKeycloakUser user = OzgCloudKeycloakUserTestFactory.create(); + + @Test + void shouldCallServiceDelete() { + reconciler.deleteUser(user); + + verify(service).deleteUser(user.getSpec(), OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE); + } + + @Test + void shouldReturnDeleteControl() { + var control = reconciler.deleteUser(user); + + assertThat(control).usingRecursiveComparison().isEqualTo(DeleteControl.defaultDelete()); + } + + @Test + void shouldRescheduleOnError() { + doThrow(RuntimeException.class).when(service) + .deleteUser(user.getSpec(), OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE); + + var control = reconciler.cleanup(user, null); + + assertThat(control).usingRecursiveComparison() + .isEqualTo(DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR)); + } - verify(service).deleteUser(user.getSpec(), OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE); } } }