Sauli Ketola
7 years ago
3 changed files with 224 additions and 0 deletions
@ -0,0 +1,96 @@
|
||||
package org.mitre.oauth2.repository.impl; |
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8; |
||||
|
||||
import java.io.IOException; |
||||
import java.nio.file.Files; |
||||
import java.nio.file.Paths; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import javax.persistence.EntityManagerFactory; |
||||
import javax.sql.DataSource; |
||||
|
||||
import org.springframework.beans.factory.FactoryBean; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.core.io.ByteArrayResource; |
||||
import org.springframework.core.io.DefaultResourceLoader; |
||||
import org.springframework.core.io.Resource; |
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; |
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; |
||||
import org.springframework.orm.jpa.JpaTransactionManager; |
||||
import org.springframework.orm.jpa.JpaVendorAdapter; |
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; |
||||
import org.springframework.orm.jpa.vendor.Database; |
||||
import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter; |
||||
import org.springframework.transaction.PlatformTransactionManager; |
||||
|
||||
public class TestDatabaseConfiguration { |
||||
|
||||
@Autowired |
||||
private JpaVendorAdapter jpaAdapter; |
||||
|
||||
@Autowired |
||||
private DataSource dataSource; |
||||
|
||||
@Autowired |
||||
private EntityManagerFactory entityManagerFactory; |
||||
|
||||
@Bean |
||||
public JpaOAuth2TokenRepository repository() { |
||||
return new JpaOAuth2TokenRepository(); |
||||
} |
||||
|
||||
@Bean(name = "defaultPersistenceUnit") |
||||
public FactoryBean<EntityManagerFactory> entityManagerFactory() { |
||||
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); |
||||
factory.setPackagesToScan("org.mitre", "org.mitre"); |
||||
factory.setPersistenceProviderClass(org.eclipse.persistence.jpa.PersistenceProvider.class); |
||||
factory.setPersistenceUnitName("test" + System.currentTimeMillis()); |
||||
factory.setDataSource(dataSource); |
||||
factory.setJpaVendorAdapter(jpaAdapter); |
||||
Map<String, Object> jpaProperties = new HashMap<String, Object>(); |
||||
jpaProperties.put("eclipselink.weaving", "false"); |
||||
jpaProperties.put("eclipselink.logging.level", "INFO"); |
||||
jpaProperties.put("eclipselink.logging.level.sql", "INFO"); |
||||
jpaProperties.put("eclipselink.cache.shared.default", "false"); |
||||
factory.setJpaPropertyMap(jpaProperties); |
||||
|
||||
return factory; |
||||
} |
||||
|
||||
@Bean |
||||
public DataSource dataSource() { |
||||
return new EmbeddedDatabaseBuilder(new DefaultResourceLoader() { |
||||
@Override |
||||
public Resource getResource(String location) { |
||||
String sql; |
||||
try { |
||||
sql = new String(Files.readAllBytes(Paths.get("..", "openid-connect-server-webapp", "src", "main", |
||||
"resources", "db", "hsql", location)), UTF_8); |
||||
} catch (IOException e) { |
||||
throw new RuntimeException("Failed to read sql-script " + location, e); |
||||
} |
||||
|
||||
return new ByteArrayResource(sql.getBytes(UTF_8)); |
||||
} |
||||
}).generateUniqueName(true).setScriptEncoding(UTF_8.name()).setType(EmbeddedDatabaseType.HSQL) |
||||
.addScripts("hsql_database_tables.sql").build(); |
||||
} |
||||
|
||||
@Bean |
||||
public JpaVendorAdapter jpaAdapter() { |
||||
EclipseLinkJpaVendorAdapter adapter = new EclipseLinkJpaVendorAdapter(); |
||||
adapter.setDatabase(Database.HSQL); |
||||
adapter.setShowSql(true); |
||||
return adapter; |
||||
} |
||||
|
||||
@Bean |
||||
public PlatformTransactionManager transactionManager() { |
||||
JpaTransactionManager platformTransactionManager = new JpaTransactionManager(); |
||||
platformTransactionManager.setEntityManagerFactory(entityManagerFactory); |
||||
return platformTransactionManager; |
||||
} |
||||
} |
@ -0,0 +1,107 @@
|
||||
package org.mitre.oauth2.repository.impl; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import javax.persistence.EntityManager; |
||||
import javax.persistence.PersistenceContext; |
||||
|
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.mitre.oauth2.model.AuthenticationHolderEntity; |
||||
import org.mitre.oauth2.model.OAuth2AccessTokenEntity; |
||||
import org.mitre.oauth2.model.OAuth2RefreshTokenEntity; |
||||
import org.mitre.oauth2.model.SavedUserAuthentication; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.junit4.SpringRunner; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
@RunWith(SpringRunner.class) |
||||
@ContextConfiguration(classes = { TestDatabaseConfiguration.class }) |
||||
@Transactional |
||||
public class TestJpaOAuth2TokenRepository { |
||||
|
||||
@Autowired |
||||
private JpaOAuth2TokenRepository repository; |
||||
|
||||
@PersistenceContext |
||||
private EntityManager entityManager; |
||||
|
||||
@Before |
||||
public void setUp(){ |
||||
createAccessToken("user1"); |
||||
createAccessToken("user1"); |
||||
createAccessToken("user2"); |
||||
createAccessToken("user2"); |
||||
|
||||
createRefreshToken("user1"); |
||||
createRefreshToken("user1"); |
||||
createRefreshToken("user2"); |
||||
createRefreshToken("user2"); |
||||
createRefreshToken("user2"); |
||||
} |
||||
|
||||
@Test |
||||
public void testGetAccessTokensByUserName() { |
||||
Set<OAuth2AccessTokenEntity> tokens = repository.getAccessTokensByUserName("user1"); |
||||
assertEquals(2, tokens.size()); |
||||
assertEquals("user1", tokens.iterator().next().getAuthenticationHolder().getUserAuth().getName()); |
||||
} |
||||
|
||||
@Test |
||||
public void testGetRefreshTokensByUserName() { |
||||
Set<OAuth2RefreshTokenEntity> tokens = repository.getRefreshTokensByUserName("user2"); |
||||
assertEquals(3, tokens.size()); |
||||
assertEquals("user2", tokens.iterator().next().getAuthenticationHolder().getUserAuth().getName()); |
||||
} |
||||
|
||||
@Test |
||||
public void testGetAllAccessTokens(){ |
||||
Set<OAuth2AccessTokenEntity> tokens = repository.getAllAccessTokens(); |
||||
assertEquals(4, tokens.size()); |
||||
} |
||||
|
||||
@Test |
||||
public void testGetAllRefreshTokens(){ |
||||
Set<OAuth2RefreshTokenEntity> tokens = repository.getAllRefreshTokens(); |
||||
assertEquals(5, tokens.size()); |
||||
} |
||||
|
||||
private OAuth2AccessTokenEntity createAccessToken(String name) { |
||||
SavedUserAuthentication userAuth = new SavedUserAuthentication(); |
||||
userAuth.setName(name); |
||||
userAuth = entityManager.merge(userAuth); |
||||
|
||||
AuthenticationHolderEntity authHolder = new AuthenticationHolderEntity(); |
||||
authHolder.setUserAuth(userAuth); |
||||
authHolder = entityManager.merge(authHolder); |
||||
|
||||
OAuth2AccessTokenEntity accessToken = new OAuth2AccessTokenEntity(); |
||||
accessToken.setAuthenticationHolder(authHolder); |
||||
|
||||
accessToken = entityManager.merge(accessToken); |
||||
|
||||
return accessToken; |
||||
} |
||||
|
||||
private OAuth2RefreshTokenEntity createRefreshToken(String name) { |
||||
SavedUserAuthentication userAuth = new SavedUserAuthentication(); |
||||
userAuth.setName(name); |
||||
userAuth = entityManager.merge(userAuth); |
||||
|
||||
AuthenticationHolderEntity authHolder = new AuthenticationHolderEntity(); |
||||
authHolder.setUserAuth(userAuth); |
||||
authHolder = entityManager.merge(authHolder); |
||||
|
||||
OAuth2RefreshTokenEntity refreshToken = new OAuth2RefreshTokenEntity(); |
||||
refreshToken.setAuthenticationHolder(authHolder); |
||||
|
||||
refreshToken = entityManager.merge(refreshToken); |
||||
|
||||
return refreshToken; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue