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 2001-2004 (C) Exoffice Technologies Inc. All Rights Reserved. 42 * 43 * $Id: CloseTest.java,v 1.8 2004/02/03 21:52:12 tanderson Exp $ 44 */ 45 package org.exolab.jmscts.test.session.clientack; 46 47 import javax.jms.Session; 48 49 import junit.framework.Test; 50 51 import org.exolab.jmscts.core.ConnectionHelper; 52 import org.exolab.jmscts.core.MessageReceiver; 53 import org.exolab.jmscts.core.TestContext; 54 import org.exolab.jmscts.core.TestContextHelper; 55 import org.exolab.jmscts.core.TestCreator; 56 57 58 /*** 59 * This class tests the behaviour of closing sessions created with the 60 * <code>Session.CLIENT_ACKNOWLEDGE</code> message acknowledgment mode. 61 * 62 * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a> 63 * @version $Revision: 1.8 $ 64 * @jmscts.session CLIENT_ACKNOWLEDGE 65 * @jmscts.message TextMessage 66 * @jmscts.delivery administered-consumer 67 */ 68 public class CloseTest extends ClientAcknowledgeTestCase { 69 70 /*** 71 * The destinations to create prior to running the test 72 */ 73 private static final String[] DESTINATIONS = {"clientack1", "clientack2", 74 "clientack3"}; 75 76 /*** 77 * Construct a new <code>CloseTest</code> 78 * 79 * @param name the name of test case 80 */ 81 public CloseTest(String name) { 82 super(name); 83 } 84 85 /*** 86 * Sets up the test suite. 87 * 88 * @return an instance of this class that may be run by 89 * {@link org.exolab.jmscts.core.JMSTestRunner} 90 */ 91 public static Test suite() { 92 return TestCreator.createSendReceiveTest(CloseTest.class); 93 } 94 95 /*** 96 * Returns the list of destination names used by this test case. These 97 * are used to pre-administer destinations prior to running the test case. 98 * 99 * @return the list of destinations used by this test case 100 */ 101 public String[] getDestinations() { 102 return DESTINATIONS; 103 } 104 105 /*** 106 * Verifies that closing a connection does not force an acknowledgement of 107 * client-acknowledged sessions. 108 * 109 * @jmscts.requirement connection.close.session.CLIENT_ACKNOWLEDGE 110 * @throws Exception for any error 111 */ 112 public void testConnectionClose() throws Exception { 113 final int count = 10; // send count messages to each destination 114 TestContext context = getContext(); 115 116 // create the receivers prior to sending any messages 117 MessageReceiver[] receivers = createReceivers(context); 118 119 // create a new connection, and corresponding receivers 120 TestContext context2 = TestContextHelper.createSendReceiveContext( 121 context); 122 MessageReceiver[] receivers2 = createReceivers(context2); 123 124 try { 125 // send the messages on the new connection, and receive them 126 context.getConnection().start(); 127 context2.getConnection().start(); 128 send(context2, count); 129 receive(context2, receivers2, count, 1, false); 130 close(receivers2); 131 132 // close the new connection, and re-receive the messages on the 133 // existing connection 134 // Note: the JMSRedelivered property shouldn't be set for topics 135 // as they are being received by different consumers. 136 boolean redelivered = context.isQueueConnectionFactory(); 137 context2.getConnection().close(); 138 receive(receivers, count, 1, redelivered); 139 } finally { 140 close(receivers); 141 } 142 } 143 144 /*** 145 * Verifies that closing a session does not force an acknowledgement of 146 * client-acknowledged sessions. 147 * 148 * @jmscts.requirement session.close.CLIENT_ACKNOWLEDGE 149 * @throws Exception for any error 150 */ 151 public void testSessionClose() throws Exception { 152 final int count = 10; // send count messages to each destination 153 TestContext context = getContext(); 154 155 // create the receivers prior to sending any messages 156 MessageReceiver[] receivers = createReceivers(context); 157 158 // create a new session context, and corresponding receivers 159 Session session2 = ConnectionHelper.createSession(context); 160 TestContext parent = new TestContext( 161 context, session2, context.getAckType()); 162 TestContext context2 = new TestContext( 163 parent, context.getMessage(), context.getMessagingBehaviour()); 164 MessageReceiver[] receivers2 = createReceivers(context2); 165 166 try { 167 // send the messages using the new session, and receive them 168 send(context2, count); 169 receive(context2, receivers2, count, 1, false); 170 close(receivers2); 171 172 // close the new session, and re-receive the messages on the 173 // existing connection. 174 // Note: the JMSRedelivered property shouldn't be set for topics 175 // as they are being received by different consumers. 176 boolean redelivered = context.isQueueConnectionFactory(); 177 session2.close(); 178 receive(receivers, count, 1, redelivered); 179 } finally { 180 close(receivers); 181 } 182 } 183 184 }

This page was automatically generated by Maven