You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2017/11/30 07:55:22 UTC

qpid-broker-j git commit: QPID-8038: [Broker-J][AMQP 0-8..0-91] Add more queue protocol tests

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master 21deb4904 -> 170b03cac


QPID-8038: [Broker-J][AMQP 0-8..0-91] Add more queue protocol tests


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/170b03ca
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/170b03ca
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/170b03ca

Branch: refs/heads/master
Commit: 170b03cacf30fda105f075adec55e480871946bc
Parents: 21deb49
Author: Keith Wall <ke...@gmail.com>
Authored: Thu Nov 30 07:53:24 2017 +0000
Committer: Keith Wall <ke...@gmail.com>
Committed: Thu Nov 30 07:55:09 2017 +0000

----------------------------------------------------------------------
 .../tests/protocol/v0_8/QueueInteraction.java   |  12 ++
 .../qpid/tests/protocol/v0_8/QueueTest.java     | 114 ++++++++++++++++++-
 2 files changed, 124 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/170b03ca/systests/protocol-tests-amqp-0-8/src/main/java/org/apache/qpid/tests/protocol/v0_8/QueueInteraction.java
----------------------------------------------------------------------
diff --git a/systests/protocol-tests-amqp-0-8/src/main/java/org/apache/qpid/tests/protocol/v0_8/QueueInteraction.java b/systests/protocol-tests-amqp-0-8/src/main/java/org/apache/qpid/tests/protocol/v0_8/QueueInteraction.java
index 1f6d47f..92b8894 100644
--- a/systests/protocol-tests-amqp-0-8/src/main/java/org/apache/qpid/tests/protocol/v0_8/QueueInteraction.java
+++ b/systests/protocol-tests-amqp-0-8/src/main/java/org/apache/qpid/tests/protocol/v0_8/QueueInteraction.java
@@ -67,6 +67,18 @@ public class QueueInteraction
         return this;
     }
 
