From 6493e037b912900ef77116b9d90f98c4906ef8c8 Mon Sep 17 00:00:00 2001 From: amalhub Date: Thu, 12 Oct 2017 15:26:48 +0530 Subject: [PATCH] Adding tests for org.wso2.carbon.identity.jwt.client.extension --- .../pom.xml | 14 ++ .../extension/service/JWTClientTest.java | 166 +++++++++++++++++- .../src/test/resources/log4j.properties | 2 +- 3 files changed, 175 insertions(+), 7 deletions(-) diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml index 23fecff16f..d2cda0ade2 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml @@ -94,6 +94,10 @@ org.opensaml xmltooling + + jboss + javassist + @@ -146,6 +150,16 @@ h2-database-engine test + + org.powermock + powermock-module-testng + test + + + org.powermock + powermock-api-mockito + test + diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientTest.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientTest.java index 33311c953d..a9c759e29e 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientTest.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientTest.java @@ -19,18 +19,39 @@ package org.wso2.carbon.identity.jwt.client.extension.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.testng.Assert; +import org.testng.IObjectFactory; import org.testng.annotations.BeforeClass; +import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; import org.wso2.carbon.identity.jwt.client.extension.JWTClient; +import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo; import org.wso2.carbon.identity.jwt.client.extension.dto.JWTConfig; import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException; +import org.wso2.carbon.identity.jwt.client.extension.util.JWTClientUtil; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.Map; import java.util.Properties; +@PrepareForTest(JWTClientUtil.class) public class JWTClientTest { - private static final Log log = LogFactory.getLog(JWTClientManagerServiceTest.class); + private static final Log log = LogFactory.getLog(JWTClientTest.class); + + @ObjectFactory + public IObjectFactory getObjectFactory() { + return new org.powermock.modules.testng.PowerMockObjectFactory(); + } private JWTClient jwtClient; @@ -38,25 +59,158 @@ public class JWTClientTest { public void init() { Properties prop = new Properties(); prop.put("default-jwt-client", "true"); + prop.put("TokenEndpoint", "http://example.com"); jwtClient = new JWTClient(new JWTConfig(prop)); } @Test(description = "Test get JWT token.") public void testGetJwtToken() throws JWTClientException { - jwtClient.getJwtToken("admin"); + String mockToken = "123456789"; + PowerMockito.mockStatic(JWTClientUtil.class); + PowerMockito.when(JWTClientUtil.generateSignedJWTAssertion(Mockito.anyString(), Mockito.any(JWTConfig.class), + Mockito.anyBoolean())).thenReturn(mockToken); + String token = jwtClient.getJwtToken("admin"); + Assert.assertEquals(token, mockToken); } @Test(description = "Test get JWT token by claims.") public void testGetJwtTokenByClaims() throws JWTClientException { Map claims = new HashMap<>(); claims.put("name", "admin"); - jwtClient.getJwtToken("admin", claims); + String mockToken = "123456789"; + PowerMockito.mockStatic(JWTClientUtil.class); + PowerMockito.when(JWTClientUtil.generateSignedJWTAssertion(Mockito.anyString(), Mockito.any(JWTConfig.class), + Mockito.anyBoolean(), Mockito.any())).thenReturn(mockToken); + String token = jwtClient.getJwtToken("admin", claims); + Assert.assertEquals(token, mockToken); + } + + @Test(description = "Test get JWT token by tenant sign true.") + public void testGetJwtTokenByTenantSignTrue() throws JWTClientException { + Map claims = new HashMap<>(); + claims.put("name", "admin"); + String mockToken = "123456789"; + PowerMockito.mockStatic(JWTClientUtil.class); + PowerMockito.when(JWTClientUtil.generateSignedJWTAssertion(Mockito.anyString(), Mockito.any(JWTConfig.class), + Mockito.anyBoolean(), Mockito.any())).thenReturn(mockToken); + String token = jwtClient.getJwtToken("admin", claims, true); + Assert.assertEquals(token, mockToken); } - @Test(description = "Test get JWT token by tenant sign.") - public void testGetJwtTokenByTenantSign() throws JWTClientException { + @Test(description = "Test get JWT token by tenant sign false.") + public void testGetJwtTokenByTenantSignFalse() throws JWTClientException { Map claims = new HashMap<>(); claims.put("name", "admin"); - jwtClient.getJwtToken("admin", claims, true); + String mockToken = "123456789"; + PowerMockito.mockStatic(JWTClientUtil.class); + PowerMockito.when(JWTClientUtil.generateSignedJWTAssertion(Mockito.anyString(), Mockito.any(JWTConfig.class), + Mockito.anyBoolean(), Mockito.any())).thenReturn(mockToken); + String token = jwtClient.getJwtToken("admin", claims, false); + Assert.assertEquals(token, mockToken); + } + + @Test(description = "Test get token info.") + public void testGetTokenInfo() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, + IOException, JWTClientException { + mockJWTClientUtil(); + AccessTokenInfo tokenInfo = jwtClient.getAccessToken("key", "secret", "admin", "default"); + Assert.assertEquals(tokenInfo.getAccessToken(), "b7882d23f1f8257f4bc6cf4a20633ab1"); + } + + @Test(description = "Test get token info assertion null.") + public void testGetTokenInfoAssertionNull() throws KeyManagementException, NoSuchAlgorithmException, + KeyStoreException, + IOException { + HttpClient httpClient = Mockito.mock(HttpClient.class); + HttpResponse httpResponse = Mockito.mock(HttpResponse.class); + Mockito.when(httpClient.execute(Mockito.any(HttpPost.class))).thenReturn(httpResponse); + + PowerMockito.mockStatic(JWTClientUtil.class); + try { + PowerMockito.when(JWTClientUtil.generateSignedJWTAssertion(Mockito.anyString(), Mockito.any(JWTConfig + .class), + + Mockito.anyBoolean())).thenReturn(null); + PowerMockito.when(JWTClientUtil.getHttpClient(Mockito.anyString())).thenReturn(httpClient); + PowerMockito.when(JWTClientUtil.getResponseString(Mockito.any(HttpResponse.class))).thenReturn + ("\n" + + "{\n" + + " \"scope\":\"default\",\n" + + " \"token_type\":\"Bearer\",\n" + + " \"expires_in\":3600,\n" + + " \"refresh_token\":\"7ed6bae2b1d36c041787e8c8e2d6cbf8\",\n" + + " \"access_token\":\"b7882d23f1f8257f4bc6cf4a20633ab1\"\n" + + "}"); + jwtClient.getAccessToken("key", "secret", "admin", "default"); + Assert.fail(); + } catch (JWTClientException e) { + Assert.assertNotNull(e); + } + } + + @Test(description = "Test get token info with encoded app credentials.") + public void testGetTokenInfoWithEncodeCredentials() throws KeyManagementException, NoSuchAlgorithmException, + KeyStoreException, + IOException, JWTClientException { + mockJWTClientUtil(); + AccessTokenInfo tokenInfo = jwtClient.getAccessToken("a2V5OnNlY3JldA==", "admin", "default"); + Assert.assertEquals(tokenInfo.getAccessToken(), "b7882d23f1f8257f4bc6cf4a20633ab1"); + } + + @Test(description = "Test get token info with invalid encoded app credentials.") + public void testGetTokenInfoWithInvalidEncodeCredentials() throws KeyManagementException, + NoSuchAlgorithmException, KeyStoreException, + IOException { + try { + mockJWTClientUtil(); + jwtClient.getAccessToken("8s7d6fgh4j3", "admin", "default"); + Assert.fail(); + } catch (JWTClientException e) { + Assert.assertNotNull(e); + } + } + + @Test(description = "Test get token info with name value pair.") + public void testGetTokenInfoWithNameValue() throws KeyManagementException, NoSuchAlgorithmException, + KeyStoreException, + IOException, JWTClientException { + mockJWTClientUtil(); + Map map = new HashMap(); + map.put("admin", "admin"); + AccessTokenInfo tokenInfo = jwtClient.getAccessToken("key", "secret", "admin", "default", map); + Assert.assertEquals(tokenInfo.getAccessToken(), "b7882d23f1f8257f4bc6cf4a20633ab1"); + } + + @Test(description = "Test get token from refresh token.") + public void testGetAccessTokenFromRefreshToken() throws KeyManagementException, NoSuchAlgorithmException, + KeyStoreException, + IOException, JWTClientException { + mockJWTClientUtil(); + Map map = new HashMap(); + map.put("admin", "admin"); + AccessTokenInfo tokenInfo = jwtClient.getAccessTokenFromRefreshToken("7ed6bae2b1d36c041787e8c8e2d6cbf8", + "admin", "default", "key", "secret"); + Assert.assertEquals(tokenInfo.getAccessToken(), "b7882d23f1f8257f4bc6cf4a20633ab1"); + } + + private void mockJWTClientUtil() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, + IOException, JWTClientException { + HttpClient httpClient = Mockito.mock(HttpClient.class); + HttpResponse httpResponse = Mockito.mock(HttpResponse.class); + Mockito.when(httpClient.execute(Mockito.any(HttpPost.class))).thenReturn(httpResponse); + + PowerMockito.mockStatic(JWTClientUtil.class); + PowerMockito.when(JWTClientUtil.generateSignedJWTAssertion(Mockito.anyString(), Mockito.any(JWTConfig.class), + Mockito.anyBoolean())).thenReturn("b7882d23f1f8257f4bc6cf4a20633ab1"); + PowerMockito.when(JWTClientUtil.getHttpClient(Mockito.anyString())).thenReturn(httpClient); + PowerMockito.when(JWTClientUtil.getResponseString(Mockito.any(HttpResponse.class))).thenReturn + ("\n" + + "{\n" + + " \"scope\":\"default\",\n" + + " \"token_type\":\"Bearer\",\n" + + " \"expires_in\":3600,\n" + + " \"refresh_token\":\"7ed6bae2b1d36c041787e8c8e2d6cbf8\",\n" + + " \"access_token\":\"b7882d23f1f8257f4bc6cf4a20633ab1\"\n" + + "}"); } } diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/resources/log4j.properties b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/resources/log4j.properties index 90c5d0edce..7e18cfdc75 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/resources/log4j.properties +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/test/resources/log4j.properties @@ -25,7 +25,7 @@ # settings will override the settings in this file. # -log4j.rootLogger=DEBUG, STD_OUT +log4j.rootLogger=INFO, STD_OUT # Redirect log messages to console log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender