ARTEMIS-1887 and ARTEMIS-1885 Adding tests on maxConsumer This is a test for PRs #2106 and #2107
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/ca589f31 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/ca589f31 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/ca589f31 Branch: refs/heads/2.6.x Commit: ca589f316bad37638742d64d34e40c7aef587cfc Parents: c915ed1 Author: Clebert Suconic <clebertsuco...@apache.org> Authored: Thu May 24 12:47:42 2018 -0400 Committer: Clebert Suconic <clebertsuco...@apache.org> Committed: Thu May 24 14:36:22 2018 -0400 ---------------------------------------------------------------------- tests/smoke-tests/pom.xml | 20 +- .../resources/servers/maxConsumers/broker.xml | 206 +++++++++++++++++++ .../smoke/maxConsumers/MaxConsumersTest.java | 66 ++++++ 3 files changed, 289 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/ca589f31/tests/smoke-tests/pom.xml ---------------------------------------------------------------------- diff --git a/tests/smoke-tests/pom.xml b/tests/smoke-tests/pom.xml index 41c7569..2c3e008 100644 --- a/tests/smoke-tests/pom.xml +++ b/tests/smoke-tests/pom.xml @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.activemq.tests</groupId> @@ -185,14 +186,27 @@ <goal>create</goal> </goals> <configuration> - <!-- this makes it easier in certain envs --> - <configuration>${basedir}/target/classes/servers/mqtt</configuration> <allowAnonymous>true</allowAnonymous> <user>admin</user> <password>admin</password> <instance>${basedir}/target/standard</instance> </configuration> </execution> + <execution> + <phase>test-compile</phase> + <id>create-maxConsumers</id> + <goals> + <goal>create</goal> + </goals> + <configuration> + <!-- this makes it easier in certain envs --> + <configuration>${basedir}/target/classes/servers/maxConsumers</configuration> + <allowAnonymous>true</allowAnonymous> + <user>admin</user> + <password>admin</password> + <instance>${basedir}/target/maxConsumers</instance> + </configuration> + </execution> </executions> <dependencies> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/ca589f31/tests/smoke-tests/src/main/resources/servers/maxConsumers/broker.xml ---------------------------------------------------------------------- diff --git a/tests/smoke-tests/src/main/resources/servers/maxConsumers/broker.xml b/tests/smoke-tests/src/main/resources/servers/maxConsumers/broker.xml new file mode 100644 index 0000000..ffb043a --- /dev/null +++ b/tests/smoke-tests/src/main/resources/servers/maxConsumers/broker.xml @@ -0,0 +1,206 @@ +<?xml version='1.0'?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<configuration xmlns="urn:activemq" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"> + + <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:activemq:core "> + + <name>0.0.0.0</name> + + <persistence-enabled>true</persistence-enabled> + + <!-- this could be ASYNCIO or NIO + --> + <journal-type>NIO</journal-type> + + <paging-directory>./data/paging</paging-directory> + + <bindings-directory>./data/bindings</bindings-directory> + + <journal-directory>./data/journal</journal-directory> + + <large-messages-directory>./data/large-messages</large-messages-directory> + + <journal-datasync>true</journal-datasync> + + <journal-min-files>2</journal-min-files> + + <journal-pool-files>-1</journal-pool-files> + + <message-expiry-scan-period>1000</message-expiry-scan-period> + + <!-- + You can verify the network health of a particular NIC by specifying the <network-check-NIC> element. + <network-check-NIC>theNicName</network-check-NIC> + --> + + <!-- + Use this to use an HTTP server to validate the network + <network-check-URL-list>http://www.apache.org</network-check-URL-list> --> + + <!-- <network-check-period>10000</network-check-period> --> + <!-- <network-check-timeout>1000</network-check-timeout> --> + + <!-- this is a comma separated list, no spaces, just DNS or IPs + it should accept IPV6 + + Warning: Make sure you understand your network topology as this is meant to validate if your network is valid. + Using IPs that could eventually disappear or be partially visible may defeat the purpose. + You can use a list of multiple IPs, and if any successful ping will make the server OK to continue running --> + <!-- <network-check-list>10.0.0.1</network-check-list> --> + + <!-- use this to customize the ping used for ipv4 addresses --> + <!-- <network-check-ping-command>ping -c 1 -t %d %s</network-check-ping-command> --> + + <!-- use this to customize the ping used for ipv6 addresses --> + <!-- <network-check-ping6-command>ping6 -c 1 %2$s</network-check-ping6-command> --> + + + + + <!-- how often we are looking for how many bytes are being used on the disk in ms --> + <disk-scan-period>5000</disk-scan-period> + + <!-- once the disk hits this limit the system will block, or close the connection in certain protocols + that won't support flow control. --> + <max-disk-usage>90</max-disk-usage> + + <!-- the system will enter into page mode once you hit this limit. + This is an estimate in bytes of how much the messages are using in memory + + The system will use half of the available memory (-Xmx) by default for the global-max-size. + You may specify a different value here if you need to customize it to your needs. + + <global-max-size>100Mb</global-max-size> + + --> + + <acceptors> + + <!-- useEpoll means: it will use Netty epoll if you are on a system (Linux) that supports it --> + <!-- useKQueue means: it will use Netty kqueue if you are on a system (MacOS) that supports it --> + <!-- amqpCredits: The number of credits sent to AMQP producers --> + <!-- amqpLowCredits: The server will send the # credits specified at amqpCredits at this low mark --> + + <!-- Acceptor for every supported protocol --> + <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;useKQueue;amqpCredits=1000;amqpLowCredits=300</acceptor> + + <!-- AMQP Acceptor. Listens on default AMQP port for AMQP traffic.--> + <acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;useKQueue=true;amqpCredits=1000;amqpLowCredits=300</acceptor> + + <!-- STOMP Acceptor. --> + <acceptor name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true;useKQueue=true</acceptor> + + <!-- HornetQ Compatibility Acceptor. Enables HornetQ Core and STOMP for legacy HornetQ clients. --> + <acceptor name="hornetq">tcp://0.0.0.0:5445?protocols=HORNETQ,STOMP;useEpoll=true;useKQueue=true</acceptor> + + <!-- MQTT Acceptor --> + <acceptor name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true;useKQueue=true</acceptor> + + </acceptors> + + + <security-settings> + <security-setting match="#"> + <permission type="createNonDurableQueue" roles="guest"/> + <permission type="deleteNonDurableQueue" roles="guest"/> + <permission type="createDurableQueue" roles="guest"/> + <permission type="deleteDurableQueue" roles="guest"/> + <permission type="createAddress" roles="guest"/> + <permission type="deleteAddress" roles="guest"/> + <permission type="consume" roles="guest"/> + <permission type="browse" roles="guest"/> + <permission type="send" roles="guest"/> + <!-- we need this otherwise ./artemis data imp wouldn't work --> + <permission type="manage" roles="guest"/> + </security-setting> + </security-settings> + + <address-settings> + <!-- if you define auto-create on certain queues, management has to be auto-create --> + <address-setting match="activemq.management#"> + <dead-letter-address>DLQ</dead-letter-address> + <expiry-address>ExpiryQueue</expiry-address> + <redelivery-delay>0</redelivery-delay> + <!-- with -1 only the global-max-size is in use for limiting --> + <max-size-bytes>-1</max-size-bytes> + <message-counter-history-day-limit>10</message-counter-history-day-limit> + <address-full-policy>PAGE</address-full-policy> + <auto-create-queues>true</auto-create-queues> + <auto-create-addresses>true</auto-create-addresses> + <auto-create-jms-queues>true</auto-create-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> + </address-setting> + <!--default for catch all--> + <address-setting match="#"> + <dead-letter-address>DLQ</dead-letter-address> + <expiry-address>ExpiryQueue</expiry-address> + <redelivery-delay>0</redelivery-delay> + <!-- with -1 only the global-max-size is in use for limiting --> + <max-size-bytes>-1</max-size-bytes> + <message-counter-history-day-limit>10</message-counter-history-day-limit> + <address-full-policy>PAGE</address-full-policy> + <auto-create-queues>true</auto-create-queues> + <auto-create-addresses>true</auto-create-addresses> + <auto-create-jms-queues>true</auto-create-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> + </address-setting> + <address-setting match="myQueue"> + <dead-letter-address>DLQ</dead-letter-address> + <expiry-address>ExpiryQueue</expiry-address> + <redelivery-delay>0</redelivery-delay> + <!-- with -1 only the global-max-size is in use for limiting --> + <max-size-bytes>-1</max-size-bytes> + <default-max-consumers>1</default-max-consumers> + <message-counter-history-day-limit>10</message-counter-history-day-limit> + <address-full-policy>PAGE</address-full-policy> + <auto-create-queues>true</auto-create-queues> + <auto-create-addresses>true</auto-create-addresses> + <auto-create-jms-queues>true</auto-create-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> + </address-setting> + </address-settings> + + <addresses> + <address name="DLQ"> + <anycast> + <queue name="DLQ" /> + </anycast> + </address> + <address name="ExpiryQueue"> + <anycast> + <queue name="ExpiryQueue" /> + </anycast> + </address> + <address name="myQueue"> + <anycast> + <!-- this should be maxed from the default --> + <queue name="myQueue"> + </queue> + </anycast> + </address> + + </addresses> + + </core> +</configuration> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/ca589f31/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/maxConsumers/MaxConsumersTest.java ---------------------------------------------------------------------- diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/maxConsumers/MaxConsumersTest.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/maxConsumers/MaxConsumersTest.java new file mode 100644 index 0000000..05a5f1f --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/maxConsumers/MaxConsumersTest.java @@ -0,0 +1,66 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.maxConsumers; + +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.MessageConsumer; +import javax.jms.Queue; +import javax.jms.Session; + +import org.apache.activemq.artemis.tests.smoke.common.SmokeTestBase; +import org.apache.qpid.jms.JmsConnectionFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class MaxConsumersTest extends SmokeTestBase { + + public static final String SERVER_NAME_0 = "maxConsumers"; + + @Before + public void before() throws Exception { + cleanupData(SERVER_NAME_0); + disableCheckThread(); + startServer(SERVER_NAME_0, 0, 30000); + } + + @Test + public void testMax() throws Exception { + for (int i = 0; i < 5; i++) { + ConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:61616"); + Connection connection = factory.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + Queue queue = session.createQueue("myQueue"); + + MessageConsumer consumer = session.createConsumer(queue); + try { + MessageConsumer consumer2 = session.createConsumer(queue); + Assert.fail("Exception was expected here"); + } catch (JMSException expectedMax) { + } + + consumer.close(); + connection.close(); + } + + } + +}