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 huali * */ 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(); } } }