View Javadoc
1 /*** 2 * Redistribution and use of this software and associated documentation 3 * ("Software"), with or without modification, are permitted provided 4 * that the following conditions are met: 5 * 6 * 1. Redistributions of source code must retain copyright 7 * statements and notices. Redistributions must also contain a 8 * copy of this document. 9 * 10 * 2. Redistributions in binary form must reproduce the 11 * above copyright notice, this list of conditions and the 12 * following disclaimer in the documentation and/or other 13 * materials provided with the distribution. 14 * 15 * 3. The name "Exolab" must not be used to endorse or promote 16 * products derived from this Software without prior written 17 * permission of Exoffice Technologies. For written permission, 18 * please contact tma@netspace.net.au. 19 * 20 * 4. Products derived from this Software may not be called "Exolab" 21 * nor may "Exolab" appear in their names without prior written 22 * permission of Exoffice Technologies. Exolab is a registered 23 * trademark of Exoffice Technologies. 24 * 25 * 5. Due credit should be given to the Exolab Project 26 * (http://www.exolab.org/). 27 * 28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS 29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT 30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 39 * OF THE POSSIBILITY OF SUCH DAMAGE. 40 * 41 * Copyright 2004 (C) Exoffice Technologies Inc. All Rights Reserved. 42 * 43 * $Id: JMSMessageIDTest.java,v 1.1 2004/02/03 00:56:55 tanderson Exp $ 44 */ 45 package org.exolab.jmscts.test.message.header; 46 47 import java.util.ArrayList; 48 import java.util.Iterator; 49 import java.util.List; 50 51 import javax.jms.Message; 52 import javax.jms.Session; 53 54 import junit.framework.Test; 55 56 import org.exolab.jmscts.core.AbstractSendReceiveTestCase; 57 import org.exolab.jmscts.core.MessageReceiver; 58 import org.exolab.jmscts.core.MessageSender; 59 import org.exolab.jmscts.core.TestContext; 60 import org.exolab.jmscts.core.TestCreator; 61 62 63 /*** 64 * This class tests the JMSMessageID message property 65 * 66 * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a> 67 * @version $Revision: 1.1 $ 68 * @see AbstractSendReceiveTestCase 69 */ 70 public class JMSMessageIDTest extends AbstractSendReceiveTestCase { 71 72 /*** 73 * The destination name 74 */ 75 private static final String DESTINATION = "JMSMessageIDTest"; 76 77 78 /*** 79 * Construct a new <code>JMSMessageIDTest</code> 80 * 81 * @param name the name of test case 82 */ 83 public JMSMessageIDTest(String name) { 84 super(name); 85 } 86 87 /*** 88 * Sets up the test suite 89 * 90 * @return an instance of this class that may be run by 91 * {@link org.exolab.jmscts.core.JMSTestRunner} 92 */ 93 public static Test suite() { 94 return TestCreator.createSendReceiveTest(JMSMessageIDTest.class); 95 } 96 97 /*** 98 * Returns the list of destination names used by this test case. These 99 * are used to pre-administer destinations prior to running the test case. 100 * 101 * @return the list of destinations used by this test case 102 */ 103 public String[] getDestinations() { 104 return new String[]{DESTINATION}; 105 } 106 107 /*** 108 * Verifies that the JMSMessageID is assigned when a message is sent, 109 * that the received message has the same JMSMessageID value, 110 * as that sent, and that a new JMSMessageID is assigned when the 111 * message is resent 112 * 113 * @jmscts.requirement message.identifier 114 * @jmscts.delivery consumer 115 * @throws Exception for any error 116 */ 117 public void testJMSMessageID() throws Exception { 118 TestContext context = getContext(); 119 Message message = context.getMessage(); 120 121 // assertNull("JMSMessageID should initially be null", 122 // message.getJMSMessageID()); 123 // Comment out for now. The spec doesn't state this, although its 124 // a reasonable assumption IMHO. 125 126 // send the message, and receive it from the same destination 127 Message received1 = sendReceive(message, DESTINATION); 128 String sentID1 = message.getJMSMessageID(); 129 String receivedID1 = received1.getJMSMessageID(); 130 assertNotNull("JMSMessageID after send should not be null", sentID1); 131 assertNotNull("JMSMessageID on received message should not be null", 132 receivedID1); 133 assertEquals( 134 "JMSMessageID on received message not equal to that sent:", 135 sentID1, receivedID1); 136 137 // resend the message, and verify that a new JMSMessageID is allocated 138 Message resent = received1; 139 Message received2 = sendReceive(resent, DESTINATION); 140 String sentID2 = resent.getJMSMessageID(); 141 String receivedID2 = received2.getJMSMessageID(); 142 assertNotNull("JMSMessageID after resend should not be null", sentID2); 143 assertNotNull("JMSMessageID on received message should not be null", 144 receivedID2); 145 if (sentID1.equals(sentID2)) { 146 fail("A new JMSMessageID wasn't allocated for the resent message"); 147 } 148 assertEquals( 149 "JMSMessageID on received message not equal to that sent:", 150 sentID2, receivedID2); 151 } 152 153 /*** 154 * Verifies that the JMSMessageID is assigned each time a message is sent 155 * 156 * @jmscts.requirement message.identifier 157 * @throws Exception for any error 158 */ 159 public void testJMSMessageIDAssignment() throws Exception { 160 final int count = 3; 161 List messageIds = new ArrayList(); 162 TestContext context = getContext(); 163 Session session = context.getSession(); 164 Message message = context.getMessage(); 165 MessageSender sender = null; 166 MessageReceiver receiver = null; 167 long timeout = context.getMessagingBehaviour().getTimeout(); 168 169 try { 170 sender = createSender(DESTINATION); 171 receiver = createReceiver(DESTINATION); 172 173 for (int i = 0; i < count; ++i) { 174 sender.send(message, 1); 175 String messageId = message.getJMSMessageID(); 176 assertNotNull(messageId); 177 if (messageIds.contains(messageId)) { 178 fail("Allocated JMSMessageID is not unique"); 179 } 180 messageIds.add(messageId); 181 } 182 183 if (session.getTransacted()) { 184 session.commit(); 185 } 186 187 // now receive the messages, and verify they have the correct 188 // identifiers. The messages have equal JMSPriority values, 189 // so should be received in the same order as they were sent 190 List messages = receive(receiver, count); 191 Iterator iterator = messages.iterator(); 192 List receivedIds = new ArrayList(); 193 while (iterator.hasNext()) { 194 Message received = (Message) iterator.next(); 195 receivedIds.add(received.getJMSMessageID()); 196 } 197 198 if (session.getTransacted()) { 199 session.commit(); 200 } 201 202 assertEquals("JMSMessageIDs of received messages don't match " 203 + "those sent: ", messageIds, receivedIds); 204 } finally { 205 close(sender); 206 close(receiver); 207 } 208 } 209 210 /*** 211 * Verifies that JMSMessageID is prefixed with 'ID:' 212 * 213 * @jmscts.requirement message.identifier.prefix 214 * @jmscts.delivery all-send 215 * @throws Exception for any error 216 */ 217 public void testJMSMessageIDPrefix() throws Exception { 218 final String prefix = "ID:"; 219 TestContext context = getContext(); 220 Message message = context.getMessage(); 221 222 // send the message 223 send(message, DESTINATION); 224 String messageID = message.getJMSMessageID(); 225 if (!messageID.startsWith(prefix)) { 226 fail("JMSMessageID must start with prefix=" + prefix); 227 } 228 } 229 230 }

This page was automatically generated by Maven