You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2011/01/10 18:56:58 UTC
svn commit: r1057293 - in /directory/apacheds/branches/apacheds-AP:
core-api/src/main/java/org/apache/directory/server/core/administrative/SubentryCache.java
core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryRenameOperationIT.java
Author: elecharny
Date: Mon Jan 10 17:56:58 2011
New Revision: 1057293
URL: http://svn.apache.org/viewvc?rev=1057293&view=rev
Log:
o Forgot to update the UUID cache when removing a subentry from the SubentryCache
o Added a test for the renaming of a subentry
Modified:
directory/apacheds/branches/apacheds-AP/core-api/src/main/java/org/apache/directory/server/core/administrative/SubentryCache.java
directory/apacheds/branches/apacheds-AP/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryRenameOperationIT.java
Modified: directory/apacheds/branches/apacheds-AP/core-api/src/main/java/org/apache/directory/server/core/administrative/SubentryCache.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-AP/core-api/src/main/java/org/apache/directory/server/core/administrative/SubentryCache.java?rev=1057293&r1=1057292&r2=1057293&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-AP/core-api/src/main/java/org/apache/directory/server/core/administrative/SubentryCache.java (original)
+++ directory/apacheds/branches/apacheds-AP/core-api/src/main/java/org/apache/directory/server/core/administrative/SubentryCache.java Mon Jan 10 17:56:58 2011
@@ -141,6 +141,18 @@ public class SubentryCache implements It
Subentry[] oldSubentry = dnCache.getElement( dn );
dnCache.remove( dn );
+ // Update the UUID cache
+ if ( oldSubentry != null )
+ {
+ for ( Subentry subentry : oldSubentry )
+ {
+ if ( subentry != null )
+ {
+ uuidCache.remove( subentry.getUuid() );
+ }
+ }
+ }
+
return oldSubentry;
}
Modified: directory/apacheds/branches/apacheds-AP/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryRenameOperationIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-AP/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryRenameOperationIT.java?rev=1057293&r1=1057292&r2=1057293&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-AP/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryRenameOperationIT.java (original)
+++ directory/apacheds/branches/apacheds-AP/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryRenameOperationIT.java Mon Jan 10 17:56:58 2011
@@ -26,6 +26,8 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.Set;
+
import org.apache.directory.server.core.administrative.AdministrativePoint;
import org.apache.directory.server.core.administrative.Subentry;
import org.apache.directory.server.core.annotations.ApplyLdifs;
@@ -621,12 +623,15 @@ public class SubentryRenameOperationIT e
// Success expected
// -------------------------------------------------------------------
/**
- * Test the addition of a subentry under an AAP
+ * Test the rename of a subentry under an AAP, with 2 roles
*/
@Test
- @Ignore
- public void testAddSubentryUnderAAP() throws Exception
+ public void testRenameSubentryUnderAAP() throws Exception
{
+ DN aapDn = service.getDNFactory().create( "ou=AAP,ou=system" );
+ DN oldSubentryDn = service.getDNFactory().create( "cn=test,ou=AAP,ou=system" );
+ DN newSubentryDn = service.getDNFactory().create( "cn=test1,ou=AAP,ou=system" );
+
// First add an AAP
createAAP( "ou=AAP,ou=system" );
@@ -636,12 +641,84 @@ public class SubentryRenameOperationIT e
"ObjectClass: top",
"ObjectClass: subentry",
"ObjectClass: collectiveAttributeSubentry",
+ "ObjectClass: accessControlSubentry",
"cn: test",
"subtreeSpecification: {}",
- "c-o: Test Org" );
+ "c-o: Test Org",
+ "prescriptiveACI: { "
+ + " identificationTag \"addAci\", "
+ + " precedence 14, "
+ + " authenticationLevel none, "
+ + " itemOrUserFirst userFirst: "
+ + " { "
+ + " userClasses { userGroup { \"cn=Administrators,ou=groups,ou=system\" } },"
+ + " userPermissions "
+ + " { "
+ + " { "
+ + " protectedItems { entry, allUserAttributeTypesAndValues }, "
+ + " grantsAndDenials { grantCompare, grantRead, grantBrowse } "
+ + " } "
+ + " } "
+ + " } "
+ + "}" );
- AddResponse response = adminConnection.add( subentry );
- assertEquals( ResultCodeEnum.SUCCESS, response.getLdapResult().getResultCode() );
+ AddResponse addResponse = adminConnection.add( subentry );
+ assertEquals( ResultCodeEnum.SUCCESS, addResponse.getLdapResult().getResultCode() );
+
+ long acSeqNumber = getAcSeqNumber( "ou=AAP,ou=system" );
+ long caSeqNumber = getCaSeqNumber( "ou=AAP,ou=system" );
+
+ // Check the rename
+ ModifyDnResponse renameResponse = adminConnection.rename( "cn=test,ou=AAP,ou=system", "cn=test1" );
+ assertEquals( ResultCodeEnum.SUCCESS, renameResponse.getLdapResult().getResultCode() );
+
+ // The SeqNumber should not have changed
+ assertEquals(acSeqNumber, getAcSeqNumber( "ou=AAP,ou=system" ) );
+ assertEquals(caSeqNumber, getCaSeqNumber( "ou=AAP,ou=system" ) );
+
+ // The APCache should point to the new subentries
+ // First, AC
+ AdministrativePoint acAP = service.getAccessControlAPCache().getElement( aapDn );
+
+ assertNotNull( acAP );
+ Set<Subentry> subentries = acAP.getSubentries();
+
+ assertNotNull( subentries );
+
+ for ( Subentry sub : subentries )
+ {
+ assertEquals( "test1", sub.getCn().getString() );
+ }
+
+ // Then CA
+ AdministrativePoint caAP = service.getAccessControlAPCache().getElement( aapDn );
+
+ assertNotNull( caAP );
+ subentries = caAP.getSubentries();
+
+ assertNotNull( subentries );
+
+ for ( Subentry sub : subentries )
+ {
+ assertEquals( "test1", sub.getCn().getString() );
+ }
+
+ // Now ch"ck the UUID cache
+ Subentry[] subArray = service.getSubentryCache().getSubentries( oldSubentryDn );
+
+ assertNull( subArray );
+
+ subArray = service.getSubentryCache().getSubentries( newSubentryDn );
+
+ assertNotNull( subArray );
+
+ for ( Subentry sub : subentries )
+ {
+ if ( sub != null )
+ {
+ assertEquals( "test1", sub.getCn().getString() );
+ }
+ }
}