From 1b239d600e8a6dd3db0cc2bf536b7e96ec23ee80 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 4 Jan 2024 13:46:51 +0100 Subject: [PATCH] OZG-4453 refactor dependency injection; adjust access modifier --- .../operator/keycloak/KeycloakClient.java | 20 +++++++++++----- .../KeycloakGenericRemoteService.java | 6 ++--- .../KeycloakClientPreconditionService.java | 6 ++--- .../client/KeycloakClientReconciler.java | 9 ++++---- .../client/KeycloakClientRemoteService.java | 6 ++--- .../client/KeycloakClientService.java | 15 +++++------- .../keycloak/group/KeycloakGroupMapper.java | 5 ++-- .../KeycloakGroupPreconditionService.java | 13 +++++------ .../group/KeycloakGroupReconciler.java | 16 ++++++------- .../group/KeycloakGroupRemoteService.java | 14 +++++------ .../keycloak/group/KeycloakGroupService.java | 12 +++++----- .../keycloak/realm/KeycloakRealmMapper.java | 2 +- .../realm/KeycloakRealmReconciler.java | 6 ++--- .../realm/KeycloakRealmRemoteService.java | 11 +++++---- .../keycloak/realm/KeycloakRealmService.java | 16 ++++++------- .../user/KeycloakUserPreconditionService.java | 6 ++--- .../user/KeycloakUserRemoteService.java | 9 ++++---- .../keycloak/user/KeycloakUserService.java | 13 +++++------ .../user/KubernetesRemoteService.java | 6 ++--- .../operator/keycloak/KeycloakClientTest.java | 23 ++++++++++++++++--- .../client/KeycloakClientReconcilerTest.java | 4 ++-- .../group/KeycloakGroupReconcilerTest.java | 17 +++++++------- .../group/KeycloakGroupServiceTest.java | 20 ++++++++-------- 23 files changed, 134 insertions(+), 121 deletions(-) diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java index 8a92e32..28bba54 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java @@ -27,7 +27,6 @@ import java.util.Base64; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.KeycloakBuilder; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; @@ -35,21 +34,30 @@ import org.springframework.context.annotation.Scope; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.Resource; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Configuration public class KeycloakClient { - @Autowired - private KubernetesClient kubernetesClient; + private final KubernetesClient kubernetesClient; @Bean @Scope("singleton") Keycloak createKeycloak() { + setProperties(); + return buildKeycloak(); + } + + private void setProperties() { System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dumpTreshold", "999999"); + } + + private Keycloak buildKeycloak() { return KeycloakBuilder.builder() .serverUrl("http://keycloak-keycloakx-http.keycloak") .realm("master") @@ -59,20 +67,20 @@ public class KeycloakClient { .build(); } - String getKeycloakAdminPassword() { + private String getKeycloakAdminPassword() { return decodeBase64(getKeycloakRealmAdminSecret() .get() .getData() .get("password")); } - Resource<Secret> getKeycloakRealmAdminSecret() { + private Resource<Secret> getKeycloakRealmAdminSecret() { return kubernetesClient.secrets() .inNamespace("keycloak") .withName("keycloak-admin-secret"); } - String decodeBase64(String base64String) { + private String decodeBase64(String base64String) { return new String(Base64.getDecoder().decode(base64String)); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java index fd1e5ad..2888571 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java @@ -31,17 +31,17 @@ import org.keycloak.admin.client.Keycloak; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RoleRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Component @Log public class KeycloakGenericRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; public Optional<ClientRepresentation> getByClientId(String clientId, String realm) { return keycloak.realm(realm).clients().findAll().stream() diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java index 93b4130..758ee22 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java @@ -25,16 +25,16 @@ package de.ozgcloud.operator.keycloak.client; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakClientPreconditionService { - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; Optional<String> getReconcilePreconditionErrors(OzgCloudKeycloakClient resource) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java index 11f4f71..b881373 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java @@ -26,7 +26,6 @@ package de.ozgcloud.operator.keycloak.client; import java.util.Optional; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.Config; @@ -35,18 +34,18 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @ControllerConfiguration @Component @Log public class KeycloakClientReconciler implements Reconciler<OzgCloudKeycloakClient> { - @Autowired - private KeycloakClientService service; + private final KeycloakClientService service; - @Autowired - private KeycloakClientPreconditionService preconditionService; + private final KeycloakClientPreconditionService preconditionService; @Override public UpdateControl<OzgCloudKeycloakClient> reconcile(OzgCloudKeycloakClient resource, Context<OzgCloudKeycloakClient> context) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java index 7c3d4c1..7de2a81 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java @@ -31,18 +31,18 @@ import org.keycloak.admin.client.resource.ClientResource; import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RoleRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakResultParser; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Component @Log class KeycloakClientRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; public void updateClient(ClientRepresentation client, String realm) { getClientResource(realm, client.getId()).update(client); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java index 90e9671..3182648 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java @@ -26,25 +26,22 @@ package de.ozgcloud.operator.keycloak.client; import java.util.List; import org.keycloak.representations.idm.ClientRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakClientService { - @Autowired - private KeycloakClientRemoteService remoteService; + private final KeycloakClientRemoteService remoteService; - @Autowired - private KeycloakGenericRemoteService genericRemoteService; + private final KeycloakGenericRemoteService genericRemoteService; - @Autowired - private ProtocolMapperRepresentationHelper mapperRepresentationBuilder; + private final ProtocolMapperRepresentationHelper mapperRepresentationBuilder; - @Autowired - private KeycloakClientMapper mapper; + private final KeycloakClientMapper mapper; void createOrUpdateClient(OzgCloudKeycloakClientSpec spec, String namespace) { genericRemoteService.getByClientId(spec.getClientId(), namespace) diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java index 519f661..7c7b782 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java @@ -38,10 +38,11 @@ import org.mapstruct.ReportingPolicy; interface KeycloakGroupMapper { @Mapping(target = "attributes", source = "attributes", qualifiedByName = "mapAttributes") - GroupRepresentation map(OzgCloudKeycloakGroupSpec group); + public GroupRepresentation map(OzgCloudKeycloakGroupSpec group); @Named("mapAttributes") default Map<String, List<String>> mapAttributes(List<OzgCloudKeycloakGroupSpec.Attribute> attributes) { - return attributes.stream().collect(Collectors.toMap(OzgCloudKeycloakGroupSpec.Attribute::getName, attribute -> List.of(attribute.getValue()))); + return attributes.stream() + .collect(Collectors.toMap(OzgCloudKeycloakGroupSpec.Attribute::getName, attribute -> List.of(attribute.getValue()))); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java index 0f6571b..56477e6 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java @@ -25,20 +25,19 @@ package de.ozgcloud.operator.keycloak.group; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakGroupPreconditionService { - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; - Optional<String> getReconcilePreconditionErrors(OzgCloudKeycloakGroup resource) { - - String namespace = resource.getMetadata().getNamespace(); + public Optional<String> getReconcilePreconditionErrors(OzgCloudKeycloakGroup resource) { + var namespace = resource.getMetadata().getNamespace(); if (!keycloakGenericRemoteService.realmExists(namespace)) { return Optional.of("Realm " + namespace + " does not yet exist"); @@ -46,4 +45,4 @@ class KeycloakGroupPreconditionService { return Optional.empty(); } -} +} \ No newline at end of file diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java index 7388466..35bb8e3 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java @@ -26,7 +26,6 @@ package de.ozgcloud.operator.keycloak.group; import java.util.Optional; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.Config; @@ -35,24 +34,23 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @ControllerConfiguration @Component @Log public class KeycloakGroupReconciler implements Reconciler<OzgCloudKeycloakGroup> { - @Autowired - private KeycloakGroupService service; + private final KeycloakGroupService service; - @Autowired - private KeycloakGroupPreconditionService preconditionService; + private final KeycloakGroupPreconditionService preconditionService; @Override public UpdateControl<OzgCloudKeycloakGroup> reconcile(OzgCloudKeycloakGroup resource, Context<OzgCloudKeycloakGroup> context) { - try { - String crdName = resource.getMetadata().getName(); + var crdName = resource.getMetadata().getName(); log.info("Reconcile KeycloakGroup " + crdName); @@ -74,12 +72,12 @@ public class KeycloakGroupReconciler implements Reconciler<OzgCloudKeycloakGroup } } - UpdateControl<OzgCloudKeycloakGroup> buildStatusOk(OzgCloudKeycloakGroup resource) { + private UpdateControl<OzgCloudKeycloakGroup> buildStatusOk(OzgCloudKeycloakGroup resource) { resource.setStatus(OzgCloudKeycloakGroupStatus.builder().status(OzgCloudCustomResourceStatus.OK).message(null).build()); return UpdateControl.updateStatus(resource); } - UpdateControl<OzgCloudKeycloakGroup> buildStatusInProgress(OzgCloudKeycloakGroup resource, String errorMessage) { + private UpdateControl<OzgCloudKeycloakGroup> buildStatusInProgress(OzgCloudKeycloakGroup resource, String errorMessage) { log.log(Level.INFO, "Could not yet reconcile group " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace() + ": " + errorMessage); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java index af4c33a..842187a 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java @@ -27,32 +27,30 @@ import java.util.Objects; import java.util.Optional; import java.util.logging.Level; -import javax.ws.rs.core.Response; - import org.keycloak.admin.client.Keycloak; import org.keycloak.representations.idm.GroupRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakResultParser; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Component @Log class KeycloakGroupRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; - Optional<GroupRepresentation> getGroupByName(String groupName, String realm) { + public Optional<GroupRepresentation> getGroupByName(String groupName, String realm) { return keycloak.realm(realm).groups().groups() .stream().filter(group -> Objects.equals(groupName, group.getName())) .findFirst(); } - void createGroup(GroupRepresentation group, String realm) { + public void createGroup(GroupRepresentation group, String realm) { log.log(Level.FINE, "Creating group {0} in realm {1}", new Object[] { group.getName(), realm }); - Response response = keycloak.realm(realm).groups().add(group); + var response = keycloak.realm(realm).groups().add(group); KeycloakResultParser.parseCreatedResponse(response); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java index 4eaa2ed..e8783ff 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java @@ -25,19 +25,19 @@ package de.ozgcloud.operator.keycloak.group; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Component class KeycloakGroupService { - @Autowired - private KeycloakGroupRemoteService remoteService; + private final KeycloakGroupRemoteService remoteService; - @Autowired - private KeycloakGroupMapper mapper; + private final KeycloakGroupMapper mapper; - void createGroup(OzgCloudKeycloakGroupSpec group, String realm) { + public void createGroup(OzgCloudKeycloakGroupSpec group, String realm) { Optional.of(group) .map(mapper::map) .filter(groupRepresentation -> remoteService.getGroupByName(group.getName(), realm).isEmpty()) diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java index 8b5e7be..5af8764 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java @@ -41,7 +41,7 @@ interface KeycloakRealmMapper { @Mapping(target = "defaultLocale", constant = "de") @Mapping(target = "internationalizationEnabled", constant = "true") @Mapping(target = "passwordPolicy", constant = "upperCase(1) and lowerCase(1) and length(8) and notUsername") - RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); + public RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); @Named("supportedLocales") default Set<String> mapPassword(OzgCloudKeycloakRealmSpec spec) { 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 4b62b2b..2524770 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 @@ -25,7 +25,6 @@ package de.ozgcloud.operator.keycloak.realm; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.Config; @@ -36,15 +35,16 @@ import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @ControllerConfiguration @Component @Log public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm>, Cleaner<OzgCloudKeycloakRealm> { - @Autowired - private KeycloakRealmService service; + private final KeycloakRealmService service; @Override public UpdateControl<OzgCloudKeycloakRealm> reconcile(OzgCloudKeycloakRealm resource, Context<OzgCloudKeycloakRealm> context) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java index 97801f7..124f1d5 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java @@ -25,20 +25,21 @@ package de.ozgcloud.operator.keycloak.realm; import org.keycloak.admin.client.Keycloak; import org.keycloak.representations.idm.RealmRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Component class KeycloakRealmRemoteService { - @Autowired - Keycloak keycloak; + private final Keycloak keycloak; - void createRealm(RealmRepresentation realm) { + public void createRealm(RealmRepresentation realm) { keycloak.realms().create(realm); } - void deleteRealm(String realmName) { + public void deleteRealm(String realmName) { keycloak.realm(realmName).remove(); } } 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 6911ce5..279a055 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 @@ -26,24 +26,22 @@ package de.ozgcloud.operator.keycloak.realm; import java.util.Optional; import org.keycloak.representations.idm.RealmRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakRealmService { - @Autowired - private KeycloakRealmRemoteService remoteService; + private final KeycloakRealmRemoteService remoteService; - @Autowired - private KeycloakRealmMapper mapper; + private final KeycloakRealmMapper mapper; - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; - void createRealm(OzgCloudKeycloakRealmSpec realm, String realmName) { + public void createRealm(OzgCloudKeycloakRealmSpec realm, String realmName) { Optional.of(realm) .map(mapper::map) .map(realmRepresentation -> addRealmName(realmRepresentation, realmName)) @@ -56,7 +54,7 @@ class KeycloakRealmService { return realm; } - void deleteRealm(String realmName) { + public void deleteRealm(String realmName) { remoteService.deleteRealm(realmName); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java index 6366465..a2a19c6 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java @@ -25,18 +25,18 @@ package de.ozgcloud.operator.keycloak.user; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; import de.ozgcloud.operator.keycloak.user.OzgCloudKeycloakUserSpec.KeycloakUserSpecClientRole; import de.ozgcloud.operator.keycloak.user.OzgCloudKeycloakUserSpec.KeycloakUserSpecUserGroup; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakUserPreconditionService { - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; public Optional<String> getPreconditionErrors(OzgCloudKeycloakUser user) { var namespace = user.getMetadata().getNamespace(); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java index 4e1d2f0..b38218f 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java @@ -32,21 +32,20 @@ import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RoleRepresentation; import org.keycloak.representations.idm.UserRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakException; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; import de.ozgcloud.operator.keycloak.KeycloakResultParser; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakUserRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; public void createUser(UserRepresentation user, String namespace) { var realmResource = getRealm(namespace); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java index 13e2cb9..c8343f8 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java @@ -26,20 +26,19 @@ package de.ozgcloud.operator.keycloak.user; import java.util.Optional; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Component class KeycloakUserService { - @Autowired - private KeycloakUserRemoteService remoteService; + private final KeycloakUserRemoteService remoteService; - @Autowired - private UserSecretService userSecretService; + private final UserSecretService userSecretService; - @Autowired - private KeycloakUserMapper userMapper; + private final KeycloakUserMapper userMapper; public void createOrUpdateUser(OzgCloudKeycloakUserSpec userSpec, String namespace) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java index c865115..e7988e4 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java @@ -1,19 +1,19 @@ package de.ozgcloud.operator.keycloak.user; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.Resource; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Log @Component class KubernetesRemoteService { - @Autowired - private KubernetesClient kubernetesClient; + private final KubernetesClient kubernetesClient; public Resource<Secret> getSecret(String namespace, String name) { log.info(String.format("KubernetesClient: Get %s secret from %s namespace.", name, namespace)); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java index 9ac65f4..64d1be6 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java @@ -23,12 +23,29 @@ */ package de.ozgcloud.operator.keycloak; +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +import io.fabric8.kubernetes.client.KubernetesClient; class KeycloakClientTest { - @Test - void shouldInitKeycloakClient() { - new KeycloakClient(); + @DisplayName("Create keycloak") + @Nested + class TestCreateKeycloak { + + @Mock + private KubernetesClient kubernetsClient; + + @Test + void shouldInitKeycloakClient() { + var keycloak = new KeycloakClient(kubernetsClient); + + assertThat(keycloak).isNotNull(); + } } } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java index c8f4113..01b9a7c 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java @@ -39,8 +39,6 @@ import de.ozgcloud.operator.keycloak.OzgCloudCustomResourceStatus; class KeycloakClientReconcilerTest { - public static final String ERROR_MESSAGE = "ErrorMessage"; - @Spy @InjectMocks private KeycloakClientReconciler reconciler; @@ -54,6 +52,8 @@ class KeycloakClientReconcilerTest { @Nested class TestReconcile { + private static final String ERROR_MESSAGE = "ErrorMessage"; + @Test void shouldCallServiceAddClient() { OzgCloudKeycloakClient client = OzgCloudKeycloakClientTestFactory.create(); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java index c4eca85..5e02bd5 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java @@ -39,8 +39,6 @@ import de.ozgcloud.operator.keycloak.OzgCloudCustomResourceStatus; class KeycloakGroupReconcilerTest { - public static final String ERROR_MESSAGE = "ErrorMessage"; - @Spy @InjectMocks private KeycloakGroupReconciler reconciler; @@ -54,25 +52,26 @@ class KeycloakGroupReconcilerTest { @Nested class TestReconcile { + private static final String ERROR_MESSAGE = "ErrorMessage"; + private static final OzgCloudKeycloakGroup KEYCLOAK_GROUP = OzgCloudKeycloakGroupTestFactory.create(); + @Test void shouldCallServiceAddGroup() { - OzgCloudKeycloakGroup group = OzgCloudKeycloakGroupTestFactory.create(); - - reconciler.reconcile(group, null); + reconciler.reconcile(KEYCLOAK_GROUP, null); - verify(service).createGroup(group.getSpec(), OzgCloudKeycloakGroupTestFactory.METADATA_NAMESPACE); + verify(service).createGroup(KEYCLOAK_GROUP.getSpec(), OzgCloudKeycloakGroupTestFactory.METADATA_NAMESPACE); } @Test void shouldReturnUpdateStatus() { - var response = reconciler.reconcile(OzgCloudKeycloakGroupTestFactory.create(), null); + var response = reconciler.reconcile(KEYCLOAK_GROUP, null); assertThat(response.getResource()).isNotNull(); } @Test void shouldSetStatusOk() { - var response = reconciler.reconcile(OzgCloudKeycloakGroupTestFactory.create(), null); + var response = reconciler.reconcile(KEYCLOAK_GROUP, null); assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCloudCustomResourceStatus.OK); } @@ -81,7 +80,7 @@ class KeycloakGroupReconcilerTest { void shouldReturnInProgressStatusIfPreconditionsNotMet() { when(preconditionService.getReconcilePreconditionErrors(any())).thenReturn(Optional.of(ERROR_MESSAGE)); - var response = reconciler.reconcile(OzgCloudKeycloakGroupTestFactory.create(), null); + var response = reconciler.reconcile(KEYCLOAK_GROUP, null); assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCloudCustomResourceStatus.IN_PROGRESS); } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java index 1bc024a..b78cb0f 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java @@ -52,43 +52,43 @@ class KeycloakGroupServiceTest { @Nested class TestCreateGroup { + private final static OzgCloudKeycloakGroupSpec KEYCLOAK_GROUP = OzgCloudKeycloakGroupSpecTestFactory.create(); + @Test void shouldCallGetGroupRemoteService() { var groupRepresentation = GroupRepresentationTestFactory.create(); when(mapper.map(any())).thenReturn(groupRepresentation); - service.createGroup(OzgCloudKeycloakGroupSpecTestFactory.create(), REALM); + service.createGroup(KEYCLOAK_GROUP, REALM); verify(remoteService).getGroupByName(OzgCloudKeycloakGroupSpecTestFactory.NAME, REALM); } @Test void shouldCallMapper() { - var group = OzgCloudKeycloakGroupSpecTestFactory.create(); - service.createGroup(group, REALM); - verify(mapper).map(group); + service.createGroup(KEYCLOAK_GROUP, REALM); + + verify(mapper).map(KEYCLOAK_GROUP); } @Test void shouldCreateGroupIfNotExists() { - var ozgGroup = OzgCloudKeycloakGroupSpecTestFactory.create(); var groupRepresentation = GroupRepresentationTestFactory.create(); when(remoteService.getGroupByName(OzgCloudKeycloakGroupSpecTestFactory.NAME, REALM)).thenReturn(Optional.empty()); - when(mapper.map(ozgGroup)).thenReturn(groupRepresentation); + when(mapper.map(KEYCLOAK_GROUP)).thenReturn(groupRepresentation); - service.createGroup(ozgGroup, REALM); + service.createGroup(KEYCLOAK_GROUP, REALM); verify(remoteService).createGroup(groupRepresentation, REALM); } @Test void shouldNotCreateGroupIfAlreadyExists() { - var ozgGroup = OzgCloudKeycloakGroupSpecTestFactory.create(); when(remoteService.getGroupByName(OzgCloudKeycloakGroupSpecTestFactory.NAME, REALM)).thenReturn(Optional.of(mock(GroupRepresentation.class))); - when(mapper.map(ozgGroup)).thenReturn(GroupRepresentationTestFactory.create()); + when(mapper.map(KEYCLOAK_GROUP)).thenReturn(GroupRepresentationTestFactory.create()); - service.createGroup(ozgGroup, REALM); + service.createGroup(KEYCLOAK_GROUP, REALM); verify(remoteService, never()).createGroup(any(), anyString()); } -- GitLab