Package net.timewalker.ffmq3.test.local.session

Source Code of net.timewalker.ffmq3.test.local.session.LocalSessionTest

package net.timewalker.ffmq3.test.local.session;

import java.util.Date;
import java.util.Enumeration;

import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.IllegalStateException;
import javax.jms.InvalidClientIDException;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageEOFException;
import javax.jms.MessageListener;
import javax.jms.MessageNotReadableException;
import javax.jms.MessageNotWriteableException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TemporaryQueue;
import javax.jms.TemporaryTopic;
import javax.jms.TextMessage;

import net.timewalker.ffmq3.FFMQException;
import net.timewalker.ffmq3.test.AbstractCommTest;
import net.timewalker.ffmq3.test.TestUtils;
import net.timewalker.ffmq3.utils.concurrent.Semaphore;
import net.timewalker.ffmq3.utils.id.UUIDProvider;

/**
* LocalSessionTest
*/
public class LocalSessionTest extends AbstractCommTest
{
    protected Connection connection;
    protected int counter;
    protected Semaphore listenerLock = new Semaphore();
   
    protected Connection createConnection() throws Exception
    {
        Connection connection;
        if (isRemote())
            connection = TestUtils.openRemoteConnection();
        else
            connection = TestUtils.openLocalConnection();
       
        connection.setExceptionListener(this);
       
        return connection;
    }
   
    /*
     * (non-Javadoc)
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception
    {
        super.setUp();
        connection = createConnection();
       
        purgeDestination(queue1);
    }

    /*
     * (non-Javadoc)
     * @see junit.framework.TestCase#tearDown()
     */
    protected void tearDown() throws Exception
    {
        connection.close();
        super.tearDown();
    }
   
    public void testSetClientID() throws Exception
    {
        synchronized (LocalSessionTest.class)
        {
            try
            {
                connection.getClientID();
            }
            catch (InvalidClientIDException e)
            {
                assertTrue(e.getMessage().indexOf("not set") != -1);
            }
           
            connection.setClientID("foo");
           
            try
            {
                connection.setClientID("bar");
                fail("Should have failed");
            }
            catch (IllegalStateException e)
            {
                assertTrue(e.getMessage().indexOf("already set") != -1);
            }
           
            assertEquals("foo",connection.getClientID());
           
            Connection connection = createConnection();
            try
            {
              connection.setClientID("foo");
              fail("Should have failed");
            }
            catch (InvalidClientIDException e)
            {
              // Ok
            }
            connection.close();
        }
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testDurableConsumer() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        connection.setClientID("its_me");
        connection.start();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       
        producer = session.createProducer(topic1);
       
        consumer = session.createDurableSubscriber(topic1,"durable_sub");
        assertNull(consumer.receive(100));
       
        msg = session.createMessage();
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);

        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
       
        consumer.close();
       
        msg = session.createMessage();
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
       
        consumer = session.createDurableSubscriber(topic1,"durable_sub");
       
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
       
        consumer.close();
       
        session.unsubscribe("durable_sub");
       
        msg = session.createMessage();
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
       
        consumer = session.createDurableSubscriber(topic1,"durable_sub");
        assertNull(consumer.receive(100));
       
        consumer.close();
       
        consumer = session.createDurableSubscriber(topic1,"durable_sub2");
        assertNull(consumer.receive(100));
       
        try
        {
            session.unsubscribe("durable_sub2");
            fail("Should have failed");
        }
        catch (FFMQException e)
        {
            assertTrue(e.getMessage().indexOf("in use") != -1);
        }
       
        consumer.close();
       
        session.unsubscribe("durable_sub");
        session.unsubscribe("durable_sub2");
       
