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