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]
