You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2008/08/24 09:35:21 UTC

svn commit: r688458 - in /directory/apacheds/trunk: protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java server-integ/src/test/java/org/apache/directory/server/operations/search/SearchLimitsIT.java

Author: seelmann
Date: Sun Aug 24 00:35:21 2008
New Revision: 688458

URL: http://svn.apache.org/viewvc?rev=688458&view=rev
Log:
Fix for DIRSERVER-1235: changed the way how a sizeLimitExceeded is detected, added tests.

Modified:
    directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java
    directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchLimitsIT.java

Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java?rev=688458&r1=688457&r2=688458&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java Sun Aug 24 00:35:21 2008
@@ -364,18 +364,20 @@
             else
             {
                 int count = 0;
-                while ( cursor.next() && count < sizeLimit )
+                while ( cursor.next() )
                 {
-                    ClonedServerEntry entry = cursor.get();
-                    session.getIoSession().write( generateResponse( session, req, entry ) );
-                    count++;
-                }
-                
-                if ( count >= sizeLimit )
-                {
-                    // DO NOT WRITE THE RESPONSE - JUST RETURN IT
-                    ldapResult.setResultCode( ResultCodeEnum.SIZE_LIMIT_EXCEEDED );
-                    return ( SearchResponseDone ) req.getResultResponse();
+                    if ( count < sizeLimit )
+                    {
+                        ClonedServerEntry entry = cursor.get();
+                        session.getIoSession().write( generateResponse( session, req, entry ) );
+                        count++;
+                    }
+                    else
+                    {
+                        // DO NOT WRITE THE RESPONSE - JUST RETURN IT
+                        ldapResult.setResultCode( ResultCodeEnum.SIZE_LIMIT_EXCEEDED );
+                        return ( SearchResponseDone ) req.getResultResponse();
+                    }  
                 }
             }
     

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchLimitsIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchLimitsIT.java?rev=688458&r1=688457&r2=688458&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchLimitsIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchLimitsIT.java Sun Aug 24 00:35:21 2008
@@ -330,7 +330,75 @@
         getActorsWithLimitNonAdmin( "(objectClass=*)", 0, 0 );
     }
 
-    
+
+    /**
+     * Test for DIRSERVER-1235.
+     * Sets up the server with unlimited search size limit but constrains size
+     * by request size limit value. The request size limit is less than the
+     * expected number of result entries, so exception expected.
+     */
+    @Test(expected = SizeLimitExceededException.class)
+    public void testRequestConstraintedLessThanExpectedSize() throws Exception
+    {
+        ldapServer.setMaxSizeLimit( LdapServer.NO_SIZE_LIMIT );
+        getActorsWithLimit( "(objectClass=*)", 0, 3 );
+    }
+
+
+    /**
+     * Test for DIRSERVER-1235.
+     * Sets up the server with unlimited search size limit but constrains size
+     * by request size limit value. The request size limit is equal to the
+     * expected number of result entries so no exception expected.
+     */
+    @Test
+    public void testRequestConstraintedEqualToExpectedSize() throws Exception
+    {
+        ldapServer.setMaxSizeLimit( LdapServer.NO_SIZE_LIMIT );
+        Set<String> set = getActorsWithLimit( "(objectClass=*)", 0, 4 );
+        assertEquals( 4, set.size() );
+    }
+
+
+    /**
+     * Test for DIRSERVER-1235.
+     * Sets up the server with unlimited search size limit but constrains size
+     * by request size limit value. The request size limit is greater than the
+     * expected number of result entries so no exception expected.
+     */
+    @Test
+    public void testRequestConstraintedGreaterThanExpectedSize() throws Exception
+    {
+        ldapServer.setMaxSizeLimit( LdapServer.NO_SIZE_LIMIT );
+        Set<String> set = getActorsWithLimit( "(objectClass=*)", 0, 5 );
+        assertEquals( 4, set.size() );
+    }
+
+
+    /**
+     * Test for DIRSERVER-1235.
+     * Reads an entry using object scope and size limit 1, no exception
+     * expected.
+     */
+    @Test
+    public void testRequestObjectScopeAndSizeLimit() throws Exception
+    {
+        ldapServer.setMaxSizeLimit( LdapServer.NO_SIZE_LIMIT );
+
+        DirContext ctx = getWiredContext( ldapServer );
+        String filter = "(objectClass=*)";
+        SearchControls controls = new SearchControls();
+        controls.setTimeLimit( 0 );
+        controls.setCountLimit( 1 );
+        controls.setSearchScope( SearchControls.OBJECT_SCOPE );
+
+        NamingEnumeration<SearchResult> namingEnumeration = ctx.search( "ou=actors,ou=system", filter, controls );
+        assertTrue( namingEnumeration.hasMore() );
+        namingEnumeration.next();
+        assertFalse( namingEnumeration.hasMore() );
+    }
+
+
     // -----------------------------------------------------------------------
     // Utility Methods
     // -----------------------------------------------------------------------