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