Legacy LDAP tests and support files deleted.
This commit is contained in:
parent
2b0a65983d
commit
20469b6ac9
|
@ -1,59 +0,0 @@
|
||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.acegisecurity.providers.dao.ldap;
|
|
||||||
|
|
||||||
import javax.naming.NamingException;
|
|
||||||
import javax.naming.directory.Attributes;
|
|
||||||
|
|
||||||
import org.acegisecurity.providers.dao.ldap.support.BaseLdapTestCase;
|
|
||||||
|
|
||||||
/** Tests to ensure the directory server we are running against is
|
|
||||||
* configured as expected.
|
|
||||||
*
|
|
||||||
* @author robert.sanders
|
|
||||||
*/
|
|
||||||
public class DirSetupTestCase extends BaseLdapTestCase {
|
|
||||||
|
|
||||||
/** Simply test the connection to the test LDAP server;
|
|
||||||
* if this test fails we know the server setup needs checked.
|
|
||||||
* @throws NamingException
|
|
||||||
*/
|
|
||||||
public void testConnection() throws NamingException {
|
|
||||||
Object obj = getClientContext().lookup("ou=users");
|
|
||||||
//System.out.println( obj );
|
|
||||||
assertNotNull( obj );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void testSimpleUidUser() throws NamingException {
|
|
||||||
Attributes myAttrs = getClientContext().getAttributes("uid=one.user,ou=users");
|
|
||||||
assertEquals(8, myAttrs.size());
|
|
||||||
assertEquals("uid=one.user,ou=users,ou=system", myAttrs.get("dn").get() );
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testSimpleCnUser() throws NamingException {
|
|
||||||
Attributes myAttrs = getClientContext().getAttributes("cn=user.two,ou=users");
|
|
||||||
assertEquals(8, myAttrs.size());
|
|
||||||
assertEquals("cn=user.two,ou=users,ou=system", myAttrs.get("dn").get() );
|
|
||||||
assertEquals("Two", myAttrs.get("givenName").get() );
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testOthersUsers() throws NamingException {
|
|
||||||
Attributes myAttrs = getClientContext().getAttributes("uid=other.two,ou=others");
|
|
||||||
assertEquals("uid=other.two,ou=others,ou=system", myAttrs.get("dn").get() );
|
|
||||||
assertEquals("Other", myAttrs.get("givenName").get() );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,132 +0,0 @@
|
||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.acegisecurity.providers.dao.ldap;
|
|
||||||
|
|
||||||
import org.acegisecurity.BadCredentialsException;
|
|
||||||
import org.acegisecurity.providers.dao.ldap.support.BaseLdapTestCase;
|
|
||||||
import org.acegisecurity.userdetails.UserDetails;
|
|
||||||
|
|
||||||
import javax.naming.NamingException;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set of JUnit tests for the LdapPasswordAuthenticationDao.
|
|
||||||
*
|
|
||||||
* @author $author$
|
|
||||||
* @version $Revision$
|
|
||||||
*/
|
|
||||||
public class LdapPasswordAuthenticationDaoTests extends BaseLdapTestCase {
|
|
||||||
|
|
||||||
private LdapPasswordAuthenticationDao dao;
|
|
||||||
private String DEFAULT_ROLE = "DEFAULT_ROLE";
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
LdapPasswordAuthenticationDaoTests ats = new LdapPasswordAuthenticationDaoTests();
|
|
||||||
ats.setUp();
|
|
||||||
try {
|
|
||||||
ats.testSimpleUidUser();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
} finally {
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Check to see that a user with no roles can not login
|
|
||||||
* (this is the correct behavior the last time I checked the Acegi Docs).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void testEmptyRoles() {
|
|
||||||
dao.setUsernameFormat("uid={0},ou=users,ou=system");
|
|
||||||
|
|
||||||
try {
|
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("user.two",
|
|
||||||
"plaintext2");
|
|
||||||
fail("No roles are accessible for user; this test _should_ fail.");
|
|
||||||
} catch (BadCredentialsException ex) {
|
|
||||||
assertTrue("No roles are accessible for user; this test _should_ fail.",
|
|
||||||
ex.getMessage().startsWith(LdapPasswordAuthenticationDao.BAD_CREDENTIALS_EXCEPTION_MESSAGE));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Test that the user who is identified by
|
|
||||||
* Common Name (cn=..) can be authenticated. */
|
|
||||||
public void testSimpleCnUser() throws NamingException {
|
|
||||||
dao.setUsernameFormat("cn={0},ou=users,ou=system");
|
|
||||||
dao.setUserLookupNameFormat("cn={0},ou=users");
|
|
||||||
dao.setDefaultRole(DEFAULT_ROLE);
|
|
||||||
|
|
||||||
try {
|
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("User Two",
|
|
||||||
"plaintext2");
|
|
||||||
assertEquals(1, userDetails.getAuthorities().length);
|
|
||||||
assertEquals(DEFAULT_ROLE,
|
|
||||||
userDetails.getAuthorities()[0].getAuthority());
|
|
||||||
} catch (BadCredentialsException ex) {
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Test that the user who is identified by
|
|
||||||
* UID (uid=..) can be authenticated. */
|
|
||||||
public void testSimpleUidUser() throws NamingException {
|
|
||||||
dao.setUsernameFormat("uid={0},ou=users,ou=system");
|
|
||||||
dao.setUserLookupNameFormat("uid={0},ou=users");
|
|
||||||
dao.setDefaultRole(DEFAULT_ROLE);
|
|
||||||
|
|
||||||
try {
|
|
||||||
System.out.println("Attempting user auth.");
|
|
||||||
|
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("one.user",
|
|
||||||
"plaintext");
|
|
||||||
|
|
||||||
//System.out.println( "UserDetails = " + userDetails );
|
|
||||||
|
|
||||||
assertEquals(1, userDetails.getAuthorities().length);
|
|
||||||
assertEquals(DEFAULT_ROLE,
|
|
||||||
userDetails.getAuthorities()[0].getAuthority());
|
|
||||||
} catch (BadCredentialsException ex) {
|
|
||||||
System.out.println("Unable to authenticate user.");
|
|
||||||
ex.printStackTrace();
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Test that a login w/ a bad password fails. */
|
|
||||||
public void testSimpleUidUserBadPassword() throws NamingException {
|
|
||||||
dao.setUsernameFormat("uid={0},ou=users,ou=system");
|
|
||||||
dao.setUserLookupNameFormat("uid={0},ou=users");
|
|
||||||
dao.setDefaultRole(DEFAULT_ROLE);
|
|
||||||
|
|
||||||
try {
|
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("one.user",
|
|
||||||
"plainlywrong");
|
|
||||||
fail();
|
|
||||||
} catch (BadCredentialsException ex) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup the basic properties of our LdapPasswordAuthenticationDao
|
|
||||||
*/
|
|
||||||
protected void setUp() {
|
|
||||||
dao = new LdapPasswordAuthenticationDao();
|
|
||||||
dao.setUrl("ldap://localhost:389/ou=system");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,431 +0,0 @@
|
||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.acegisecurity.providers.dao.ldap;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
import org.acegisecurity.AccountExpiredException;
|
|
||||||
import org.acegisecurity.Authentication;
|
|
||||||
import org.acegisecurity.AuthenticationServiceException;
|
|
||||||
import org.acegisecurity.BadCredentialsException;
|
|
||||||
import org.acegisecurity.CredentialsExpiredException;
|
|
||||||
import org.acegisecurity.DisabledException;
|
|
||||||
import org.acegisecurity.GrantedAuthority;
|
|
||||||
import org.acegisecurity.GrantedAuthorityImpl;
|
|
||||||
import org.acegisecurity.LockedException;
|
|
||||||
import org.acegisecurity.providers.TestingAuthenticationToken;
|
|
||||||
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
|
|
||||||
import org.acegisecurity.providers.dao.UserCache;
|
|
||||||
import org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache;
|
|
||||||
import org.acegisecurity.providers.dao.cache.NullUserCache;
|
|
||||||
import org.acegisecurity.userdetails.User;
|
|
||||||
import org.acegisecurity.userdetails.UserDetails;
|
|
||||||
import org.acegisecurity.userdetails.UsernameNotFoundException;
|
|
||||||
|
|
||||||
import org.springframework.dao.DataAccessException;
|
|
||||||
import org.springframework.dao.DataRetrievalFailureException;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link PasswordDaoAuthenticationProvider}.
|
|
||||||
*
|
|
||||||
* @author Karel Miarka
|
|
||||||
*/
|
|
||||||
public class PasswordDaoAuthenticationProviderTests extends TestCase {
|
|
||||||
//~ Methods ================================================================
|
|
||||||
|
|
||||||
public final void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
junit.textui.TestRunner.run(PasswordDaoAuthenticationProviderTests.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsForIncorrectPasswordCase() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa",
|
|
||||||
"KOala");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown BadCredentialsException");
|
|
||||||
} catch (BadCredentialsException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsIfAccountExpired() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter",
|
|
||||||
"opal");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeterAccountExpired());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown AccountExpiredException");
|
|
||||||
} catch (AccountExpiredException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsIfAccountLocked() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter",
|
|
||||||
"opal");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeterAccountLocked());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown AccountExpiredException");
|
|
||||||
} catch (LockedException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsIfCredentialsExpired() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter",
|
|
||||||
"opal");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeterCredentialsExpired());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown CredentialsExpiredException");
|
|
||||||
} catch (CredentialsExpiredException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsIfUserDisabled() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter",
|
|
||||||
"opal");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeter());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown DisabledException");
|
|
||||||
} catch (DisabledException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsWhenAuthenticationDaoHasBackendFailure() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa",
|
|
||||||
"koala");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoSimulateBackendError());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown AuthenticationServiceException");
|
|
||||||
} catch (AuthenticationServiceException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsWithInvalidPassword() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa",
|
|
||||||
"INVALID_PASSWORD");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown BadCredentialsException");
|
|
||||||
} catch (BadCredentialsException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsWithInvalidUsername() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("INVALID_USER",
|
|
||||||
"koala");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown BadCredentialsException");
|
|
||||||
} catch (BadCredentialsException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticateFailsWithMixedCaseUsernameIfDefaultChanged() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("MaRiSSA",
|
|
||||||
"koala");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown BadCredentialsException");
|
|
||||||
} catch (BadCredentialsException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticates() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa",
|
|
||||||
"koala");
|
|
||||||
token.setDetails("192.168.0.1");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
Authentication result = provider.authenticate(token);
|
|
||||||
|
|
||||||
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
||||||
fail(
|
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken");
|
|
||||||
}
|
|
||||||
|
|
||||||
UsernamePasswordAuthenticationToken castResult = (UsernamePasswordAuthenticationToken) result;
|
|
||||||
assertEquals(User.class, castResult.getPrincipal().getClass());
|
|
||||||
assertEquals("koala", castResult.getCredentials());
|
|
||||||
assertEquals("ROLE_ONE", castResult.getAuthorities()[0].getAuthority());
|
|
||||||
assertEquals("ROLE_TWO", castResult.getAuthorities()[1].getAuthority());
|
|
||||||
assertEquals("192.168.0.1", castResult.getDetails());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticatesASecondTime() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa",
|
|
||||||
"koala");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
|
|
||||||
Authentication result = provider.authenticate(token);
|
|
||||||
|
|
||||||
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
||||||
fail(
|
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now try to authenticate with the previous result (with its UserDetails)
|
|
||||||
Authentication result2 = provider.authenticate(result);
|
|
||||||
|
|
||||||
if (!(result2 instanceof UsernamePasswordAuthenticationToken)) {
|
|
||||||
fail(
|
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken");
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(result.getCredentials(), result2.getCredentials());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthenticatesWithForcePrincipalAsString() {
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa",
|
|
||||||
"koala");
|
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
provider.setForcePrincipalAsString(true);
|
|
||||||
|
|
||||||
Authentication result = provider.authenticate(token);
|
|
||||||
|
|
||||||
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
||||||
fail(
|
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken");
|
|
||||||
}
|
|
||||||
|
|
||||||
UsernamePasswordAuthenticationToken castResult = (UsernamePasswordAuthenticationToken) result;
|
|
||||||
assertEquals(String.class, castResult.getPrincipal().getClass());
|
|
||||||
assertEquals("marissa", castResult.getPrincipal());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGettersSetters() {
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setUserCache(new EhCacheBasedUserCache());
|
|
||||||
assertEquals(EhCacheBasedUserCache.class,
|
|
||||||
provider.getUserCache().getClass());
|
|
||||||
|
|
||||||
assertFalse(provider.isForcePrincipalAsString());
|
|
||||||
provider.setForcePrincipalAsString(true);
|
|
||||||
assertTrue(provider.isForcePrincipalAsString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testStartupFailsIfNoAuthenticationDao()
|
|
||||||
throws Exception {
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.afterPropertiesSet();
|
|
||||||
fail("Should have thrown IllegalArgumentException");
|
|
||||||
} catch (IllegalArgumentException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testStartupFailsIfNoUserCacheSet() throws Exception {
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa());
|
|
||||||
assertEquals(NullUserCache.class, provider.getUserCache().getClass());
|
|
||||||
provider.setUserCache(null);
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.afterPropertiesSet();
|
|
||||||
fail("Should have thrown IllegalArgumentException");
|
|
||||||
} catch (IllegalArgumentException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testStartupSuccess() throws Exception {
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
PasswordAuthenticationDao dao = new MockAuthenticationDaoUserMarissa();
|
|
||||||
provider.setPasswordAuthenticationDao(dao);
|
|
||||||
provider.setUserCache(new MockUserCache());
|
|
||||||
assertEquals(dao, provider.getPasswordAuthenticationDao());
|
|
||||||
provider.afterPropertiesSet();
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testSupports() {
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider();
|
|
||||||
assertTrue(provider.supports(UsernamePasswordAuthenticationToken.class));
|
|
||||||
assertTrue(!provider.supports(TestingAuthenticationToken.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ Inner Classes ==========================================================
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoSimulateBackendError
|
|
||||||
implements PasswordAuthenticationDao {
|
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username,
|
|
||||||
String password)
|
|
||||||
throws BadCredentialsException, DataAccessException {
|
|
||||||
throw new DataRetrievalFailureException(
|
|
||||||
"This mock simulator is designed to fail");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserMarissa
|
|
||||||
implements PasswordAuthenticationDao {
|
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username,
|
|
||||||
String password)
|
|
||||||
throws BadCredentialsException, DataAccessException {
|
|
||||||
if ("marissa".equals(username) && "koala".equals(password)) {
|
|
||||||
return new User("marissa", "koala", true, true, true, true,
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
|
|
||||||
"ROLE_TWO")});
|
|
||||||
} else {
|
|
||||||
throw new BadCredentialsException("Invalid credentials");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeter
|
|
||||||
implements PasswordAuthenticationDao {
|
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username,
|
|
||||||
String password)
|
|
||||||
throws BadCredentialsException, DataAccessException {
|
|
||||||
if ("peter".equals(username) && "opal".equals(password)) {
|
|
||||||
return new User("peter", "opal", false, true, true, true,
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
|
|
||||||
"ROLE_TWO")});
|
|
||||||
} else {
|
|
||||||
throw new BadCredentialsException("Invalid credentials");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeterAccountExpired
|
|
||||||
implements PasswordAuthenticationDao {
|
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username,
|
|
||||||
String password)
|
|
||||||
throws UsernameNotFoundException, DataAccessException {
|
|
||||||
if ("peter".equals(username)) {
|
|
||||||
return new User("peter", "opal", true, false, true, true,
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
|
|
||||||
"ROLE_TWO")});
|
|
||||||
} else {
|
|
||||||
throw new UsernameNotFoundException("Could not find: "
|
|
||||||
+ username);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeterAccountLocked
|
|
||||||
implements PasswordAuthenticationDao {
|
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username,
|
|
||||||
String password)
|
|
||||||
throws UsernameNotFoundException, DataAccessException {
|
|
||||||
if ("peter".equals(username)) {
|
|
||||||
return new User("peter", "opal", true, true, true, false,
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
|
|
||||||
"ROLE_TWO")});
|
|
||||||
} else {
|
|
||||||
throw new UsernameNotFoundException("Could not find: "
|
|
||||||
+ username);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeterCredentialsExpired
|
|
||||||
implements PasswordAuthenticationDao {
|
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username,
|
|
||||||
String password)
|
|
||||||
throws UsernameNotFoundException, DataAccessException {
|
|
||||||
if ("peter".equals(username)) {
|
|
||||||
return new User("peter", "opal", true, true, false, true,
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
|
|
||||||
"ROLE_TWO")});
|
|
||||||
} else {
|
|
||||||
throw new UsernameNotFoundException("Could not find: "
|
|
||||||
+ username);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MockUserCache implements UserCache {
|
|
||||||
private Map cache = new HashMap();
|
|
||||||
|
|
||||||
public UserDetails getUserFromCache(String username) {
|
|
||||||
return (User) cache.get(username);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void putUserInCache(UserDetails user) {
|
|
||||||
cache.put(user.getUsername(), user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeUserFromCache(String username) {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
<html>
|
|
||||||
<body bgcolor="#ffffff">
|
|
||||||
<h2>LDAP JUnit Tests and Helper Files.</h2>
|
|
||||||
<p>
|
|
||||||
Because the inter-class dependencies may not be obvious at first glance
|
|
||||||
they are documented for this package; most of this complexity is on account
|
|
||||||
of the JUnit design, hopefully future testing frameworks will be less intrusive.
|
|
||||||
</p>
|
|
||||||
<dl>
|
|
||||||
<dt>LdapTestHelper</dt>
|
|
||||||
<dd>Containing the majority of the code which references the
|
|
||||||
apache directory server classes, LdapTestHelper is designed
|
|
||||||
to be assigned as a static field in the BaseLdapTestCase, although
|
|
||||||
it can be used elsewhere. LdapTestHelper contains all the code
|
|
||||||
needed to start, initialize, and shutdown the directory server.
|
|
||||||
</dd>
|
|
||||||
|
|
||||||
<dt>DirContentsInitializer</dt>
|
|
||||||
<dd>DirContentsInitializer contains the JNDI code
|
|
||||||
used to load the directory server up with entries (users and groups).
|
|
||||||
When I figure out how to correctly import LDIF files, DirContentsInitializer
|
|
||||||
will probably be radically simplified.
|
|
||||||
</dd>
|
|
||||||
|
|
||||||
<dt>BaseLdapTestCase</dt>
|
|
||||||
<dd>Contains common methods and fields that will probably
|
|
||||||
be needed by any TestCase which interacts with the directory server,
|
|
||||||
including a static reference to a LdapTestHelper instance.
|
|
||||||
</dd>
|
|
||||||
|
|
||||||
<dt>DirSetupTestCase</dt>
|
|
||||||
<dd>Contains some simple code designed to test that DirContentsInitializer
|
|
||||||
has functioned properly. If these tests fail then the
|
|
||||||
other tests are expected to fail too.
|
|
||||||
</dd>
|
|
||||||
|
|
||||||
<dt>LdapPasswordAuthenticationTest</dt>
|
|
||||||
<dd>Contains tests which configure a LdapPasswordAuthenticationDao bean and
|
|
||||||
excersize it against the directory server.
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,84 +0,0 @@
|
||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.acegisecurity.providers.dao.ldap.support;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import javax.naming.Context;
|
|
||||||
import javax.naming.NamingException;
|
|
||||||
import javax.naming.directory.DirContext;
|
|
||||||
import javax.naming.directory.InitialDirContext;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class defines certain base properties needed by
|
|
||||||
* all LDAP unit tests. It also uses the EmbeddedLdapServerController to
|
|
||||||
* bootstrap an 'embedded' instance of the Apache Directory Server to
|
|
||||||
* run the Unit tests against.
|
|
||||||
*/
|
|
||||||
public class BaseLdapTestCase extends TestCase {
|
|
||||||
//~ Static fields/initializers =============================================
|
|
||||||
|
|
||||||
// static finalizers, they'd be nice, as the EmbeddedLdapServerController
|
|
||||||
// never seems to get the chance to cleanup after itself
|
|
||||||
// Maybe JUnit4 will include such a thing.
|
|
||||||
protected static EmbeddedLdapServerController embeddedLdapServerController = new EmbeddedLdapServerController();
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
LdapDirInitializer.intializeDir( embeddedLdapServerController.getServerContext() );
|
|
||||||
} catch (NamingException e) {
|
|
||||||
System.out.println("Error: unable to initialize LDAP Server for Unit tests.");
|
|
||||||
System.out.println(" Unable to continue testing LDAP Authentication Dao without LDAP Server.");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a 'client' connection to the embedded LDAP Server, using
|
|
||||||
* JNDI to connect.
|
|
||||||
*/
|
|
||||||
protected DirContext getClientContext() throws NamingException {
|
|
||||||
Hashtable env = new Hashtable();
|
|
||||||
env.put(Context.PROVIDER_URL, "ldap://localhost:389/ou=system");
|
|
||||||
env.put(Context.INITIAL_CONTEXT_FACTORY,
|
|
||||||
"com.sun.jndi.ldap.LdapCtxFactory");
|
|
||||||
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
|
|
||||||
env.put(Context.SECURITY_CREDENTIALS, "secret");
|
|
||||||
|
|
||||||
return new InitialDirContext(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a LDAP DirContext which connects directly to the
|
|
||||||
* embedded Apache Directory Server against which the Unit tests
|
|
||||||
* are run, as such the normal Unit tests should never need to
|
|
||||||
* reference it (with the possible exception of comparing return values
|
|
||||||
* between the Server Context and the Client Context).
|
|
||||||
*
|
|
||||||
* @see org.acegisecurity.providers.dao.ldap.support.EmbeddedLdapServerController
|
|
||||||
* @see org.acegisecurity.providers.dao.ldap.support.LdapDirInitializer
|
|
||||||
*
|
|
||||||
* @return The server context for LDAP operations; used for things like
|
|
||||||
* addding/removing users to to test against.
|
|
||||||
*/
|
|
||||||
protected DirContext getServerContext() {
|
|
||||||
return embeddedLdapServerController.getServerContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,228 +0,0 @@
|
||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.acegisecurity.providers.dao.ldap.support;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import javax.naming.Context;
|
|
||||||
import javax.naming.InitialContext;
|
|
||||||
import javax.naming.Name;
|
|
||||||
import javax.naming.NamingException;
|
|
||||||
import javax.naming.directory.Attributes;
|
|
||||||
import javax.naming.directory.DirContext;
|
|
||||||
import javax.naming.directory.InitialDirContext;
|
|
||||||
|
|
||||||
import org.acegisecurity.providers.ldap.LdapUtils;
|
|
||||||
import org.apache.ldap.common.ldif.LdifIterator;
|
|
||||||
import org.apache.ldap.common.ldif.LdifParser;
|
|
||||||
import org.apache.ldap.common.ldif.LdifParserImpl;
|
|
||||||
import org.apache.ldap.common.message.LockableAttributesImpl;
|
|
||||||
import org.apache.ldap.common.name.LdapName;
|
|
||||||
import org.apache.ldap.server.DirectoryService;
|
|
||||||
import org.apache.ldap.server.configuration.MutableServerStartupConfiguration;
|
|
||||||
import org.apache.ldap.server.configuration.ShutdownConfiguration;
|
|
||||||
import org.apache.ldap.server.jndi.ServerContextFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used as static field in BaseLdapTestCase;
|
|
||||||
* responsible for global state during JUnit tests - since
|
|
||||||
* JUnit reinstantiates the test class for every method.
|
|
||||||
*
|
|
||||||
* @version $Id$
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class EmbeddedLdapServerController {
|
|
||||||
|
|
||||||
static final int LDAP_PORT = 10389;
|
|
||||||
|
|
||||||
private File tempDirectory;
|
|
||||||
|
|
||||||
private DirContext serverContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public EmbeddedLdapServerController() {
|
|
||||||
// create temporary directory for directory-server to store files in
|
|
||||||
tempDirectory = initTempFiles();
|
|
||||||
// start the apache directory server
|
|
||||||
startServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates if needed a temporary directory to store the apache directory
|
|
||||||
* server files. Since I can't get the class to shutdown cleanly,
|
|
||||||
* it also ensures a clean start by removing any files in the temp. directory.
|
|
||||||
*
|
|
||||||
* @return The directory that should be used to store temporary files in.
|
|
||||||
*/
|
|
||||||
protected File initTempFiles() {
|
|
||||||
String tmpDir = System.getProperty("java.io.tmpdir");
|
|
||||||
File dir = new File(tmpDir);
|
|
||||||
File tmp = new File(dir, "apacheds_tmp");
|
|
||||||
if (tmp.exists()) {
|
|
||||||
cleanupTempFiles(tmp);
|
|
||||||
} else {
|
|
||||||
tmp.mkdir();
|
|
||||||
}
|
|
||||||
System.out.println("Directory temp files at: " + tmp.getAbsolutePath());
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Attempts to open the file and import the contents as LDIF entries
|
|
||||||
* into the test directory.
|
|
||||||
*
|
|
||||||
* @param file The LDIF file to import
|
|
||||||
* @throws IOException
|
|
||||||
* @throws NamingException
|
|
||||||
*/
|
|
||||||
// public void importLDIF(File file) throws IOException, NamingException {
|
|
||||||
// FileInputStream fis = new FileInputStream(file);
|
|
||||||
// importLDIF(fis);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/** Attempts to read the provided InputStream for LDIF entries
|
|
||||||
* and adds those entries to the test directory server.
|
|
||||||
*
|
|
||||||
* @param in InputStream of LDIF data.
|
|
||||||
* @throws NamingException
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
public void importLDIF(InputStream in) throws NamingException, IOException {
|
|
||||||
LdifParser parser = new LdifParserImpl();
|
|
||||||
LdifIterator iterator = new LdifIterator( in );
|
|
||||||
|
|
||||||
while ( iterator.hasNext() ) {
|
|
||||||
Attributes attributes = new LockableAttributesImpl();
|
|
||||||
String ldif = ( String ) iterator.next();
|
|
||||||
parser.parse( attributes, ldif );
|
|
||||||
Name dn = new LdapName( ( String ) attributes.remove( "dn" ).get() );
|
|
||||||
dn.remove( 0 );
|
|
||||||
serverContext.createSubcontext( dn, attributes );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** starts the apache directory server. */
|
|
||||||
protected void startServer() {
|
|
||||||
System.out.println("Creating embedded LDAP server on port " + LDAP_PORT);
|
|
||||||
MutableServerStartupConfiguration startup = new MutableServerStartupConfiguration();
|
|
||||||
|
|
||||||
startup.setWorkingDirectory(tempDirectory);
|
|
||||||
startup.setLdapPort(LDAP_PORT);
|
|
||||||
|
|
||||||
Hashtable env = startup.toJndiEnvironment();
|
|
||||||
env.putAll(getEnvironment());
|
|
||||||
env.put(Context.INITIAL_CONTEXT_FACTORY, ServerContextFactory.class.getName());
|
|
||||||
|
|
||||||
try {
|
|
||||||
serverContext = new InitialDirContext( env );
|
|
||||||
} catch (NamingException nx) {
|
|
||||||
nx.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stops the apache directory server, and attempts to remove
|
|
||||||
* the data files that the server creates.
|
|
||||||
*/
|
|
||||||
protected void shutdownServer() {
|
|
||||||
// close our internal instance of the server-context
|
|
||||||
LdapUtils.closeContext(serverContext);
|
|
||||||
serverContext = null;
|
|
||||||
|
|
||||||
// signal the server that its time to say goodbye
|
|
||||||
Hashtable env = new ShutdownConfiguration().toJndiEnvironment();
|
|
||||||
env.putAll(getEnvironment());
|
|
||||||
|
|
||||||
try {
|
|
||||||
new InitialContext( env );
|
|
||||||
} catch (NamingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility method to remove any files in the temporary directory
|
|
||||||
* that we use to store the directory server's data files.
|
|
||||||
*
|
|
||||||
* @param tempDir The temporary directory.
|
|
||||||
*/
|
|
||||||
protected void cleanupTempFiles(File tempDir) {
|
|
||||||
if ((null != tempDir) && (tempDir.exists())) {
|
|
||||||
File[] files = tempDir.listFiles();
|
|
||||||
for (int i = 0; i < files.length; i++) {
|
|
||||||
if (!files[i].delete()) {
|
|
||||||
System.err.println("Error: unable to cleanup Apache Directory Server file: " + files[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This isn't working, probably because I am referencing the class
|
|
||||||
* as a static field, but maybe someone can figure out a way to
|
|
||||||
* implement this correctly.
|
|
||||||
*/
|
|
||||||
public void finalize() throws Throwable {
|
|
||||||
System.out.println("Entering EmbeddedLdapServerController.finalize()");
|
|
||||||
shutdownServer();
|
|
||||||
cleanupTempFiles(tempDirectory);
|
|
||||||
tempDirectory.delete();
|
|
||||||
super.finalize();
|
|
||||||
System.out.println("Leaving EmbeddedLdapServerController.finalize()");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The directory that the directory server will use to store its data files.
|
|
||||||
*/
|
|
||||||
// public File getTempDirectory() {
|
|
||||||
// return tempDirectory;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The directory that the directory server will use to store its data files.
|
|
||||||
*/
|
|
||||||
// public String getTempDirectoryPath() {
|
|
||||||
// return tempDirectory.getAbsolutePath();
|
|
||||||
// }
|
|
||||||
|
|
||||||
/** Create and return a Hashtable with standard JNDI settings for our tests. */
|
|
||||||
protected Properties getEnvironment() {
|
|
||||||
Properties env = new Properties();
|
|
||||||
env.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
|
|
||||||
env.setProperty(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
|
|
||||||
env.setProperty(Context.SECURITY_CREDENTIALS,"secret");
|
|
||||||
// env.setProperty(Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName());
|
|
||||||
|
|
||||||
env.setProperty( Context.PROVIDER_URL, "ou=system" );
|
|
||||||
// env.put( EnvKeys.WKDIR, tempDirectory.getAbsolutePath() );
|
|
||||||
return env;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get our reference to the server-mode context. */
|
|
||||||
public DirContext getServerContext() {
|
|
||||||
return serverContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
|
||||||
EmbeddedLdapServerController server = new EmbeddedLdapServerController();
|
|
||||||
System.out.println(DirectoryService.getInstance());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,123 +0,0 @@
|
||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.acegisecurity.providers.dao.ldap.support;
|
|
||||||
|
|
||||||
import javax.naming.NamingException;
|
|
||||||
import javax.naming.directory.Attributes;
|
|
||||||
import javax.naming.directory.BasicAttributes;
|
|
||||||
import javax.naming.directory.DirContext;
|
|
||||||
|
|
||||||
/** Container for a bunch of methods begining with 'dirInit' and taking
|
|
||||||
* a JNDI DirContext, which are used to construct the initial state
|
|
||||||
* of the EmbeddedServer <b>before</b> Unit tests are run.
|
|
||||||
*
|
|
||||||
* @TODO Externalize this into a LDIF resource file(s); I would have done this, but
|
|
||||||
* I can't seem to get this to work in both Eclipse and Maven at the same time.
|
|
||||||
*
|
|
||||||
* @author robert.sanders
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class LdapDirInitializer {
|
|
||||||
|
|
||||||
public static void intializeDir(DirContext ctx) throws NamingException {
|
|
||||||
LdapDirInitializer ldi = new LdapDirInitializer();
|
|
||||||
|
|
||||||
ldi.dirInit_SimpleUidUser(ctx);
|
|
||||||
|
|
||||||
ldi.dirInit_SimpleCnUser(ctx);
|
|
||||||
|
|
||||||
ldi.dirInit_OuOthers(ctx);
|
|
||||||
|
|
||||||
ldi.dirInit_UserNamedOtherOne(ctx);
|
|
||||||
|
|
||||||
ldi.dirInit_UserNamedOtherTwo(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dirInit_SimpleUidUser(DirContext ctx) throws NamingException {
|
|
||||||
String name = "uid=one.user,ou=users";
|
|
||||||
Attributes attrs = new BasicAttributes();
|
|
||||||
attrs.put("dn", name + ",ou=system");
|
|
||||||
attrs.put("cn", "User One");
|
|
||||||
attrs.put("sn", "One");
|
|
||||||
attrs.put("givenName", "User");
|
|
||||||
attrs.put("uid", "user.one");
|
|
||||||
attrs.put("mail", "one.user@hotmail.com");
|
|
||||||
attrs.put("userPassword", "plaintext");
|
|
||||||
attrs.put("objectClass", "inetOrgPerson");
|
|
||||||
attrs.put("objectClass", "top");
|
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dirInit_SimpleCnUser(DirContext ctx) throws NamingException {
|
|
||||||
String name = "cn=User Two,ou=users";
|
|
||||||
Attributes attrs = new BasicAttributes();
|
|
||||||
attrs.put("dn", name + ",ou=system");
|
|
||||||
attrs.put("cn", "Two User");
|
|
||||||
attrs.put("givenName", "Two");
|
|
||||||
attrs.put("sn", "User");
|
|
||||||
attrs.put("uid", "user.two");
|
|
||||||
attrs.put("mail", "user.two@hotmail.com");
|
|
||||||
attrs.put("userPassword", "plaintext2");
|
|
||||||
attrs.put("objectClass", "inetOrgPerson");
|
|
||||||
attrs.put("objectClass", "top");
|
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dirInit_UserNamedOtherOne(DirContext ctx) throws NamingException {
|
|
||||||
String name = "uid=other.one,ou=others";
|
|
||||||
Attributes attrs = new BasicAttributes();
|
|
||||||
attrs.put("dn", name + ",ou=system");
|
|
||||||
attrs.put("cn", "Other One");
|
|
||||||
attrs.put("givenName", "Other");
|
|
||||||
attrs.put("sn", "One");
|
|
||||||
attrs.put("uid", "other.one");
|
|
||||||
attrs.put("mail", "other.one@hotmail.com");
|
|
||||||
attrs.put("userPassword", "otherone");
|
|
||||||
attrs.put("objectClass", "inetOrgPerson");
|
|
||||||
attrs.put("objectClass", "top");
|
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dirInit_UserNamedOtherTwo(DirContext ctx) throws NamingException {
|
|
||||||
String name = "uid=other.two,ou=others";
|
|
||||||
Attributes attrs = new BasicAttributes();
|
|
||||||
attrs.put("dn", name + ",ou=system");
|
|
||||||
attrs.put("cn", "Other Two");
|
|
||||||
attrs.put("givenName", "Other");
|
|
||||||
attrs.put("sn", "Two");
|
|
||||||
attrs.put("uid", "other.two");
|
|
||||||
attrs.put("mail", "other.two@hotmail.com");
|
|
||||||
attrs.put("userPassword", "othertwo");
|
|
||||||
attrs.put("objectClass", "inetOrgPerson");
|
|
||||||
attrs.put("objectClass", "top");
|
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dirInit_OuOthers(DirContext ctx) throws NamingException {
|
|
||||||
String otherUserOU = "ou=Others";
|
|
||||||
Attributes attrs = new BasicAttributes();
|
|
||||||
attrs.put("dn", otherUserOU + ",ou=system");
|
|
||||||
attrs.put("ou", "others");
|
|
||||||
attrs.put("objectClass", "top");
|
|
||||||
attrs.put("objectClass", "organizationalUnit");
|
|
||||||
|
|
||||||
ctx.createSubcontext(otherUserOU, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue