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