mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-05 10:12:36 +00:00
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.BeanDefinitionBuilder;
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
package org.springframework.security;
|
package org.springframework.security;
|
||||||
|
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
@ -30,7 +29,7 @@ import javax.sql.DataSource;
|
|||||||
public class PopulatedDatabase {
|
public class PopulatedDatabase {
|
||||||
//~ Static fields/initializers =====================================================================================
|
//~ Static fields/initializers =====================================================================================
|
||||||
|
|
||||||
private static DriverManagerDataSource dataSource = null;
|
private static TestDataSource dataSource = null;
|
||||||
|
|
||||||
//~ Constructors ===================================================================================================
|
//~ Constructors ===================================================================================================
|
||||||
|
|
||||||
@ -47,12 +46,7 @@ public class PopulatedDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void setupDataSource() {
|
private static void setupDataSource() {
|
||||||
dataSource = new DriverManagerDataSource();
|
dataSource = new TestDataSource("springsecuritytest");
|
||||||
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
|
|
||||||
dataSource.setUrl("jdbc:hsqldb:mem:springsecuritytest");
|
|
||||||
dataSource.setUsername("sa");
|
|
||||||
dataSource.setPassword("");
|
|
||||||
|
|
||||||
JdbcTemplate template = new JdbcTemplate(dataSource);
|
JdbcTemplate template = new JdbcTemplate(dataSource);
|
||||||
|
|
||||||
template.execute(
|
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.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.ClassPathResource;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
|
||||||
import org.springframework.security.GrantedAuthority;
|
import org.springframework.security.GrantedAuthority;
|
||||||
import org.springframework.security.GrantedAuthorityImpl;
|
import org.springframework.security.GrantedAuthorityImpl;
|
||||||
import org.springframework.security.MockApplicationContext;
|
import org.springframework.security.MockApplicationContext;
|
||||||
|
import org.springframework.security.TestDataSource;
|
||||||
import org.springframework.security.acls.AuditableAccessControlEntry;
|
import org.springframework.security.acls.AuditableAccessControlEntry;
|
||||||
import org.springframework.security.acls.MutableAcl;
|
import org.springframework.security.acls.MutableAcl;
|
||||||
import org.springframework.security.acls.domain.AclAuthorizationStrategy;
|
import org.springframework.security.acls.domain.AclAuthorizationStrategy;
|
||||||
@ -38,13 +40,13 @@ public class BasicLookupStrategyTests {
|
|||||||
|
|
||||||
private LookupStrategy strategy;
|
private LookupStrategy strategy;
|
||||||
|
|
||||||
private static DriverManagerDataSource dataSource;
|
private static TestDataSource dataSource;
|
||||||
|
|
||||||
//~ Methods ========================================================================================================
|
//~ Methods ========================================================================================================
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void createDatabase() throws Exception {
|
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);
|
jdbcTemplate = new JdbcTemplate(dataSource);
|
||||||
|
|
||||||
Resource resource = new ClassPathResource("org/springframework/security/acls/jdbc/testData.sql");
|
Resource resource = new ClassPathResource("org/springframework/security/acls/jdbc/testData.sql");
|
||||||
@ -52,6 +54,11 @@ public class BasicLookupStrategyTests {
|
|||||||
jdbcTemplate.execute(sql);
|
jdbcTemplate.execute(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void dropDatabase() throws Exception {
|
||||||
|
dataSource.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void populateDatabase() {
|
public void populateDatabase() {
|
||||||
String query = "INSERT INTO acl_sid(ID,PRINCIPAL,SID) VALUES (1,1,'ben');"
|
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
|
* @author Ben Alex
|
||||||
* @version $Id: DataSourcePopulator.java 2291 2007-12-03 02:56:52Z benalex $
|
* @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 ================================================================================================
|
//~ Instance fields ================================================================================================
|
||||||
|
|
||||||
JdbcTemplate template;
|
JdbcTemplate template;
|
||||||
@ -71,9 +71,4 @@ public class DataSourcePopulator implements InitializingBean, DisposableBean {
|
|||||||
public void setDataSource(DataSource dataSource) {
|
public void setDataSource(DataSource dataSource) {
|
||||||
this.template = new JdbcTemplate(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.AuthenticationManager;
|
||||||
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Ben Alex
|
* @author Ben Alex
|
||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
@ -22,11 +24,9 @@ public class JdbcUserServiceBeanDefinitionParserTests {
|
|||||||
" <b:bean id='populator' class='org.springframework.security.config.DataSourcePopulator'>" +
|
" <b:bean id='populator' class='org.springframework.security.config.DataSourcePopulator'>" +
|
||||||
" <b:property name='dataSource' ref='dataSource'/>" +
|
" <b:property name='dataSource' ref='dataSource'/>" +
|
||||||
" </b:bean>" +
|
" </b:bean>" +
|
||||||
" <b:bean id='dataSource' class='org.springframework.jdbc.datasource.DriverManagerDataSource'>" +
|
|
||||||
" <b:property name='driverClassName' value='org.hsqldb.jdbcDriver'/>" +
|
" <b:bean id='dataSource' class='org.springframework.security.TestDataSource'>" +
|
||||||
" <b:property name='url' value='jdbc:hsqldb:mem:jdbcnamespaces'/>" +
|
" <b:constructor-arg value='jdbcnamespaces'/>" +
|
||||||
" <b:property name='username' value='sa'/>" +
|
|
||||||
" <b:property name='password' value=''/>" +
|
|
||||||
" </b:bean>";
|
" </b:bean>";
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -89,8 +89,8 @@ public class LdapAuthenticationProviderTests extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testNormalUsage() {
|
public void testNormalUsage() {
|
||||||
LdapAuthenticationProvider ldapProvider = new LdapAuthenticationProvider(new MockAuthenticator(),
|
MockAuthoritiesPopulator populator = new MockAuthoritiesPopulator();
|
||||||
new MockAuthoritiesPopulator());
|
LdapAuthenticationProvider ldapProvider = new LdapAuthenticationProvider(new MockAuthenticator(), populator);
|
||||||
LdapUserDetailsMapper userMapper = new LdapUserDetailsMapper();
|
LdapUserDetailsMapper userMapper = new LdapUserDetailsMapper();
|
||||||
userMapper.setRoleAttributes(new String[] {"ou"});
|
userMapper.setRoleAttributes(new String[] {"ou"});
|
||||||
ldapProvider.setUserDetailsContextMapper(userMapper);
|
ldapProvider.setUserDetailsContextMapper(userMapper);
|
||||||
@ -104,6 +104,7 @@ public class LdapAuthenticationProviderTests extends TestCase {
|
|||||||
assertEquals(2, user.getAuthorities().length);
|
assertEquals(2, user.getAuthorities().length);
|
||||||
assertEquals("{SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=", user.getPassword());
|
assertEquals("{SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=", user.getPassword());
|
||||||
assertEquals("ben", user.getUsername());
|
assertEquals("ben", user.getUsername());
|
||||||
|
assertEquals("ben", populator.getRequestedUsername());
|
||||||
|
|
||||||
ArrayList authorities = new ArrayList();
|
ArrayList authorities = new ArrayList();
|
||||||
authorities.add(user.getAuthorities()[0].getAuthority());
|
authorities.add(user.getAuthorities()[0].getAuthority());
|
||||||
@ -162,8 +163,15 @@ public class LdapAuthenticationProviderTests extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MockAuthoritiesPopulator implements LdapAuthoritiesPopulator {
|
class MockAuthoritiesPopulator implements LdapAuthoritiesPopulator {
|
||||||
|
String username;
|
||||||
|
|
||||||
public GrantedAuthority[] getGrantedAuthorities(DirContextOperations userCtx, String username) {
|
public GrantedAuthority[] getGrantedAuthorities(DirContextOperations userCtx, String username) {
|
||||||
|
this.username = username;
|
||||||
return new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_FROM_POPULATOR")};
|
return new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_FROM_POPULATOR")};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getRequestedUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package org.springframework.security.ui.rememberme;
|
package org.springframework.security.ui.rememberme;
|
||||||
|
|
||||||
|
import org.springframework.security.TestDataSource;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
@ -20,17 +20,18 @@ import java.util.Map;
|
|||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class JdbcTokenRepositoryImplTests {
|
public class JdbcTokenRepositoryImplTests {
|
||||||
private static DriverManagerDataSource dataSource;
|
private static TestDataSource dataSource;
|
||||||
private JdbcTokenRepositoryImpl repo;
|
private JdbcTokenRepositoryImpl repo;
|
||||||
private JdbcTemplate template;
|
private JdbcTemplate template;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void createDataSource() {
|
public static void createDataSource() {
|
||||||
dataSource = new DriverManagerDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:tokenrepotest", "sa", "");
|
dataSource = new TestDataSource("tokenrepotest");
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void clearDataSource() {
|
public static void clearDataSource() throws Exception {
|
||||||
|
dataSource.destroy();
|
||||||
dataSource = null;
|
dataSource = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import org.springframework.security.MockAuthenticationManager;
|
|||||||
import org.springframework.security.PopulatedDatabase;
|
import org.springframework.security.PopulatedDatabase;
|
||||||
import org.springframework.security.GrantedAuthority;
|
import org.springframework.security.GrantedAuthority;
|
||||||
import org.springframework.security.GrantedAuthorityImpl;
|
import org.springframework.security.GrantedAuthorityImpl;
|
||||||
|
import org.springframework.security.TestDataSource;
|
||||||
import org.springframework.security.context.SecurityContextHolder;
|
import org.springframework.security.context.SecurityContextHolder;
|
||||||
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.providers.dao.UserCache;
|
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.userdetails.UserDetails;
|
||||||
import org.springframework.security.util.AuthorityUtils;
|
import org.springframework.security.util.AuthorityUtils;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
@ -43,18 +43,19 @@ public class JdbcUserDetailsManagerTests {
|
|||||||
private static final UserDetails joe = new User("joe", "password", true, true, true, true,
|
private static final UserDetails joe = new User("joe", "password", true, true, true, true,
|
||||||
AuthorityUtils.stringArrayToAuthorityArray(new String[]{"A","C","B"}));
|
AuthorityUtils.stringArrayToAuthorityArray(new String[]{"A","C","B"}));
|
||||||
|
|
||||||
private static DriverManagerDataSource dataSource;
|
private static TestDataSource dataSource;
|
||||||
private JdbcUserDetailsManager manager;
|
private JdbcUserDetailsManager manager;
|
||||||
private MockUserCache cache;
|
private MockUserCache cache;
|
||||||
private JdbcTemplate template;
|
private JdbcTemplate template;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void createDataSource() {
|
public static void createDataSource() {
|
||||||
dataSource = new DriverManagerDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:jdbcusermgrtest", "sa", "");
|
dataSource = new TestDataSource("jdbcusermgrtest");
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void clearDataSource() {
|
public static void clearDataSource() throws Exception {
|
||||||
|
dataSource.destroy();
|
||||||
dataSource = null;
|
dataSource = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,20 +64,8 @@
|
|||||||
<constructor-arg ref="aclCache"/>
|
<constructor-arg ref="aclCache"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
|
<bean id="dataSource" class="org.springframework.security.TestDataSource">
|
||||||
<property name="driverClassName">
|
<constructor-arg value="test" />
|
||||||
<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>
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user