From b90dcd354dd62c3f9f088c74110d43b8ad3b8d81 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 14 Nov 2024 14:01:59 +0100 Subject: [PATCH] OZG-7062 Tests auf Keycloak Testcontainer umgestellt --- user-manager-server/pom.xml | 64 +++++++++---------- .../user/keycloak/KeycloakTestProfile.java | 28 +++----- .../KeycloakUserRemoteServiceITCase.java | 48 +++++++++----- .../test/resources/keycloak/realm-export.json | 21 +++++- 4 files changed, 91 insertions(+), 70 deletions(-) diff --git a/user-manager-server/pom.xml b/user-manager-server/pom.xml index 938455fd..4390f334 100644 --- a/user-manager-server/pom.xml +++ b/user-manager-server/pom.xml @@ -1,30 +1,29 @@ <?xml version="1.0"?> <!-- - - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + ~ Copyright (c) 2022-2024. Das Land Schleswig-Holstein vertreten durch den + ~ Ministerpräsidenten des Landes Schleswig-Holstein + ~ Staatskanzlei + ~ Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + ~ + ~ Lizenziert unter der EUPL, Version 1.2 oder - sobald + ~ diese von der Europäischen Kommission genehmigt wurden - + ~ Folgeversionen der EUPL ("Lizenz"); + ~ Sie dürfen dieses Werk ausschließlich gemäß + ~ dieser Lizenz nutzen. + ~ Eine Kopie der Lizenz finden Sie hier: + ~ + ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + ~ + ~ Sofern nicht durch anwendbare Rechtsvorschriften + ~ gefordert oder in schriftlicher Form vereinbart, wird + ~ die unter der Lizenz verbreitete Software "so wie sie + ~ ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + ~ ausdrücklich oder stillschweigend - verbreitet. + ~ Die sprachspezifischen Genehmigungen und Beschränkungen + ~ unter der Lizenz sind dem Lizenztext zu entnehmen. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> @@ -41,11 +40,11 @@ </properties> <dependencies> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-admin-client</artifactId> - <version>24.0.5</version> - </dependency> + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-admin-client</artifactId> + <version>24.0.5</version> + </dependency> <dependency> <groupId>de.ozgcloud.user</groupId> <artifactId>user-manager-interface</artifactId> @@ -242,7 +241,7 @@ <dependency> <groupId>com.github.dasniko</groupId> <artifactId>testcontainers-keycloak</artifactId> - <version>3.5.1</version> + <version>3.1.0</version> </dependency> </dependencies> @@ -325,7 +324,8 @@ </goals> <configuration> <systemPropertyVariables> - <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> + <native.image.path>${project.build.directory}/${project.build.finalName}-runner + </native.image.path> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakTestProfile.java b/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakTestProfile.java index 27e2596e..e1b8eac4 100644 --- a/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakTestProfile.java +++ b/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakTestProfile.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung @@ -30,32 +30,22 @@ import io.quarkus.test.junit.QuarkusTestProfile; public class KeycloakTestProfile implements QuarkusTestProfile { - private final String userKey = "ozgcloud.keycloak.api.user"; - private final String userValue = "userManagerApiUser"; - - private final String passwordKey = "ozgcloud.keycloak.api.password"; - private final String passwordValue = "hlc_j1I1Ji0trC0"; - - private final String realmKey = "ozgcloud.keycloak.api.realm"; - private final String realmValue = "by-kiel-dev"; - - private final String urlKey = "keycloak.url"; - private final String urlValue = "localhost:9999"; - private final KeycloakContainer keycloak; public KeycloakTestProfile() { keycloak = new KeycloakContainer("quay.io/keycloak/keycloak:24.0.5") - .withRealmImportFile("keycloak/realm-export.json") - .withVerboseOutput(); + .withEnv(Map.of("KEYCLOAK_ADMIN", "admin", "KEYCLOAK_ADMIN_PASSWORD", "admin")) + .withRealmImportFile("keycloak/realm-export.json"); keycloak.start(); } @Override public Map<String, String> getConfigOverrides() { - return Map.of(userKey, "administrationApiUser", - passwordKey, "administrationApiUser", - realmKey, realmValue, - urlKey, keycloak.getAuthServerUrl()); + return Map.of( + "ozgcloud.keycloak.api.password", "administrationApiUser", + "ozgcloud.keycloak.api.user", "administrationApiUser", + "ozgcloud.keycloak.api.realm", "by-kiel-dev", + "keycloak.url", keycloak.getAuthServerUrl()); } + } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java b/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java index 0a38413d..50423d6b 100644 --- a/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java +++ b/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java @@ -32,15 +32,14 @@ import java.util.List; import jakarta.inject.Inject; import org.bson.types.ObjectId; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; -import org.keycloak.admin.client.Keycloak; +import org.junit.jupiter.api.TestMethodOrder; import org.keycloak.admin.client.resource.RealmResource; -import dasniko.testcontainers.keycloak.KeycloakContainer; import de.ozgcloud.user.User; import de.ozgcloud.user.UserTestFactory; import io.quarkus.test.junit.QuarkusTest; @@ -66,13 +65,15 @@ class KeycloakUserRemoteServiceITCase { } @Nested + @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class TestUpdateOzgCloudUserId { private static final String KEYCLOAK_USER_ID = "90748555-7894-4854-8292-1f6106826962"; - @DisplayName("Update ozgCloudUserId attribute in keycloak") + @DisplayName("Set ozgCloudUserId attribute in keycloak on new user") @Test - void shouldUpdateOzgCloudUserId() { + @Order(1) + void shouldSetOzgCloudUserId() { User user = prepareUser(); service.updateOzgCloudUserId(user); @@ -81,19 +82,32 @@ class KeycloakUserRemoteServiceITCase { assertThat(user.getId().toString()).isEqualTo(ozgCloudUserId); } + @DisplayName("Update ozgCloudUserId attribute in keycloak on new user") + @Test + @Order(2) + void shouldUpdateOzgCloudUserId() { + User user = prepareUser(); + var oldCloudUserId = getOzgCloudUserIdFromKeycloak(); + service.updateOzgCloudUserId(user); + + var newCloudUserId = getOzgCloudUserIdFromKeycloak(); + + assertThat(oldCloudUserId).isNotEqualTo(newCloudUserId); + } + private User prepareUser() { return UserTestFactory.createBuilder() - .id(new ObjectId()) - .externalId(KEYCLOAK_USER_ID) - .keycloakUserId(KEYCLOAK_USER_ID) - .email("testerozg+dorothea@gmail.com") - .firstName("Dorothea") - .lastName("Doe") - .fullName("Dorothea Doe") - .fullNameReversed("Doe Dorothea") - .username("dorothea") - .organisationsEinheitIds(List.of("248240886", "9030229", "10363455")) - .build(); + .id(new ObjectId()) + .externalId(KEYCLOAK_USER_ID) + .keycloakUserId(KEYCLOAK_USER_ID) + .email("dorothea@test.local") + .firstName("Dorothea") + .lastName("Doe") + .fullName("Dorothea Doe") + .fullNameReversed("Doe Dorothea") + .username("dorothea") + .organisationsEinheitIds(List.of("248240886", "9030229", "10363455")) + .build(); } private String getOzgCloudUserIdFromKeycloak() { diff --git a/user-manager-server/src/test/resources/keycloak/realm-export.json b/user-manager-server/src/test/resources/keycloak/realm-export.json index 9f3c4805..57020609 100755 --- a/user-manager-server/src/test/resources/keycloak/realm-export.json +++ b/user-manager-server/src/test/resources/keycloak/realm-export.json @@ -2615,9 +2615,26 @@ "value": "administrationApiUser" } ], - "clientRoles" : { - "realm-management" : [ "view-users", "manage-users" ] + "clientRoles": { + "realm-management": [ + "view-users", + "manage-users" + ] } + }, + { + "id": "90748555-7894-4854-8292-1f6106826962", + "username": "dorothea", + "firstName": "Dorothea", + "lastName": "Doe", + "email": "dorothea@test.local", + "enabled": true, + "credentials": [ + { + "type": "password", + "value": "localTestUser" + } + ] } ] } \ No newline at end of file -- GitLab