Package org.apache.sandesha.storage

Source Code of org.apache.sandesha.storage.TCServerStorageManager

/*
* Created on May 24, 2005
*
  */
package org.apache.sandesha.storage;

import junit.framework.TestCase;
import org.apache.sandesha.Constants;
import org.apache.sandesha.RMMessageContext;
import org.apache.sandesha.server.ServerStorageManager;
import org.apache.sandesha.storage.queue.QueueException;
import org.apache.sandesha.storage.queue.SandeshaQueue;


public class TCServerStorageManager extends TestCase {

    //For testing weather messages are re-transmitted correctly
    public void testRetransmission() {

        SandeshaQueue sq = SandeshaQueue.getInstance(Constants.SERVER);
        ServerStorageManager csm = new ServerStorageManager();
        RMMessageContext msg1;

//approving the out sequence
        csm.setTemporaryOutSequence("seqid1", "uuid:aaaa-bbbb-cccc");
        csm.setApprovedOutSequence("uuid:aaaa-bbbb-cccc", "approved1");

//messages should be returned (since the out sequence is approved)
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);

//Waiting for little more than re-transmission interval
        try {
            Thread.sleep(Constants.RETRANSMISSION_INTERVAL + 100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);

//Again waiting for little more than re-transmission interval :)
        try {
            Thread.sleep(Constants.RETRANSMISSION_INTERVAL + 100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //Messages should be returned once again
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);

    }


    //Testing weather the tr-transmission stops after a acknowledgement
    public void testAcknowledgement() {
        SandeshaQueue sq = SandeshaQueue.getInstance(Constants.SERVER);
        ServerStorageManager csm = new ServerStorageManager();

        csm.setTemporaryOutSequence("seqid1", "uuid:aaaa-bbbb-cccc");
        csm.setApprovedOutSequence("uuid:aaaa-bbbb-cccc", "approved1");

        RMMessageContext msg1;
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
       
        //Acknowledging messages 1,2 and 4 (without 3)
        csm.setAcknowledged("approved1", 1);
        csm.setAcknowledged("approved1", 2);
        csm.setAcknowledged("approved1", 4);
       
        //Waiting for little more than re-transmission interval
        try {
            Thread.sleep(Constants.RETRANSMISSION_INTERVAL + 100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //Only message no. 3 should be re-transmitted
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1.setLocked(false);
        assertEquals(msg1.getMessageID(), "rmsg3");
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
    }

    //For testing weather getNextMsgToSend method works correctly
    public void testNextMsgToSend() {
        SandeshaQueue sq = SandeshaQueue.getInstance(Constants.SERVER);
        ServerStorageManager csm = new ServerStorageManager();
        RMMessageContext msg1;
       
        //Next message to sent should be null (before approving outsequence)
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
       
        //approving the out sequence
        csm.setTemporaryOutSequence("seqid1", "uuid:aaaa-bbbb-cccc");
        csm.setApprovedOutSequence("uuid:aaaa-bbbb-cccc", "approved1");

        //messages should be returned (since the out sequence is approved)
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
    }

    //Testing weather the out-sequence concept works correctly.
    //Outgoing messages should be sent only when the out sequence is approved.
    public void testOutSequence() {
        SandeshaQueue sq = SandeshaQueue.getInstance(Constants.SERVER);
        ServerStorageManager csm = new ServerStorageManager();
       
        //setting temporary out sequence
        csm.setTemporaryOutSequence("seqid1", "uuid:aaaa-bbbb-cccc");

        RMMessageContext msg1;
       
        //the message should be null since the out sequence has not been approved
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
       
        //still the message should be null since the out sequence has not been approved
        msg1 = csm.getNextMessageToSend();
        assertNull(msg1);
       
        //approving the out sequence
        csm.setApprovedOutSequence("uuid:aaaa-bbbb-cccc", "approved1");

        //not the message should not be null (since out sequence was approved)
        msg1 = csm.getNextMessageToSend();
        assertNotNull(msg1);
    }

    //Testing weather priority messages are sent correctly.
    //They should be sent before application messages and should be sent
    //even before the out-sequence get set.
    public void testPriorityQueue() {
        SandeshaQueue sq = SandeshaQueue.getInstance(Constants.SERVER);
        ServerStorageManager csm = new ServerStorageManager();
       
        //Addign a create sequence request message (this will be added to the priority
        //area of the storage)
        RMMessageContext createSeqReq1 = new RMMessageContext();
        createSeqReq1.setMessageType(Constants.MSG_TYPE_CREATE_SEQUENCE_REQUEST);
        createSeqReq1.setMessageID("temp1");

        csm.addCreateSequenceRequest(createSeqReq1);

        RMMessageContext msg1;
        ServerStorageManager csm1 = new ServerStorageManager();

        //create sequence message should be returned
        msg1 = csm1.getNextMessageToSend();
        assertNotNull(msg1);
       
        //other messages should not be returned since the out sequence has not been approved.
        msg1 = csm1.getNextMessageToSend();
        assertNull(msg1);

        //Addign a acknowledgement message (this will be added to the priority
        //area of the storage)
        RMMessageContext ack1 = new RMMessageContext();
        ack1.setMessageID("msgack1");
        csm.addAcknowledgement(ack1);

        //ack message should be returned
        msg1 = csm1.getNextMessageToSend();
        assertNotNull(msg1);
       
        //other messages should not be returned since the out sequence has not been approved.
        msg1 = csm1.getNextMessageToSend();
        assertNull(msg1);
    }


    public void setUp() throws QueueException {

        SandeshaQueue sq = SandeshaQueue.getInstance(Constants.SERVER);
        ServerStorageManager csm = new ServerStorageManager();
        RMMessageContext msg = new RMMessageContext();
       
        //Creating a new outgoing sequence.
        sq.createNewOutgoingSequence("seqid1");
       
        //Adding messages to the outgoing sequence.
       
        //Adding message 1
        long nextMsgNo = csm.getNextMessageNumber("seqid1");
        assertEquals(nextMsgNo, 1);
        msg.setMessageID("rmsg1");
        msg.setSequenceID("seqid1");
        msg.setMsgNumber(nextMsgNo);
        sq.addMessageToOutgoingSequence("seqid1", msg);

        //Adding message 2
        nextMsgNo = csm.getNextMessageNumber("seqid1");
        assertEquals(nextMsgNo, 2);
        msg = new RMMessageContext();
        msg.setMessageID("rmsg2");
        msg.setSequenceID("seqid1");
        msg.setMsgNumber(nextMsgNo);
        sq.addMessageToOutgoingSequence("seqid1", msg);

        //Adding message 3
        nextMsgNo = csm.getNextMessageNumber("seqid1");
        assertEquals(nextMsgNo, 3);
        msg = new RMMessageContext();
        msg.setMessageID("rmsg3");
        msg.setSequenceID("seqid1");
        msg.setMsgNumber(nextMsgNo);

        //Adding message 4
        sq.addMessageToOutgoingSequence("seqid1", msg);
        nextMsgNo = csm.getNextMessageNumber("seqid1");
        assertEquals(nextMsgNo, 4);
        msg = new RMMessageContext();
        msg.setMessageID("rmsg4");
        msg.setSequenceID("seqid1");
        msg.setMsgNumber(nextMsgNo);
        sq.addMessageToOutgoingSequence("seqid1", msg);
    }

    public void tearDown() {

        //clearing the storage
        ServerStorageManager csm = new ServerStorageManager();
        csm.clearStorage();

    }
}
TOP

Related Classes of org.apache.sandesha.storage.TCServerStorageManager

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.