User: hiram
Date: 01/01/04 19:13:36
Added: src/main/org/jboss/test/spydermq/test Main.java
Log:
Added test cases for spyderMQ
Revision Changes Path
1.1 jbosstest/src/main/org/jboss/test/spydermq/test/Main.java
Index: Main.java
===================================================================
/*
* Copyright (c) 2000 Hiram Chirino <[EMAIL PROTECTED]>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jboss.test.spydermq.test;
import javax.naming.*;
import javax.jms.*;
import java.util.*;
/**
* Main.java
*
* Some simple tests of spyderMQ
*
* @author
* @version
*/
public class Main extends junit.framework.TestCase {
// Provider specific
static String TOPIC_FACTORY = "TopicConnectionFactory";
static String QUEUE_FACTORY = "QueueConnectionFactory";
static String TEST_QUEUE = "queue/testQueue";
static String TEST_TOPIC = "topic/testTopic";
//JMSProviderAdapter providerAdapter;
static Context context;
static QueueConnection queueConnection;
static TopicConnection topicConnection;
public Main(String name) throws Exception{
super(name);
}
// Emptys out all the messages in a queue
private void drainQueue() throws Exception {
QueueSession session = queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue)context.lookup(TEST_QUEUE);
QueueReceiver receiver = session.createReceiver(queue);
Message message = receiver.receive( 2000 );
int c=0;
while( message != null ) {
message = receiver.receive( 2000 );
c++;
}
if( c!=0 )
System.out.println(" Drained "+c+" messages from the queue");
session.close();
}
static public void main ( String []args ) {
String newArgs[] = { "org.jboss.test.spydermq.test.Main" };
junit.swingui.TestRunner.main(newArgs);
}
protected void setUp() throws Exception {
if( context == null ) {
context = new InitialContext();
QueueConnectionFactory queueFactory = (QueueConnectionFactory)
context.lookup(QUEUE_FACTORY);
queueConnection = queueFactory.createQueueConnection();
TopicConnectionFactory topicFactory =
(TopicConnectionFactory)context.lookup(TOPIC_FACTORY);
topicConnection = topicFactory.createTopicConnection();
System.out.println("Connection to spyderMQ established.");
}
}
/**
* Test that messages are ordered by message arrival and priority.
* This also tests :
* Using a non-transacted AUTO_ACKNOWLEDGE session
* Using a QueueReceiver
* Using a QueueSender
* Sending PERSITENT and NON_PERSISTENT text messages.
* Using a QueueBrowser
*/
public void testQueueMessageOrder() throws Exception {
System.out.println("Starting QueueMessageOrder test");
queueConnection.start();
drainQueue();
QueueSession session = queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue)context.lookup(TEST_QUEUE);
QueueSender sender = session.createSender(queue);
TextMessage message = session.createTextMessage();
message.setText("Normal message");
sender.send(queue, message, DeliveryMode.NON_PERSISTENT, 4, 0);
message.setText("Persistent message");
sender.send(queue, message, DeliveryMode.PERSISTENT, 4, 0);
message.setText("High Priority Persistent message");
sender.send(queue, message, DeliveryMode.PERSISTENT, 10, 0);
//message.setText("Expiring Persistent message");
//sender.send(queue, message, DeliveryMode.NON_PERSISTENT, 4, 1);
QueueBrowser browser = session.createBrowser( queue );
Enumeration enum = browser.getEnumeration();
message = (TextMessage)enum.nextElement();
if( !message.getText().equals("High Priority Persistent message") )
throw new Exception("Queue is not prioritizing messages
correctly. Unexpected Message:"+message);
message = (TextMessage)enum.nextElement();
if( !message.getText().equals("Normal message") )
throw new Exception("Queue is not ordering messages correctly.
Unexpected Message:"+message);
message = (TextMessage)enum.nextElement();
if( !message.getText().equals("Persistent message") )
throw new Exception("Queue is not ordering messages correctly.
Unexpected Message:"+message);
// if( enum.hasMoreElements() )
// throw new Exception("Queue does not expire messages correctly.
Unexpected Message:"+enum.nextElement());
System.out.println("QueueMessageOrder passed");
}
/**
* Test that a using QueueRequestor works.
* this also tests that :
* temporary queues work.
*/
public void testRequestReplyQueue() throws Exception {
System.out.println("Starting RequestReplyQueue test");
{
queueConnection.start();
drainQueue( );
}
Thread serverThread = new Thread() {
public void run() {
try {
QueueSession session =
queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue =
(Queue)context.lookup(TEST_QUEUE);
QueueReceiver queueReceiver =
session.createReceiver(queue);
boolean done = false;
while ( !done ) {
TextMessage message = (TextMessage)
queueReceiver.receive();
Queue tempQueue = (Queue)
message.getJMSReplyTo();
QueueSender replySender =
session.createSender(tempQueue);
TextMessage reply =
session.createTextMessage();
reply.setText("Request Processed");
reply.setJMSCorrelationID(message.getJMSMessageID());
replySender.send(reply);
if( message.getText().equals("Quit") )
done = true;
}
session.close();
} catch ( Exception e ) {
e.printStackTrace();
}
}
};
serverThread.start();
QueueSession session = queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue)context.lookup(TEST_QUEUE);
QueueRequestor queueRequestor = new QueueRequestor(session, queue);
TextMessage message = session.createTextMessage();
message.setText("Request Test");
for( int i=0; i < 5; i ++ ) {
TextMessage reply = (TextMessage)
queueRequestor.request(message);
String replyID = new String(reply.getJMSCorrelationID());
if (!replyID.equals(message.getJMSMessageID()))
throw new Exception("REQUEST: ERROR: Reply does not
match sent message");
}
message.setText("Quit");
queueRequestor.request(message);
serverThread.join();
System.out.println("RequestReplyQueue passed");
}
}