Skip to content

Commit e6a8e0c

Browse files
author
Sauli Ketola
committed
Integration tests for new repository methods
1 parent a070f61 commit e6a8e0c

File tree

3 files changed

+224
-0
lines changed

3 files changed

+224
-0
lines changed

openid-connect-server/pom.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,31 @@
4747
<groupId>org.springframework</groupId>
4848
<artifactId>spring-tx</artifactId>
4949
</dependency>
50+
<dependency>
51+
<groupId>org.springframework</groupId>
52+
<artifactId>spring-orm</artifactId>
53+
<scope>test</scope>
54+
<exclusions>
55+
<exclusion>
56+
<groupId>commons-logging</groupId>
57+
<artifactId>commons-logging</artifactId>
58+
</exclusion>
59+
</exclusions>
60+
</dependency>
5061
<dependency>
5162
<groupId>org.eclipse.persistence</groupId>
5263
<artifactId>org.eclipse.persistence.core</artifactId>
5364
</dependency>
65+
<dependency>
66+
<groupId>org.hsqldb</groupId>
67+
<artifactId>hsqldb</artifactId>
68+
<scope>test</scope>
69+
</dependency>
70+
<dependency>
71+
<groupId>org.eclipse.persistence</groupId>
72+
<artifactId>org.eclipse.persistence.jpa</artifactId>
73+
<scope>test</scope>
74+
</dependency>
5475

