Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 30677 invoked from network); 24 Aug 2008 07:35:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 24 Aug 2008 07:35:42 -0000 Received: (qmail 12420 invoked by uid 500); 24 Aug 2008 07:35:40 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 12394 invoked by uid 500); 24 Aug 2008 07:35:40 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 12381 invoked by uid 99); 24 Aug 2008 07:35:40 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 24 Aug 2008 00:35:40 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 24 Aug 2008 07:34:51 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C2B6B2388986; Sun, 24 Aug 2008 00:35:21 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Sun, 24 Aug 2008 07:35:21 -0000 To: commits@directory.apache.org From: seelmann@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080824073521.C2B6B2388986@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 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 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 namingEnumeration = ctx.search( "ou=actors,ou=system", filter, controls ); + assertTrue( namingEnumeration.hasMore() ); + namingEnumeration.next(); + assertFalse( namingEnumeration.hasMore() ); + } + + // ----------------------------------------------------------------------- // Utility Methods // -----------------------------------------------------------------------