blob: 151f9809133ab61f6e6b6a2dc6155b0796d6f43a [file] [log] [blame]
/*
* Copyright 2009 Red Hat, Inc.
* Red Hat 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.objectweb.jtests.jms.conform.message.properties;
import java.util.Enumeration;
import java.util.Vector;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageFormatException;
import javax.jms.TextMessage;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.objectweb.jtests.jms.framework.PTPTestCase;
/**
* Test the <code>javax.jms.Message</code> properties.
* <br />
* See JMS Specification, sec. 3.5 Message Properties (p.32-37)
*
* @author Jeff Mesnil (jmesnil@gmail.com)
* @version $Id: MessagePropertyTest.java,v 1.1 2007/03/29 04:28:34 starksm Exp $
*/
public class MessagePropertyTest extends PTPTestCase
{
/**
* Test that any other class than <code>Boolean, Byte, Short, Integer, Long,
* Float, Double</code> and <code>String</code> used in the <code>Message.setObjectProperty()</code>
* method throws a <code>javax.jms.MessageFormatException</code>.
*/
public void testSetObjectProperty_2()
{
try
{
Message message = senderSession.createMessage();
message.setObjectProperty("prop", new Vector());
Assert.fail("sec. 3.5.5 An attempt to use any other class [than Boolean, Byte,...,String] must throw " + "a JMS MessageFormatException.\n");
}
catch (MessageFormatException e)
{
}
catch (JMSException e)
{
Assert.fail("Should throw a javax.jms.MessageFormatException, not a " + e);
}
}
/**
* if a property is set as a <code>Float</code> with the <code>Message.setObjectProperty()</code>
* method, it can be retrieve directly as a <code>double</code> by <code>Message.getFloatProperty()</code>
*/
public void testSetObjectProperty_1()
{
try
{
Message message = senderSession.createMessage();
message.setObjectProperty("pi", new Float(3.14159f));
Assert.assertEquals(3.14159f, message.getFloatProperty("pi"), 0);
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that a <code>null</code> value is returned by the <code>Message.getObjectProperty()</code> method
* if a property by the specified name does not exits.
*/
public void testGetObjectProperty()
{
try
{
Message message = senderSession.createMessage();
Assert.assertEquals("sec. 3.5.5 A null value is returned [by the getObjectProperty method] if a property by the specified " + "name does not exits.\n",
null,
message.getObjectProperty("prop"));
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that a <code>null</code> value is returned by the <code>Message.getStringProperty()</code> method
* if a property by the specified name does not exits.
*/
public void testGetStringProperty()
{
try
{
Message message = senderSession.createMessage();
Assert.assertEquals("sec. 3.5.5 A null value is returned [by the getStringProperty method] if a property by the specified " + "name does not exits.\n",
null,
message.getStringProperty("prop"));
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>double</code> property which does not exist throw
* a <code>java.lang.NullPointerException</code>
*/
public void testGetDoubleProperty()
{
try
{
Message message = senderSession.createMessage();
message.getDoubleProperty("prop");
Assert.fail("Should raise a NullPointerException.\n");
}
catch (NullPointerException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>float</code> property which does not exist throw
* a <code>java.lang.NullPointerException</code>
*/
public void testGetFloatProperty()
{
try
{
Message message = senderSession.createMessage();
message.getFloatProperty("prop");
Assert.fail("Should raise a NullPointerException.\n");
}
catch (NullPointerException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>long</code> property which does not exist throw
* a <code>java.lang.NumberFormatException</code>
*/
public void testGetLongProperty()
{
try
{
Message message = senderSession.createMessage();
message.getLongProperty("prop");
Assert.fail("Should raise a NumberFormatException.\n");
}
catch (NumberFormatException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>int</code> property which does not exist throw
* a <code>java.lang.NumberFormatException</code>
*/
public void testGetIntProperty()
{
try
{
Message message = senderSession.createMessage();
message.getIntProperty("prop");
Assert.fail("Should raise a NumberFormatException.\n");
}
catch (NumberFormatException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>short</code> property which does not exist throw
* a <code>java.lang.NumberFormatException</code>
*/
public void testGetShortProperty()
{
try
{
Message message = senderSession.createMessage();
message.getShortProperty("prop");
Assert.fail("Should raise a NumberFormatException.\n");
}
catch (NumberFormatException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>byte</code> property which does not exist throw
* a <code>java.lang.NumberFormatException</code>
*/
public void testGetByteProperty()
{
try
{
Message message = senderSession.createMessage();
message.getByteProperty("prop");
Assert.fail("Should raise a NumberFormatException.\n");
}
catch (NumberFormatException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that an attempt to get a <code>boolean</code> property which does not exist
* returns <code>false</code>
*/
public void testGetBooleanProperty()
{
try
{
Message message = senderSession.createMessage();
Assert.assertEquals(false, message.getBooleanProperty("prop"));
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that the <code>Message.getPropertyNames()</code> method does not return
* the name of the JMS standard header fields (e.g. <code>JMSCorrelationID</code>).
*/
public void testGetPropertyNames()
{
try
{
Message message = senderSession.createMessage();
message.setJMSCorrelationID("foo");
Enumeration enumeration = message.getPropertyNames();
while (enumeration.hasMoreElements())
{
String propName = (String)enumeration.nextElement();
boolean valid = !propName.startsWith("JMS") || propName.startsWith("JMSX");
Assert.assertTrue("sec. 3.5.6 The getPropertyNames method does not return the names of " + "the JMS standard header field [e.g. JMSCorrelationID]: " +
propName,
valid);
}
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that the <code>Message.getPropertyNames()</code> methods.
*/
public void testPropertyIteration()
{
try
{
Message message = senderSession.createMessage();
Enumeration enumeration = message.getPropertyNames();
// there can be some properties already defined (e.g. JMSXDeliveryCount)
int originalCount = 0;
while (enumeration.hasMoreElements())
{
enumeration.nextElement();
originalCount++;
}
message.setDoubleProperty("pi", 3.14159);
enumeration = message.getPropertyNames();
boolean foundPiProperty = false;
int newCount = 0;
while (enumeration.hasMoreElements())
{
String propName = (String)enumeration.nextElement();
newCount++;
if ("pi".equals(propName))
{
foundPiProperty = true;
}
}
Assert.assertEquals(originalCount + 1, newCount);
Assert.assertTrue(foundPiProperty);
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that the <code>Message.clearProperties()</code> method does not clear the
* value of the Message's body.
*/
public void testClearProperties_2()
{
try
{
TextMessage message = senderSession.createTextMessage();
message.setText("foo");
message.clearProperties();
Assert.assertEquals("sec. 3.5.7 Clearing a message's property entries does not clear the value of its body.\n",
"foo",
message.getText());
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that the <code>Message.clearProperties()</code> method deletes all the
* properties of the Message.
*/
public void testClearProperties_1()
{
try
{
TextMessage message = senderSession.createTextMessage();
message.setStringProperty("prop", "foo");
message.clearProperties();
Assert.assertEquals("sec. 3.5.7 A message's properties are deleted by the clearProperties method.\n",
null,
message.getStringProperty("prop"));
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Method to use this class in a Test suite
*/
public static Test suite()
{
return new TestSuite(MessagePropertyTest.class);
}
public MessagePropertyTest(final String name)
{
super(name);
}
}