Added tests for AuthenticationDetailsSourceImpl (and AuthenticationDetails).

This commit is contained in:
Luke Taylor 2008-12-01 15:50:31 +00:00
parent 8283074097
commit a09b15ce5f
4 changed files with 61 additions and 30 deletions

View File

@ -21,14 +21,10 @@ public class AuthenticationDetails implements Serializable {
* @param context that the authentication request is initiated from
*/
public AuthenticationDetails(Object context) {
this.context = context==null?"":context.toString();
this.context = context == null ? "" : context.toString();
doPopulateAdditionalInformation(context);
}
protected AuthenticationDetails() {
throw new IllegalArgumentException("Cannot use default constructor");
}
//~ Methods ========================================================================================================
/**
@ -42,20 +38,11 @@ public class AuthenticationDetails implements Serializable {
if (obj instanceof AuthenticationDetails) {
AuthenticationDetails rhs = (AuthenticationDetails) obj;
if ((context == null) && (rhs.getContext() != null)) {
// this.context cannot be null
if (!context.equals(rhs.getContext())) {
return false;
}
if ((context != null) && (rhs.getContext() == null)) {
return false;
}
if (context != null) {
if (!context.equals(rhs.getContext())) {
return false;
}
}
return true;
}
@ -65,7 +52,7 @@ public class AuthenticationDetails implements Serializable {
/**
* Indicates the context.
*
* @return the address
* @return the context
*/
public String getContext() {
return context;
@ -75,7 +62,7 @@ public class AuthenticationDetails implements Serializable {
StringBuffer sb = new StringBuffer();
sb.append(super.toString() + ": ");
sb.append("Context: " + this.getContext());
return sb.toString();
}
}

View File

@ -1,7 +1,6 @@
package org.springframework.security.ui;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.springframework.security.ui.AuthenticationDetailsSource;
import org.springframework.util.Assert;
@ -26,20 +25,15 @@ public class AuthenticationDetailsSourceImpl implements AuthenticationDetailsSou
//~ Methods ========================================================================================================
public Object buildDetails(Object context) {
Object result = null;
try {
Constructor<?> constructor = getFirstMatchingConstructor(context);
return constructor.newInstance(new Object[] { context });
} catch (NoSuchMethodException ex) {
ReflectionUtils.handleReflectionException(ex);
} catch (InvocationTargetException ex) {
ReflectionUtils.handleReflectionException(ex);
} catch (InstantiationException ex) {
ReflectionUtils.handleReflectionException(ex);
} catch (IllegalAccessException ex) {
result = constructor.newInstance(new Object[] { context });
} catch (Exception ex) {
ReflectionUtils.handleReflectionException(ex);
}
return null;
return result;
}
/**

View File

@ -9,8 +9,6 @@ import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.InitializingBean;
/**
* Implementation of AuthenticationDetailsSource which converts the user's J2EE roles (as obtained by calling
* {@link HttpServletRequest#isUserInRole(String)}) into GrantedAuthoritys and stores these in the authentication

View File

@ -0,0 +1,52 @@
package org.springframework.security.ui;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.security.providers.TestingAuthenticationToken;
/**
*
* @author Luke Taylor
* @version $Id$
*/
public class AuthenticationDetailsSourceImplTests {
@Test
public void buildDetailsReturnsExpectedAuthenticationDetails() {
AuthenticationDetailsSourceImpl ads = new AuthenticationDetailsSourceImpl();
AuthenticationDetails details = (AuthenticationDetails) ads.buildDetails("the context");
assertEquals("the context", details.getContext());
assertEquals(new AuthenticationDetails("the context"), details);
ads.setClazz(AuthenticationDetails.class);
details = (AuthenticationDetails) ads.buildDetails("another context");
assertEquals("another context", details.getContext());
}
@Test(expected=IllegalStateException.class)
public void nonMatchingConstructorIsRejected() {
AuthenticationDetailsSourceImpl ads = new AuthenticationDetailsSourceImpl();
ads.setClazz(String.class);
ads.buildDetails(new Object());
}
@Test(expected=IllegalStateException.class)
public void constructorTakingMultipleArgumentsIsRejected() {
AuthenticationDetailsSourceImpl ads = new AuthenticationDetailsSourceImpl();
ads.setClazz(TestingAuthenticationToken.class);
ads.buildDetails(null);
}
@Test
public void authenticationDetailsEqualsBehavesAsExpected() {
AuthenticationDetails details = new AuthenticationDetails("the context");
assertFalse((new AuthenticationDetails("different context")).equals(details));
assertFalse((new AuthenticationDetails(null)).equals(details));
assertFalse(details.equals(new AuthenticationDetails(null)));
assertFalse(details.equals("a string"));
// Just check toString() functions OK
details.toString();
(new AuthenticationDetails(null)).toString();
}
}