From 322a9509fbf91e3632a79caa5e6cf9797ed4762b Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 27 Mar 2024 14:54:41 +0100 Subject: [PATCH] Added new version of base class for tests --- src/test/java/org/gcube/gcat/ContextTest.java | 153 +++++++++++++++--- .../org/gcube/gcat/ContextTestOldAuth.java | 89 ++++++++++ 2 files changed, 216 insertions(+), 26 deletions(-) create mode 100644 src/test/java/org/gcube/gcat/ContextTestOldAuth.java diff --git a/src/test/java/org/gcube/gcat/ContextTest.java b/src/test/java/org/gcube/gcat/ContextTest.java index 108a400..17f1369 100644 --- a/src/test/java/org/gcube/gcat/ContextTest.java +++ b/src/test/java/org/gcube/gcat/ContextTest.java @@ -9,76 +9,177 @@ import java.util.Properties; import org.gcube.common.authorization.utils.manager.SecretManager; 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.junit.AfterClass; import org.junit.BeforeClass; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) */ public class ContextTest { - protected static Properties properties; - protected static final String PROPERTIES_FILENAME = "token.properties"; + private static final Logger logger = LoggerFactory.getLogger(ContextTest.class); + + protected static final String CONFIG_INI_FILENAME = "config.ini"; + + public static final String DEFAULT_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; public static final String ROOT; public static final String VO; public static final String VRE; + private static final String ROOT_PRE; + private static final String VO_PREPROD; + protected static final String VRE_GRSF_PRE; + + private static final String ROOT_PROD; + + + protected static final Properties properties; + + public static final String TYPE_PROPERTY_KEY = "type"; + public static final String USERNAME_PROPERTY_KEY = "username"; + public static final String PASSWORD_PROPERTY_KEY = "password"; + public static final String CLIENT_ID_PROPERTY_KEY = "clientId"; + static { - properties = new Properties(); - InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(PROPERTIES_FILENAME); + GCUBE = "/gcube"; + DEVNEXT = GCUBE + "/devNext"; + NEXTNEXT = DEVNEXT + "/NextNext"; + DEVSEC = GCUBE + "/devsec"; + DEVVRE = DEVSEC + "/devVRE"; + ROOT = GCUBE; + VO = DEVSEC; + VRE = DEVVRE; + + ROOT_PRE = "/pred4s"; + VO_PREPROD = ROOT_PRE + "/preprod"; + VRE_GRSF_PRE = VO_PREPROD + "/GRSF_Pre"; + + ROOT_PROD = "/d4science.research-infrastructures.eu"; + + DEFAULT_TEST_SCOPE = VRE; +// DEFAULT_TEST_SCOPE = VRE_GRSF_PRE; + + properties = new Properties(); + InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(CONFIG_INI_FILENAME); try { // load the properties file properties.load(input); - } catch(IOException e) { + } catch (IOException e) { throw new RuntimeException(e); } - // DEFAULT_TEST_SCOPE_NAME = "/pred4s/preprod/preVRE"; - // DEFAULT_TEST_SCOPE_NAME = "/gcube/devsec/devVRE"; - - ROOT = "/gcube"; - VO = ROOT + "/devsec"; - VRE = VO + "/devVRE"; - // VO = ROOT + "/devNext"; - // VRE = VO + "/NextNext"; - } + private enum Type{ + USER, CLIENT_ID + }; + public static void set(Secret secret) throws Exception { SecretManagerProvider.instance.reset(); - SecretManager secretManager = new SecretManager(); - SecretManagerProvider.instance.set(secretManager); + SecretManager secretManager = new SecretManager(); secretManager.addSecret(secret); - secretManager.set(); + SecretManagerProvider.instance.set(secretManager); + SecretManagerProvider.instance.get().set(); + } + + public static void setContextByName(String fullContextName) throws Exception { + logger.debug("Going to set credentials for context {}", fullContextName); + Secret secret = getSecretByContextName(fullContextName); + set(secret); + } + + + private static TokenResponse getJWTAccessToken(String context) throws Exception { + Type type = Type.valueOf(properties.get(TYPE_PROPERTY_KEY).toString()); + + TokenResponse tr = null; + + int index = context.indexOf('/', 1); + String root = context.substring(0, index == -1 ? context.length() : index); + + 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); + break; + + case USER: + default: + 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); + break; + + } + + return tr; + + } + + public static Secret getSecretByContextName(String context) throws Exception { + TokenResponse tr = getJWTAccessToken(context); + Secret secret = new JWTSecret(tr.getAccessToken()); + return secret; } public static void setContext(String token) throws Exception { Secret secret = getSecret(token); set(secret); } - - public static void setContextByName(String fullContextName) throws Exception { - Secret secret = getSecretByContextName(fullContextName); - set(secret); - } private static Secret getSecret(String token) throws Exception { Secret secret = SecretUtility.getSecretByTokenString(token); return secret; } - private static Secret getSecretByContextName(String fullContextName) throws Exception { - String token = ContextTest.properties.getProperty(fullContextName); - return getSecret(token); + public static String getUser() { + String user = "UNKNOWN"; + 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(VRE); + setContextByName(DEFAULT_TEST_SCOPE); } @AfterClass diff --git a/src/test/java/org/gcube/gcat/ContextTestOldAuth.java b/src/test/java/org/gcube/gcat/ContextTestOldAuth.java new file mode 100644 index 0000000..a9b7e17 --- /dev/null +++ b/src/test/java/org/gcube/gcat/ContextTestOldAuth.java @@ -0,0 +1,89 @@ +/** + * + */ +package org.gcube.gcat; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.gcube.common.authorization.utils.manager.SecretManager; +import org.gcube.common.authorization.utils.manager.SecretManagerProvider; +import org.gcube.common.authorization.utils.secret.Secret; +import org.gcube.common.authorization.utils.secret.SecretUtility; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class ContextTestOldAuth { + + protected static Properties properties; + protected static final String PROPERTIES_FILENAME = "token.properties"; + + public static final String ROOT; + public static final String VO; + public static final String VRE; + + static { + properties = new Properties(); + InputStream input = ContextTestOldAuth.class.getClassLoader().getResourceAsStream(PROPERTIES_FILENAME); + + try { + // load the properties file + properties.load(input); + } catch(IOException e) { + throw new RuntimeException(e); + } + + // DEFAULT_TEST_SCOPE_NAME = "/pred4s/preprod/preVRE"; + // DEFAULT_TEST_SCOPE_NAME = "/gcube/devsec/devVRE"; + + ROOT = "/gcube"; + VO = ROOT + "/devsec"; + VRE = VO + "/devVRE"; + // VO = ROOT + "/devNext"; + // VRE = VO + "/NextNext"; + + } + + public static void set(Secret secret) throws Exception { + SecretManagerProvider.instance.reset(); + SecretManager secretManager = new SecretManager(); + SecretManagerProvider.instance.set(secretManager); + secretManager.addSecret(secret); + secretManager.set(); + } + + public static void setContext(String token) throws Exception { + Secret secret = getSecret(token); + set(secret); + } + + public static void setContextByName(String fullContextName) throws Exception { + Secret secret = getSecretByContextName(fullContextName); + set(secret); + } + + private static Secret getSecret(String token) throws Exception { + Secret secret = SecretUtility.getSecretByTokenString(token); + return secret; + } + + private static Secret getSecretByContextName(String fullContextName) throws Exception { + String token = ContextTestOldAuth.properties.getProperty(fullContextName); + return getSecret(token); + } + + @BeforeClass + public static void beforeClass() throws Exception { + setContextByName(VRE); + } + + @AfterClass + public static void afterClass() throws Exception { + SecretManagerProvider.instance.reset(); + } + +}