You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/09/11 03:05:48 UTC

svn commit: r280053 - in /directory/apacheds/trunk/core/src: main/java/org/apache/ldap/server/collective/ main/java/org/apache/ldap/server/configuration/ test/org/apache/ldap/server/collective/

Author: akarasulu
Date: Sat Sep 10 18:05:41 2005
New Revision: 280053

URL: http://svn.apache.org/viewcvs?rev=280053&view=rev
Log:
changes ...

 o added test case to test the collective attribute functionality
 o test case exposed several bugs which we fixed 
 o found that interceptor was not even running due to a bug in startup config


Added:
    directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/
    directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/CollectiveAttributeServiceTest.java   (with props)
Modified:
    directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/collective/CollectiveAttributeService.java
    directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/collective/CollectiveAttributeService.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/collective/CollectiveAttributeService.java?rev=280053&r1=280052&r2=280053&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/collective/CollectiveAttributeService.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/collective/CollectiveAttributeService.java Sat Sep 10 18:05:41 2005
@@ -43,6 +43,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.HashSet;
+import java.util.Collections;
 
 
 /**
@@ -65,12 +66,7 @@
         public boolean accept( LdapContext ctx, SearchResult result, SearchControls controls )
                 throws NamingException
         {
-            if ( controls.getReturningAttributes() == null )
-            {
                 return filter( result.getAttributes() );
-            }
-
-            return true;
         }
     };
 
@@ -126,6 +122,10 @@
                 exclusions.add( attrType.getOid() );
             }
         }
+        else
+        {
+            exclusions = Collections.EMPTY_SET;
+        }
 
         /*
          * For each collective subentry referenced by the entry we lookup the
@@ -172,7 +172,7 @@
                     // add all the collective attribute values in the subentry to entry
                     for ( int jj = 0; jj < subentryColAttr.size(); jj++ )
                     {
-                        entryColAttr.add( subentryColAttr.get( ii ) );
+                        entryColAttr.add( subentryColAttr.get( jj ) );
                     }
                 }
             }
@@ -276,11 +276,6 @@
             SearchControls searchCtls ) throws NamingException
     {
         NamingEnumeration e = nextInterceptor.search( base, env, filter, searchCtls );
-        if ( searchCtls.getReturningAttributes() != null )
-        {
-            return e;
-        }
-
         LdapContext ctx =
             ( LdapContext ) InvocationStack.getInstance().peek().getCaller();
         return new SearchResultFilteringEnumeration( e, searchCtls, ctx, SEARCH_FILTER );

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java?rev=280053&r1=280052&r2=280053&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java Sat Sep 10 18:05:41 2005
@@ -39,6 +39,7 @@
 import org.apache.ldap.server.schema.bootstrap.*;
 import org.apache.ldap.server.subtree.SubentryService;
 import org.apache.ldap.server.event.EventService;
+import org.apache.ldap.server.collective.CollectiveAttributeService;
 
 /**
  * A {@link Configuration} that starts up ApacheDS.
@@ -165,7 +166,7 @@
 
         interceptorCfg = new MutableInterceptorConfiguration();
         interceptorCfg.setName( "collectiveAttributeService" );
-        interceptorCfg.setInterceptor( new OperationalAttributeService() );
+        interceptorCfg.setInterceptor( new CollectiveAttributeService() );
         list.add( interceptorCfg );
 
         interceptorCfg = new MutableInterceptorConfiguration();

Added: directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/CollectiveAttributeServiceTest.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/CollectiveAttributeServiceTest.java?rev=280053&view=auto
==============================================================================
--- directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/CollectiveAttributeServiceTest.java (added)
+++ directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/CollectiveAttributeServiceTest.java Sat Sep 10 18:05:41 2005
@@ -0,0 +1,370 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.ldap.server.collective;
+
+
+import org.apache.ldap.server.AbstractAdminTestCase;
+import org.apache.ldap.common.message.LockableAttributeImpl;
+import org.apache.ldap.common.message.LockableAttributesImpl;
+
+import javax.naming.NamingException;
+import javax.naming.NamingEnumeration;
+import javax.naming.directory.*;
+import java.util.Map;
+import java.util.HashMap;
+
+
+/**
+ * Test cases for the collective attribute service.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class CollectiveAttributeServiceTest extends AbstractAdminTestCase
+{
+    public Attributes getTestEntry( String cn )
+    {
+        Attributes subentry = new LockableAttributesImpl();
+        Attribute objectClass = new LockableAttributeImpl( "objectClass" );
+        objectClass.add( "top" );
+        objectClass.add( "person" );
+        subentry.put( objectClass );
+        subentry.put( "cn", cn );
+        subentry.put( "sn", "testentry" );
+        return subentry;
+    }
+
+
+    public Attributes getTestSubentry()
+    {
+        Attributes subentry = new LockableAttributesImpl();
+        Attribute objectClass = new LockableAttributeImpl( "objectClass" );
+        objectClass.add( "top" );
+        objectClass.add( "subentry" );
+        objectClass.add( "collectiveAttributeSubentry" );
+        subentry.put( objectClass );
+        subentry.put( "c-ou", "configuration" );
+        subentry.put( "subtreeSpecification", "{ base \"ou=configuration\" }" );
+        subentry.put( "cn", "testsubentry" );
+        return subentry;
+    }
+
+
+    public Attributes getTestSubentry2()
+    {
+        Attributes subentry = new LockableAttributesImpl();
+        Attribute objectClass = new LockableAttributeImpl( "objectClass" );
+        objectClass.add( "top" );
+        objectClass.add( "subentry" );
+        objectClass.add( "collectiveAttributeSubentry" );
+        subentry.put( objectClass );
+        subentry.put( "c-ou", "configuration2" );
+        subentry.put( "subtreeSpecification", "{ base \"ou=configuration\" }" );
+        subentry.put( "cn", "testsubentry2" );
+        return subentry;
+    }
+
+
+    public Attributes getTestSubentry3()
+    {
+        Attributes subentry = new LockableAttributesImpl();
+        Attribute objectClass = new LockableAttributeImpl( "objectClass" );
+        objectClass.add( "top" );
+        objectClass.add( "subentry" );
+        objectClass.add( "collectiveAttributeSubentry" );
+        subentry.put( objectClass );
+        subentry.put( "c-st", "FL" );
+        subentry.put( "subtreeSpecification", "{ base \"ou=configuration\" }" );
+        subentry.put( "cn", "testsubentry3" );
+        return subentry;
+    }
+
+
+    public void addAdministrativeRole( String role ) throws NamingException
+    {
+        Attribute attribute = new LockableAttributeImpl( "administrativeRole" );
+        attribute.add( role );
+        ModificationItem item = new ModificationItem( DirContext.ADD_ATTRIBUTE, attribute );
+        super.sysRoot.modifyAttributes( "", new ModificationItem[] { item } );
+    }
+
+
+    public Map getAllEntries() throws NamingException
+    {
+        Map resultMap = new HashMap();
+        SearchControls controls = new SearchControls();
+        controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        controls.setReturningAttributes( new String[] { "+", "*" } );
+        NamingEnumeration results = super.sysRoot.search( "", "(objectClass=*)", controls );
+        while ( results.hasMore() )
+        {
+            SearchResult result = ( SearchResult ) results.next();
+            resultMap.put( result.getName(), result.getAttributes() );
+        }
+        return resultMap;
+    }
+
+
+    public Map getAllEntriesRestrictAttributes() throws NamingException
+    {
+        Map resultMap = new HashMap();
+        SearchControls controls = new SearchControls();
+        controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        controls.setReturningAttributes( new String[] { "cn", "ou" } );
+        NamingEnumeration results = super.sysRoot.search( "", "(objectClass=*)", controls );
+        while ( results.hasMore() )
+        {
+            SearchResult result = ( SearchResult ) results.next();
+            resultMap.put( result.getName(), result.getAttributes() );
+        }
+        return resultMap;
+    }
+
+
+    public void testLookup() throws Exception
+    {
+        // -------------------------------------------------------------------
+        // Setup the collective attribute specific administration point
+        // -------------------------------------------------------------------
+
+        addAdministrativeRole( "collectiveAttributeSpecificArea" );
+        super.sysRoot.createSubcontext( "cn=testsubentry", getTestSubentry() );
+
+        // -------------------------------------------------------------------
+        // test an entry that should show the collective attribute c-ou
+        // -------------------------------------------------------------------
+
+        Attributes attributes = super.sysRoot.getAttributes( "ou=services,ou=configuration" );
+        Attribute c_ou = attributes.get( "c-ou" );
+        assertNotNull( "a collective c-ou attribute should be present", c_ou );
+        assertEquals( "configuration", c_ou.get() );
+
+        // -------------------------------------------------------------------
+        // test an entry that should not show the collective attribute
+        // -------------------------------------------------------------------
+
+        attributes = super.sysRoot.getAttributes( "ou=users" );
+        c_ou = attributes.get( "c-ou" );
+        assertNull( "the c-ou collective attribute should not be present", c_ou );
+
+        // -------------------------------------------------------------------
+        // now modify entries included by the subentry to have collectiveExclusions
+        // -------------------------------------------------------------------
+
+        ModificationItem[] items = new ModificationItem[] {
+            new ModificationItem( DirContext.ADD_ATTRIBUTE,
+                    new LockableAttributeImpl( "collectiveExclusions", "c-ou" ) ) };
+        super.sysRoot.modifyAttributes( "ou=services,ou=configuration", items );
+
+        // entry should not show the c-ou collective attribute anymore
+        attributes = super.sysRoot.getAttributes( "ou=services,ou=configuration" );
+        c_ou = attributes.get( "c-ou" );
+        if ( c_ou != null )
+        {
+            assertEquals( "the c-ou collective attribute should not be present", 0, c_ou.size() );
+        }
+
+        // now add more collective subentries - the c-ou should still not show due to exclusions
+        super.sysRoot.createSubcontext( "cn=testsubentry2", getTestSubentry2() );
+
+        attributes = super.sysRoot.getAttributes( "ou=services,ou=configuration" );
+        c_ou = attributes.get( "c-ou" );
+        if ( c_ou != null )
+        {
+            assertEquals( "the c-ou collective attribute should not be present", 0, c_ou.size() );
+        }
+
+        // entries without the collectiveExclusion should still show both values of c-ou
+        attributes = super.sysRoot.getAttributes( "ou=interceptors,ou=configuration" );
+        c_ou = attributes.get( "c-ou" );
+        assertNotNull( "a collective c-ou attribute should be present", c_ou );
+        assertTrue( c_ou.contains( "configuration" ) );
+        assertTrue( c_ou.contains( "configuration2" ) );
+
+        // -------------------------------------------------------------------
+        // now add the subentry for the c-st collective attribute
+        // -------------------------------------------------------------------
+
+        super.sysRoot.createSubcontext( "cn=testsubentry3", getTestSubentry3() );
+
+        // the new attribute c-st should appear in the node with the c-ou exclusion
+        attributes = super.sysRoot.getAttributes( "ou=services,ou=configuration" );
+        Attribute c_st = attributes.get( "c-st" );
+        assertNotNull( "a collective c-st attribute should be present", c_st );
+        assertTrue( c_st.contains( "FL" ) );
+
+        // in node without exclusions both values of c-ou should appear with c-st value
+        attributes = super.sysRoot.getAttributes( "ou=interceptors,ou=configuration" );
+        c_ou = attributes.get( "c-ou" );
+        assertNotNull( "a collective c-ou attribute should be present", c_ou );
+        assertTrue( c_ou.contains( "configuration" ) );
+        assertTrue( c_ou.contains( "configuration2" ) );
+        c_st = attributes.get( "c-st" );
+        assertNotNull( "a collective c-st attribute should be present", c_st );
+        assertTrue( c_st.contains( "FL" ) );
+
+        // -------------------------------------------------------------------
+        // now modify an entry to exclude all collective attributes
+        // -------------------------------------------------------------------
+
+        items = new ModificationItem[] {
+            new ModificationItem( DirContext.REPLACE_ATTRIBUTE,
+                    new LockableAttributeImpl( "collectiveExclusions", "excludeAllCollectiveAttributes" ) ) };
+        super.sysRoot.modifyAttributes( "ou=interceptors,ou=configuration", items );
+
+        // none of the attributes should appear any longer
+        attributes = super.sysRoot.getAttributes( "ou=interceptors,ou=configuration" );
+        c_ou = attributes.get( "c-ou" );
+        if ( c_ou != null )
+        {
+            assertEquals( "the c-ou collective attribute should not be present", 0, c_ou.size() );
+        }
+        c_st = attributes.get( "c-st" );
+        if ( c_st != null )
+        {
+            assertEquals( "the c-st collective attribute should not be present", 0, c_st.size() );
+        }
+    }
+
+
+    public void testSearch() throws Exception
+    {
+        // -------------------------------------------------------------------
+        // Setup the collective attribute specific administration point
+        // -------------------------------------------------------------------
+
+        addAdministrativeRole( "collectiveAttributeSpecificArea" );
+        super.sysRoot.createSubcontext( "cn=testsubentry", getTestSubentry() );
+
+        // -------------------------------------------------------------------
+        // test an entry that should show the collective attribute c-ou
+        // -------------------------------------------------------------------
+
+        Map entries = getAllEntries();
+        Attributes attributes = ( Attributes ) entries.get( "ou=services,ou=configuration,ou=system" );
+        Attribute c_ou = attributes.get( "c-ou" );
+        assertNotNull( "a collective c-ou attribute should be present", c_ou );
+        assertEquals( "configuration", c_ou.get() );
+
+        // -------------------------------------------------------------------
+        // test an entry that should not show the collective attribute
+        // -------------------------------------------------------------------
+
+        attributes = ( Attributes ) entries.get( "ou=users,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        assertNull( "the c-ou collective attribute should not be present", c_ou );
+
+        // -------------------------------------------------------------------
+        // now modify entries included by the subentry to have collectiveExclusions
+        // -------------------------------------------------------------------
+
+        ModificationItem[] items = new ModificationItem[] {
+            new ModificationItem( DirContext.ADD_ATTRIBUTE,
+                    new LockableAttributeImpl( "collectiveExclusions", "c-ou" ) ) };
+        super.sysRoot.modifyAttributes( "ou=services,ou=configuration", items );
+        entries = getAllEntries();
+
+        // entry should not show the c-ou collective attribute anymore
+        attributes = ( Attributes ) entries.get( "ou=services,ou=configuration,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        if ( c_ou != null )
+        {
+            assertEquals( "the c-ou collective attribute should not be present", 0, c_ou.size() );
+        }
+
+        // now add more collective subentries - the c-ou should still not show due to exclusions
+        super.sysRoot.createSubcontext( "cn=testsubentry2", getTestSubentry2() );
+        entries = getAllEntries();
+
+        attributes = ( Attributes ) entries.get( "ou=services,ou=configuration,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        if ( c_ou != null )
+        {
+            assertEquals( "the c-ou collective attribute should not be present", 0, c_ou.size() );
+        }
+
+        // entries without the collectiveExclusion should still show both values of c-ou
+        attributes = ( Attributes ) entries.get( "ou=interceptors,ou=configuration,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        assertNotNull( "a collective c-ou attribute should be present", c_ou );
+        assertTrue( c_ou.contains( "configuration" ) );
+        assertTrue( c_ou.contains( "configuration2" ) );
+
+        // -------------------------------------------------------------------
+        // now add the subentry for the c-st collective attribute
+        // -------------------------------------------------------------------
+
+        super.sysRoot.createSubcontext( "cn=testsubentry3", getTestSubentry3() );
+        entries = getAllEntries();
+
+        // the new attribute c-st should appear in the node with the c-ou exclusion
+        attributes = ( Attributes ) entries.get( "ou=services,ou=configuration,ou=system" );
+        Attribute c_st = attributes.get( "c-st" );
+        assertNotNull( "a collective c-st attribute should be present", c_st );
+        assertTrue( c_st.contains( "FL" ) );
+
+        // in node without exclusions both values of c-ou should appear with c-st value
+        attributes = ( Attributes ) entries.get( "ou=interceptors,ou=configuration,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        assertNotNull( "a collective c-ou attribute should be present", c_ou );
+        assertTrue( c_ou.contains( "configuration" ) );
+        assertTrue( c_ou.contains( "configuration2" ) );
+        c_st = attributes.get( "c-st" );
+        assertNotNull( "a collective c-st attribute should be present", c_st );
+        assertTrue( c_st.contains( "FL" ) );
+
+        // -------------------------------------------------------------------
+        // now modify an entry to exclude all collective attributes
+        // -------------------------------------------------------------------
+
+        items = new ModificationItem[] {
+            new ModificationItem( DirContext.REPLACE_ATTRIBUTE,
+                    new LockableAttributeImpl( "collectiveExclusions", "excludeAllCollectiveAttributes" ) ) };
+        super.sysRoot.modifyAttributes( "ou=interceptors,ou=configuration", items );
+        entries = getAllEntries();
+
+        // none of the attributes should appear any longer
+        attributes = ( Attributes ) entries.get( "ou=interceptors,ou=configuration,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        if ( c_ou != null )
+        {
+            assertEquals( "the c-ou collective attribute should not be present", 0, c_ou.size() );
+        }
+        c_st = attributes.get( "c-st" );
+        if ( c_st != null )
+        {
+            assertEquals( "the c-st collective attribute should not be present", 0, c_st.size() );
+        }
+
+        // -------------------------------------------------------------------
+        // Now search attributes but restrict returned attributes to cn and ou
+        // -------------------------------------------------------------------
+
+        entries = getAllEntriesRestrictAttributes();
+
+        // we should no longer see collective attributes with restricted return attribs
+        attributes = ( Attributes ) entries.get( "ou=services,ou=configuration,ou=system" );
+        c_st = attributes.get( "c-st" );
+        assertNull( "a collective c-st attribute should NOT be present", c_st );
+
+        attributes = ( Attributes ) entries.get( "ou=partitions,ou=configuration,ou=system" );
+        c_ou = attributes.get( "c-ou" );
+        c_st = attributes.get( "c-st" );
+        assertNull( c_ou );
+        assertNull( c_st );
+    }
+}

Propchange: directory/apacheds/trunk/core/src/test/org/apache/ldap/server/collective/CollectiveAttributeServiceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native