Merge pull request #1051 from amalhub/master

Adding tests for org.wso2.carbon.identity.jwt.client.extension
4.x.x
Amal Gunatilake 7 years ago committed by GitHub
commit 71d4218d1f

@ -94,6 +94,10 @@
<groupId>org.opensaml</groupId> <groupId>org.opensaml</groupId>
<artifactId>xmltooling</artifactId> <artifactId>xmltooling</artifactId>
</exclusion> </exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
@ -146,6 +150,16 @@
<artifactId>h2-database-engine</artifactId> <artifactId>h2-database-engine</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

@ -19,18 +19,39 @@ package org.wso2.carbon.identity.jwt.client.extension.service;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 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.BeforeClass;
import org.testng.annotations.ObjectFactory;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.wso2.carbon.identity.jwt.client.extension.JWTClient; 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.dto.JWTConfig;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException; 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.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
@PrepareForTest(JWTClientUtil.class)
public class JWTClientTest { 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; private JWTClient jwtClient;
@ -38,25 +59,158 @@ public class JWTClientTest {
public void init() { public void init() {
Properties prop = new Properties(); Properties prop = new Properties();
prop.put("default-jwt-client", "true"); prop.put("default-jwt-client", "true");
prop.put("TokenEndpoint", "http://example.com");
jwtClient = new JWTClient(new JWTConfig(prop)); jwtClient = new JWTClient(new JWTConfig(prop));
} }
@Test(description = "Test get JWT token.") @Test(description = "Test get JWT token.")
public void testGetJwtToken() throws JWTClientException { 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.") @Test(description = "Test get JWT token by claims.")
public void testGetJwtTokenByClaims() throws JWTClientException { public void testGetJwtTokenByClaims() throws JWTClientException {
Map<String, String> claims = new HashMap<>(); Map<String, String> claims = new HashMap<>();
claims.put("name", "admin"); 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<String, String> 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.") @Test(description = "Test get JWT token by tenant sign false.")
public void testGetJwtTokenByTenantSign() throws JWTClientException { public void testGetJwtTokenByTenantSignFalse() throws JWTClientException {
Map<String, String> claims = new HashMap<>(); Map<String, String> claims = new HashMap<>();
claims.put("name", "admin"); 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<String, String> 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<String, String> 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" +
"}");
} }
} }

@ -25,7 +25,7 @@
# settings will override the settings in this file. # settings will override the settings in this file.
# #
log4j.rootLogger=DEBUG, STD_OUT log4j.rootLogger=INFO, STD_OUT
# Redirect log messages to console # Redirect log messages to console
log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender

Loading…
Cancel
Save