/* * 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.integration.jms.client; import javax.jms.Connection; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageEOFException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.StreamMessage; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger; import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.junit.Assert; import org.junit.Test; public class MessageTest extends JMSTestBase { // Constants ----------------------------------------------------- private static final IntegrationTestLogger log = IntegrationTestLogger.LOGGER; private static final long TIMEOUT = 1000; private static final String propName1 = "myprop1"; private static final String propName2 = "myprop2"; private static final String propName3 = "myprop3"; // Attributes ---------------------------------------------------- // Static -------------------------------------------------------- // Constructors -------------------------------------------------- // Public -------------------------------------------------------- /** * @see https://jira.jboss.org/jira/browse/HORNETQ-242 */ @Test public void testStreamMessageReadsNull() throws Exception { Connection conn = cf.createConnection(); try { Queue queue = createQueue("testQueue"); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer prod = sess.createProducer(queue); MessageConsumer cons = sess.createConsumer(queue); conn.start(); StreamMessage msg = sess.createStreamMessage(); msg.writeInt(1); msg.writeInt(2); msg.writeInt(3); StreamMessage received = (StreamMessage) sendAndConsumeMessage(msg, prod, cons); Assert.assertNotNull(received); assertEquals(1, received.readObject()); assertEquals(2, received.readObject()); assertEquals(3, received.readObject()); try { received.readObject(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readBoolean(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readByte(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readChar(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readDouble(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readFloat(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readInt(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readLong(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readShort(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } try { received.readString(); fail("Should throw exception"); } catch (MessageEOFException e) { //Ok } } finally { conn.close(); } } @Test public void testNullProperties() throws Exception { conn = cf.createConnection(); Queue queue = createQueue("testQueue"); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer prod = sess.createProducer(queue); MessageConsumer cons = sess.createConsumer(queue); conn.start(); Message msg = sess.createMessage(); msg.setStringProperty("Test", "SomeValue"); assertEquals("SomeValue", msg.getStringProperty("Test")); msg.setStringProperty("Test", null); assertEquals(null, msg.getStringProperty("Test")); msg.setObjectProperty(MessageTest.propName1, null); msg.setStringProperty(MessageTest.propName2, null); msg.getStringProperty(MessageTest.propName1); msg.setStringProperty("Test", null); Message received = sendAndConsumeMessage(msg, prod, cons); Assert.assertNotNull(received); checkProperties(received); } // Package protected --------------------------------------------- // Protected ----------------------------------------------------- // Private ------------------------------------------------------- private void checkProperties(final Message message) throws Exception { Assert.assertNull(message.getObjectProperty(MessageTest.propName1)); Assert.assertNull(message.getStringProperty(MessageTest.propName1)); Assert.assertNull(message.getStringProperty(MessageTest.propName2)); Assert.assertNull(message.getObjectProperty(MessageTest.propName2)); Assert.assertNull(message.getStringProperty(MessageTest.propName3)); Assert.assertNull(message.getObjectProperty(MessageTest.propName3)); try { MessageTest.log.info(message.getIntProperty(MessageTest.propName1)); Assert.fail("Should throw exception"); } catch (NumberFormatException e) { // Ok } try { MessageTest.log.info(message.getShortProperty(MessageTest.propName1)); } catch (NumberFormatException e) { // Ok } try { MessageTest.log.info(message.getByteProperty(MessageTest.propName1)); } catch (NumberFormatException e) { // Ok } Assert.assertEquals(false, message.getBooleanProperty(MessageTest.propName1)); try { MessageTest.log.info(message.getLongProperty(MessageTest.propName1)); } catch (NumberFormatException e) { // Ok } try { MessageTest.log.info(message.getFloatProperty(MessageTest.propName1)); } catch (NullPointerException e) { // Ok } try { MessageTest.log.info(message.getDoubleProperty(MessageTest.propName1)); } catch (NullPointerException e) { // Ok } } // https://issues.jboss.org/browse/HORNETQ-988 @Test public void testShouldNotThrowException() throws Exception { Connection conn = null; createTopic(true, "Topic1"); try { conn = cf.createConnection(); conn.start(); Session session1 = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE); session1.createConsumer(ActiveMQJMSClient.createTopic("Topic1")); Session session2 = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE); session2.createConsumer(ActiveMQJMSClient.createTopic("*")); session1.close(); session2.close(); Session session3 = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE); MessageConsumer cons = session3.createConsumer(ActiveMQJMSClient.createTopic("Topic1")); MessageProducer prod = session3.createProducer(ActiveMQJMSClient.createTopic("Topic1")); MessageConsumer consGeral = session3.createConsumer(ActiveMQJMSClient.createTopic("*")); prod.send(session3.createTextMessage("hello")); assertNotNull(cons.receive(5000)); assertNotNull(consGeral.receive(5000)); createTopic(true, "Topic2"); MessageProducer prod2 = session3.createProducer(ActiveMQJMSClient.createTopic("Topic2")); prod2.send(session3.createTextMessage("test")); assertNull(cons.receiveNoWait()); assertNotNull(consGeral.receive(5000)); } finally { if (conn != null) { conn.close(); } } } private Message sendAndConsumeMessage(final Message msg, final MessageProducer prod, final MessageConsumer cons) throws Exception { prod.send(msg); Message received = cons.receive(MessageTest.TIMEOUT); return received; } // Inner classes ------------------------------------------------- }