1 changed files with 181 additions and 0 deletions
@ -0,0 +1,181 @@
@@ -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