test class for EhCacheBasedAclCache
This commit is contained in:
parent
944c7e9665
commit
aa0744a705
|
@ -0,0 +1,181 @@
|
||||||
|
package org.springframework.security.acls.jdbc;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
import net.sf.ehcache.Cache;
|
||||||
|
import net.sf.ehcache.Ehcache;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.security.Authentication;
|
||||||
|
import org.springframework.security.GrantedAuthority;
|
||||||
|
import org.springframework.security.GrantedAuthorityImpl;
|
||||||
|
import org.springframework.security.MockApplicationContext;
|
||||||
|
import org.springframework.security.acls.MutableAcl;
|
||||||
|
import org.springframework.security.acls.domain.AclAuthorizationStrategy;
|
||||||
|
import org.springframework.security.acls.domain.AclAuthorizationStrategyImpl;
|
||||||
|
import org.springframework.security.acls.domain.AclImpl;
|
||||||
|
import org.springframework.security.acls.domain.ConsoleAuditLogger;
|
||||||
|
import org.springframework.security.acls.objectidentity.ObjectIdentity;
|
||||||
|
import org.springframework.security.acls.objectidentity.ObjectIdentityImpl;
|
||||||
|
import org.springframework.security.context.SecurityContextHolder;
|
||||||
|
import org.springframework.security.providers.TestingAuthenticationToken;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests {@link EhCacheBasedAclCache}
|
||||||
|
*
|
||||||
|
* @author Andrei Stefan
|
||||||
|
*/
|
||||||
|
public class EhCacheBasedAclCacheTests extends TestCase {
|
||||||
|
|
||||||
|
//~ Methods ========================================================================================================
|
||||||
|
|
||||||
|
private Ehcache getCache() {
|
||||||
|
ApplicationContext ctx = MockApplicationContext.getContext();
|
||||||
|
|
||||||
|
return (Ehcache) ctx.getBean("eHCacheBackend");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() throws Exception {
|
||||||
|
super.tearDown();
|
||||||
|
SecurityContextHolder.clearContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testConstructorRejectsNullParameters() throws Exception {
|
||||||
|
try {
|
||||||
|
AclCache aclCache = new EhCacheBasedAclCache(null);
|
||||||
|
Assert.fail("It should have thrown IllegalArgumentException");
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException expected) {
|
||||||
|
Assert.assertTrue(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMethodsRejectNullParameters() throws Exception {
|
||||||
|
Ehcache cache = new MockEhcache();
|
||||||
|
EhCacheBasedAclCache myCache = new EhCacheBasedAclCache(cache);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Serializable id = null;
|
||||||
|
myCache.evictFromCache(id);
|
||||||
|
Assert.fail("It should have thrown IllegalArgumentException");
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException expected) {
|
||||||
|
Assert.assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
ObjectIdentity obj = null;
|
||||||
|
myCache.evictFromCache(obj);
|
||||||
|
Assert.fail("It should have thrown IllegalArgumentException");
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException expected) {
|
||||||
|
Assert.assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Serializable id = null;
|
||||||
|
myCache.getFromCache(id);
|
||||||
|
Assert.fail("It should have thrown IllegalArgumentException");
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException expected) {
|
||||||
|
Assert.assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
ObjectIdentity obj = null;
|
||||||
|
myCache.getFromCache(obj);
|
||||||
|
Assert.fail("It should have thrown IllegalArgumentException");
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException expected) {
|
||||||
|
Assert.assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
MutableAcl acl = null;
|
||||||
|
myCache.putInCache(acl);
|
||||||
|
Assert.fail("It should have thrown IllegalArgumentException");
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException expected) {
|
||||||
|
Assert.assertTrue(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCacheOperationsAclWithoutParent() throws Exception {
|
||||||
|
Ehcache cache = getCache();
|
||||||
|
EhCacheBasedAclCache myCache = new EhCacheBasedAclCache(cache);
|
||||||
|
|
||||||
|
ObjectIdentity identity = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
|
||||||
|
AclAuthorizationStrategy aclAuthorizationStrategy = new AclAuthorizationStrategyImpl(new GrantedAuthority[] {
|
||||||
|
new GrantedAuthorityImpl("ROLE_OWNERSHIP"), new GrantedAuthorityImpl("ROLE_AUDITING"),
|
||||||
|
new GrantedAuthorityImpl("ROLE_GENERAL") });
|
||||||
|
MutableAcl acl = new AclImpl(identity, new Long(1), aclAuthorizationStrategy, new ConsoleAuditLogger());
|
||||||
|
|
||||||
|
myCache.putInCache(acl);
|
||||||
|
Assert.assertEquals(cache.getSize(), 2);
|
||||||
|
|
||||||
|
// Check we can get from cache the same objects we put in
|
||||||
|
Assert.assertEquals(myCache.getFromCache(new Long(1)), acl);
|
||||||
|
Assert.assertEquals(myCache.getFromCache(identity), acl);
|
||||||
|
|
||||||
|
// Put another object in cache
|
||||||
|
ObjectIdentity identity2 = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
|
||||||
|
MutableAcl acl2 = new AclImpl(identity2, new Long(2), aclAuthorizationStrategy, new ConsoleAuditLogger());
|
||||||
|
|
||||||
|
myCache.putInCache(acl2);
|
||||||
|
Assert.assertEquals(cache.getSize(), 4);
|
||||||
|
|
||||||
|
// Try to evict an entry that doesn't exist
|
||||||
|
myCache.evictFromCache(new Long(3));
|
||||||
|
myCache.evictFromCache(new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102)));
|
||||||
|
Assert.assertEquals(cache.getSize(), 4);
|
||||||
|
|
||||||
|
myCache.evictFromCache(new Long(1));
|
||||||
|
Assert.assertEquals(cache.getSize(), 2);
|
||||||
|
|
||||||
|
// Check the second object inserted
|
||||||
|
Assert.assertEquals(myCache.getFromCache(new Long(2)), acl2);
|
||||||
|
Assert.assertEquals(myCache.getFromCache(identity2), acl2);
|
||||||
|
|
||||||
|
myCache.evictFromCache(identity2);
|
||||||
|
Assert.assertEquals(cache.getSize(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCacheOperationsAclWithParent() throws Exception {
|
||||||
|
Ehcache cache = getCache();
|
||||||
|
EhCacheBasedAclCache myCache = new EhCacheBasedAclCache(cache);
|
||||||
|
|
||||||
|
Authentication auth = new TestingAuthenticationToken("user", "password", new GrantedAuthority[] {
|
||||||
|
new GrantedAuthorityImpl("ROLE_GENERAL") });
|
||||||
|
auth.setAuthenticated(true);
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(auth);
|
||||||
|
|
||||||
|
ObjectIdentity identity = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
|
||||||
|
ObjectIdentity identityParent = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
|
||||||
|
AclAuthorizationStrategy aclAuthorizationStrategy = new AclAuthorizationStrategyImpl(new GrantedAuthority[] {
|
||||||
|
new GrantedAuthorityImpl("ROLE_OWNERSHIP"), new GrantedAuthorityImpl("ROLE_AUDITING"),
|
||||||
|
new GrantedAuthorityImpl("ROLE_GENERAL") });
|
||||||
|
MutableAcl acl = new AclImpl(identity, new Long(1), aclAuthorizationStrategy, new ConsoleAuditLogger());
|
||||||
|
MutableAcl parentAcl = new AclImpl(identityParent, new Long(2), aclAuthorizationStrategy, new ConsoleAuditLogger());
|
||||||
|
|
||||||
|
acl.setParent(parentAcl);
|
||||||
|
|
||||||
|
myCache.putInCache(acl);
|
||||||
|
Assert.assertEquals(cache.getSize(), 4);
|
||||||
|
|
||||||
|
// Check we can get from cache the same objects we put in
|
||||||
|
Assert.assertEquals(myCache.getFromCache(new Long(1)), acl);
|
||||||
|
Assert.assertEquals(myCache.getFromCache(identity), acl);
|
||||||
|
Assert.assertEquals(myCache.getFromCache(new Long(2)), parentAcl);
|
||||||
|
Assert.assertEquals(myCache.getFromCache(identityParent), parentAcl);
|
||||||
|
}
|
||||||
|
|
||||||
|
//~ Inner Classes ==================================================================================================
|
||||||
|
|
||||||
|
private class MockEhcache extends Cache {
|
||||||
|
public MockEhcache() {
|
||||||
|
super("cache", 0, true, true, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue