/** 
 * 
 * Copyright 2004 Hiram Chirino
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 * 
 **/
package org.activemq;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import junit.framework.TestCase;

/**
 * @version $Revision: 1.1.1.1 $
 */
public class JmsConnectionStartStopTest extends TestCase {

	private Connection startedConnection;
    private Connection stoppedConnection;

    protected void setUp() throws Exception {
		 ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
		 startedConnection = factory.createConnection();
		 startedConnection.start();
		 stoppedConnection = factory.createConnection();
    }

    /**
     * @see junit.framework.TestCase#tearDown()
     */
    protected void tearDown() throws Exception {
		 stoppedConnection.close();
		 startedConnection.close();
    }

    
    /**
     * @throws JMSException
     */
    public void testStoppedConsumerHoldsMessagesTillStarted() throws JMSException {
        
         Session startedSession = startedConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		 Session stoppedSession = stoppedConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		 // Setup the consumers.
		 Topic topic = startedSession.createTopic("test");
		 MessageConsumer startedConsumer = startedSession.createConsumer(topic);
		 MessageConsumer stoppedConsumer = stoppedSession.createConsumer(topic);

		 // Send the message.
		 MessageProducer producer = startedSession.createProducer(topic);		 
		 TextMessage message = startedSession.createTextMessage("Hello");
		 producer.send(message);
		 
		 // Test the assertions.
		 Message m = startedConsumer.receive(1000);
		 assertNotNull(m);
		 
		 m = stoppedConsumer.receive(1000);
		 assertNull(m);
		 
		 stoppedConnection.start();		
		 m = stoppedConsumer.receive(5000);
		 assertNotNull(m);
		 
		 startedSession.close();
		 stoppedSession.close();
		 
    }

    public void testMultipleConnectionStops() throws Exception {
	     testStoppedConsumerHoldsMessagesTillStarted();
		 stoppedConnection.stop();
		 testStoppedConsumerHoldsMessagesTillStarted();
		 stoppedConnection.stop();
		 testStoppedConsumerHoldsMessagesTillStarted();
	}
   
}