        session.close();
    }
   
    public void testReceiveNoWait() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        connection.start();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        assertNotNull(consumer.receiveNoWait());
        assertNull(consumer.receive(100));
    }
   
    public void testAckTransactedSession() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        connection.start();
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        consumer = session.createConsumer(queue1);
        msg = consumer.receiveNoWait();
        assertNotNull(msg);
       
        msg.acknowledge(); // Should have no effect
       
        session.close();
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        consumer = session.createConsumer(queue1);
        msg = consumer.receiveNoWait();
        assertNotNull(msg);
        session.commit();
        session.close();
    }
   
    public void testSendWithRuntimeDestination() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        msg = session.createMessage();
        producer = session.createProducer(null);
        producer.setDeliveryMode(TestUtils.DELIVERY_MODE);
        producer.setPriority(8);
        producer.setTimeToLive(2000);
       
        try
        {
            producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
            fail("Should have failed");
        }
        catch (UnsupportedOperationException e)
        {
            // Ok
        }
       
        long now = System.currentTimeMillis();
        producer.send(queue1,msg);
       
        session.commit();
        session.close();
       
        connection.start();
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        consumer = session.createConsumer(queue1);
        msg = consumer.receiveNoWait();
        assertNotNull(msg);
        assertEquals(8, msg.getJMSPriority());
        assertTrue(Math.abs(now-msg.getJMSExpiration()+2000) < 100);
        session.commit();
        session.close();
    }
   
    public void testConnectionStartStop() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        assertNull(consumer.receive(100));
        assertNull(consumer.receive(100));
        connection.start();
        assertNotNull(consumer.receive(100));
       
        connection.stop();
        connection.stop(); // Double stop
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testConsumerPreClose() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        assertNotNull(consumer.receive(100));
        consumer.close();
       
        consumer = session.createConsumer(queue1);
       
        long redeliveryDelay = engine.getSetup().getRedeliveryDelay();
         if (redeliveryDelay > 0)
           msg = consumer.receive(redeliveryDelay+100);
         else
           msg = consumer.receive(100);
       
        assertNotNull(msg);
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testClose() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
        QueueBrowser browser;
       
        // Double close
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        session.close();
        session.close();
       
        // Cascade close
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        consumer = session.createConsumer(queue2);
        browser = session.createBrowser(queue1);
        session.close();
        try
        {
            producer.send(msg);
            fail("Should have failed");
        }
        catch (JMSException e)
        {
            assertTrue(e.getMessage().indexOf("closed") != -1);
        }
       
        assertNull(consumer.receive(100));
       
        try
        {
            browser.getEnumeration();
            fail("Should have failed");
        }
        catch (JMSException e)
        {
            assertTrue(e.getMessage().indexOf("closed") != -1);
        }
       
        try
        {
            session.createProducer(queue1);
            fail("Should have failed");
        }
        catch (JMSException e)
        {
            assertTrue(e.getMessage().indexOf("closed") != -1);
        }
        try
        {
            session.createConsumer(queue1);
            fail("Should have failed");
        }
        catch (JMSException e)
        {
            assertTrue(e.getMessage().indexOf("closed") != -1);
        }
       
        // With pending update (Unacknowledged)
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.close();
       
        // With pending update (transacted)
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testAcknowledge() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        connection.start();
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
        consumer.close();
        session.close();
       
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
       
        long redeliveryDelay = engine.getSetup().getRedeliveryDelay();
        if (redeliveryDelay > 0)
          consumer.receive(redeliveryDelay+100).acknowledge();
        else
          consumer.receive(100).acknowledge();
       
        assertNull(consumer.receive(100));
        session.close();
       
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        assertNull(consumer.receive(100));
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testBeforeExpiration() throws Exception
    {
        Session session;
        MessageProducer producer;
        MessageConsumer consumer;
       
        connection.start();
       
        // Produce
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(queue1);
       
        TextMessage msg = session.createTextMessage("MSG_1");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(0,msg.getJMSExpiration());
       
        msg = session.createTextMessage("MSG_Expired");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,500);
        long computedExpiration = msg.getJMSExpiration();
        long now = System.currentTimeMillis();
        assertTrue(now < computedExpiration);
        assertTrue((now - computedExpiration) < 500);
       
        msg = session.createTextMessage("MSG_2");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(0,msg.getJMSExpiration());
       
        msg = session.createTextMessage("MSG_3");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(0,msg.getJMSExpiration());
       
        session.commit();
        session.close();
       
        // Receive
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_1",msg.getText());
        assertTrue(msg.getJMSExpiration() == 0);
       
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_Expired",msg.getText());
        assertEquals(computedExpiration,msg.getJMSExpiration());
       
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_2",msg.getText());
        assertTrue(msg.getJMSExpiration() == 0);
       
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_3",msg.getText());
        assertTrue(msg.getJMSExpiration() == 0);

        assertNull(consumer.receive(100));
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testAfterExpiration() throws Exception
    {
        Session session;
        MessageProducer producer;
        MessageConsumer consumer;

        connection.start();
       
        // Produce
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(queue1);
       
        TextMessage msg = session.createTextMessage("MSG_1");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(0,msg.getJMSExpiration());
       
        msg = session.createTextMessage("MSG_Expired");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,500);
        long computedExpiration = msg.getJMSExpiration();
        long now = System.currentTimeMillis();
        assertTrue(now < computedExpiration);
        assertTrue((now - computedExpiration) < 500);
       
        msg = session.createTextMessage("MSG_2");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(0,msg.getJMSExpiration());
       
        msg = session.createTextMessage("MSG_3");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(0,msg.getJMSExpiration());

        session.commit();
        session.close();
       
        // Wait for message expiration
        Thread.sleep(1000);
       
        // Receive
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
       
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_1",msg.getText());
        assertEquals(0,msg.getJMSExpiration());
       
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_2",msg.getText());
        assertEquals(0,msg.getJMSExpiration());
       
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("MSG_3",msg.getText());
        assertEquals(0,msg.getJMSExpiration());
       
        assertNull(consumer.receive(100));
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCommit() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        // session is not transacted
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        try
        {
            session.commit();
            fail("Should have failed");
        }
        catch (IllegalStateException e)
        {
            assertTrue(e.getMessage().indexOf("transacted") != -1);
        }
        session.close();
       
        // Double commit
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        consumer = session.createConsumer(queue1);
        connection.start();
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
        session.commit();
        session.close();
       
        // Commit with pending update
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        consumer = session.createConsumer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNull(consumer.receive(100));
        session.commit();
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testQueueBrowser() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;

        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        QueueBrowser browser = session.createBrowser(queue1);
       
        int count = 0;
        Enumeration messages = browser.getEnumeration();
        while (messages.hasMoreElements())
        {
          Message browsedMsg = (Message)messages.nextElement();
          assertNotNull(browsedMsg);
          count++;
        }
        assertEquals(5, count);
       
        browser.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testRollback() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        connection.start();
       
        // session is not transacted
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        try
        {
            session.rollback();
            fail("Should have failed");
        }
        catch (IllegalStateException e)
        {
            assertTrue(e.getMessage().indexOf("transacted") != -1);
        }
        session.close();
       
        // Double rollback
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.rollback();
        session.rollback();
        session.close();
       
        // Rollback with pending send
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        consumer = session.createConsumer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNull(consumer.receive(100));
        session.rollback();
        session.close();
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        assertNull(consumer.receive(100));
        session.rollback();
        session.close();
       
        // Rollback with pending get
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        consumer = session.createConsumer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertFalse(msg.getJMSRedelivered());
        session.commit();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertFalse(msg.getJMSRedelivered());
        session.rollback();
        session.close();
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
       
        long redeliveryDelay = engine.getSetup().getRedeliveryDelay();
        if (redeliveryDelay > 0)
          msg = consumer.receive(redeliveryDelay+100);
        else
          msg = consumer.receive(100);
       
        assertNotNull(msg);
        assertTrue(msg.getJMSRedelivered());
        session.rollback();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testPrefetchRollback() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        connection.start();
       
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
       
        consumer = session.createConsumer(queue1);
        assertNotNull(consumer.receive(100));
        session.commit();
        consumer.close();
       
        consumer = session.createConsumer(queue1);
        assertNotNull(consumer.receive(100));
        consumer.close();
        session.commit();
       
        consumer = session.createConsumer(queue1);
        assertNull(consumer.receive(100));
        consumer.close();
       
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateProducer() throws Exception
    {
        Session session;      
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        session.createProducer(null);
        session.createProducer(queue1);
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testRecover() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        connection.start();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.close();
       
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
        session.recover();
       
        long redeliveryDelay = engine.getSetup().getRedeliveryDelay();
         if (redeliveryDelay > 0)
           msg = consumer.receive(redeliveryDelay+100);
         else
           msg = consumer.receive(100);
          
        assertNotNull(msg);
        assertNull(consumer.receive(100));
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testListener() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.close();
       
        // Early listener
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        counter = 0;
        consumer.setMessageListener(new MessageListener()
        {
            /*
             * (non-Javadoc)
             * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
             */
            public void onMessage(Message message)
            {
                try
                {
                    counter++;
                    if (counter == 1)
                        message.acknowledge();
                    else
                        listenerLock.release();
                }
                catch (JMSException e)
                {
                    lastConnectionFailure = e;
                    listenerLock.release();
                }
            }
        });
        connection.start();
        listenerLock.acquire(1000);
        Thread.sleep(200);
        assertEquals(2,counter);
        consumer.close();
        session.recover();
       
        // Late listener
        session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        counter = 0;
        consumer.setMessageListener(new MessageListener()
        {
            /*
             * (non-Javadoc)
             * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
             */
            public void onMessage(Message message)
            {
                try
                {
                    counter++;
                    message.acknowledge();
                    listenerLock.release();
                }
                catch (JMSException e)
                {
                    lastConnectionFailure = e;
                    listenerLock.release();
                }
            }
        });
        listenerLock.acquire(1000);
        Thread.sleep(200);
        assertEquals(1,counter);
        consumer.close();       
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateTemporaryQueue() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        connection.start();
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        Queue tempQueue = session.createTemporaryQueue();
        producer = session.createProducer(tempQueue);
        consumer = session.createConsumer(tempQueue);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        assertNotNull(consumer.receive(100));
        assertNull(consumer.receive(100));
        session.commit();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateMessage() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createMessage());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateBytesMessage() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createBytesMessage());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateMapMessage() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createMapMessage());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateObjectMessage() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createObjectMessage());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateStreamMessage() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createStreamMessage());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateTextMessage() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createTextMessage());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateQueue() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createQueue("foo"));
        assertNotNull(session.createQueue("bar"));
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testGetAcknowledgeMode() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertEquals(Session.SESSION_TRANSACTED,session.getAcknowledgeMode());
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        assertEquals(Session.AUTO_ACKNOWLEDGE,session.getAcknowledgeMode());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testGetTransacted() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertTrue(session.getTransacted());
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        assertFalse(session.getTransacted());
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateObjectMessageSerializable() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createObjectMessage("data"));
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateTextMessageString() throws Exception
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        assertNotNull(session.createTextMessage("foo"));
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateConsumerDestinationString() throws Exception
    {
        Session session;      
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       
        try
        {
            session.createConsumer(null,"foo");
            fail("Should have failed");
        }
        catch (JMSException e)
        {
            assertTrue(e.getMessage().indexOf("destination") != -1);
        }
       
        session.createConsumer(queue1,null);
        session.createConsumer(queue1,"JMSMessageID='toto'");
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    public void testCreateConsumerDestination() throws Exception
    {
        Session session;      
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       
        try
        {
            session.createConsumer(null);
            fail("Should have failed");
        }
        catch (JMSException e)
        {
            assertTrue(e.getMessage().indexOf("destination") != -1);
        }
       
        session.createConsumer(queue1);
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }

    /* (non-Javadoc)
     * @see net.timewalker.ffmq3.additional.AbstractCommTest#isListenerTest()
     */
    protected boolean isListenerTest()
    {
        return false;
    }

    /* (non-Javadoc)
     * @see net.timewalker.ffmq3.additional.AbstractCommTest#isRemote()
     */
    protected boolean isRemote()
    {
        return false;
    }

    /* (non-Javadoc)
     * @see net.timewalker.ffmq3.additional.AbstractCommTest#isTopicTest()
     */
    protected boolean isTopicTest()
    {
        return false;
    }

    /* (non-Javadoc)
     * @see net.timewalker.ffmq3.additional.AbstractCommTest#useMultipleConnections()
     */
    protected boolean useMultipleConnections()
    {
        return false;
    }

    public void testCreateBrowser() throws Exception
    {
        Session session;
        Message msg;
        MessageProducer producer;
       
        // Fill-in some messages
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(queue1);
        msg = session.createTextMessage("MSG_1");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        msg = session.createTextMessage("MSG_2");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        msg = session.createTextMessage("MSG_3");
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
       
        QueueBrowser browser = session.createBrowser(queue1);
        Enumeration messages = browser.getEnumeration();
        int count = 0;
        while (messages.hasMoreElements())
        {
            TextMessage message = (TextMessage)messages.nextElement();
          assertEquals("MSG_"+(++count), message.getText());
        }
        count = 0;
        messages = browser.getEnumeration();
        while (messages.hasMoreElements())
        {
            TextMessage message = (TextMessage)messages.nextElement();
            assertEquals("MSG_"+(++count), message.getText());
        }
        browser.close();
       
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSDestination() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNotNull(msg.getJMSDestination());
        assertTrue(msg.getJMSDestination() instanceof Queue);
        assertEquals(queue1.getQueueName(),((Queue)msg.getJMSDestination()).getQueueName());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertNotNull(msg.getJMSDestination());
        assertTrue(msg.getJMSDestination() instanceof Queue);
        assertEquals(queue1.getQueueName(),((Queue)msg.getJMSDestination()).getQueueName());
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSDeliveryMode() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(TestUtils.DELIVERY_MODE,msg.getJMSDeliveryMode());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertEquals(TestUtils.DELIVERY_MODE,msg.getJMSDeliveryMode());
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSMessageID() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        // With messages IDs enabled
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        String producerMsgID = msg.getJMSMessageID();
        assertNotNull(producerMsgID);
        assertTrue(producerMsgID.startsWith("ID:"));
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        String consumerMsgID = msg.getJMSMessageID();
        assertNotNull(producerMsgID);
        assertTrue(producerMsgID.startsWith("ID:"));
        assertEquals(producerMsgID,consumerMsgID);
        consumer.close()
        session.close();
    
        // With messages IDs disabled
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.setDisableMessageID(true);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producerMsgID = msg.getJMSMessageID();
        assertNotNull(producerMsgID)// FFMQ always sets the ID
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        consumerMsgID = msg.getJMSMessageID();
        assertNotNull(consumerMsgID)// FFMQ always sets the ID
        consumer.close()
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSTimestamp() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        // With timestamps enabled
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        long now = System.currentTimeMillis();
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        long producerTimestamp = msg.getJMSTimestamp();
        assertTrue(producerTimestamp >= now);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        long consumerTimestamp = msg.getJMSTimestamp();
        assertEquals(producerTimestamp,consumerTimestamp);
        consumer.close()
        session.close();
    
        // With timestamps disabled
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.setDisableMessageTimestamp(true);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        producerTimestamp = msg.getJMSTimestamp();
        assertEquals(0,producerTimestamp);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        consumerTimestamp = msg.getJMSTimestamp();
        assertEquals(0,consumerTimestamp);
        consumer.close()
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSCorrelationID() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        // With correl ID
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        String correlID = UUIDProvider.getInstance().getUUID();
        msg.setJMSCorrelationID(correlID);
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(correlID,msg.getJMSCorrelationID());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertEquals(correlID,msg.getJMSCorrelationID());
        consumer.close();
        session.close();
       
        // Without correl ID
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNull(msg.getJMSCorrelationID());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertNull(msg.getJMSCorrelationID());
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSReplyTo() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        // with reply to
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        msg.setJMSReplyTo(queue1);
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNotNull(msg.getJMSReplyTo());
        assertTrue(msg.getJMSReplyTo() instanceof Queue);
        assertEquals(queue1.getQueueName(),((Queue)msg.getJMSReplyTo()).getQueueName());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertNotNull(msg.getJMSReplyTo());
        assertTrue(msg.getJMSReplyTo() instanceof Queue);
        assertEquals(queue1.getQueueName(),((Queue)msg.getJMSReplyTo()).getQueueName());
        consumer.close();
        session.close();
       
        // without reply to
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNull(msg.getJMSReplyTo());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertNull(msg.getJMSReplyTo());
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSType() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        // With type
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        String type = UUIDProvider.getInstance().getUUID();
        msg.setJMSType(type);
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertEquals(type,msg.getJMSType());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertEquals(type,msg.getJMSType());
        consumer.close();
        session.close();
       
        // Without type
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        assertNull(msg.getJMSType());
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = consumer.receive(100);
        assertNotNull(msg);
        assertNull(msg.getJMSType());
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSPriority() throws Exception
    {
      Session session;
        Message msg;
        MessageProducer producer;
        MessageConsumer consumer;

        int[] priorities = new int[] { 6,8,0,2,9,9,4,0,6,0 };
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMessage();
        producer = session.createProducer(queue1);
        for(int n=0;n<priorities.length;n++)
        {
          producer.send(msg,TestUtils.DELIVERY_MODE,priorities[n],0);
          assertEquals(priorities[n], msg.getJMSPriority());
        }
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        int lastPriority = 9;
        for(int n=0;n<priorities.length;n++)
        {
          msg = consumer.receive(100);
            assertNotNull(msg);
            assertTrue(lastPriority >= msg.getJMSPriority());
            lastPriority = msg.getJMSPriority();
            //System.out.println(lastPriority);
        }
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testMessageNotWriteable() throws Exception
    {
      Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;
        // Send message
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createTextMessage("foo");
        msg.setIntProperty("iProp", 123);
        producer = session.createProducer(queue1);
         producer.send(msg,TestUtils.DELIVERY_MODE,0,0);
        session.commit();
        session.close();

        // Receive message
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        consumer = session.createConsumer(queue1);
        connection.start();
         msg = (TextMessage)consumer.receive(100);
         assertNotNull(msg);
        
         try
         {
           msg.setIntProperty("iProp", 456);
           fail("Should have failed");
         }
         catch (MessageNotWriteableException e)
         {
           // Ok
         }
        
         try
         {
           msg.setText("other");
           fail("Should have failed");
         }
         catch (MessageNotWriteableException e)
         {
           // Ok
         }
        
         msg.clearProperties();
         msg.setIntProperty("iProp", 456);
        
         msg.clearBody();
         msg.setText("other");
        
         session.rollback();
        
         // Check that the original message was not modified
         long redeliveryDelay = engine.getSetup().getRedeliveryDelay();
         if (redeliveryDelay > 0)
           msg = (TextMessage)consumer.receive(redeliveryDelay+100);
         else
           msg = (TextMessage)consumer.receive(100);
        
         assertNotNull(msg);
         assertEquals(123,msg.getIntProperty("iProp"));
         assertEquals("foo",msg.getText());
        
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testSendForeignMessage() throws Exception
    {
      Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;

        // Send message
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
       
        msg = new ForeignTextMessage();
        msg.setText("foobar");
       
        producer = session.createProducer(queue1);
         producer.send(msg,TestUtils.DELIVERY_MODE,0,0);
        session.commit();
        session.close();

        // Receive message
        session = connection.createSession(true, Session.SESSION_TRANSACTED);
        consumer = session.createConsumer(queue1);
        connection.start();
         msg = (TextMessage)consumer.receive(100);
         assertNotNull(msg);
         assertEquals("foobar", msg.getText());
         session.commit();
        
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testTemporaryQueueLifecycle() throws Exception
    {
      Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        TemporaryQueue tempQueue = session.createTemporaryQueue();        
       
        msg = session.createTextMessage("foobar");
        producer = session.createProducer(tempQueue);
         producer.send(msg,DeliveryMode.NON_PERSISTENT,0,0);
         producer.close();

         consumer = session.createConsumer(tempQueue);
        connection.start();
         msg = (TextMessage)consumer.receive(100);
         assertNotNull(msg);
         assertEquals("foobar", msg.getText());
        
         tempQueue.delete();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testTemporaryTopicLifecycle() throws Exception
    {
      Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        TemporaryTopic tempTopic = session.createTemporaryTopic();        
       
        consumer = session.createConsumer(tempTopic);
        connection.start();
       
        msg = session.createTextMessage("foobar");
        producer = session.createProducer(tempTopic);
         producer.send(msg,DeliveryMode.NON_PERSISTENT,0,0);
         producer.close();

         msg = (TextMessage)consumer.receive(100);
         assertNotNull(msg);
         assertEquals("foobar", msg.getText());
        
         tempTopic.delete();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testJMSPropertiesTransmission() throws Exception
    {
      Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createTextMessage("foobar");
        msg.setBooleanProperty("boolean", true);
        msg.setStringProperty("string", "foobar");
        msg.setByteProperty("byte", (byte)1);
        msg.setShortProperty("short", (short)2);
        msg.setIntProperty("int", 3);
        msg.setLongProperty("long", 4);
        msg.setFloatProperty("float", 1.23f);
        msg.setDoubleProperty("double", 4.56);
       
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
        assertEquals("foobar", msg.getText());

        // Check properties
        assertEquals(true, msg.getBooleanProperty("boolean"));
        assertEquals("foobar", msg.getStringProperty("string"));
        assertEquals((byte)1, msg.getByteProperty("byte"));
        assertEquals((short)2, msg.getShortProperty("short"));
        assertEquals(3, msg.getIntProperty("int"));
        assertEquals(4, msg.getLongProperty("long"));
        assertEquals(1.23f, msg.getFloatProperty("float"),0.000001);
        assertEquals(4.56, msg.getDoubleProperty("double"),0.000001);
       
        // Make sure message is read-only
        try
        {
          msg.setBooleanProperty("xxx", true);
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        msg.clearProperties();
       
        msg.setBooleanProperty("xxx", true);
        assertEquals(true, msg.getBooleanProperty("xxx"));
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testTextMessageTransmission() throws Exception
    {
      Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;
       
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createTextMessage("foobar");

        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
       
        assertEquals("foobar", msg.getText());

        // Make sure message is read-only
        try
        {
          msg.setText("BOUM");
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        msg.clearBody();
       
        msg.setText("foofoo");
        assertEquals("foofoo", msg.getText());
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testByteMessageTransmission() throws Exception
    {
      Session session;
        BytesMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createBytesMessage();
       
        byte[] data = new byte[1024];
        for(int n=0;n<data.length;n++)
          data[n] = (byte)n;
       
        int BLOCKS = 10;
       
        for(int n=0;n<BLOCKS;n++)
          msg.writeBytes(data);
       
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (BytesMessage)consumer.receive(100);
        assertNotNull(msg);
       
        byte[] data2 = new byte[1024];
        for(int n=0;n<BLOCKS;n++)
        {
          assertEquals(1024,msg.readBytes(data2));
          for(int k=0;k<data2.length;k++)
            data2[k] = (byte)k;
        }
        assertEquals(-1,msg.readBytes(data2));
       
        // Make sure message is read-only
        try
        {
          msg.writeByte((byte)12);
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        msg.clearBody();
       
        msg.writeByte((byte)12);
       
        // Make sure message is write-only
        try
        {
          msg.readByte();
          fail("Should have failed");
        }
        catch (MessageNotReadableException e)
        {
          // Ignore
        }
       
        msg.reset();
       
        // Make sure message is read-only
        try
        {
          msg.writeByte((byte)12);
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        assertEquals((byte)12,msg.readByte());
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testStreamMessageTransmission() throws Exception
    {
      Session session;
        StreamMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createStreamMessage();
       
        byte[] data = new byte[1024];
        for(int n=0;n<data.length;n++)
          data[n] = (byte)n;
       
        int BLOCKS = 10;
       
        for(int n=0;n<BLOCKS;n++)
          msg.writeBytes(data);
       
        msg.writeBoolean(true);
        msg.writeByte((byte)12);
        msg.writeChar('a');
        msg.writeDouble(1.23456789);
        msg.writeFloat(4.5678f);
        msg.writeInt(1234);
        msg.writeLong(1234567890);
        msg.writeObject(new Integer(444));
        msg.writeObject(null);
        msg.writeShort((short)123);
        msg.writeString("foobar");
       
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (StreamMessage)consumer.receive(100);
        assertNotNull(msg);
       
        byte[] data2 = new byte[1024];
        for(int n=0;n<BLOCKS;n++)
        {
          assertEquals(1024,msg.readBytes(data2));
          assertEquals(-1,msg.readBytes(data2));
          for(int k=0;k<data2.length;k++)
            data2[k] = (byte)k;
        }
       
        assertEquals(true,msg.readBoolean());
        assertEquals((byte)12,msg.readByte());
        assertEquals('a',msg.readChar());
        assertEquals(1.23456789,msg.readDouble(),0.0000001);
        assertEquals(4.5678f,msg.readFloat(),0.000001);
        assertEquals(1234,msg.readInt());
        assertEquals(1234567890,msg.readLong());
        assertEquals(new Integer(444),msg.readObject());
        assertEquals(null,msg.readObject());
        assertEquals((short)123,msg.readShort());
        assertEquals("foobar",msg.readString());
       
        try
        {
          msg.readBytes(data2);
          fail("Should have failed");
        }
        catch (MessageEOFException e)
        {
          // Ignore
        }
       
        // Make sure message is read-only
        try
        {
          msg.writeByte((byte)12);
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        msg.clearBody();
       
        msg.writeObject("foobar");
       
        // Make sure message is write-only
        try
        {
          msg.readObject();
          fail("Should have failed");
        }
        catch (MessageNotReadableException e)
        {
          // Ignore
        }
       
        msg.reset();
       
        // Make sure message is read-only
        try
        {
          msg.writeObject("dumb");
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        assertEquals("foobar",msg.readObject());
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testObjectMessageTransmission() throws Exception
    {
      Session session;
        ObjectMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createObjectMessage();
               
        Date now = new Date();
        msg.setObject(now);
       
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (ObjectMessage)consumer.receive(100);
        assertNotNull(msg);
       
        assertEquals(now,msg.getObject());
       
        // Make sure message is read-only
        try
        {
          msg.setObject("foobar");
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        msg.clearBody();
       
        msg.setObject("foobar");
        assertEquals("foobar",msg.getObject());
               
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testMapMessageTransmission() throws Exception
    {
      Session session;
        MapMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createMapMessage();
       
        msg.setBoolean("boolean",true);
        msg.setByte("byte",(byte)12);
        msg.setChar("char",'a');
        msg.setDouble("double",1.23456789);
        msg.setFloat("float",4.5678f);
        msg.setInt("int",1234);
        msg.setLong("long",1234567890);
        msg.setObject("object",new Integer(444));
        msg.setObject("null",null);
        msg.setShort("short",(short)123);
        msg.setString("string","foobar");
        msg.setBytes("bytes", "foo".getBytes("ascii"));
       
        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (MapMessage)consumer.receive(100);
        assertNotNull(msg);
       
        assertEquals(true,msg.getBoolean("boolean"));
        assertEquals((byte)12,msg.getByte("byte"));
        assertEquals('a',msg.getChar("char"));
        assertEquals(1.23456789,msg.getDouble("double"),0.0000001);
        assertEquals(4.5678f,msg.getFloat("float"),0.000001);
        assertEquals(1234,msg.getInt("int"));
        assertEquals(1234567890,msg.getLong("long"));
        assertEquals(new Integer(444),msg.getObject("object"));
        assertEquals(null,msg.getObject("null"));
        assertEquals((short)123,msg.getShort("short"));
        assertEquals("foobar",msg.getString("string"));
        assertEquals("foo",new String(msg.getBytes("bytes"),"ascii"));
       
        // Make sure message is read-only
        try
        {
          msg.setObject("string","foobar");
          fail("Should have failed");
        }
        catch (MessageNotWriteableException e)
        {
          // Ignore
        }
       
        msg.clearBody();
       
        msg.setObject("string","foobar");
        assertEquals("foobar",msg.getObject("string"));
               
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    public void testMessageUpdateAfterSend() throws Exception
    {
        Session session;
        TextMessage msg;
        MessageProducer producer;
        MessageConsumer consumer;

        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        msg = session.createTextMessage("text1");

        producer = session.createProducer(queue1);
        producer.send(msg,TestUtils.DELIVERY_MODE,3,0);
       
        msg.setText("text2");
       
        session.commit();
        session.close();
       
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(queue1);
        connection.start();
        msg = (TextMessage)consumer.receive(100);
        assertNotNull(msg);
       
        assertEquals("text1", msg.getText());
       
        consumer.close();
        session.close();
       
        if (lastConnectionFailure != null)
            fail(lastConnectionFailure.toString());
    }
   
    private void purgeDestination( Destination destination ) throws JMSException
    {
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        MessageConsumer consumer = session.createConsumer(queue1);
        connection.start();
        while (consumer.receive(100) != null)
          continue;
        consumer.close();
        session.commit();
        session.close();
        connection.stop();
    }
   
    public void testInvalidCreateSession() throws Exception
    {
      try
      {
        connection.createSession(false, Session.SESSION_TRANSACTED);
        fail("Should have failed");
      }
      catch (JMSException e)
      {
        // Ok
      }
    }
}
TOP

Related Classes of net.timewalker.ffmq3.test.local.session.LocalSessionTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.