From 59e25bc732418690874edbc6a6cfc014329c095e Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Wed, 5 Jul 2023 21:45:22 +0200
Subject: [PATCH] OZG-3961 - improve error handling

---
 .../keycloak/client/KeycloakClientReconciler.java   | 13 +++++++------
 .../keycloak/group/KeycloakGroupReconciler.java     | 13 +++++++------
 .../keycloak/user/KeycloakUserReconciler.java       | 13 +++++++------
 .../keycloak/user/KeycloakUserRemoteService.java    |  2 +-
 .../keycloak/KeycloakGenericRemoteServiceTest.java  |  3 ---
 5 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java
index 1fd55ffb..3f45f394 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java
@@ -35,9 +35,9 @@ public class KeycloakClientReconciler implements Reconciler<OzgKeycloakClient>,
 
 		log.info("Reconcile KeycloakClient " + crdName);
 
-		Optional<String> preconditionErrors = preconditionService.getReconcilePreconditionErrors(resource);
-		if (preconditionErrors.isPresent()) {
-			return buildStatusInProgress(resource, preconditionErrors);
+		Optional<String> preconditionError = preconditionService.getReconcilePreconditionErrors(resource);
+		if (preconditionError.isPresent()) {
+			return buildStatusInProgress(resource, preconditionError.get());
 		}
 
 		service.createOrUpdateClient(resource.getSpec(), resource.getMetadata().getNamespace());
@@ -50,10 +50,11 @@ public class KeycloakClientReconciler implements Reconciler<OzgKeycloakClient>,
 		return UpdateControl.updateStatus(resource);
 	}
 
-	private UpdateControl<OzgKeycloakClient> buildStatusInProgress(OzgKeycloakClient resource, Optional<String> preconditionErrors) {
+	private UpdateControl<OzgKeycloakClient> buildStatusInProgress(OzgKeycloakClient resource, String errorMessage) {
 		log.log(Level.INFO,
-				"Could not yet reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace());
-		resource.setStatus(OzgKeycloakClientStatus.builder().status(OzgCustomResourceStatus.IN_PROGRESS).message(preconditionErrors.get()).build());
+				"Could not yet reconcile client " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace() + ":"
+						+ errorMessage);
+		resource.setStatus(OzgKeycloakClientStatus.builder().status(OzgCustomResourceStatus.IN_PROGRESS).message(errorMessage).build());
 		return UpdateControl.updateStatus(resource).rescheduleAfter(Duration.ofSeconds(Config.RECONCILER_RETRY_SECONDS));
 	}
 
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java
index 8b4acd13..d9f34e41 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java
@@ -35,9 +35,9 @@ public class KeycloakGroupReconciler implements Reconciler<OzgKeycloakGroup>, Er
 
 		log.info("Reconcile KeycloakGroup " + crdName);
 
-		Optional<String> preconditionErrors = preconditionService.getReconcilePreconditionErrors(resource);
-		if (preconditionErrors.isPresent()) {
-			return buildStatusInProgress(resource, preconditionErrors);
+		Optional<String> preconditionError = preconditionService.getReconcilePreconditionErrors(resource);
+		if (preconditionError.isPresent()) {
+			return buildStatusInProgress(resource, preconditionError.get());
 		}
 
 		service.createGroup(resource.getSpec(), resource.getMetadata().getNamespace());
@@ -50,10 +50,11 @@ public class KeycloakGroupReconciler implements Reconciler<OzgKeycloakGroup>, Er
 		return UpdateControl.updateStatus(resource);
 	}
 
-	UpdateControl<OzgKeycloakGroup> buildStatusInProgress(OzgKeycloakGroup resource, Optional<String> preconditionErrors) {
+	UpdateControl<OzgKeycloakGroup> buildStatusInProgress(OzgKeycloakGroup resource, String errorMessage) {
 		log.log(Level.INFO,
-				"Could not yet reconcile group " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace());
-		resource.setStatus(OzgKeycloakGroupStatus.builder().status(OzgCustomResourceStatus.IN_PROGRESS).message(preconditionErrors.get()).build());
+				"Could not yet reconcile group " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace() + ": "
+						+ errorMessage);
+		resource.setStatus(OzgKeycloakGroupStatus.builder().status(OzgCustomResourceStatus.IN_PROGRESS).message(errorMessage).build());
 		return UpdateControl.updateStatus(resource).rescheduleAfter(Duration.ofSeconds(Config.RECONCILER_RETRY_SECONDS));
 	}
 
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 4fe892dd..0c9b5cc9 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java
@@ -36,9 +36,9 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
 			log.info("Reconciling KeycloakUser " + resource.getMetadata().getName());
 			String namespace = resource.getMetadata().getNamespace();
 
-			Optional<String> preconditionErrors = preconditionService.getReconcilePreconditionErrors(resource);
-			if (preconditionErrors.isPresent()) {
-				return buildStatusInProgress(resource, preconditionErrors);
+			Optional<String> preconditionError = preconditionService.getReconcilePreconditionErrors(resource);
+			if (preconditionError.isPresent()) {
+				return buildStatusInProgress(resource, preconditionError.get());
 			}
 
 			keycloakUserService.createOrUpdateUser(resource.getSpec(), namespace);
@@ -62,10 +62,11 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
 		return UpdateControl.updateStatus(resource);
 	}
 
-	private UpdateControl<OzgKeycloakUser> buildStatusInProgress(OzgKeycloakUser resource, Optional<String> preconditionErrors) {
+	private UpdateControl<OzgKeycloakUser> buildStatusInProgress(OzgKeycloakUser resource, String errorMessage) {
 		log.log(Level.INFO,
-				"Could not yet reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace());
-		resource.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.IN_PROGRESS).message(preconditionErrors.get()).build());
+				"Could not yet reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace() + ": "
+						+ errorMessage);
+		resource.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.IN_PROGRESS).message(errorMessage).build());
 		return UpdateControl.updateStatus(resource).rescheduleAfter(Duration.ofSeconds(Config.RECONCILER_RETRY_SECONDS));
 	}
 
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java
index 86d18e63..417d77ec 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java
@@ -47,7 +47,7 @@ class KeycloakUserRemoteService {
 					user.getClientRoles().get(clientId).stream()
 							.map(clientRoleName -> keycloakGenericRemoteService.getClientRole(clientRoleName, appClient.getId(), realm)
 									.orElseThrow(() -> new KeycloakException(
-											"Role " + clientRoleName + " not found for client with clientId " + clientId)))
+											"Role " + clientRoleName + " not found for client with clientId " + clientId + " in realm " + realm)))
 							.forEach(clientRole -> addClientRoleToUser(clientRole, realmResource, userId, appClient));
 				});
 
diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteServiceTest.java
index 6251f271..96afcc95 100644
--- a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteServiceTest.java
+++ b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteServiceTest.java
@@ -145,9 +145,6 @@ class KeycloakGenericRemoteServiceTest {
 			when(keycloak.realm(REALM)).thenReturn(realmResource);
 			when(realmResource.clients()).thenReturn(clientsResource);
 			when(clientsResource.get(REAL_CLIENT_ID)).thenReturn(clientResource);
-
-//			doReturn(Optional.of(clientRepresentation)).when(service).getByClientId(CLIENT_ID, REALM);
-//			when(clientRepresentation.getId()).thenReturn(CLIENT_ID);
 		}
 
 		@Test
-- 
GitLab