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 2006/08/11 21:08:16 UTC

svn commit: r430862 - in /directory/trunks/apacheds: core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java server-unit/src/test/java/org/apache/directory/server/SearchTest.java

Author: akarasulu
Date: Fri Aug 11 12:08:16 2006
New Revision: 430862

URL: http://svn.apache.org/viewvc?rev=430862&view=rev
Log:
Fixes and test cases for DIRSERVER-705: object class top missing in search result

Modified:
    directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java
    directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/SearchTest.java

Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java?rev=430862&r1=430861&r2=430862&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java Fri Aug 11 12:08:16 2006
@@ -188,15 +188,15 @@
         SearchControls searchCtls ) throws NamingException
     {
         // check to make sure the DN searched for is a subentry
+        Invocation invocation = InvocationStack.getInstance().peek();
         if ( !subschemaSubentryDn.toNormName().equals( base.toNormName() ) )
         {
             NamingEnumeration e = nextInterceptor.search( base, env, filter, searchCtls );
             if ( searchCtls.getReturningAttributes() != null )
             {
-                return e;
+                return new SearchResultFilteringEnumeration( e, new SearchControls(), invocation, topFilter );
             }
 
-            Invocation invocation = InvocationStack.getInstance().peek();
             return new SearchResultFilteringEnumeration( e, searchCtls, invocation, filters );
         }
 
@@ -231,10 +231,9 @@
         NamingEnumeration e = nextInterceptor.search( base, env, filter, searchCtls );
         if ( searchCtls.getReturningAttributes() != null )
         {
-            return e;
+            return new SearchResultFilteringEnumeration( e, searchCtls, invocation, topFilter );
         }
 
-        Invocation invocation = InvocationStack.getInstance().peek();
         return new SearchResultFilteringEnumeration( e, searchCtls, invocation, filters );
     }
 

Modified: directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/SearchTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/SearchTest.java?rev=430862&r1=430861&r2=430862&view=diff
==============================================================================
--- directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/SearchTest.java (original)
+++ directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/SearchTest.java Fri Aug 11 12:08:16 2006
@@ -429,6 +429,91 @@
         subentry.put( "prescriptiveACI", aciItem );
         adminCtx.createSubcontext( "cn=" + cn, subentry );
     }
+    
+
+    /**
+     * Test case to demonstrate DIRSERVER-705 ("object class top missing in search
+     * result, if scope is base and attribute objectClass is requested explicitly").
+     */
+    public void testAddWithObjectclasses() throws NamingException
+    {
+
+        // Create entry
+        Attributes heather = new BasicAttributes();
+        Attribute ocls = new BasicAttribute( "objectClass" );
+        ocls.add( "top" );
+        ocls.add( "person" );
+        heather.put( ocls );
+        heather.put( "cn", "Heather Nova" );
+        heather.put( "sn", "Nova" );
+        String rdn = "cn=Heather Nova";
+        ctx.createSubcontext( rdn, heather );
+
+        SearchControls ctls = new SearchControls();
+        ctls.setSearchScope( SearchControls.OBJECT_SCOPE );
+        ctls.setReturningAttributes( new String[]
+            { "objectclass" } );
+        String filter = "(objectclass=*)";
+
+        NamingEnumeration result = ctx.search( rdn, filter, ctls );
+        if ( result.hasMore() )
+        {
+            SearchResult entry = ( SearchResult ) result.next();
+            Attributes heatherReloaded = entry.getAttributes();
+            Attribute loadedOcls = heatherReloaded.get( "objectClass" );
+            assertNotNull( loadedOcls );
+            assertTrue( loadedOcls.contains( "person" ) );
+            assertTrue( loadedOcls.contains( "top" ) );
+        }
+        else
+        {
+            fail( "entry " + rdn + " not found" );
+        }
+
+        ctx.destroySubcontext( rdn );
+    }
+
+
+    /**
+     * Test case to demonstrate DIRSERVER-705 ("object class top missing in search
+     * result, if scope is base and attribute objectClass is requested explicitly").
+     */
+    public void testAddWithMissingObjectclasses() throws NamingException
+    {
+
+        // Create entry
+        Attributes kate = new BasicAttributes();
+        kate.put( "objectClass", "organizationalperson" );
+        kate.put( "cn", "Kate Bush" );
+        kate.put( "sn", "Bush" );
+        String rdn = "cn=Kate Bush";
+        ctx.createSubcontext( rdn, kate );
+
+        SearchControls ctls = new SearchControls();
+        ctls.setSearchScope( SearchControls.OBJECT_SCOPE );
+        ctls.setReturningAttributes( new String[]
+            { "objectclass" } );
+        String filter = "(objectclass=*)";
+
+        NamingEnumeration result = ctx.search( rdn, filter, ctls );
+        if ( result.hasMore() )
+        {
+            SearchResult entry = ( SearchResult ) result.next();
+            Attributes kateReloaded = entry.getAttributes();
+            Attribute loadedOcls = kateReloaded.get( "objectClass" );
+            assertNotNull( loadedOcls );
+            assertTrue( loadedOcls.contains( "top" ) );
+            assertTrue( loadedOcls.contains( "person" ) );
+            assertTrue( loadedOcls.contains( "organizationalperson" ) );
+
+        }
+        else
+        {
+            fail( "entry " + rdn + " not found" );
+        }
+
+        ctx.destroySubcontext( rdn );
+    }
 
 
     public void testSubentryControl() throws Exception