2021-05-28 18:29:06 +02:00
|
|
|
package org.gcube.common.keycloak;
|
|
|
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
|
|
|
import org.gcube.common.keycloak.model.ModelUtils;
|
|
|
|
import org.gcube.common.keycloak.model.TokenResponse;
|
|
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
|
|
import org.junit.After;
|
|
|
|
import org.junit.Assert;
|
|
|
|
import org.junit.Before;
|
2021-12-09 15:05:26 +01:00
|
|
|
import org.junit.FixMethodOrder;
|
2021-05-28 18:29:06 +02:00
|
|
|
import org.junit.Test;
|
2021-12-09 15:05:26 +01:00
|
|
|
import org.junit.runners.MethodSorters;
|
2021-05-28 18:29:06 +02:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
2021-12-09 15:05:26 +01:00
|
|
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
2021-05-28 18:29:06 +02:00
|
|
|
public class TestKeycloakClient {
|
|
|
|
|
|
|
|
protected static final Logger logger = LoggerFactory.getLogger(TestKeycloakClient.class);
|
|
|
|
|
|
|
|
private static final String DEV_ENDPOINT = "http://accounts.dev.d4science.org/auth/realms/d4science/protocol/openid-connect/token";
|
|
|
|
private static final String CLIENT_ID = "keycloak-client";
|
|
|
|
private static final String CLIENT_SECRET = "38f76152-2b7c-418f-9b67-66f4cc2f401e";
|
|
|
|
private static final String TEST_AUDIENCE = "conductor-server";
|
|
|
|
|
2021-12-09 15:05:26 +01:00
|
|
|
private static TokenResponse tr = null;
|
|
|
|
|
2021-05-28 18:29:06 +02:00
|
|
|
@Before
|
|
|
|
public void setUp() throws Exception {
|
|
|
|
ScopeProvider.instance.set("/gcube");
|
|
|
|
}
|
|
|
|
|
|
|
|
@After
|
|
|
|
public void tearDown() throws Exception {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-12-09 15:05:26 +01:00
|
|
|
public void test1EndpointDiscovery() throws Exception {
|
2021-05-28 18:29:06 +02:00
|
|
|
logger.info("Start testing Keycloak endpoint discovery...");
|
|
|
|
URL url = KeycloakClientFactory.newInstance().findTokenEndpointURL();
|
|
|
|
Assert.assertNotNull(url);
|
|
|
|
Assert.assertTrue(url.getProtocol().equals("https"));
|
2021-06-22 12:48:32 +02:00
|
|
|
logger.info("Discovered URL is: {}", url);
|
2021-05-28 18:29:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-12-09 15:05:26 +01:00
|
|
|
public void test2QueryUMATokenWithDiscoveryInCurrentScope() throws Exception {
|
2021-05-28 18:29:06 +02:00
|
|
|
logger.info("Start testing query UMA token from Keycloak with endpoint discovery and current scope...");
|
2021-12-09 15:05:26 +01:00
|
|
|
tr = KeycloakClientFactory.newInstance().queryUMAToken(CLIENT_ID, CLIENT_SECRET, null);
|
2021-05-28 18:29:06 +02:00
|
|
|
TestModels.checkTokenResponse(tr);
|
|
|
|
TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(tr), "service-account-" + CLIENT_ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-12-09 15:05:26 +01:00
|
|
|
public void test3QueryUMATokenWithDiscovery() throws Exception {
|
2021-05-28 18:29:06 +02:00
|
|
|
logger.info("Start testing query UMA token from Keycloak with endpoint discovery...");
|
2021-12-09 15:05:26 +01:00
|
|
|
tr = KeycloakClientFactory.newInstance().queryUMAToken(CLIENT_ID, CLIENT_SECRET, TEST_AUDIENCE, null);
|
2021-05-28 18:29:06 +02:00
|
|
|
TestModels.checkTokenResponse(tr);
|
|
|
|
TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(tr), "service-account-" + CLIENT_ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-12-09 15:05:26 +01:00
|
|
|
public void test4QueryUMAToken() throws Exception {
|
2021-05-28 18:29:06 +02:00
|
|
|
logger.info("Start testing query UMA token from Keycloak with URL...");
|
2021-12-09 15:05:26 +01:00
|
|
|
tr = KeycloakClientFactory.newInstance().queryUMAToken(new URL(DEV_ENDPOINT), CLIENT_ID, CLIENT_SECRET,
|
|
|
|
TEST_AUDIENCE, null);
|
2021-05-28 18:29:06 +02:00
|
|
|
|
|
|
|
TestModels.checkTokenResponse(tr);
|
|
|
|
TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(tr), "service-account-" + CLIENT_ID);
|
|
|
|
}
|
|
|
|
|
2021-12-09 15:05:26 +01:00
|
|
|
@Test
|
|
|
|
public void test5RefreshTokenWithDiscovery() throws Exception {
|
|
|
|
logger.info("Start testing refresh UMA token from Keycloak with endpoint discovery...");
|
|
|
|
TokenResponse refreshedTR = KeycloakClientFactory.newInstance().refreshToken(CLIENT_ID, CLIENT_SECRET, tr);
|
|
|
|
TestModels.checkTokenResponse(refreshedTR);
|
|
|
|
TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(refreshedTR), "service-account-" + CLIENT_ID);
|
|
|
|
TestModels.checkRefreshToken(ModelUtils.getRefreshTokenFrom(refreshedTR));
|
|
|
|
}
|
|
|
|
|
2021-05-28 18:29:06 +02:00
|
|
|
}
|