5576
<dependency>
5677
<groupId>org.apache.commons</groupId>
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package org.mitre.oauth2.repository.impl;
2+
3+
import static java.nio.charset.StandardCharsets.UTF_8;
4+
5+
import java.io.IOException;
6+
import java.nio.file.Files;
7+
import java.nio.file.Paths;
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
11+
import javax.persistence.EntityManagerFactory;
12+
import javax.sql.DataSource;
13+
14+
import org.springframework.beans.factory.FactoryBean;
15+
import org.springframework.beans.factory.annotation.Autowired;
16+
import org.springframework.context.annotation.Bean;
17+
import org.springframework.core.io.ByteArrayResource;
18+
import org.springframework.core.io.DefaultResourceLoader;
19+
import org.springframework.core.io.Resource;
20+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
21+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
22+
import org.springframework.orm.jpa.JpaTransactionManager;
23+
import org.springframework.orm.jpa.JpaVendorAdapter;
24+
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
25+
import org.springframework.orm.jpa.vendor.Database;
26+
import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
27+
import org.springframework.transaction.PlatformTransactionManager;
28+
29+
public class TestDatabaseConfiguration {
30+
31+
@Autowired
32+
private JpaVendorAdapter jpaAdapter;
33+
34+
@Autowired
35+
private DataSource dataSource;
36+
37+
@Autowired
38+
private EntityManagerFactory entityManagerFactory;
39+
40+
@Bean
41+
public JpaOAuth2TokenRepository repository() {
42+
return new JpaOAuth2TokenRepository();
43+
}
44+
45+
@Bean(name = "defaultPersistenceUnit")
46+
public FactoryBean<EntityManagerFactory> entityManagerFactory() {
47+
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
48+
factory.setPackagesToScan("org.mitre", "org.mitre");
49+
factory.setPersistenceProviderClass(org.eclipse.persistence.jpa.PersistenceProvider.class);
50+
factory.setPersistenceUnitName("test" + System.currentTimeMillis());
51+
factory.setDataSource(dataSource);
52+
factory.setJpaVendorAdapter(jpaAdapter);
53+
Map<String, Object> jpaProperties = new HashMap<String, Object>();
54+
jpaProperties.put("eclipselink.weaving", "false");
55+
jpaProperties.put("eclipselink.logging.level", "INFO");
56+
jpaProperties.put("eclipselink.logging.level.sql", "INFO");
57+
jpaProperties.put("eclipselink.cache.shared.default", "false");
58+
factory.setJpaPropertyMap(jpaProperties);
59+
60+
return factory;
61+
}
62+
63+
@Bean
64+
public DataSource dataSource() {
65+
return new EmbeddedDatabaseBuilder(new DefaultResourceLoader() {
66+
@Override
67+
public Resource getResource(String location) {
68+
String sql;
69+
try {
70+
sql = new String(Files.readAllBytes(Paths.get("..", "openid-connect-server-webapp", "src", "main",
71+
"resources", "db", "hsql", location)), UTF_8);
72+
} catch (IOException e) {
73+
throw new RuntimeException("Failed to read sql-script " + location, e);
74+
}
75+
76+
return new ByteArrayResource(sql.getBytes(UTF_8));
77+
}
78+
}).generateUniqueName(true).setScriptEncoding(UTF_8.name()).setType(EmbeddedDatabaseType.HSQL)
79+
.addScripts("hsql_database_tables.sql").build();
80+
}
81+
82+
@Bean
83+
public JpaVendorAdapter jpaAdapter() {
84+
EclipseLinkJpaVendorAdapter adapter = new EclipseLinkJpaVendorAdapter();
85+
adapter.setDatabase(Database.HSQL);
86+
adapter.setShowSql(true);
87+
return adapter;
88+
}
89+
90+
@Bean
91+
public PlatformTransactionManager transactionManager() {
92+
JpaTransactionManager platformTransactionManager = new JpaTransactionManager();
93+
platformTransactionManager.setEntityManagerFactory(entityManagerFactory);
94+
return platformTransactionManager;
95+
}
96+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package org.mitre.oauth2.repository.impl;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.Set;
6+
7+
import javax.persistence.EntityManager;
8+
import javax.persistence.PersistenceContext;
9+
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.mitre.oauth2.model.AuthenticationHolderEntity;
14+
import org.mitre.oauth2.model.OAuth2AccessTokenEntity;
15+
import org.mitre.oauth2.model.OAuth2RefreshTokenEntity;
16+
import org.mitre.oauth2.model.SavedUserAuthentication;
17+
import org.springframework.beans.factory.annotation.Autowired;
18+
import org.springframework.test.context.ContextConfiguration;
19+
import org.springframework.test.context.junit4.SpringRunner;
20+
import org.springframework.transaction.annotation.Transactional;
21+
22+
@RunWith(SpringRunner.class)
23+
@ContextConfiguration(classes = { TestDatabaseConfiguration.class })
24+
@Transactional
25+
public class TestJpaOAuth2TokenRepository {
26+
27+
@Autowired
28+
private JpaOAuth2TokenRepository repository;
29+
30+
@PersistenceContext
31+
private EntityManager entityManager;
32+
33+
@Before
34+
public void setUp(){
35+
createAccessToken("user1");
36+
createAccessToken("user1");
37+
createAccessToken("user2");
38+
createAccessToken("user2");
39+
40+
createRefreshToken("user1");
41+
createRefreshToken("user1");
42+
createRefreshToken("user2");
43+
createRefreshToken("user2");
44+
createRefreshToken("user2");
45+
}
46+
47+
@Test
48+
public void testGetAccessTokensByUserName() {
49+
Set<OAuth2AccessTokenEntity> tokens = repository.getAccessTokensByUserName("user1");
50+
assertEquals(2, tokens.size());
51+
assertEquals("user1", tokens.iterator().next().getAuthenticationHolder().getUserAuth().getName());
52+
}
53+
54+
@Test
55+
public void testGetRefreshTokensByUserName() {
56+
Set<OAuth2RefreshTokenEntity> tokens = repository.getRefreshTokensByUserName("user2");
57+
assertEquals(3, tokens.size());
58+
assertEquals("user2", tokens.iterator().next().getAuthenticationHolder().getUserAuth().getName());
59+
}
60+
61+
@Test
62+
public void testGetAllAccessTokens(){
63+
Set<OAuth2AccessTokenEntity> tokens = repository.getAllAccessTokens();
64+
assertEquals(4, tokens.size());
65+
}
66+
67+
@Test
68+
public void testGetAllRefreshTokens(){
69+
Set<OAuth2RefreshTokenEntity> tokens = repository.getAllRefreshTokens();
70+
assertEquals(5, tokens.size());
71+
}
72+
73+
private OAuth2AccessTokenEntity createAccessToken(String name) {
74+
SavedUserAuthentication userAuth = new SavedUserAuthentication();
75+
userAuth.setName(name);
76+
userAuth = entityManager.merge(userAuth);
77+
78+
AuthenticationHolderEntity authHolder = new AuthenticationHolderEntity();
79+
authHolder.setUserAuth(userAuth);
80+
authHolder = entityManager.merge(authHolder);
81+
82+
OAuth2AccessTokenEntity accessToken = new OAuth2AccessTokenEntity();
83+
accessToken.setAuthenticationHolder(authHolder);
84+
85+
accessToken = entityManager.merge(accessToken);
86+
87+
return accessToken;
88+
}
89+
90+
private OAuth2RefreshTokenEntity createRefreshToken(String name) {
91+
SavedUserAuthentication userAuth = new SavedUserAuthentication();
92+
userAuth.setName(name);
93+
userAuth = entityManager.merge(userAuth);
94+
95+
AuthenticationHolderEntity authHolder = new AuthenticationHolderEntity();
96+
authHolder.setUserAuth(userAuth);
97+
authHolder = entityManager.merge(authHolder);
98+
99+
OAuth2RefreshTokenEntity refreshToken = new OAuth2RefreshTokenEntity();
100+
refreshToken.setAuthenticationHolder(authHolder);
101+
102+
refreshToken = entityManager.merge(refreshToken);
103+
104+
return refreshToken;
105+
}
106+
107+
}

0 commit comments

Comments
 (0)