From fec6dadcd220ca043b5eb48437e507c78b26a7f0 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 12 Nov 2024 17:02:15 +0100 Subject: [PATCH] Moving tests to d4science-iam-client --- pom.xml | 6 ++ .../resourceregistry/ContextTest.java | 85 +++++++++++-------- 2 files changed, 54 insertions(+), 37 deletions(-) diff --git a/pom.xml b/pom.xml index aa43881..913133d 100644 --- a/pom.xml +++ b/pom.xml @@ -112,5 +112,11 @@ [2.1.0-SNAPSHOT, 3.0.0-SNAPSHOT) test + + org.gcube.common + d4science-iam-client + [1.0.0-SNAPSHOT, 2.0.0) + test + \ No newline at end of file diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/ContextTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/ContextTest.java index a790ca9..967692b 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/ContextTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/ContextTest.java @@ -12,9 +12,9 @@ import org.gcube.common.authorization.utils.manager.SecretManagerProvider; import org.gcube.common.authorization.utils.secret.JWTSecret; import org.gcube.common.authorization.utils.secret.Secret; import org.gcube.common.authorization.utils.secret.SecretUtility; -import org.gcube.common.keycloak.KeycloakClientFactory; -import org.gcube.common.keycloak.KeycloakClientHelper; -import org.gcube.common.keycloak.model.TokenResponse; +import org.gcube.common.iam.D4ScienceIAMClient; +import org.gcube.common.iam.D4ScienceIAMClientAuthn; +import org.gcube.informationsystem.model.reference.properties.Metadata; import org.junit.AfterClass; import org.junit.BeforeClass; import org.slf4j.Logger; @@ -29,9 +29,15 @@ public class ContextTest { protected static final String CONFIG_INI_FILENAME = "config.ini"; - public static final String ROOT_DEV; - public static final String ROOT_PREPROD; - public static final String ROOT_PROD; + public static final String PARENT_DEFAULT_TEST_SCOPE; + public static final String DEFAULT_TEST_SCOPE; + public static final String ALTERNATIVE_TEST_SCOPE; + + public static final String GCUBE; + public static final String DEVNEXT; + public static final String NEXTNEXT; + public static final String DEVSEC; + public static final String DEVVRE; protected static final Properties properties; @@ -40,24 +46,31 @@ public class ContextTest { public static final String PASSWORD_PROPERTY_KEY = "password"; public static final String CLIENT_ID_PROPERTY_KEY = "clientId"; + public static final String RESOURCE_REGISTRY_URL_PROPERTY = "RESOURCE_REGISTRY_URL"; + static { - ROOT_DEV = "/gcube"; - ROOT_PREPROD = "/pred4s"; - ROOT_PROD = "/d4science.research-infrastructures.eu"; - + GCUBE = "/gcube"; + DEVNEXT = GCUBE + "/devNext"; + NEXTNEXT = DEVNEXT + "/NextNext"; + DEVSEC = GCUBE + "/devsec"; + DEVVRE = DEVSEC + "/devVRE"; + + PARENT_DEFAULT_TEST_SCOPE = GCUBE; + DEFAULT_TEST_SCOPE = DEVNEXT; + ALTERNATIVE_TEST_SCOPE = NEXTNEXT; + properties = new Properties(); InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(CONFIG_INI_FILENAME); try { // load the properties file properties.load(input); - } catch (IOException e) { throw new RuntimeException(e); } } - public enum Type{ + private enum Type{ USER, CLIENT_ID }; @@ -76,20 +89,22 @@ public class ContextTest { } - private static TokenResponse getJWTAccessToken(String context) throws Exception { + protected static String getJWTAccessToken(String context) throws Exception { Type type = Type.valueOf(properties.get(TYPE_PROPERTY_KEY).toString()); - TokenResponse tr = null; + String accessToken = null; int index = context.indexOf('/', 1); String root = context.substring(0, index == -1 ? context.length() : index); + D4ScienceIAMClient iamClient = D4ScienceIAMClient.newInstance(root); + D4ScienceIAMClientAuthn d4ScienceIAMClientAuthn = null; switch (type) { case CLIENT_ID: String clientId = properties.getProperty(CLIENT_ID_PROPERTY_KEY); String clientSecret = properties.getProperty(root); - tr = KeycloakClientFactory.newInstance().queryUMAToken(context, clientId, clientSecret, context, null); + d4ScienceIAMClientAuthn = iamClient.authenticate(clientId, clientSecret, context); break; case USER: @@ -97,34 +112,20 @@ public class ContextTest { String username = properties.getProperty(USERNAME_PROPERTY_KEY); String password = properties.getProperty(PASSWORD_PROPERTY_KEY); - switch (root) { - case "/gcube": - default: - clientId = "next.d4science.org"; - break; - - case "/pred4s": - clientId = "pre.d4science.org"; - break; - - case "/d4science.research-infrastructures.eu": - clientId = "services.d4science.org"; - break; - } - clientSecret = null; - - tr = KeycloakClientHelper.getTokenForUser(context, username, password); + d4ScienceIAMClientAuthn = iamClient.authenticateUser(username, password, context); break; } - - return tr; + accessToken = d4ScienceIAMClientAuthn.getAccessTokenString(); + + logger.trace("Generated Access Token is {}", accessToken); + return accessToken; } public static Secret getSecretByContextName(String context) throws Exception { - TokenResponse tr = getJWTAccessToken(context); - Secret secret = new JWTSecret(tr.getAccessToken()); + String accessToken = getJWTAccessToken(context); + Secret secret = new JWTSecret(accessToken); return secret; } @@ -138,9 +139,19 @@ public class ContextTest { return secret; } + public static String getUser() { + String user = Metadata.UNKNOWN_USER; + try { + user = SecretManagerProvider.instance.get().getUser().getUsername(); + } catch(Exception e) { + logger.error("Unable to retrieve user. {} will be used", user); + } + return user; + } + @BeforeClass public static void beforeClass() throws Exception { - setContextByName(ROOT_DEV); + setContextByName(DEFAULT_TEST_SCOPE); } @AfterClass