Integration tests for new repository methods
							parent
							
								
									a070f61edf
								
							
						
					
					
						commit
						e6a8e0c17d
					
				| 
						 | 
				
			
			@ -47,10 +47,31 @@
 | 
			
		|||
			<groupId>org.springframework</groupId>
 | 
			
		||||
			<artifactId>spring-tx</artifactId>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.springframework</groupId>
 | 
			
		||||
			<artifactId>spring-orm</artifactId>
 | 
			
		||||
			<scope>test</scope>
 | 
			
		||||
			<exclusions>
 | 
			
		||||
				<exclusion>
 | 
			
		||||
					<groupId>commons-logging</groupId>
 | 
			
		||||
					<artifactId>commons-logging</artifactId>
 | 
			
		||||
				</exclusion>
 | 
			
		||||
			</exclusions>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.eclipse.persistence</groupId>
 | 
			
		||||
			<artifactId>org.eclipse.persistence.core</artifactId>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.hsqldb</groupId>
 | 
			
		||||
			<artifactId>hsqldb</artifactId>
 | 
			
		||||
			<scope>test</scope>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.eclipse.persistence</groupId>
 | 
			
		||||
			<artifactId>org.eclipse.persistence.jpa</artifactId>
 | 
			
		||||
			<scope>test</scope>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.apache.commons</groupId>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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