You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/02/20 15:35:22 UTC

[3/8] qpid-jms git commit: add support to remotely end the most recently initiated session

add support to remotely end the most recently initiated session


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

Branch: refs/heads/master
Commit: 663554b9fc919faae109bfe67f49a242162e7fb0
Parents: 6988f66
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Feb 20 11:43:45 2015 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Feb 20 11:43:45 2015 +0000

----------------------------------------------------------------------
 .../qpid/jms/test/testpeer/TestAmqpPeer.java    | 56 +++++++++++++++++++-
 1 file changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/663554b9/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 a322355..56cdaa5 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
@@ -107,6 +107,7 @@ public class TestAmqpPeer implements AutoCloseable
     private CountDownLatch _handlersCompletedLatch;
 
     private byte[] _deferredBytes;
+    private int _lastInitiatedChannel = -1;
 
     public TestAmqpPeer() throws IOException
     {
@@ -229,6 +230,18 @@ public class TestAmqpPeer implements AutoCloseable
         }
     }
 
+    private Handler getLastHandler()
+    {
+        synchronized(_handlersLock)
+        {
+            if(_handlers.isEmpty())
+            {
+                throw new IllegalStateException("No handlers");
+            }
+            return _handlers.get(_handlers.size() - 1);
+        }
+    }
+
     public void waitForAllHandlersToComplete(int timeoutMillis) throws InterruptedException
     {
         synchronized(_handlersLock)
@@ -406,9 +419,13 @@ public class TestAmqpPeer implements AutoCloseable
             @Override
             public void setValues()
             {
-                beginResponseSender.setChannel(beginMatcher.getActualChannel());
+                int actualChannel = beginMatcher.getActualChannel();
+
+                beginResponseSender.setChannel(actualChannel);
                 beginResponse.setRemoteChannel(
-                        UnsignedShort.valueOf((short) beginMatcher.getActualChannel()));
+                        UnsignedShort.valueOf((short) actualChannel));
+
+                _lastInitiatedChannel = actualChannel;
             }
         });
         beginMatcher.onSuccess(beginResponseSender);
@@ -1027,4 +1044,39 @@ public class TestAmqpPeer implements AutoCloseable
 
         return target;
     }
+
+    public void remotelyEndLastOpenedSession(boolean expectEndResponse) {
+        synchronized (_handlersLock) {
+            // Prepare a composite to insert this action at the end of the handler sequence
+            CompositeAmqpPeerRunnable comp = new CompositeAmqpPeerRunnable();
+            Handler h = getLastHandler();
+            AmqpPeerRunnable orig = h.getOnSuccessAction();
+            if (orig != null) {
+                comp.add(orig);
+            }
+
+            // Now generate the End for the appropriate session
+            final EndFrame endFrame = new EndFrame();
+            // TODO: add an optional error msg+condition?
+
+            int channel = -1;
+            final FrameSender frameSender = new FrameSender(this, FrameType.AMQP, channel, endFrame, null);
+            frameSender.setValueProvider(new ValueProvider() {
+                @Override
+                public void setValues() {
+                    frameSender.setChannel(_lastInitiatedChannel);
+                }
+            });
+            comp.add(frameSender);
+
+            h.onSuccess(comp);
+
+            if (expectEndResponse) {
+                // Expect a response to our End.
+                final EndMatcher endMatcher = new EndMatcher();
+                // TODO: enable matching on the channel number of the response.
+                addHandler(endMatcher);
+            }
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org