/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> and
* Steven Grimm <koreth[remove] at midwinter dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestMemorySessions.java 3308 2006-06-15 18:54:14Z gbevin $
*/
package com.uwyn.rife.authentication.sessionvalidators;
import com.uwyn.rife.authentication.SessionAttributes;
import com.uwyn.rife.authentication.SessionValidator;
import com.uwyn.rife.authentication.elements.exceptions.UnknownSessionValidatorFactoryClassException;
import com.uwyn.rife.ioc.HierarchicalProperties;
import com.uwyn.rife.ioc.exceptions.MandatoryPropertyMissingException;
import com.uwyn.rife.ioc.exceptions.PropertyValueException;
import junit.framework.TestCase;
public class TestCustomSessionValidator extends TestCase
{
private HierarchicalProperties mProperties = null;
/**
* Dummy session validator class; this is just a mock we can use to test
* that our factory is being used.
*/
public static class CustomSessionValidator extends AbstractSessionValidator
{
private String mId;
public CustomSessionValidator(String id)
{
mId = id;
}
public String getId()
{
return mId;
}
public boolean isAccessAuthorized(int id)
{
return false;
}
public int validateSession(String authId, String hostIp, SessionAttributes attributes)
{
return 0;
}
}
/**
* Custom session validator factory class. Returns instances of our custom
* session validator, above.
*/
public static class CustomValidatorFactory implements SessionValidatorFactory
{
public SessionValidator getValidator(HierarchicalProperties properties)
throws PropertyValueException
{
String id = properties.getValueTyped("custom_id", String.class);
if (null == id || id.length() == 0)
{
throw new MandatoryPropertyMissingException("custom_id");
}
return new CustomSessionValidator(id);
}
}
public TestCustomSessionValidator(String name)
{
super(name);
}
public void setUp() throws Exception
{
super.setUp();
mProperties = new HierarchicalProperties();
mProperties.put(SessionValidatorFactoryFactory.PROPERTYNAME_FACTORY_CLASS, CustomValidatorFactory.class.getName());
mProperties.put("custom_id", "x");
}
public void testInstantiation()
{
SessionValidatorFactory factory = SessionValidatorFactoryFactory.getInstance(mProperties);
assertNotNull(factory);
assertTrue(factory instanceof CustomValidatorFactory);
}
public void testSessionValidatorInstantiation()
{
SessionValidator validator = SessionValidatorFactoryFactory.getValidator(mProperties);
assertNotNull(validator);
assertTrue(validator instanceof CustomSessionValidator);
assertEquals("x", ((CustomSessionValidator) validator).getId());
}
public void testExceptionOnMissingClass() throws Exception
{
try
{
SessionValidatorFactoryFactory.getInstance(new HierarchicalProperties());
fail("Didn't get expected exception");
}
catch (MandatoryPropertyMissingException e)
{
assertEquals(SessionValidatorFactoryFactory.PROPERTYNAME_FACTORY_CLASS, e.getPropertyName());
}
}
public void testExceptionOnBogusClass() throws Exception
{
HierarchicalProperties properties = new HierarchicalProperties();
properties.put(SessionValidatorFactoryFactory.PROPERTYNAME_FACTORY_CLASS, "bad.class.name");
try
{
SessionValidatorFactoryFactory.getInstance(properties);
fail("Didn't get expected exception");
}
catch (UnknownSessionValidatorFactoryClassException e)
{
assertEquals(e.getValidatorClassName(), "bad.class.name");
}
}
public void testExceptionOnMissingFactoryParameter() throws Exception
{
HierarchicalProperties properties = new HierarchicalProperties();
properties.put(SessionValidatorFactoryFactory.PROPERTYNAME_FACTORY_CLASS, CustomValidatorFactory.class.getName());
try
{
SessionValidatorFactoryFactory.getValidator(properties);
fail("Didn't get expected exception");
}
catch (MandatoryPropertyMissingException e)
{
assertEquals("custom_id", e.getPropertyName());
}
}
}