blob: 6008f97cb0a4f8038b1e8179b891778cf480fc78 [file] [log] [blame]
/**
* 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.jms2;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
import javax.jms.BytesMessage;
import javax.jms.Destination;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.JMSProducer;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.QueueBrowser;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
public class ActiveMQJMS2TestSupport {
protected static final Set<String> PROPERTY_NAMES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("JMS2_BOOLEAN_MIN", "JMS2_BOOLEAN_MAX", "JMS2_BYTE_MIN", "JMS2_BYTE_MAX",
"JMS2_DOUBLE_MIN", "JMS2_DOUBLE_MAX", "JMS2_INT_MIN", "JMS2_INT_MAX", "JMS2_FLOAT_MIN", "JMS2_FLOAT_MAX", "JMS2_LONG_MIN",
"JMS2_LONG_MAX", "JMS2_SHORT_MIN", "JMS2_SHORT_MAX", "JMS2_STRING_VAL")));
private ActiveMQJMS2TestSupport() {}
protected static Destination generateDestination(JMSContext jmsContext, String destinationType, String destinationName) throws JMSException {
Destination destination = null;
switch(destinationType) {
case "queue":
destination = jmsContext.createQueue(destinationName);
break;
case "topic":
destination = jmsContext.createTopic(destinationName);
break;
case "temp-queue":
destination = jmsContext.createTemporaryQueue();
break;
case "temp-topic":
destination = jmsContext.createTemporaryTopic();
break;
default:
fail("Unsupported destinationType:" + destinationType);
}
assertNotNull(destination);
return destination;
}
protected static Message generateMessage(JMSContext jmsContext, String messageType, String payload) throws JMSException {
assertNotNull(messageType);
Message tmpMessage = null;
switch(messageType) {
case "bytes":
BytesMessage bytesMessage = jmsContext.createBytesMessage();
bytesMessage.writeBytes(payload.getBytes(StandardCharsets.UTF_8));
tmpMessage = bytesMessage;
break;
case "map":
MapMessage mapMessage = jmsContext.createMapMessage();
mapMessage.setString("payload", payload);
tmpMessage = mapMessage;
break;
case "object":
tmpMessage = jmsContext.createObjectMessage(new ActiveMQJMS2TestObjectMessagePayload(payload));
break;
case "stream":
StreamMessage streamMessage = jmsContext.createStreamMessage();
streamMessage.writeString(payload);
tmpMessage = streamMessage;
break;
case "text":
tmpMessage = jmsContext.createTextMessage(payload);
break;
default:
fail("Unsupported messageType:" + messageType);
}
return tmpMessage;
}
protected static void populateJMSHeaders(javax.jms.Message message, String correlationID, Destination replyTo, String jmsType) throws JMSException {
assertNotNull(message);
message.setJMSCorrelationID(null);
message.setJMSReplyTo(null);
message.setJMSType(null);
}
protected static String sendMessage(JMSContext jmsContext, Destination destination, Message message) throws JMSException {
MessageData messageData = new MessageData();
messageData.setMessage(message);
return sendMessage(jmsContext, destination, messageData);
}
protected static String sendMessage(JMSContext jmsContext, Destination destination, MessageData messageData) throws JMSException {
assertNotNull(jmsContext);
assertNotNull(messageData);
assertNotNull(messageData.getMessage());
JMSProducer jmsProducer = jmsContext.createProducer();
if(messageData.getDeliveryDelay() != null) {
jmsProducer.setDeliveryDelay(messageData.getDeliveryDelay());
}
if(messageData.getDeliveryMode() != null) {
jmsProducer.setDeliveryMode(messageData.getDeliveryMode());
}
if(messageData.getDisableMessageID() != null) {
jmsProducer.setDisableMessageID(messageData.getDisableMessageID());
}
if(messageData.getDisableMessageTimestamp() != null) {
jmsProducer.setDisableMessageTimestamp(messageData.getDisableMessageTimestamp());
}
if(messageData.getCorrelationID() != null) {
jmsProducer.setJMSCorrelationID(messageData.getCorrelationID());
}
if(messageData.getReplyTo() != null) {
jmsProducer.setJMSReplyTo(messageData.getReplyTo());
}
if(messageData.getJmsType() != null) {
jmsProducer.setJMSType(messageData.getJmsType());
}
if(messageData.getPriority() != null) {
jmsProducer.setPriority(messageData.getPriority());
}
if(messageData.getTimeToLive() != null) {
jmsProducer.setTimeToLive(messageData.getTimeToLive());
}
populateJMSProperties(jmsProducer);
validateJMSProperties(jmsProducer);
jmsProducer.send(destination, messageData.getMessage());
return messageData.getMessage().getJMSMessageID();
}
protected static void browseMessage(JMSContext jmsContext, String testDestinationName, String expectedTextBody, boolean expectFound) throws JMSException {
assertNotNull(jmsContext);
try(QueueBrowser queueBrowser = jmsContext.createBrowser(jmsContext.createQueue(testDestinationName))) {
Enumeration<?> messageEnumeration = queueBrowser.getEnumeration();
assertNotNull(messageEnumeration);
boolean found = false;
while(!found && messageEnumeration.hasMoreElements()) {
javax.jms.Message message = (Message)messageEnumeration.nextElement();
assertNotNull(message);
assertTrue(TextMessage.class.isAssignableFrom(message.getClass()));
assertEquals(expectedTextBody, TextMessage.class.cast(message).getText());
found = true;
}
assertEquals(expectFound, found);
}
}
protected static void validateMessageData(javax.jms.Message message, MessageData messageData) throws JMSException {
assertNotNull(message);
assertNotNull(messageData.getMessageType());
assertNotNull(messageData.getMessagePayload());
validateJMSHeaders(message, messageData);
validateJMSProperties(message);
switch(messageData.getMessageType()) {
case "bytes":
assertTrue(message instanceof BytesMessage);
BytesMessage bytesMessage = BytesMessage.class.cast(message);
byte[] payload = new byte[(int)bytesMessage.getBodyLength()];
bytesMessage.readBytes(payload);
assertEquals(messageData.getMessagePayload(), new String(payload, StandardCharsets.UTF_8));
break;
case "map":
assertTrue(message instanceof MapMessage);
MapMessage mapMessage = MapMessage.class.cast(message);
String mapPayload = mapMessage.getString("payload");
assertEquals(messageData.getMessagePayload(), mapPayload);
break;
case "object":
assertTrue(message instanceof ObjectMessage);
ObjectMessage objectMessage = ObjectMessage.class.cast(message);
Object tmpObject = objectMessage.getObject();
assertNotNull(tmpObject);
assertTrue(tmpObject instanceof ActiveMQJMS2TestObjectMessagePayload);
assertEquals(messageData.getMessagePayload(), ActiveMQJMS2TestObjectMessagePayload.class.cast(tmpObject).getPayload());
break;
case "stream":
assertTrue(message instanceof StreamMessage);
StreamMessage streamMessage = StreamMessage.class.cast(message);
assertEquals(messageData.getMessagePayload(), streamMessage.readString());
break;
case "text":
assertTrue(message instanceof TextMessage);
assertEquals(messageData.getMessagePayload(), TextMessage.class.cast(message).getText());
break;
default:
fail("Unsupported messageType:" + messageData.getMessageType());
}
}
private static void validateJMSHeaders(javax.jms.Message message, MessageData messageData) throws JMSException {
assertNotNull(message);
assertEquals(messageData.getCorrelationID(), message.getJMSCorrelationID());
if(messageData.getDeliveryMode() != null) {
assertEquals(messageData.getDeliveryMode(), Integer.valueOf(message.getJMSDeliveryMode()));
}
if(messageData.getDeliveryTime() != null) {
assertEquals(messageData.getDeliveryTime(), Long.valueOf(message.getJMSDeliveryTime()));
}
if(messageData.getExpiration() != null) {
assertEquals(messageData.getExpiration(), Long.valueOf(message.getJMSExpiration()));
}
if(messageData.getMessageID() != null) {
assertEquals(messageData.getMessageID(), message.getJMSMessageID());
}
if(messageData.getPriority() != null) {
assertEquals(messageData.getPriority(), Integer.valueOf(message.getJMSPriority()));
}
assertEquals(messageData.getReplyTo(), message.getJMSReplyTo());
if(messageData.getTimestamp() != null) {
assertEquals(messageData.getTimestamp(), Long.valueOf(message.getJMSTimestamp()));
}
if(Boolean.TRUE.equals(messageData.getDisableMessageTimestamp())) {
assertEquals(Long.valueOf(0l), Long.valueOf(message.getJMSTimestamp()));
}
assertEquals(messageData.getJmsType(), message.getJMSType());
}
private static void populateJMSProperties(JMSProducer jmsProducer) throws JMSException {
jmsProducer.setProperty("JMS2_BOOLEAN_MIN", false);
jmsProducer.setProperty("JMS2_BOOLEAN_MAX", true);
jmsProducer.setProperty("JMS2_BYTE_MIN", Byte.MIN_VALUE);
jmsProducer.setProperty("JMS2_BYTE_MAX", Byte.MAX_VALUE);
jmsProducer.setProperty("JMS2_DOUBLE_MIN", Double.MIN_VALUE);
jmsProducer.setProperty("JMS2_DOUBLE_MAX", Double.MAX_VALUE);
jmsProducer.setProperty("JMS2_INT_MIN", Integer.MIN_VALUE);
jmsProducer.setProperty("JMS2_INT_MAX", Integer.MAX_VALUE);
jmsProducer.setProperty("JMS2_FLOAT_MIN", Float.MIN_VALUE);
jmsProducer.setProperty("JMS2_FLOAT_MAX", Float.MAX_VALUE);
jmsProducer.setProperty("JMS2_LONG_MIN", Long.MIN_VALUE);
jmsProducer.setProperty("JMS2_LONG_MAX", Long.MAX_VALUE);
jmsProducer.setProperty("JMS2_SHORT_MIN", Short.MIN_VALUE);
jmsProducer.setProperty("JMS2_SHORT_MAX", Short.MAX_VALUE);
jmsProducer.setProperty("JMS2_STRING_VAL", "Hello World");
}
private static void validateJMSProperties(JMSProducer jmsProducer) throws JMSException {
assertNotNull(jmsProducer);
assertNotNull(jmsProducer.getPropertyNames());
assertEquals(Integer.valueOf(PROPERTY_NAMES.size()), Integer.valueOf(jmsProducer.getPropertyNames().size()));
for(String propertyName : PROPERTY_NAMES) {
assertTrue(jmsProducer.propertyExists(propertyName));
}
assertEquals(Boolean.FALSE, Boolean.valueOf(jmsProducer.getBooleanProperty("JMS2_BOOLEAN_MIN")));
assertEquals(Boolean.TRUE, Boolean.valueOf(jmsProducer.getBooleanProperty("JMS2_BOOLEAN_MAX")));
assertEquals(Byte.valueOf(Byte.MIN_VALUE), Byte.valueOf(jmsProducer.getByteProperty("JMS2_BYTE_MIN")));
assertEquals(Byte.valueOf(Byte.MAX_VALUE), Byte.valueOf(jmsProducer.getByteProperty("JMS2_BYTE_MAX")));
assertEquals(Double.valueOf(Double.MIN_VALUE), Double.valueOf(jmsProducer.getDoubleProperty("JMS2_DOUBLE_MIN")));
assertEquals(Double.valueOf(Double.MAX_VALUE), Double.valueOf(jmsProducer.getDoubleProperty("JMS2_DOUBLE_MAX")));
assertEquals(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(jmsProducer.getIntProperty("JMS2_INT_MIN")));
assertEquals(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(jmsProducer.getIntProperty("JMS2_INT_MAX")));
assertEquals(Float.valueOf(Float.MIN_VALUE), Float.valueOf(jmsProducer.getFloatProperty("JMS2_FLOAT_MIN")));
assertEquals(Float.valueOf(Float.MAX_VALUE), Float.valueOf(jmsProducer.getFloatProperty("JMS2_FLOAT_MAX")));
assertEquals(Long.valueOf(Long.MIN_VALUE), Long.valueOf(jmsProducer.getLongProperty("JMS2_LONG_MIN")));
assertEquals(Long.valueOf(Long.MAX_VALUE), Long.valueOf(jmsProducer.getLongProperty("JMS2_LONG_MAX")));
assertEquals(Short.valueOf(Short.MIN_VALUE), Short.valueOf(jmsProducer.getShortProperty("JMS2_SHORT_MIN")));
assertEquals(Short.valueOf(Short.MAX_VALUE), Short.valueOf(jmsProducer.getShortProperty("JMS2_SHORT_MAX")));
assertEquals("Hello World", jmsProducer.getStringProperty("JMS2_STRING_VAL"));
}
private static void validateJMSProperties(javax.jms.Message message) throws JMSException {
assertNotNull(message);
assertEquals(Boolean.FALSE, Boolean.valueOf(message.getBooleanProperty("JMS2_BOOLEAN_MIN")));
assertEquals(Boolean.TRUE, Boolean.valueOf(message.getBooleanProperty("JMS2_BOOLEAN_MAX")));
assertEquals(Byte.valueOf(Byte.MIN_VALUE), Byte.valueOf(message.getByteProperty("JMS2_BYTE_MIN")));
assertEquals(Byte.valueOf(Byte.MAX_VALUE), Byte.valueOf(message.getByteProperty("JMS2_BYTE_MAX")));
assertEquals(Double.valueOf(Double.MIN_VALUE), Double.valueOf(message.getDoubleProperty("JMS2_DOUBLE_MIN")));
assertEquals(Double.valueOf(Double.MAX_VALUE), Double.valueOf(message.getDoubleProperty("JMS2_DOUBLE_MAX")));
assertEquals(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(message.getIntProperty("JMS2_INT_MIN")));
assertEquals(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(message.getIntProperty("JMS2_INT_MAX")));
assertEquals(Float.valueOf(Float.MIN_VALUE), Float.valueOf(message.getFloatProperty("JMS2_FLOAT_MIN")));
assertEquals(Float.valueOf(Float.MAX_VALUE), Float.valueOf(message.getFloatProperty("JMS2_FLOAT_MAX")));
assertEquals(Long.valueOf(Long.MIN_VALUE), Long.valueOf(message.getLongProperty("JMS2_LONG_MIN")));
assertEquals(Long.valueOf(Long.MAX_VALUE), Long.valueOf(message.getLongProperty("JMS2_LONG_MAX")));
assertEquals(Short.valueOf(Short.MIN_VALUE), Short.valueOf(message.getShortProperty("JMS2_SHORT_MIN")));
assertEquals(Short.valueOf(Short.MAX_VALUE), Short.valueOf(message.getShortProperty("JMS2_SHORT_MAX")));
assertEquals("Hello World", message.getStringProperty("JMS2_STRING_VAL"));
}
}