Bug in MapContainerImpl and DiskIndexLinkedList
-----------------------------------------------

                 Key: AMQ-1504
                 URL: https://issues.apache.org/activemq/browse/AMQ-1504
             Project: ActiveMQ
          Issue Type: Test
          Components: Message Store
    Affects Versions: 4.1.1
            Reporter: Chris Zeng


package Test;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.apache.activemq.command.ActiveMQMessage;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.apache.activemq.command.MessageAck;
import org.apache.activemq.command.MessageId;
import org.apache.activemq.kaha.StoreFactory;
import org.apache.activemq.store.MessageStore;
import org.apache.activemq.store.kahadaptor.KahaPersistenceAdapter;

/**
 * 
 * @author chris
 * 
 */

public class MapContainerImplTest extends TestCase {
        /**
         * Create the test case
         * 
         * @param testName
         *            name of the test case
         */

        public MapContainerImplTest(String testName) {
                super(testName);
        }

        /**
         * @return the suite of tests being tested
         */
        public static Test suite() {
                return new TestSuite(MapContainerImplTest.class);
        }

        /**
         * bug exists in MapContainerImpl write method in MapContainerImpl 
should
         * refreshEntry after getPrevIndex
         */
        public void testRemoveLast() {
                try {
                        String dir = "C:/Temp/FilePersistenceAdapter";
                        StoreFactory.delete(dir + "/kaha.db");

                        KahaPersistenceAdapter theAdapter = new 
KahaPersistenceAdapter(
                                        new File(dir));

                        ActiveMQQueue queue = new ActiveMQQueue("Test");

                        MessageStore theStore = 
theAdapter.createQueueMessageStore(queue);
                        ActiveMQTextMessage message = null;
                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("4");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("3");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("2");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("1");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        MessageAck ack = null;
                        ack = new MessageAck();
                        ack.setLastMessageId(new MessageId("1"));
                        theStore.removeMessage(null, ack);

                        ack = new MessageAck();
                        ack.setLastMessageId(new MessageId("2"));
                        theStore.removeMessage(null, ack);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("5");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        theAdapter.stop();

                        theAdapter = new KahaPersistenceAdapter(new File(dir));

                        queue = new ActiveMQQueue("Test");

                        theStore = theAdapter.createQueueMessageStore(queue);
                        
                        theAdapter.stop();
                        
                        System.out.println("That is ok!");
                        
                } catch (Exception e) {
                        e.printStackTrace();
                }

        }

        /**
         * Bug exists in DiskIndexLinkedList. After reading index from file, if 
the index is root or last,
         * We should update the data in the root or last object instead of 
return last or root directly.
         * If the index is root, we can not simplly write "root = index",  we 
should update the 
         * data in this root object, because others are using "this" object.
         */

        public void testRemoveLast_ThenRemoveTheOneBeforeLast() {
                try {
                        String dir = "C:/Temp/FilePersistenceAdapter";
                        StoreFactory.delete(dir + "/kaha.db");

                        KahaPersistenceAdapter theAdapter = new 
KahaPersistenceAdapter(
                                        new File(dir));

                        ActiveMQQueue queue = new ActiveMQQueue("Test");

                        MessageStore theStore = 
theAdapter.createQueueMessageStore(queue);

                        ActiveMQTextMessage message = null;

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("4");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("3");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("2");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("1");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        MessageAck ack = null;
                        ack = new MessageAck();
                        ack.setLastMessageId(new MessageId("1"));
                        theStore.removeMessage(null, ack);

                        ack = new MessageAck();
                        ack.setLastMessageId(new MessageId("3"));
                        theStore.removeMessage(null, ack);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("3");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        message = new ActiveMQTextMessage();
                        message.setJMSMessageID("1");
                        message.setText("TEST");
                        theStore.addMessage(null, message);

                        theAdapter.stop();

                        theAdapter = new KahaPersistenceAdapter(new File(dir));

                        queue = new ActiveMQQueue("Test");

                        theStore = theAdapter.createQueueMessageStore(queue);
                        
                        theStore.stop();
                        
                        System.out.println("That is ok!");

                } catch (Exception e) {
                        e.printStackTrace();
                }

        }

}


we can not see the out in the console.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to