You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2015/06/04 23:06:31 UTC
activemq git commit: https://issues.apache.org/jira/browse/AMQ-5310
Repository: activemq
Updated Branches:
refs/heads/master 47e954d0f -> a095e9b9d
https://issues.apache.org/jira/browse/AMQ-5310
Adding tests that validate the code follows the JMS Spec expectations
for behavior of closed consumers and producers.
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/a095e9b9
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/a095e9b9
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/a095e9b9
Branch: refs/heads/master
Commit: a095e9b9ddc32b7bd47ec2482725f2ccf5300d54
Parents: 47e954d
Author: Timothy Bish <ta...@gmail.com>
Authored: Thu Jun 4 17:05:59 2015 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Thu Jun 4 17:05:59 2015 -0400
----------------------------------------------------------------------
.../activemq/JmsMessageConsumerClosedTest.java | 168 ++++++++++++++++++
.../activemq/JmsMessageProcuderClosedTest.java | 169 +++++++++++++++++++
2 files changed, 337 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/a095e9b9/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageConsumerClosedTest.java
----------------------------------------------------------------------
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageConsumerClosedTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageConsumerClosedTest.java
new file mode 100644
index 0000000..68d6508
--- /dev/null
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageConsumerClosedTest.java
@@ -0,0 +1,168 @@
+/**
+ * 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;
+
+import static org.junit.Assert.assertNull;
+
+import javax.jms.Connection;
+import javax.jms.Destination;
+import javax.jms.IllegalStateException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.Session;
+
+import org.apache.activemq.broker.BrokerService;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test behavior of JMS MessageConsumer API implementation when closed.
+ */
+public class JmsMessageConsumerClosedTest {
+
+ private Connection connection;
+ private MessageConsumer consumer;
+ private Destination destination;
+ private BrokerService brokerService;
+
+ protected BrokerService createBroker() throws Exception {
+ BrokerService brokerService = new BrokerService();
+
+ brokerService.setPersistent(false);
+ brokerService.setUseJmx(false);
+ brokerService.setAdvisorySupport(false);
+
+ return brokerService;
+ }
+
+ protected MessageConsumer createClosedConsumer() throws Exception {
+ MessageConsumer consumer = createConsumer();
+ consumer.close();
+ return consumer;
+ }
+
+ protected MessageConsumer createConsumer() throws Exception {
+ ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost?create=false");
+ connection = factory.createConnection();
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ destination = session.createTopic("test");
+ return session.createConsumer(destination);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ brokerService = createBroker();
+ brokerService.start();
+ brokerService.waitUntilStarted();
+
+ consumer = createClosedConsumer();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ try {
+ if (connection != null) {
+ connection.close();
+ }
+ } catch (Exception ex) {}
+
+ if (brokerService != null) {
+ brokerService.stop();
+ brokerService.waitUntilStopped();
+ }
+ }
+
+ @Test(timeout = 30000)
+ public void testCloseWhileReceiveIsBlocked() throws Exception {
+ final MessageConsumer consumer = createConsumer();
+
+ Thread closer = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(2000);
+ consumer.close();
+ } catch (Exception ex) {}
+ }
+ });
+ closer.start();
+
+ assertNull(consumer.receive());
+ }
+
+ @Test(timeout = 30000)
+ public void testCloseWhileTimedReceiveIsBlocked() throws Exception {
+ final MessageConsumer consumer = createConsumer();
+
+ Thread closer = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(2000);
+ consumer.close();
+ } catch (Exception ex) {}
+ }
+ });
+ closer.start();
+
+ assertNull(consumer.receive(5000));
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetMessageSelectorFails() throws Exception {
+ consumer.getMessageSelector();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetMessageListenerFails() throws Exception {
+ consumer.getMessageListener();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSetMessageListenerFails() throws Exception {
+ consumer.setMessageListener(new MessageListener() {
+ @Override
+ public void onMessage(Message message) {
+ }
+ });
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testRreceiveFails() throws Exception {
+ consumer.receive();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testRreceiveTimedFails() throws Exception {
+ consumer.receive(11);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testRreceiveNoWaitFails() throws Exception {
+ consumer.receiveNoWait();
+ }
+
+ @Test(timeout=30000)
+ public void testClose() throws Exception {
+ consumer.close();
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/activemq/blob/a095e9b9/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageProcuderClosedTest.java
----------------------------------------------------------------------
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageProcuderClosedTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageProcuderClosedTest.java
new file mode 100644
index 0000000..91ba7ca
--- /dev/null
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/JmsMessageProcuderClosedTest.java
@@ -0,0 +1,169 @@
+/**
+ * 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;
+
+import javax.jms.Connection;
+import javax.jms.Destination;
+import javax.jms.IllegalStateException;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+
+import org.apache.activemq.broker.BrokerService;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test behavior of JMS MessageProducer API implementation when closed.
+ */
+public class JmsMessageProcuderClosedTest {
+
+ private Connection connection;
+ private MessageProducer producer;
+ private Message message;
+ private Destination destination;
+ private BrokerService brokerService;
+
+ protected BrokerService createBroker() throws Exception {
+ BrokerService brokerService = new BrokerService();
+
+ brokerService.setPersistent(false);
+ brokerService.setUseJmx(false);
+ brokerService.setAdvisorySupport(false);
+
+ return brokerService;
+ }
+
+ protected MessageProducer createClosedProducer() throws Exception {
+ MessageProducer producer = createProducer();
+ producer.close();
+ return producer;
+ }
+
+ protected MessageProducer createProducer() throws Exception {
+ ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost?create=false");
+ connection = factory.createConnection();
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ message = session.createMessage();
+ destination = session.createTopic("test");
+ return session.createProducer(destination);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ brokerService = createBroker();
+ brokerService.start();
+ brokerService.waitUntilStarted();
+
+ producer = createClosedProducer();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ try {
+ if (connection != null) {
+ connection.close();
+ }
+ } catch (Exception ex) {}
+
+ if (brokerService != null) {
+ brokerService.stop();
+ brokerService.waitUntilStopped();
+ }
+ }
+
+ @Test(timeout=30000)
+ public void testClose() throws Exception {
+ producer.close();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSetDisableMessageIDFails() throws Exception {
+ producer.setDisableMessageID(true);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetDisableMessageIDFails() throws Exception {
+ producer.getDisableMessageID();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSetDisableMessageTimestampFails() throws Exception {
+ producer.setDisableMessageTimestamp(false);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetDisableMessageTimestampFails() throws Exception {
+ producer.getDisableMessageTimestamp();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSetDeliveryModeFails() throws Exception {
+ producer.setDeliveryMode(1);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetDeliveryModeFails() throws Exception {
+ producer.getDeliveryMode();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSetPriorityFails() throws Exception {
+ producer.setPriority(1);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetPriorityFails() throws Exception {
+ producer.getPriority();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSetTimeToLiveFails() throws Exception {
+ producer.setTimeToLive(1);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetTimeToLiveFails() throws Exception {
+ producer.getTimeToLive();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testGetDestinationFails() throws Exception {
+ producer.getDestination();
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSendFails() throws Exception {
+ producer.send(message);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSendWithDestinationFails() throws Exception {
+ producer.send(destination, message);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSendWithModePriorityTTLFails() throws Exception {
+ producer.send(message, 1, 3, 111);
+ }
+
+ @Test(timeout=30000, expected=IllegalStateException.class)
+ public void testSendWithDestinationModePriorityTTLFails() throws Exception {
+ producer.send(destination, message, 1, 3, 111);
+ }
+}