You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/07/20 00:59:02 UTC

svn commit: r965671 - in /directory: apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/ clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/director...

Author: elecharny
Date: Mon Jul 19 22:59:01 2010
New Revision: 965671

URL: http://svn.apache.org/viewvc?rev=965671&view=rev
Log:
o Added the handling of exceptionCaucght() events in the client API
o The responseFuture now contains the cause of error if something went wrong during the request sending
o Added a test to demonstrate DIRAPI-20, and prove that it's now fixed.
o Fixed a NPE in some tests by using non static fields

Modified:
    directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/ClientSearchRequestTest.java
    directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchRequestReturningAttributesTest.java
    directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
    directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/future/ResponseFuture.java
    directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/protocol/LdapProtocolEncoder.java

Modified: directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/ClientSearchRequestTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/ClientSearchRequestTest.java?rev=965671&r1=965670&r2=965671&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/ClientSearchRequestTest.java (original)
+++ directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/ClientSearchRequestTest.java Mon Jul 19 22:59:01 2010
@@ -42,12 +42,13 @@ import org.apache.directory.server.core.
 import org.apache.directory.server.core.integ.FrameworkRunner;
 import org.apache.directory.shared.ldap.cursor.Cursor;
 import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.exception.LdapException;
 import org.apache.directory.shared.ldap.filter.SearchScope;
 import org.apache.directory.shared.ldap.message.AliasDerefMode;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.DN;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -70,21 +71,29 @@ import org.junit.runner.RunWith;
     "objectClass: top",
     "sn: user1 sn",
     "cn: user1",
-    
+
     // alias to the above entry
     "dn: cn=user1-alias,ou=users,ou=system",
     "objectClass: alias",
     "objectClass: top",
     "objectClass: extensibleObject",
     "aliasedObjectName: cn=user1,ou=users,ou=system",
-    "cn: user1-alias"
+    "cn: user1-alias",
+
+    // Another user
+    "dn: cn=elecharny,ou=users,ou=system",
+    "objectClass: person",
+    "objectClass: top",
+    "sn:: RW1tYW51ZWwgTMOpY2hhcm55",
+    "cn: elecharny"
+    
 })
 public class ClientSearchRequestTest extends AbstractLdapTestUnit
 {
-    private static LdapAsyncConnection connection;
+    private LdapAsyncConnection connection;
 
-    @BeforeClass
-    public static void setup() throws Exception
+    @Before
+    public void setup() throws Exception
     {
         connection = new LdapNetworkConnection( "localhost", ldapServer.getPort() );
         DN bindDn = new DN( "uid=admin,ou=system" );
@@ -95,8 +104,8 @@ public class ClientSearchRequestTest ext
     /**
      * Close the LdapConnection
      */
-    @AfterClass
-    public static void shutdown()
+    @After
+    public void shutdown()
     {
         try
         {
@@ -155,6 +164,7 @@ public class ClientSearchRequestTest ext
             "+" );
         int count = 0;
         SearchResponse searchResponse = null;
+        
         do
         {
             searchResponse = ( SearchResponse ) searchFuture.get( 1000, TimeUnit.MILLISECONDS );
@@ -181,6 +191,7 @@ public class ClientSearchRequestTest ext
             "+" );
         int count = 0;
         SearchResponse searchResponse = null;
+        
         do
         {
             searchResponse = ( SearchResponse ) searchFuture.get( 100000, TimeUnit.MILLISECONDS );
@@ -193,7 +204,7 @@ public class ClientSearchRequestTest ext
         }
         while ( !( searchResponse instanceof SearchResultDone ) );
 
-        assertEquals(2, count );
+        assertEquals( 3, count );
     }
 
     
@@ -208,22 +219,32 @@ public class ClientSearchRequestTest ext
         
         int count = 0;
         Cursor<SearchResponse> cursor = connection.search( searchRequest );
+        
         while( cursor.next() )
         {
             count++;
         }
         
         // due to dereferencing of aliases we get only one entry
-        assertEquals( 1, count );
+        assertEquals( 2, count );
 
         count = 0;
         searchRequest.setDerefAliases( AliasDerefMode.NEVER_DEREF_ALIASES );
         cursor = connection.search( searchRequest );
+        
         while( cursor.next() )
         {
             count++;
         }
         
-        assertEquals( 2, count );
+        assertEquals( 3, count );
+    }
+    
+
+    @Test(expected=LdapException.class)
+    public void testSearchUTF8() throws Exception
+    {
+        connection.search( "ou=system", "(sn=Emmanuel LŽcharny)", SearchScope.ONELEVEL, "*", "+" );
+        fail();
     }
 }

