You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2008/02/06 23:13:40 UTC

svn commit: r619182 - in /incubator/qpid/trunk/qpid/java: client/src/main/java/org/apache/qpidity/nclient/ common/src/main/java/org/apache/qpidity/ common/src/main/java/org/apache/qpidity/transport/ common/src/test/java/org/apache/qpidity/transport/

Author: rhs
Date: Wed Feb  6 14:13:31 2008
New Revision: 619182

URL: http://svn.apache.org/viewvc?rev=619182&view=rev
Log:
added close notification

Modified:
    incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java
    incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java

Modified: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java Wed Feb  6 14:13:31 2008
@@ -49,6 +49,8 @@
 
         ConnectionDelegate connectionDelegate = new ConnectionDelegate()
         {
+            private boolean receivedClose = false;
+
             public SessionDelegate getSessionDelegate()
             {
                 return new ClientSessionDelegate();
@@ -62,7 +64,15 @@
                 }
                 else
                 {
-                    throw new RuntimeException("Connection closed",t);
+                    throw new RuntimeException("connection closed",t);
+                }
+            }
+
+            public void closed()
+            {
+                if (_closedListner != null && !this.receivedClose)
+                {
+                    _closedListner.onClosed(ErrorCode.CONNECTION_ERROR,ErrorCode.CONNECTION_ERROR.getDesc());
                 }
             }
 
@@ -81,6 +91,8 @@
                 {
                     _closedListner.onClosed(errorCode, connectionClose.getReplyText());
                 }
+
+                this.receivedClose = true;
             }
         };
 

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java Wed Feb  6 14:13:31 2008
@@ -276,6 +276,7 @@
             {
                 t.printStackTrace();
             }
+            public void closed() {}
         };
 
         //hack

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java Wed Feb  6 14:13:31 2008
@@ -73,6 +73,7 @@
                                                   {
                                                       t.printStackTrace();
                                                   }
+                                                  public void closed() {}
                                               });
         conn.send(new ConnectionEvent(0, new ProtocolHeader(1, 0, 10)));
 

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java Wed Feb  6 14:13:31 2008
@@ -127,6 +127,7 @@
                 it.remove();
             }
         }
+        delegate.closed();
     }
 
     public void close()

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java Wed Feb  6 14:13:31 2008
@@ -69,6 +69,8 @@
 
     public abstract void exception(Throwable t);
 
+    public abstract void closed();
+
     public void setCondition(Lock negotiationCompleteLock,Condition negotiationComplete)
     {
         _negotiationComplete = negotiationComplete;

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java Wed Feb  6 14:13:31 2008
@@ -74,6 +74,7 @@
             {
                 t.printStackTrace();
             }
+            public void closed() {}
         };
 
         //hack

Modified: incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java Wed Feb  6 14:13:31 2008
@@ -20,11 +20,15 @@
  */
 package org.apache.qpidity.transport;
 
+import org.apache.mina.util.AvailablePortFinder;
+
 import org.apache.qpidity.transport.network.mina.MinaHandler;
 import org.apache.qpidity.transport.util.Logger;
 
 import junit.framework.TestCase;
 
+import java.util.Random;
+
 /**
  * ConnectionTest
  */
@@ -34,9 +38,14 @@
 
     private static final Logger log = Logger.get(ConnectionTest.class);
 
-    private static final int PORT = 1234;
+    private int port;
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+
+        port = AvailablePortFinder.getNextAvailable(12000);
 
-    public void testWriteToClosed() throws Exception {
         ConnectionDelegate server = new ConnectionDelegate() {
             public void init(Channel ch, ProtocolHeader hdr) {
                 ch.getConnection().close();
@@ -48,24 +57,61 @@
             public void exception(Throwable t) {
                 log.error(t, "exception caught");
             }
+            public void closed() {}
         };
 
-        MinaHandler.accept("0.0.0.0", PORT, server);
+        MinaHandler.accept("0.0.0.0", port, server);
+    }
+
+    private class Condition
+    {
+        private boolean value = false;
+
+        public synchronized void set()
+        {
+            value = true;
+            notifyAll();
+        }
+
+        public synchronized boolean get(long timeout) throws InterruptedException
+        {
+            if (!value)
+            {
+                wait(timeout);
+            }
+
+            return value;
+        }
+    }
 
-        Connection conn = MinaHandler.connect("0.0.0.0", PORT,
-                                              new ConnectionDelegate()
-                                              {
-                                                  public SessionDelegate getSessionDelegate()
-                                                  {
-                                                      return new SessionDelegate() {};
-                                                  }
-                                                  public void exception(Throwable t)
-                                                  {
-                                                      t.printStackTrace();
-                                                  }
-                                              });
+    private Connection connect(final Condition closed)
+    {
+        Connection conn = MinaHandler.connect("0.0.0.0", port, new ConnectionDelegate()
+        {
+            public SessionDelegate getSessionDelegate()
+            {
+                return new SessionDelegate() {};
+            }
+            public void exception(Throwable t)
+            {
+                t.printStackTrace();
+            }
+            public void closed()
+            {
+                if (closed != null)
+                {
+                    closed.set();
+                }
+            }
+        });
 
         conn.send(new ConnectionEvent(0, new ProtocolHeader(1, 0, 10)));
+        return conn;
+    }
+
+    public void testWriteToClosed() throws Exception
+    {
+        Connection conn = connect(null);
         Channel ch = conn.getChannel(0);
         Session ssn = new Session();
         ssn.attach(ch);
@@ -78,6 +124,16 @@
         catch (TransportException e)
         {
             // expected
+        }
+    }
+
+    public void testClosedNotification() throws Exception
+    {
+        Condition closed = new Condition();
+        Connection conn = connect(closed);
+        if (!closed.get(3000))
+        {
+            fail("never got notified of connection close");
         }
     }