+    public QueueInteraction declareAutoDelete(final boolean autoDelete)
+    {
+        _declareAutoDelete = autoDelete;
+        return this;
+    }
+
+    public QueueInteraction declareExclusive(final boolean exclusive)
+    {
+        _declareExclusive = exclusive;
+        return this;
+    }
+
     public Interaction declare() throws Exception
     {
         return _interaction.sendPerformative(new QueueDeclareBody(0,

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/170b03ca/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/QueueTest.java
----------------------------------------------------------------------
diff --git a/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/QueueTest.java b/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/QueueTest.java
index a4c43ef..75b63b2 100644
--- a/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/QueueTest.java
+++ b/systests/protocol-tests-amqp-0-8/src/test/java/org/apache/qpid/tests/protocol/v0_8/QueueTest.java
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.tests.protocol.v0_8;
 
+import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -29,6 +30,7 @@ import java.net.InetSocketAddress;
 
 import org.hamcrest.Matchers;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import org.apache.qpid.server.protocol.ErrorCodes;
@@ -37,6 +39,7 @@ import org.apache.qpid.server.protocol.v0_8.transport.BasicCancelOkBody;
 import org.apache.qpid.server.protocol.v0_8.transport.BasicConsumeOkBody;
 import org.apache.qpid.server.protocol.v0_8.transport.ChannelCloseBody;
 import org.apache.qpid.server.protocol.v0_8.transport.ChannelOpenOkBody;
+import org.apache.qpid.server.protocol.v0_8.transport.ConnectionCloseBody;
 import org.apache.qpid.server.protocol.v0_8.transport.QueueDeclareOkBody;
 import org.apache.qpid.server.protocol.v0_8.transport.QueueDeleteOkBody;
 import org.apache.qpid.tests.protocol.SpecificationTest;
@@ -102,7 +105,7 @@ public class QueueTest extends BrokerAdminUsingTestBase
 
     @Test
     @SpecificationTest(section = "1.7.2.1",
-            description = "If [declareDurable is] set when creating a new queue, the queue will be marked as durable."
+            description = "If [durable is] set when creating a new queue, the queue will be marked as durable."
                           + "Durable queues remain active when a server restarts.")
     public void queueDeclareDurable() throws Exception
     {
@@ -137,6 +140,113 @@ public class QueueTest extends BrokerAdminUsingTestBase
     }
 
     @Test
+    @SpecificationTest(section = "1.7.2.1",
+            description = "If [auto-delete] set, the queue is deleted when all consumers have finished using it. The "
+                          + "last consumer can be cancelled either explicitly or because its channel is closed. "
+                          + "If there was no consumer ever on the queue, it won't be deleted.")
+    public void queueDeclareAutoDelete() throws Exception
+    {
+        try(FrameTransport transport = new FrameTransport(_brokerAddress).connect())
+        {
+            final Interaction interaction = transport.newInteraction();
+            QueueDeclareOkBody response = interaction.openAnonymousConnection()
+                                                     .channel().open().consumeResponse(ChannelOpenOkBody.class)
+                                                     .queue().declareAutoDelete(true).declareName(BrokerAdmin.TEST_QUEUE_NAME).declare()
+                                                     .consumeResponse().getLatestResponse(QueueDeclareOkBody.class);
+
+            assertThat(response.getQueue(), is(equalTo(AMQShortString.valueOf(BrokerAdmin.TEST_QUEUE_NAME))));
+        }
+
+        try(FrameTransport transport = new FrameTransport(_brokerAddress).connect())
+        {
+            final Interaction interaction = transport.newInteraction();
+
+            QueueDeclareOkBody response = interaction.openAnonymousConnection()
+                                                     .channel().open().consumeResponse(ChannelOpenOkBody.class)
+                                                     .queue().declarePassive(true).declareName(BrokerAdmin.TEST_QUEUE_NAME).declare()
+                                                     .consumeResponse().getLatestResponse(QueueDeclareOkBody.class);
+            assertThat(response.getQueue(), is(equalTo(AMQShortString.valueOf(BrokerAdmin.TEST_QUEUE_NAME))));
+
+            final String consumerTag = "lastConsumer";
+            interaction.basic()
+                       .consumeConsumerTag(consumerTag).consumeQueue(BrokerAdmin.TEST_QUEUE_NAME).consume()
+                       .consumeResponse(BasicConsumeOkBody.class)
+                       .basic().consumeCancelTag(consumerTag).cancel()
+                       .consumeResponse().getLatestResponse(BasicCancelOkBody.class);
+
+            ChannelCloseBody closeResponse = interaction.queue()
+                                                        .declarePassive(true)
+                                                        .declareName(BrokerAdmin.TEST_QUEUE_NAME)
+                                                        .declare()
+                                                        .consumeResponse()
+                                                        .getLatestResponse(ChannelCloseBody.class);
+            assertThat(closeResponse.getReplyCode(), is(equalTo(ErrorCodes.NOT_FOUND)));
+        }
+    }
+
+    @Test
+    @SpecificationTest(section = "1.7.2.1",
+            description = "The server MUST ignore the auto-delete field if the queue already exists.")
+    @Ignore("The server does not implement this rule.")
+    public void queueDeclareAutoDeletePreexistingQueue() throws Exception
+    {
+        try(FrameTransport transport = new FrameTransport(_brokerAddress).connect())
+        {
+            final Interaction interaction = transport.newInteraction();
+            QueueDeclareOkBody response = interaction.openAnonymousConnection()
+                                                     .channel().open().consumeResponse(ChannelOpenOkBody.class)
+                                                     .queue().declareName(BrokerAdmin.TEST_QUEUE_NAME).declare()
+                                                     .consumeResponse().getLatestResponse(QueueDeclareOkBody.class);
+
+            assertThat(response.getQueue(), is(equalTo(AMQShortString.valueOf(BrokerAdmin.TEST_QUEUE_NAME))));
+
+            QueueDeclareOkBody passiveResponse =
+                    interaction.queue().declareAutoDelete(true).declareName(BrokerAdmin.TEST_QUEUE_NAME).declare()
+                               .consumeResponse().getLatestResponse(QueueDeclareOkBody.class);
+            assertThat(passiveResponse.getQueue(), is(equalTo(AMQShortString.valueOf(BrokerAdmin.TEST_QUEUE_NAME))));
+        }
+    }
+
+    @Test
+    @SpecificationTest(section = "1.7.2.1",
+            description = "The client MAY NOT attempt to use a queue that was declared as exclusive by another "
+                          + "still-open connection.")
+    public void queueDeclareExclusive() throws Exception
+    {
+        try(FrameTransport transport = new FrameTransport(_brokerAddress).connect())
+        {
+            final Interaction interaction = transport.newInteraction();
+            QueueDeclareOkBody response = interaction.openAnonymousConnection()
+                                                     .channel().open().consumeResponse(ChannelOpenOkBody.class)
+                                                     .queue().declareName(BrokerAdmin.TEST_QUEUE_NAME).declareExclusive(true).declare()
+                                                     .consumeResponse().getLatestResponse(QueueDeclareOkBody.class);
+
+            assertThat(response.getQueue(), is(equalTo(AMQShortString.valueOf(BrokerAdmin.TEST_QUEUE_NAME))));
+
+            try(FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
+            {
+                final Interaction interaction2 = transport2.newInteraction();
+                ConnectionCloseBody closeResponse = interaction2.openAnonymousConnection()
+                                                                .channel().open().consumeResponse(ChannelOpenOkBody.class)
+                                                                .queue().declareName(BrokerAdmin.TEST_QUEUE_NAME).declare()
+                                                                .consumeResponse().getLatestResponse(ConnectionCloseBody.class);
+                /* TODO: 0-91 specification requires 'resource-locked' (405) but server uses (530) */
+                assertThat(closeResponse.getReplyCode(), anyOf(equalTo(ErrorCodes.NOT_ALLOWED), equalTo(405)));
+            }
+        }
+
+        try(FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
+        {
+            final Interaction interaction2 = transport2.newInteraction();
+            QueueDeclareOkBody response = interaction2.openAnonymousConnection()
+                                                            .channel().open().consumeResponse(ChannelOpenOkBody.class)
+                                                            .queue().declareName(BrokerAdmin.TEST_QUEUE_NAME).declare()
+                                                            .consumeResponse().getLatestResponse(QueueDeclareOkBody.class);
+            assertThat(response.getQueue(), is(equalTo(AMQShortString.valueOf(BrokerAdmin.TEST_QUEUE_NAME))));
+        }
+    }
+
+    @Test
     @SpecificationTest(section = "1.7.2.9", description = "delete a queue")
     public void queueDelete() throws Exception
     {
@@ -174,7 +284,7 @@ public class QueueTest extends BrokerAdminUsingTestBase
 
     @Test
     @SpecificationTest(section = "1.7.2.9",
-            description = "If [deleteIfUnused is] set, the server will only delete the queue if it has no consumers. "
+            description = "If [if-unused is] set, the server will only delete the queue if it has no consumers. "
                           + "If the queue has consumers the server does does not delete it but raises a channel "
                           + "exception instead..")
     public void queueDeleteWithConsumer() throws Exception


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