Modified: directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchRequestReturningAttributesTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchRequestReturningAttributesTest.java?rev=965671&r1=965670&r2=965671&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchRequestReturningAttributesTest.java (original)
+++ directory/apacheds/branches/apacheds-subtree/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchRequestReturningAttributesTest.java Mon Jul 19 22:59:01 2010
@@ -41,7 +41,6 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.name.DN;
 import org.junit.AfterClass;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 

Modified: directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
URL: http://svn.apache.org/viewvc/directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java?rev=965671&r1=965670&r2=965671&view=diff
==============================================================================
--- directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java (original)
+++ directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java Mon Jul 19 22:59:01 2010
@@ -86,6 +86,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapResultCodec;
 import org.apache.directory.shared.ldap.codec.LdapTransformer;
+import org.apache.directory.shared.ldap.codec.MessageEncoderException;
 import org.apache.directory.shared.ldap.codec.abandon.AbandonRequestCodec;
 import org.apache.directory.shared.ldap.codec.add.AddRequestCodec;
 import org.apache.directory.shared.ldap.codec.add.AddResponseCodec;
@@ -149,6 +150,7 @@ import org.apache.mina.core.service.IoCo
 import org.apache.mina.core.service.IoHandlerAdapter;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.ProtocolEncoderException;
 import org.apache.mina.filter.ssl.SslFilter;
 import org.apache.mina.transport.socket.nio.NioSocketConnector;
 import org.slf4j.Logger;
@@ -1383,6 +1385,13 @@ public class LdapNetworkConnection exten
 
             throw new LdapException( TIME_OUT_ERROR );
         }
+
+        // Chekc that the future hasn't be canceled
+        if ( searchFuture.isCancelled() )
+        {
+            // Thow an exception here
+            throw new LdapException( searchFuture.getCause() );
+        }
         
         // Ok, done return the future
         return searchFuture;
@@ -1477,6 +1486,27 @@ public class LdapNetworkConnection exten
 
 
     /**
+     * Handle the exception we got.
+     */
+    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception 
+    {
+        if ( cause instanceof ProtocolEncoderException )
+        {
+            Throwable realCause = ((ProtocolEncoderException)cause).getCause();
+            
+            if ( realCause instanceof MessageEncoderException )
+            {
+                int messageId = ((MessageEncoderException)realCause).getMessageId();
+                
+                ResponseFuture<?> response = futureMap.get( messageId );
+                response.cancel( true );
+                response.setCause( realCause );
+            }
+        }
+    }
+    
+    
+    /**
      * Handle the incoming LDAP messages. This is where we feed the cursor for search 
      * requests, or call the listener. 
      */

Modified: directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/future/ResponseFuture.java
URL: http://svn.apache.org/viewvc/directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/future/ResponseFuture.java?rev=965671&r1=965670&r2=965671&view=diff
==============================================================================
--- directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/future/ResponseFuture.java (original)
+++ directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/future/ResponseFuture.java Mon Jul 19 22:59:01 2010
@@ -43,6 +43,9 @@ public class ResponseFuture<R> implement
     
     /** flag to determine if this future is cancelled */
     protected boolean cancelled = false;
+    
+    /** If the request has been cancelled because of an exception  it will be stored here */
+    protected Throwable cause;
 
     /** The messageID for this future */
     protected int messageId;
@@ -144,6 +147,24 @@ public class ResponseFuture<R> implement
     {
         throw new UnsupportedOperationException( "Operation not supported" );
     }
+
+
+    /**
+     * @return the cause
+     */
+    public Throwable getCause()
+    {
+        return cause;
+    }
+
+
+    /**
+     * @param cause the cause to set
+     */
+    public void setCause( Throwable cause )
+    {
+        this.cause = cause;
+    }
     
     
     public String toString()

Modified: directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/protocol/LdapProtocolEncoder.java
URL: http://svn.apache.org/viewvc/directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/protocol/LdapProtocolEncoder.java?rev=965671&r1=965670&r2=965671&view=diff
==============================================================================
--- directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/protocol/LdapProtocolEncoder.java (original)
+++ directory/clients/ldap/branches/ldap-client-subtree/ldap-client-api/src/main/java/org/apache/directory/ldap/client/api/protocol/LdapProtocolEncoder.java Mon Jul 19 22:59:01 2010
@@ -47,6 +47,7 @@ public class LdapProtocolEncoder impleme
         if ( request instanceof LdapMessageCodec )
         {
             LdapMessageCodec ldapRequest = (LdapMessageCodec)request;
+            
             ByteBuffer bb = ldapRequest.encode();
             bb.flip();