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; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @FixMethodOrder(MethodSorters.NAME_ASCENDING) 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"; private static TokenResponse tr = null; @Before public void setUp() throws Exception { ScopeProvider.instance.set("/gcube"); } @After public void tearDown() throws Exception { } @Test public void test1EndpointDiscovery() throws Exception { logger.info("Start testing Keycloak endpoint discovery..."); URL url = KeycloakClientFactory.newInstance().findTokenEndpointURL(); Assert.assertNotNull(url); Assert.assertTrue(url.getProtocol().equals("https")); logger.info("Discovered URL is: {}", url); } @Test public void test2QueryUMATokenWithDiscoveryInCurrentScope() throws Exception { logger.info("Start testing query UMA token from Keycloak with endpoint discovery and current scope..."); tr = KeycloakClientFactory.newInstance().queryUMAToken(CLIENT_ID, CLIENT_SECRET, null); TestModels.checkTokenResponse(tr); TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(tr), "service-account-" + CLIENT_ID); } @Test public void test3QueryUMATokenWithDiscovery() throws Exception { logger.info("Start testing query UMA token from Keycloak with endpoint discovery..."); tr = KeycloakClientFactory.newInstance().queryUMAToken(CLIENT_ID, CLIENT_SECRET, TEST_AUDIENCE, null); TestModels.checkTokenResponse(tr); TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(tr), "service-account-" + CLIENT_ID); } @Test public void test4QueryUMAToken() throws Exception { logger.info("Start testing query UMA token from Keycloak with URL..."); tr = KeycloakClientFactory.newInstance().queryUMAToken(new URL(DEV_ENDPOINT), CLIENT_ID, CLIENT_SECRET, TEST_AUDIENCE, null); TestModels.checkTokenResponse(tr); TestModels.checkAccessToken(ModelUtils.getAccessTokenFrom(tr), "service-account-" + CLIENT_ID); } @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)); } }