@ -1,9 +1,6 @@
@@ -1,9 +1,6 @@
package org.springframework.security.acls.jdbc ;
import static org.junit.Assert.assertEquals ;
import static org.junit.Assert.assertFalse ;
import static org.junit.Assert.assertTrue ;
import static org.junit.Assert.fail ;
import static org.junit.Assert.* ;
import java.io.File ;
import java.io.FileInputStream ;
@ -11,6 +8,7 @@ import java.io.FileOutputStream;
@@ -11,6 +8,7 @@ import java.io.FileOutputStream;
import java.io.ObjectInputStream ;
import java.io.ObjectOutputStream ;
import java.io.Serializable ;
import java.util.Map ;
import net.sf.ehcache.Cache ;
import net.sf.ehcache.CacheManager ;
@ -38,6 +36,7 @@ import org.springframework.security.util.FieldUtils;
@@ -38,6 +36,7 @@ import org.springframework.security.util.FieldUtils;
* Tests { @link EhCacheBasedAclCache }
*
* @author Andrei Stefan
* @version $Id$
* /
public class EhCacheBasedAclCacheTests {
private static final String TARGET_CLASS = "org.springframework.security.acls.TargetObject" ;
@ -48,7 +47,7 @@ public class EhCacheBasedAclCacheTests {
@@ -48,7 +47,7 @@ public class EhCacheBasedAclCacheTests {
public static void initCacheManaer ( ) {
cacheManager = new CacheManager ( ) ;
// Use disk caching immediately (to test for serialization issue reported in SEC-527)
cacheManager . addCache ( new Cache ( "ehcachebasedacltests" , 0 , true , false , 3 0, 30 ) ) ;
cacheManager . addCache ( new Cache ( "ehcachebasedacltests" , 0 , true , false , 60 0, 30 0 ) ) ;
}
@AfterClass
@ -203,6 +202,7 @@ public class EhCacheBasedAclCacheTests {
@@ -203,6 +202,7 @@ public class EhCacheBasedAclCacheTests {
assertEquals ( cache . getSize ( ) , 0 ) ;
}
@SuppressWarnings ( "unchecked" )
@Test
public void cacheOperationsAclWithParent ( ) throws Exception {
Ehcache cache = getCache ( ) ;
@ -213,8 +213,8 @@ public class EhCacheBasedAclCacheTests {
@@ -213,8 +213,8 @@ public class EhCacheBasedAclCacheTests {
auth . setAuthenticated ( true ) ;
SecurityContextHolder . getContext ( ) . setAuthentication ( auth ) ;
ObjectIdentity identity = new ObjectIdentityImpl ( TARGET_CLASS , new Long ( 100 ) ) ;
ObjectIdentity identityParent = new ObjectIdentityImpl ( TARGET_CLASS , new Long ( 101 ) ) ;
ObjectIdentity identity = new ObjectIdentityImpl ( TARGET_CLASS , new Long ( 1 ) ) ;
ObjectIdentity identityParent = new ObjectIdentityImpl ( TARGET_CLASS , new Long ( 2 ) ) ;
AclAuthorizationStrategy aclAuthorizationStrategy = new AclAuthorizationStrategyImpl ( new GrantedAuthority [ ] {
new GrantedAuthorityImpl ( "ROLE_OWNERSHIP" ) , new GrantedAuthorityImpl ( "ROLE_AUDITING" ) ,
new GrantedAuthorityImpl ( "ROLE_GENERAL" ) } ) ;
@ -228,13 +228,32 @@ public class EhCacheBasedAclCacheTests {
@@ -228,13 +228,32 @@ public class EhCacheBasedAclCacheTests {
assertEquals ( cache . getSize ( ) , 4 ) ;
assertEquals ( 4 , cache . getDiskStoreSize ( ) ) ;
assertTrue ( cache . isElementOnDisk ( acl . getObjectIdentity ( ) ) ) ;
assertTrue ( cache . isElementOnDisk ( Long . valueOf ( 1 ) ) ) ;
assertFalse ( cache . isElementInMemory ( acl . getObjectIdentity ( ) ) ) ;
assertFalse ( cache . isElementInMemory ( Long . valueOf ( 1 ) ) ) ;
cache . flush ( ) ;
// Wait for the spool to be written to disk (it's asynchronous)
Map spool = ( Map ) FieldUtils . getFieldValue ( cache , "diskStore.spool" ) ;
while ( spool . size ( ) > 0 ) {
Thread . sleep ( 50 ) ;
}
// Check we can get from cache the same objects we put in
assertEquals ( myCache . getFromCache ( new Long ( 1 ) ) , acl ) ;
assertEquals ( myCache . getFromCache ( identity ) , acl ) ;
assertEquals ( myCache . getFromCache ( new Long ( 2 ) ) , parentAcl ) ;
assertEquals ( myCache . getFromCache ( identityParent ) , parentAcl ) ;
AclImpl aclFromCache = ( AclImpl ) myCache . getFromCache ( new Long ( 1 ) ) ;
// For the checks on transient fields, we need to be sure that the object is being loaded from the cache,
// not from the ehcache spool or elsewhere...
assertFalse ( acl = = aclFromCache ) ;
assertEquals ( acl , aclFromCache ) ;
// SEC-951 check transient fields are set on parent
assertNotNull ( FieldUtils . getFieldValue ( aclFromCache . getParentAcl ( ) , "aclAuthorizationStrategy" ) ) ;
assertNotNull ( FieldUtils . getFieldValue ( aclFromCache . getParentAcl ( ) , "auditLogger" ) ) ;
assertEquals ( acl , myCache . getFromCache ( identity ) ) ;
assertNotNull ( FieldUtils . getFieldValue ( aclFromCache , "aclAuthorizationStrategy" ) ) ;
AclImpl parentAclFromCache = ( AclImpl ) myCache . getFromCache ( new Long ( 2 ) ) ;
assertEquals ( parentAcl , parentAclFromCache ) ;
assertNotNull ( FieldUtils . getFieldValue ( parentAclFromCache , "aclAuthorizationStrategy" ) ) ;
assertEquals ( parentAcl , myCache . getFromCache ( identityParent ) ) ;
}
//~ Inner Classes ==================================================================================================