Repository: qpid-jms
Updated Branches:
  refs/heads/master 36cd1d38a -> 0cf4c0fce


QPIDJMS-199 Allow for delayed send of remote close of Connection

Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/0cf4c0fc
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/0cf4c0fc
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/0cf4c0fc

Branch: refs/heads/master
Commit: 0cf4c0fce5163fbd05eac96b216ed3e75c09d163
Parents: 36cd1d3
Author: Timothy Bish <[email protected]>
Authored: Mon Aug 8 18:05:43 2016 -0400
Committer: Timothy Bish <[email protected]>
Committed: Mon Aug 8 18:05:43 2016 -0400

----------------------------------------------------------------------
 .../integration/ConnectionIntegrationTest.java  |  2 +-
 .../qpid/jms/test/testpeer/TestAmqpPeer.java    | 38 ++++++++++++++++----
 2 files changed, 32 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0cf4c0fc/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
index cd43444..a3a6ce2 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
@@ -463,7 +463,7 @@ public class ConnectionIntegrationTest extends 
QpidJmsTestCase {
             testPeer.expectSenderAttachWithoutGrantingCredit();
 
             // Producer has no credit so the send should block waiting for it.
-            testPeer.remotelyCloseConnection(true, 
AmqpError.RESOURCE_LIMIT_EXCEEDED, BREAD_CRUMB);
+            testPeer.remotelyCloseConnection(true, 
AmqpError.RESOURCE_LIMIT_EXCEEDED, BREAD_CRUMB, 50);
 
             Queue queue = session.createQueue("myQueue");
             final MessageProducer producer = session.createProducer(queue);

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0cf4c0fc/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
index deac1fd..64f7023 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
@@ -610,7 +610,7 @@ public class TestAmqpPeer implements AutoCloseable
         expectSaslAnonymousConnect(null, null, null, serverProperties);
 
         // Now generate the Close frame with the supplied error
-        final FrameSender closeSender = createCloseFrameSender(errorType, 
errorMessage, errorInfo);
+        final FrameSender closeSender = createCloseFrameSender(errorType, 
errorMessage, errorInfo, 0);
 
         // Update the handler to send the Close frame after the Open frame.
         CompositeAmqpPeerRunnable comp = insertCompsiteActionForLastHandler();
@@ -1896,20 +1896,28 @@ public class TestAmqpPeer implements AutoCloseable
     }
 
     public void remotelyCloseConnection(boolean expectCloseResponse) {
-        remotelyCloseConnection(expectCloseResponse, null, null, null);
+        remotelyCloseConnection(expectCloseResponse, null, null, null, 0);
     }
 
     public void remotelyCloseConnection(boolean expectCloseResponse, Symbol 
errorType, String errorMessage) {
-        remotelyCloseConnection(expectCloseResponse, errorType, errorMessage, 
null);
+        remotelyCloseConnection(expectCloseResponse, errorType, errorMessage, 
null, 0);
+    }
+
+    public void remotelyCloseConnection(boolean expectCloseResponse, Symbol 
errorType, String errorMessage, long delayBeforeSend) {
+        remotelyCloseConnection(expectCloseResponse, errorType, errorMessage, 
null, delayBeforeSend);
     }
 
     public void remotelyCloseConnection(boolean expectCloseResponse, Symbol 
errorType, String errorMessage, Map<Symbol, Object> info) {
+        remotelyCloseConnection(expectCloseResponse, errorType, errorMessage, 
info, 0);
+    }
+
+    public void remotelyCloseConnection(boolean expectCloseResponse, Symbol 
errorType, String errorMessage, Map<Symbol, Object> info, long delayBeforeSend) 
{
         synchronized (_handlersLock) {
             // Prepare a composite to insert this action at the end of the 
handler sequence
             CompositeAmqpPeerRunnable comp = 
insertCompsiteActionForLastHandler();
 
             // Now generate the Close
-            final FrameSender closeSender = createCloseFrameSender(errorType, 
errorMessage, info);
+            final FrameSender closeSender = createCloseFrameSender(errorType, 
errorMessage, info, delayBeforeSend);
 
             comp.add(closeSender);
 
@@ -1921,7 +1929,7 @@ public class TestAmqpPeer implements AutoCloseable
         }
     }
 
-    private FrameSender createCloseFrameSender(Symbol errorType, String 
errorMessage, Map<Symbol, Object> info) {
+    private FrameSender createCloseFrameSender(Symbol errorType, String 
errorMessage, Map<Symbol, Object> info, final long delayBeforeSend) {
         final CloseFrame closeFrame = new CloseFrame();
         if (errorType != null) {
             org.apache.qpid.jms.test.testpeer.describedtypes.Error closeError 
= new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
@@ -1932,11 +1940,27 @@ public class TestAmqpPeer implements AutoCloseable
             closeFrame.setError(closeError);
         }
 
-        return new FrameSender(this, FrameType.AMQP, CONNECTION_CHANNEL, 
closeFrame, null);
+        final FrameSender closeSender = new FrameSender(this, FrameType.AMQP, 
CONNECTION_CHANNEL, closeFrame, null);
+        closeSender.setValueProvider(new ValueProvider() {
+
+            @Override
+            public void setValues() {
+                //Insert a delay if requested
+                if (delayBeforeSend > 0) {
+                    try {
+                        Thread.sleep(delayBeforeSend);
+                    } catch (InterruptedException e) {
+                        // Ignore
+                    }
+                }
+            }
+        });
+
+        return closeSender;
     }
 
     void sendConnectionCloseImmediately(Symbol errorType, String errorMessage) 
{
-        FrameSender closeSender = createCloseFrameSender(errorType, 
errorMessage, null);
+        FrameSender closeSender = createCloseFrameSender(errorType, 
errorMessage, null, 0);
         closeSender.run();
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to