add support for refusing consumer links, with or without deferring write of the attach response until sending the detach
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/159bfaa6 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/159bfaa6 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/159bfaa6 Branch: refs/heads/master Commit: 159bfaa6103566d085e9e69f901b300ffccdc889 Parents: cb3c17f Author: Robert Gemmell <rob...@apache.org> Authored: Tue Feb 24 13:04:31 2015 +0000 Committer: Robert Gemmell <rob...@apache.org> Committed: Tue Feb 24 13:04:31 2015 +0000 ---------------------------------------------------------------------- .../qpid/jms/test/testpeer/TestAmqpPeer.java | 41 +++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/159bfaa6/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 1cb91a2..1e46bc2 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 @@ -639,6 +639,11 @@ public class TestAmqpPeer implements AutoCloseable public void expectReceiverAttach(final Matcher<?> linkNameMatcher, final Matcher<?> sourceMatcher) { + expectReceiverAttach(linkNameMatcher, sourceMatcher, false, false); + } + + public void expectReceiverAttach(final Matcher<?> linkNameMatcher, final Matcher<?> sourceMatcher, final boolean refuseLink, boolean deferAttachResponseWrite) + { final AttachMatcher attachMatcher = new AttachMatcher() .withName(linkNameMatcher) .withHandle(notNullValue()) @@ -664,12 +669,44 @@ public class TestAmqpPeer implements AutoCloseable attachResponseSender.setChannel(attachMatcher.getActualChannel()); attachResponse.setHandle(attachMatcher.getReceivedHandle()); attachResponse.setName(attachMatcher.getReceivedName()); - attachResponse.setSource(trimSourceOutcomesCapabilities(createSourceObjectFromDescribedType(attachMatcher.getReceivedSource()))); attachResponse.setTarget(attachMatcher.getReceivedTarget()); + if(refuseLink) { + attachResponse.setSource(null); + } else { + attachResponse.setSource(trimSourceOutcomesCapabilities(createSourceObjectFromDescribedType(attachMatcher.getReceivedSource()))); + } } }); - attachMatcher.onSuccess(attachResponseSender); + if(deferAttachResponseWrite) + { + // Defer writing the attach frame until the subsequent frame is also ready + attachResponseSender.setDeferWrite(true); + } + + CompositeAmqpPeerRunnable composite = new CompositeAmqpPeerRunnable(); + composite.add(attachResponseSender); + + if (refuseLink) + { + final DetachFrame detachResonse = new DetachFrame().setClosed(true); + // The response frame channel will be dynamically set based on the + // incoming frame. Using the -1 is an illegal placeholder. + final FrameSender detachResonseSender = new FrameSender(this, FrameType.AMQP, -1, detachResonse, null); + detachResonseSender.setValueProvider(new ValueProvider() + { + @Override + public void setValues() + { + detachResonseSender.setChannel(attachMatcher.getActualChannel()); + detachResonse.setHandle(attachMatcher.getReceivedHandle()); + } + }); + + composite.add(detachResonseSender); + } + + attachMatcher.onSuccess(composite); addHandler(attachMatcher); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org