Added TestDataSource class to cut down verbosity of in-memory test databases and to implement DisposableBean, so the database is destroyed when the application context containing it is closed.
This commit is contained in:
parent
208d1ee8e2
commit
28153f2c7f
|
@ -7,7 +7,6 @@ import org.springframework.beans.factory.xml.ParserContext;
|
|||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import org.w3c.dom.Element;
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
package org.springframework.security;
|
||||
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
|
@ -30,7 +29,7 @@ import javax.sql.DataSource;
|
|||
public class PopulatedDatabase {
|
||||
//~ Static fields/initializers =====================================================================================
|
||||
|
||||
private static DriverManagerDataSource dataSource = null;
|
||||
private static TestDataSource dataSource = null;
|
||||
|
||||
//~ Constructors ===================================================================================================
|
||||
|
||||
|
@ -47,12 +46,7 @@ public class PopulatedDatabase {
|
|||
}
|
||||
|
||||
private static void setupDataSource() {
|
||||
dataSource = new DriverManagerDataSource();
|
||||
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
|
||||
dataSource.setUrl("jdbc:hsqldb:mem:springsecuritytest");
|
||||
dataSource.setUsername("sa");
|
||||
dataSource.setPassword("");
|
||||
|
||||
dataSource = new TestDataSource("springsecuritytest");
|
||||
JdbcTemplate template = new JdbcTemplate(dataSource);
|
||||
|
||||
template.execute(
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package org.springframework.security;
|
||||
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
|
||||
/**
|
||||
* A Datasource bean which starts an in-memory HSQL database with the supplied name and
|
||||
* shuts down the database when the application context it is defined in is closed.
|
||||
*
|
||||
* @author Luke Taylor
|
||||
* @version $Id$
|
||||
*/
|
||||
public class TestDataSource extends DriverManagerDataSource implements DisposableBean {
|
||||
String name;
|
||||
|
||||
public TestDataSource(String databaseName) {
|
||||
name = databaseName;
|
||||
setDriverClassName("org.hsqldb.jdbcDriver");
|
||||
setUrl("jdbc:hsqldb:mem:" + databaseName);
|
||||
setUsername("sa");
|
||||
setPassword("");
|
||||
}
|
||||
|
||||
public void destroy() throws Exception {
|
||||
System.out.println("Shutting down database: " + name);
|
||||
new JdbcTemplate(this).execute("SHUTDOWN");
|
||||
}
|
||||
}
|
|
@ -9,14 +9,16 @@ import org.junit.After;
|
|||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.AfterClass;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
import org.springframework.security.GrantedAuthority;
|
||||
import org.springframework.security.GrantedAuthorityImpl;
|
||||
import org.springframework.security.MockApplicationContext;
|
||||
import org.springframework.security.TestDataSource;
|
||||
import org.springframework.security.acls.AuditableAccessControlEntry;
|
||||
import org.springframework.security.acls.MutableAcl;
|
||||
import org.springframework.security.acls.domain.AclAuthorizationStrategy;
|
||||
|
@ -38,13 +40,13 @@ public class BasicLookupStrategyTests {
|
|||
|
||||
private LookupStrategy strategy;
|
||||
|
||||
private static DriverManagerDataSource dataSource;
|
||||
private static TestDataSource dataSource;
|
||||
|
||||
//~ Methods ========================================================================================================
|
||||
|
||||
@BeforeClass
|
||||
public static void createDatabase() throws Exception {
|
||||
dataSource = new DriverManagerDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:lookupstrategytest", "sa", "");
|
||||
dataSource = new TestDataSource("lookupstrategytest");
|
||||
jdbcTemplate = new JdbcTemplate(dataSource);
|
||||
|
||||
Resource resource = new ClassPathResource("org/springframework/security/acls/jdbc/testData.sql");
|
||||
|
@ -52,6 +54,11 @@ public class BasicLookupStrategyTests {
|
|||
jdbcTemplate.execute(sql);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void dropDatabase() throws Exception {
|
||||
dataSource.destroy();
|
||||
}
|
||||
|
||||
@Before
|
||||
public void populateDatabase() {
|
||||
String query = "INSERT INTO acl_sid(ID,PRINCIPAL,SID) VALUES (1,1,'ben');"
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.springframework.util.Assert;
|
|||
* @author Ben Alex
|
||||
* @version $Id: DataSourcePopulator.java 2291 2007-12-03 02:56:52Z benalex $
|
||||
*/
|
||||
public class DataSourcePopulator implements InitializingBean, DisposableBean {
|
||||
public class DataSourcePopulator implements InitializingBean {
|
||||
//~ Instance fields ================================================================================================
|
||||
|
||||
JdbcTemplate template;
|
||||
|
@ -71,9 +71,4 @@ public class DataSourcePopulator implements InitializingBean, DisposableBean {
|
|||
public void setDataSource(DataSource dataSource) {
|
||||
this.template = new JdbcTemplate(dataSource);
|
||||
}
|
||||
|
||||
public void destroy() throws Exception {
|
||||
template.execute("DROP TABLE AUTHORITIES");
|
||||
template.execute("DROP TABLE USERS");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ import org.springframework.security.util.InMemoryXmlApplicationContext;
|
|||
import org.springframework.security.AuthenticationManager;
|
||||
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
/**
|
||||
* @author Ben Alex
|
||||
* @author Luke Taylor
|
||||
|
@ -22,11 +24,9 @@ public class JdbcUserServiceBeanDefinitionParserTests {
|
|||
" <b:bean id='populator' class='org.springframework.security.config.DataSourcePopulator'>" +
|
||||
" <b:property name='dataSource' ref='dataSource'/>" +
|
||||
" </b:bean>" +
|
||||
" <b:bean id='dataSource' class='org.springframework.jdbc.datasource.DriverManagerDataSource'>" +
|
||||
" <b:property name='driverClassName' value='org.hsqldb.jdbcDriver'/>" +
|
||||
" <b:property name='url' value='jdbc:hsqldb:mem:jdbcnamespaces'/>" +
|
||||
" <b:property name='username' value='sa'/>" +
|
||||
" <b:property name='password' value=''/>" +
|
||||
|
||||
" <b:bean id='dataSource' class='org.springframework.security.TestDataSource'>" +
|
||||
" <b:constructor-arg value='jdbcnamespaces'/>" +
|
||||
" </b:bean>";
|
||||
|
||||
@After
|
||||
|
|
|
@ -89,8 +89,8 @@ public class LdapAuthenticationProviderTests extends TestCase {
|
|||
}
|
||||
|
||||
public void testNormalUsage() {
|
||||
LdapAuthenticationProvider ldapProvider = new LdapAuthenticationProvider(new MockAuthenticator(),
|
||||
new MockAuthoritiesPopulator());
|
||||
MockAuthoritiesPopulator populator = new MockAuthoritiesPopulator();
|
||||
LdapAuthenticationProvider ldapProvider = new LdapAuthenticationProvider(new MockAuthenticator(), populator);
|
||||
LdapUserDetailsMapper userMapper = new LdapUserDetailsMapper();
|
||||
userMapper.setRoleAttributes(new String[] {"ou"});
|
||||
ldapProvider.setUserDetailsContextMapper(userMapper);
|
||||
|
@ -104,6 +104,7 @@ public class LdapAuthenticationProviderTests extends TestCase {
|
|||
assertEquals(2, user.getAuthorities().length);
|
||||
assertEquals("{SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=", user.getPassword());
|
||||
assertEquals("ben", user.getUsername());
|
||||
assertEquals("ben", populator.getRequestedUsername());
|
||||
|
||||
ArrayList authorities = new ArrayList();
|
||||
authorities.add(user.getAuthorities()[0].getAuthority());
|
||||
|
@ -162,8 +163,15 @@ public class LdapAuthenticationProviderTests extends TestCase {
|
|||
}
|
||||
|
||||
class MockAuthoritiesPopulator implements LdapAuthoritiesPopulator {
|
||||
String username;
|
||||
|
||||
public GrantedAuthority[] getGrantedAuthorities(DirContextOperations userCtx, String username) {
|
||||
this.username = username;
|
||||
return new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_FROM_POPULATOR")};
|
||||
}
|
||||
|
||||
String getRequestedUsername() {
|
||||
return username;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package org.springframework.security.ui.rememberme;
|
||||
|
||||
import org.springframework.security.TestDataSource;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
|
@ -20,17 +20,18 @@ import java.util.Map;
|
|||
* @version $Id$
|
||||
*/
|
||||
public class JdbcTokenRepositoryImplTests {
|
||||
private static DriverManagerDataSource dataSource;
|
||||
private static TestDataSource dataSource;
|
||||
private JdbcTokenRepositoryImpl repo;
|
||||
private JdbcTemplate template;
|
||||
|
||||
@BeforeClass
|
||||
public static void createDataSource() {
|
||||
dataSource = new DriverManagerDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:tokenrepotest", "sa", "");
|
||||
dataSource = new TestDataSource("tokenrepotest");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void clearDataSource() {
|
||||
public static void clearDataSource() throws Exception {
|
||||
dataSource.destroy();
|
||||
dataSource = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import org.springframework.security.MockAuthenticationManager;
|
|||
import org.springframework.security.PopulatedDatabase;
|
||||
import org.springframework.security.GrantedAuthority;
|
||||
import org.springframework.security.GrantedAuthorityImpl;
|
||||
import org.springframework.security.TestDataSource;
|
||||
import org.springframework.security.context.SecurityContextHolder;
|
||||
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.providers.dao.UserCache;
|
||||
|
@ -14,7 +15,6 @@ import org.springframework.security.userdetails.User;
|
|||
import org.springframework.security.userdetails.UserDetails;
|
||||
import org.springframework.security.util.AuthorityUtils;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
|
@ -43,18 +43,19 @@ public class JdbcUserDetailsManagerTests {
|
|||
private static final UserDetails joe = new User("joe", "password", true, true, true, true,
|
||||
AuthorityUtils.stringArrayToAuthorityArray(new String[]{"A","C","B"}));
|
||||
|
||||
private static DriverManagerDataSource dataSource;
|
||||
private static TestDataSource dataSource;
|
||||
private JdbcUserDetailsManager manager;
|
||||
private MockUserCache cache;
|
||||
private JdbcTemplate template;
|
||||
|
||||
@BeforeClass
|
||||
public static void createDataSource() {
|
||||
dataSource = new DriverManagerDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:jdbcusermgrtest", "sa", "");
|
||||
dataSource = new TestDataSource("jdbcusermgrtest");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void clearDataSource() {
|
||||
public static void clearDataSource() throws Exception {
|
||||
dataSource.destroy();
|
||||
dataSource = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,20 +64,8 @@
|
|||
<constructor-arg ref="aclCache"/>
|
||||
</bean>
|
||||
|
||||
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
|
||||
<property name="driverClassName">
|
||||
<value>org.hsqldb.jdbcDriver</value>
|
||||
</property>
|
||||
<property name="url">
|
||||
<value>jdbc:hsqldb:mem:test</value>
|
||||
<!-- <value>jdbc:hsqldb:hsql://localhost/acl</value> -->
|
||||
</property>
|
||||
<property name="username">
|
||||
<value>sa</value>
|
||||
</property>
|
||||
<property name="password">
|
||||
<value></value>
|
||||
</property>
|
||||
<bean id="dataSource" class="org.springframework.security.TestDataSource">
|
||||
<constructor-arg value="test" />
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
|
|
Loading…
Reference in New Issue