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);
+    }
+}